From 5f84225d0f802eb8d7d1043632c6b6b8a4fd65b9 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 2 Feb 2026 19:13:10 +0200 Subject: [PATCH 01/30] update: improve types --- dist/js/ExecutionUnitInput.d.ts | 66 +- dist/js/ExecutionUnitInput.js | 112 +- .../mixins/ContextAndRenderFieldsMixin.d.ts | 6 +- .../ImportantSettingsProviderMixin.d.ts | 8 - .../mixins/ImportantSettingsProviderMixin.js | 3 - .../mixins/MaterialsSetContextMixin.d.ts | 11 +- .../BoundaryConditionsFormDataManager.d.ts | 31 + .../BoundaryConditionsFormDataManager.js | 51 + .../CollinearMagnetizationDataManager.d.ts | 43 + .../CollinearMagnetizationDataManager.js | 87 + .../Hubbard/HubbardContextManagerLegacy.d.ts | 28 + .../Hubbard/HubbardContextManagerLegacy.js | 60 + .../Hubbard/HubbardContextProvider.d.ts | 4 +- .../Hubbard/HubbardJContextManager.d.ts | 21 + .../Hubbard/HubbardJContextManager.js | 52 + .../Hubbard/HubbardUContextManager.d.ts | 21 + .../Hubbard/HubbardUContextManager.js | 50 + .../Hubbard/HubbardVContextManager.d.ts | 21 + .../Hubbard/HubbardVContextManager.js | 70 + .../providers/IonDynamicsContextProvider.d.ts | 8 +- .../providers/MLSettingsDataManager.d.ts | 28 + .../providers/MLSettingsDataManager.js | 35 + .../MLTrainTestSplitDataManager.d.ts | 27 + .../providers/MLTrainTestSplitDataManager.js | 33 + .../context/providers/NEBFormDataManager.d.ts | 23 + .../context/providers/NEBFormDataManager.js | 29 + .../NonCollinearMagnetizationDataManager.d.ts | 79 + .../NonCollinearMagnetizationDataManager.js | 155 + .../providers/PlanewaveCutoffDataManager.d.ts | 28 + .../providers/PlanewaveCutoffDataManager.js | 42 + .../PointsGrid/IGridFormDataManager.d.ts | 4 +- .../PointsGrid/KGridFormDataManager.d.ts | 3 +- .../PointsGrid/KGridFormDataManager.js | 1 + .../PointsGridFormDataProvider.d.ts | 15 +- .../PointsGrid/PointsGridFormDataProvider.js | 8 +- .../PointsGrid/QGridFormDataManager.d.ts | 4 +- .../ExplicitKPath2PIBAFormDataManager.d.ts | 7 +- .../ExplicitKPathFormDataManager.d.ts | 7 +- .../PointsPath/IPathFormDataManager.d.ts | 7 +- .../PointsPath/KPathFormDataManager.d.ts | 7 +- .../PointsPathFormDataProvider.d.ts | 12 +- .../PointsPath/PointsPathFormDataProvider.js | 5 +- .../PointsPath/QPathFormDataManager.d.ts | 7 +- .../providers/base/ContextProvider.d.ts | 2 +- .../context/providers/base/ContextProvider.js | 2 +- .../base/JSONSchemaDataProvider.d.ts | 4 +- .../espresso/QENEBContextProvider.js | 11 +- .../espresso/QENEBInputDataManager.d.ts | 26 + .../espresso/QENEBInputDataManager.js | 52 + .../espresso/QEPWXContextProvider.js | 5 +- .../espresso/QEPWXInputDataManager.d.ts | 91 + .../espresso/QEPWXInputDataManager.js | 102 + .../nwchem/NWChemInputDataManager.d.ts | 35 + .../nwchem/NWChemInputDataManager.js | 55 + .../vasp/VASPInputDataManager.d.ts | 35 + .../vasp/VASPInputDataManager.js | 54 + .../vasp/VASPNEBInputDataManager.d.ts | 30 + .../vasp/VASPNEBInputDataManager.js | 48 + dist/js/enums.d.ts | 4 + dist/js/enums.js | 7 +- dist/js/generated/SubworkflowSchemaMixin.js | 2 +- dist/js/generated/WorkflowSchemaMixin.d.ts | 5 + dist/js/generated/WorkflowSchemaMixin.js | 33 + dist/js/index.d.ts | 2 +- dist/js/index.js | 4 +- .../convergence/ConvergenceParameter.d.ts | 28 + .../convergence/ConvergenceParameter.js | 13 + .../NonUniformKGridConvergence.d.ts | 12 + .../convergence/NonUniformKGridConvergence.js | 33 + .../convergence/UniformKGridConvergence.d.ts | 8 + .../convergence/UniformKGridConvergence.js | 24 + dist/js/subworkflows/convergence/factory.d.ts | 14 +- dist/js/subworkflows/convergence/factory.js | 16 +- dist/js/subworkflows/subworkflow.d.ts | 1167 ++--- dist/js/subworkflows/subworkflow.js | 332 +- dist/js/units/AssertionUnit.d.ts | 2 + dist/js/units/AssignmentUnit.d.ts | 2 + dist/js/units/BaseUnit.d.ts | 2 + dist/js/units/ConditionUnit.d.ts | 2 + dist/js/units/ExecutionUnit.d.ts | 11 +- dist/js/units/ExecutionUnit.js | 18 +- dist/js/units/IOUnit.d.ts | 2 + dist/js/units/MapUnit.d.ts | 4 +- dist/js/units/ProcessingUnit.d.ts | 2 + dist/js/units/ReduceUnit.d.ts | 2 + dist/js/units/SubworkflowUnit.d.ts | 2 + dist/js/units/factory.d.ts | 20 +- dist/js/units/factory.js | 34 +- dist/js/utils.d.ts | 685 ++- dist/js/utils.js | 15 +- dist/js/workflows/default.d.ts | 39 +- dist/js/workflows/default.js | 5 +- dist/js/workflows/workflow.d.ts | 4586 +---------------- dist/js/workflows/workflow.js | 322 +- package-lock.json | 41 +- package.json | 11 +- scripts/generate-mixins.ts | 1 + src/js/ExecutionUnitInput.ts | 363 +- .../context/mixins/ApplicationContextMixin.ts | 6 +- .../mixins/ContextAndRenderFieldsMixin.ts | 8 +- .../mixins/ImportantSettingsProviderMixin.ts | 15 +- .../mixins/MaterialsSetContextMixin.ts | 13 +- src/js/context/providers.ts | 183 - ...s => BoundaryConditionsFormDataManager.ts} | 15 +- ...s => CollinearMagnetizationDataManager.ts} | 15 +- ...gacy.ts => HubbardContextManagerLegacy.ts} | 11 +- .../Hubbard/HubbardContextProvider.ts | 4 +- ...tProvider.ts => HubbardJContextManager.ts} | 8 +- ...tProvider.ts => HubbardUContextManager.ts} | 9 +- ...tProvider.ts => HubbardVContextManager.ts} | 7 +- .../providers/IonDynamicsContextProvider.ts | 8 +- ...xtProvider.ts => MLSettingsDataManager.ts} | 18 +- ...ider.ts => MLTrainTestSplitDataManager.ts} | 18 +- ...mDataProvider.ts => NEBFormDataManager.ts} | 12 +- ...> NonCollinearMagnetizationDataManager.ts} | 15 +- ...vider.ts => PlanewaveCutoffDataManager.ts} | 24 +- .../PointsGrid/IGridFormDataManager.ts | 4 +- .../PointsGrid/KGridFormDataManager.ts | 4 +- .../PointsGrid/PointsGridFormDataProvider.ts | 27 +- .../PointsGrid/QGridFormDataManager.ts | 4 +- .../ExplicitKPath2PIBAFormDataManager.ts | 13 +- .../ExplicitKPathFormDataManager.ts | 11 +- .../PointsPath/IPathFormDataManager.ts | 11 +- .../PointsPath/KPathFormDataManager.ts | 11 +- .../PointsPath/PointsPathFormDataProvider.ts | 19 +- .../PointsPath/QPathFormDataManager.ts | 11 +- .../context/providers/base/ContextProvider.ts | 2 +- .../providers/base/JSONSchemaDataProvider.ts | 4 +- ...xtProvider.ts => QENEBInputDataManager.ts} | 32 +- ...xtProvider.ts => QEPWXInputDataManager.ts} | 35 +- ...tProvider.ts => NWChemInputDataManager.ts} | 20 +- ...extProvider.ts => VASPInputDataManager.ts} | 27 +- ...Provider.ts => VASPNEBInputDataManager.ts} | 36 +- src/js/enums.ts | 5 + src/js/generated/SubworkflowSchemaMixin.ts | 2 +- src/js/generated/WorkflowSchemaMixin.ts | 40 + src/js/index.js | 2 - .../convergence/ConvergenceParameter.ts | 39 + .../convergence/NonUniformKGridConvergence.ts | 40 + .../convergence/UniformKGridConvergence.ts | 28 + src/js/subworkflows/convergence/factory.js | 14 - src/js/subworkflows/convergence/factory.ts | 18 + .../convergence/non_uniform_kgrid.js | 28 - src/js/subworkflows/convergence/parameter.js | 58 - .../subworkflows/convergence/uniform_kgrid.js | 22 - src/js/subworkflows/subworkflow.ts | 443 +- src/js/units/AssertionUnit.ts | 3 + src/js/units/AssignmentUnit.ts | 3 + src/js/units/BaseUnit.ts | 3 + src/js/units/ConditionUnit.ts | 3 + src/js/units/ExecutionUnit.ts | 23 +- src/js/units/IOUnit.ts | 3 + src/js/units/MapUnit.ts | 5 +- src/js/units/ProcessingUnit.ts | 3 + src/js/units/ReduceUnit.ts | 3 + src/js/units/SubworkflowUnit.ts | 3 + src/js/units/factory.ts | 61 +- src/js/{utils.js => utils.ts} | 35 +- src/js/workflows/{default.js => default.ts} | 8 +- src/js/workflows/workflow.js | 386 -- src/js/workflows/workflow.ts | 358 ++ 161 files changed, 5126 insertions(+), 6919 deletions(-) create mode 100644 dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts create mode 100644 dist/js/context/providers/BoundaryConditionsFormDataManager.js create mode 100644 dist/js/context/providers/CollinearMagnetizationDataManager.d.ts create mode 100644 dist/js/context/providers/CollinearMagnetizationDataManager.js create mode 100644 dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts create mode 100644 dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js create mode 100644 dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts create mode 100644 dist/js/context/providers/Hubbard/HubbardJContextManager.js create mode 100644 dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts create mode 100644 dist/js/context/providers/Hubbard/HubbardUContextManager.js create mode 100644 dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts create mode 100644 dist/js/context/providers/Hubbard/HubbardVContextManager.js create mode 100644 dist/js/context/providers/MLSettingsDataManager.d.ts create mode 100644 dist/js/context/providers/MLSettingsDataManager.js create mode 100644 dist/js/context/providers/MLTrainTestSplitDataManager.d.ts create mode 100644 dist/js/context/providers/MLTrainTestSplitDataManager.js create mode 100644 dist/js/context/providers/NEBFormDataManager.d.ts create mode 100644 dist/js/context/providers/NEBFormDataManager.js create mode 100644 dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts create mode 100644 dist/js/context/providers/NonCollinearMagnetizationDataManager.js create mode 100644 dist/js/context/providers/PlanewaveCutoffDataManager.d.ts create mode 100644 dist/js/context/providers/PlanewaveCutoffDataManager.js create mode 100644 dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts create mode 100644 dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js create mode 100644 dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts create mode 100644 dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js create mode 100644 dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts create mode 100644 dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js create mode 100644 dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts create mode 100644 dist/js/context/providers/by_application/vasp/VASPInputDataManager.js create mode 100644 dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts create mode 100644 dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js create mode 100644 dist/js/generated/WorkflowSchemaMixin.d.ts create mode 100644 dist/js/generated/WorkflowSchemaMixin.js create mode 100644 dist/js/subworkflows/convergence/ConvergenceParameter.d.ts create mode 100644 dist/js/subworkflows/convergence/ConvergenceParameter.js create mode 100644 dist/js/subworkflows/convergence/NonUniformKGridConvergence.d.ts create mode 100644 dist/js/subworkflows/convergence/NonUniformKGridConvergence.js create mode 100644 dist/js/subworkflows/convergence/UniformKGridConvergence.d.ts create mode 100644 dist/js/subworkflows/convergence/UniformKGridConvergence.js delete mode 100644 src/js/context/providers.ts rename src/js/context/providers/{BoundaryConditionsFormDataProvider.ts => BoundaryConditionsFormDataManager.ts} (79%) rename src/js/context/providers/{CollinearMagnetizationContextProvider.ts => CollinearMagnetizationDataManager.ts} (85%) rename src/js/context/providers/Hubbard/{HubbardContextProviderLegacy.ts => HubbardContextManagerLegacy.ts} (86%) rename src/js/context/providers/Hubbard/{HubbardJContextProvider.ts => HubbardJContextManager.ts} (89%) rename src/js/context/providers/Hubbard/{HubbardUContextProvider.ts => HubbardUContextManager.ts} (86%) rename src/js/context/providers/Hubbard/{HubbardVContextProvider.ts => HubbardVContextManager.ts} (92%) rename src/js/context/providers/{MLSettingsContextProvider.ts => MLSettingsDataManager.ts} (73%) rename src/js/context/providers/{MLTrainTestSplitContextProvider.ts => MLTrainTestSplitDataManager.ts} (71%) rename src/js/context/providers/{NEBFormDataProvider.ts => NEBFormDataManager.ts} (71%) rename src/js/context/providers/{NonCollinearMagnetizationContextProvider.ts => NonCollinearMagnetizationDataManager.ts} (91%) rename src/js/context/providers/{PlanewaveCutoffsContextProvider.ts => PlanewaveCutoffDataManager.ts} (71%) rename src/js/context/providers/by_application/espresso/{QENEBContextProvider.ts => QENEBInputDataManager.ts} (75%) rename src/js/context/providers/by_application/espresso/{QEPWXContextProvider.ts => QEPWXInputDataManager.ts} (83%) rename src/js/context/providers/by_application/nwchem/{NWChemTotalEnergyContextProvider.ts => NWChemInputDataManager.ts} (82%) rename src/js/context/providers/by_application/vasp/{VASPContextProvider.ts => VASPInputDataManager.ts} (79%) rename src/js/context/providers/by_application/vasp/{VASPNEBContextProvider.ts => VASPNEBInputDataManager.ts} (72%) create mode 100644 src/js/generated/WorkflowSchemaMixin.ts create mode 100644 src/js/subworkflows/convergence/ConvergenceParameter.ts create mode 100644 src/js/subworkflows/convergence/NonUniformKGridConvergence.ts create mode 100644 src/js/subworkflows/convergence/UniformKGridConvergence.ts delete mode 100644 src/js/subworkflows/convergence/factory.js create mode 100644 src/js/subworkflows/convergence/factory.ts delete mode 100644 src/js/subworkflows/convergence/non_uniform_kgrid.js delete mode 100644 src/js/subworkflows/convergence/parameter.js delete mode 100644 src/js/subworkflows/convergence/uniform_kgrid.js rename src/js/{utils.js => utils.ts} (72%) rename src/js/workflows/{default.js => default.ts} (81%) delete mode 100644 src/js/workflows/workflow.js create mode 100644 src/js/workflows/workflow.ts diff --git a/dist/js/ExecutionUnitInput.d.ts b/dist/js/ExecutionUnitInput.d.ts index 2f94e2ed..2c6ec734 100644 --- a/dist/js/ExecutionUnitInput.d.ts +++ b/dist/js/ExecutionUnitInput.d.ts @@ -1,28 +1,80 @@ -import { Template } from "@mat3ra/ade"; +import { type Application, Template } from "@mat3ra/ade"; import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import type { ContextItem } from "./context/providers/base/ContextProvider"; -import type ContextProvider from "./context/providers/base/ContextProvider"; +import type { ContextProviderNameEnum, JobSchema, TemplateSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import type { OrderedMaterial } from "./context/mixins/MaterialContextMixin"; +import BoundaryConditionsFormDataManager, { type BoundaryConditionsFormDataManagerContextItem, type BoundaryConditionsFormDataManagerExternalContext } from "./context/providers/BoundaryConditionsFormDataManager"; +import QENEBInputDataManager, { type QENEBInputDataManagerContextItem, type QENEBInputDataManagerExternalContext } from "./context/providers/by_application/espresso/QENEBInputDataManager"; +import type { QEPWXInputDataManagerContextItem, QEPWXInputDataManagerExternalContext } from "./context/providers/by_application/espresso/QEPWXInputDataManager"; +import QEPWXInputDataManager from "./context/providers/by_application/espresso/QEPWXInputDataManager"; +import NWChemInputDataManager, { type NWChemInputDataManagerContextItem, type NWChemInputDataManagerExternalContext } from "./context/providers/by_application/nwchem/NWChemInputDataManager"; +import VASPInputDataManager, { type VASPInputDataManagerContextItem, type VASPInputDataManagerExternalContext } from "./context/providers/by_application/vasp/VASPInputDataManager"; +import VASPNEBInputDataManager, { type VASPNEBInputDataManagerContextItem, type VASPNEBInputDataManagerExternalContext } from "./context/providers/by_application/vasp/VASPNEBInputDataManager"; +import type { CollinearMagnetizationDataManagerContextItem, CollinearMagnetizationDataManagerExternalContext } from "./context/providers/CollinearMagnetizationDataManager"; +import CollinearMagnetizationDataManager from "./context/providers/CollinearMagnetizationDataManager"; +import type { HubbardContextManagerLegacyContextItem } from "./context/providers/Hubbard/HubbardContextManagerLegacy"; +import HubbardContextManagerLegacy from "./context/providers/Hubbard/HubbardContextManagerLegacy"; +import type { HubbardExternalContext } from "./context/providers/Hubbard/HubbardContextProvider"; +import HubbardJContextManager, { type HubbardJContextManagerContextItem } from "./context/providers/Hubbard/HubbardJContextManager"; +import HubbardUContextManager, { type HubbardUContextManagerContextItem } from "./context/providers/Hubbard/HubbardUContextManager"; +import HubbardVContextManager, { type HubbardVContextManagerContextItem } from "./context/providers/Hubbard/HubbardVContextManager"; +import type { IonDynamicsContextProviderContextItem, IonDynamicsContextProviderExternalContext } from "./context/providers/IonDynamicsContextProvider"; +import IonDynamicsContextProvider from "./context/providers/IonDynamicsContextProvider"; +import type { MLSettingsDataManagerContextItem, MLSettingsDataManagerExternalContext } from "./context/providers/MLSettingsDataManager"; +import MLSettingsDataManager from "./context/providers/MLSettingsDataManager"; +import type { MLTrainTestSplitDataManagerContextItem, MLTrainTestSplitDataManagerExternalContext } from "./context/providers/MLTrainTestSplitDataManager"; +import MLTrainTestSplitDataManager from "./context/providers/MLTrainTestSplitDataManager"; +import type { NEBFormDataManagerContextItem, NEBFormDataManagerExternalContext } from "./context/providers/NEBFormDataManager"; +import NEBFormDataManager from "./context/providers/NEBFormDataManager"; +import NonCollinearMagnetizationDataManager, { type NonCollinearMagnetizationDataManagerContextItem, type NonCollinearMagnetizationDataManagerExternalContext } from "./context/providers/NonCollinearMagnetizationDataManager"; +import PlanewaveCutoffDataManager, { type PlanewaveCutoffDataManagerContextItem, type PlanewaveCutoffDataManagerExternalContext } from "./context/providers/PlanewaveCutoffDataManager"; +import IGridFormDataManager from "./context/providers/PointsGrid/IGridFormDataManager"; +import KGridFormDataManager from "./context/providers/PointsGrid/KGridFormDataManager"; +import type { PointsGridFormDataManagerContextItem, PointsGridFormDataManagerExternalContext } from "./context/providers/PointsGrid/PointsGridFormDataProvider"; +import QGridFormDataManager from "./context/providers/PointsGrid/QGridFormDataManager"; +import ExplicitKPath2PIBAFormDataManager, { type ExplicitKPath2PIBAFormDataManagerContextItem, type ExplicitKPath2PIBAFormDataManagerExternalContext } from "./context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager"; +import type { ExplicitKPathFormDataManagerContextItem, ExplicitKPathFormDataManagerExternalContext } from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; +import ExplicitKPathFormDataManager from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; +import type { IPathFormDataManagerContextItem, IPathFormDataManagerExternalContext } from "./context/providers/PointsPath/IPathFormDataManager"; +import IPathFormDataManager from "./context/providers/PointsPath/IPathFormDataManager"; +import KPathFormDataManager, { type KPathFormDataManagerContextItem, type KPathFormDataManagerExternalContext } from "./context/providers/PointsPath/KPathFormDataManager"; +import QPathFormDataManager, { type QPathFormDataManagerContextItem, type QPathFormDataManagerExternalContext } from "./context/providers/PointsPath/QPathFormDataManager"; import type { ExecutionUnitInputSchemaMixin } from "./generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; type Base = typeof InMemoryEntity & Constructor; type ConstructorConfig = Schema | (Omit & { template: Template; }); +type AnyContextItem = PlanewaveCutoffDataManagerContextItem | PointsGridFormDataManagerContextItem | QPathFormDataManagerContextItem | IPathFormDataManagerContextItem | KPathFormDataManagerContextItem | ExplicitKPathFormDataManagerContextItem | ExplicitKPath2PIBAFormDataManagerContextItem | HubbardJContextManagerContextItem | HubbardUContextManagerContextItem | HubbardVContextManagerContextItem | HubbardContextManagerLegacyContextItem | NEBFormDataManagerContextItem | BoundaryConditionsFormDataManagerContextItem | MLSettingsDataManagerContextItem | MLTrainTestSplitDataManagerContextItem | IonDynamicsContextProviderContextItem | CollinearMagnetizationDataManagerContextItem | NonCollinearMagnetizationDataManagerContextItem | QEPWXInputDataManagerContextItem | QENEBInputDataManagerContextItem | VASPInputDataManagerContextItem | VASPNEBInputDataManagerContextItem | NWChemInputDataManagerContextItem; +export type AnyContextExternalContext = PlanewaveCutoffDataManagerExternalContext | PointsGridFormDataManagerExternalContext | QPathFormDataManagerExternalContext | IPathFormDataManagerExternalContext | KPathFormDataManagerExternalContext | ExplicitKPathFormDataManagerExternalContext | ExplicitKPath2PIBAFormDataManagerExternalContext | HubbardExternalContext | NEBFormDataManagerExternalContext | BoundaryConditionsFormDataManagerExternalContext | MLSettingsDataManagerExternalContext | MLTrainTestSplitDataManagerExternalContext | IonDynamicsContextProviderExternalContext | CollinearMagnetizationDataManagerExternalContext | NonCollinearMagnetizationDataManagerExternalContext | QEPWXInputDataManagerExternalContext | QENEBInputDataManagerExternalContext | VASPInputDataManagerExternalContext | VASPNEBInputDataManagerExternalContext | NWChemInputDataManagerExternalContext; +type AnyContextProvider = BoundaryConditionsFormDataManager | MLSettingsDataManager | MLTrainTestSplitDataManager | IonDynamicsContextProvider | CollinearMagnetizationDataManager | NonCollinearMagnetizationDataManager | QEPWXInputDataManager | QENEBInputDataManager | VASPInputDataManager | VASPNEBInputDataManager | NWChemInputDataManager | PlanewaveCutoffDataManager | KGridFormDataManager | QGridFormDataManager | IGridFormDataManager | QPathFormDataManager | IPathFormDataManager | KPathFormDataManager | ExplicitKPathFormDataManager | ExplicitKPath2PIBAFormDataManager | HubbardJContextManager | HubbardUContextManager | HubbardVContextManager | HubbardContextManagerLegacy | NEBFormDataManager; +export type ExecutionUnitInputContext = (AnyContextItem & { + name: ContextProviderNameEnum; +})[]; +type ExternalContext = { + application: Application; + material: OrderedMaterial; + materials: OrderedMaterial[]; + workflow: WorkflowSchema; + job: JobSchema; + isUsingJinjaVariables?: boolean; + materialsSet: { + _id: string; + }; +}; declare const ExecutionUnitInput_base: Base; export default class ExecutionUnitInput extends ExecutionUnitInput_base implements Schema { _json: Schema & AnyObject; toJSON: () => Schema & AnyObject; toJSONQuick: () => Schema & AnyObject; static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; - contextProvidersInstances: ContextProvider[]; + contextProvidersInstances: AnyContextProvider[]; readonly templateInstance: Template; static createFromTemplate(template: Template | TemplateSchema): ExecutionUnitInput; constructor(config: ConstructorConfig); - setContext(context: ContextItem[]): this; + setContext(context: ExecutionUnitInputContext, externalContext: ExternalContext): this; render(): this; - getFullContext(): import("./context/providers/base/ContextProvider").ExtendedContextItem[]; + getFullContext(): (import("./context/providers/base/ContextProvider").ExtendedContextItem<"boundaryConditions", import("@mat3ra/esse/dist/js/types").BoundaryConditionsDataProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").QEPwxContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").QENEBContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").NWChemTotalEnergyContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").VASPContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").VASPNEBContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"collinearMagnetization", import("@mat3ra/esse/dist/js/types").CollinearMagnetizationContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"hubbard_u" | "hubbard_j" | "hubbard_v" | "hubbard_legacy", object, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"mlSettings", import("@mat3ra/esse/dist/js/types").MLSettingsContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"mlTrainTestSplit", import("@mat3ra/esse/dist/js/types").MLTrainTestSplitContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"nonCollinearMagnetization", import("@mat3ra/esse/dist/js/types").NonCollinearMagnetizationContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"cutoffs", import("@mat3ra/esse/dist/js/types").PlanewaveCutoffsContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"qgrid" | "kgrid" | "igrid", import("@mat3ra/esse/dist/js/types").PointsGridDataProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem | import("./context/providers/base/ContextProvider").ExtendedContextItem<"dynamics", import("@mat3ra/esse/dist/js/types").IonDynamicsContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"neb", import("@mat3ra/esse/dist/js/types").NEBDataProviderSchema, object>)[]; } export {}; diff --git a/dist/js/ExecutionUnitInput.js b/dist/js/ExecutionUnitInput.js index f7c588cf..d1fccace 100644 --- a/dist/js/ExecutionUnitInput.js +++ b/dist/js/ExecutionUnitInput.js @@ -7,7 +7,31 @@ const ade_1 = require("@mat3ra/ade"); const entity_1 = require("@mat3ra/code/dist/js/entity"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const nunjucks_1 = __importDefault(require("nunjucks")); -const providers_1 = require("./context/providers"); +const BoundaryConditionsFormDataManager_1 = __importDefault(require("./context/providers/BoundaryConditionsFormDataManager")); +const QENEBInputDataManager_1 = __importDefault(require("./context/providers/by_application/espresso/QENEBInputDataManager")); +const QEPWXInputDataManager_1 = __importDefault(require("./context/providers/by_application/espresso/QEPWXInputDataManager")); +const NWChemInputDataManager_1 = __importDefault(require("./context/providers/by_application/nwchem/NWChemInputDataManager")); +const VASPInputDataManager_1 = __importDefault(require("./context/providers/by_application/vasp/VASPInputDataManager")); +const VASPNEBInputDataManager_1 = __importDefault(require("./context/providers/by_application/vasp/VASPNEBInputDataManager")); +const CollinearMagnetizationDataManager_1 = __importDefault(require("./context/providers/CollinearMagnetizationDataManager")); +const HubbardContextManagerLegacy_1 = __importDefault(require("./context/providers/Hubbard/HubbardContextManagerLegacy")); +const HubbardJContextManager_1 = __importDefault(require("./context/providers/Hubbard/HubbardJContextManager")); +const HubbardUContextManager_1 = __importDefault(require("./context/providers/Hubbard/HubbardUContextManager")); +const HubbardVContextManager_1 = __importDefault(require("./context/providers/Hubbard/HubbardVContextManager")); +const IonDynamicsContextProvider_1 = __importDefault(require("./context/providers/IonDynamicsContextProvider")); +const MLSettingsDataManager_1 = __importDefault(require("./context/providers/MLSettingsDataManager")); +const MLTrainTestSplitDataManager_1 = __importDefault(require("./context/providers/MLTrainTestSplitDataManager")); +const NEBFormDataManager_1 = __importDefault(require("./context/providers/NEBFormDataManager")); +const NonCollinearMagnetizationDataManager_1 = __importDefault(require("./context/providers/NonCollinearMagnetizationDataManager")); +const PlanewaveCutoffDataManager_1 = __importDefault(require("./context/providers/PlanewaveCutoffDataManager")); +const IGridFormDataManager_1 = __importDefault(require("./context/providers/PointsGrid/IGridFormDataManager")); +const KGridFormDataManager_1 = __importDefault(require("./context/providers/PointsGrid/KGridFormDataManager")); +const QGridFormDataManager_1 = __importDefault(require("./context/providers/PointsGrid/QGridFormDataManager")); +const ExplicitKPath2PIBAFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager")); +const ExplicitKPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/ExplicitKPathFormDataManager")); +const IPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/IPathFormDataManager")); +const KPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/KPathFormDataManager")); +const QPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/QPathFormDataManager")); class ExecutionUnitInput extends entity_1.InMemoryEntity { static get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("workflow/unit/input/-inputItem"); @@ -26,17 +50,85 @@ class ExecutionUnitInput extends entity_1.InMemoryEntity { this.contextProvidersInstances = []; this.templateInstance = templateInstance; } - setContext(context) { + setContext(context, externalContext) { this.contextProvidersInstances = this.template.contextProviders.map(({ name }) => { - if (!providers_1.providers) { - throw new Error("Providers config not set"); - } - const ContextProvider = providers_1.providers[name]; const contextItem = context.find((c) => c.name === name); - if (!contextItem) { - throw new Error(`Context item for provider ${name} not found`); + if (name === "PlanewaveCutoffDataManager") { + return new PlanewaveCutoffDataManager_1.default(contextItem, externalContext); + } + if (name === "KGridFormDataManager") { + return new KGridFormDataManager_1.default(contextItem, externalContext); + } + if (name === "QGridFormDataManager") { + return new QGridFormDataManager_1.default(contextItem, externalContext); + } + if (name === "IGridFormDataManager") { + return new IGridFormDataManager_1.default(contextItem, externalContext); + } + if (name === "QPathFormDataManager") { + return new QPathFormDataManager_1.default(contextItem, externalContext); + } + if (name === "IPathFormDataManager") { + return new IPathFormDataManager_1.default(contextItem, externalContext); + } + if (name === "KPathFormDataManager") { + return new KPathFormDataManager_1.default(contextItem, externalContext); + } + if (name === "ExplicitKPathFormDataManager") { + return new ExplicitKPathFormDataManager_1.default(contextItem, externalContext); + } + if (name === "ExplicitKPath2PIBAFormDataManager") { + return new ExplicitKPath2PIBAFormDataManager_1.default(contextItem, externalContext); + } + if (name === "HubbardJContextManager") { + return new HubbardJContextManager_1.default(contextItem, externalContext); + } + if (name === "HubbardUContextManager") { + return new HubbardUContextManager_1.default(contextItem, externalContext); + } + if (name === "HubbardVContextManager") { + return new HubbardVContextManager_1.default(contextItem, externalContext); + } + if (name === "HubbardContextManagerLegacy") { + return new HubbardContextManagerLegacy_1.default(contextItem, externalContext); + } + if (name === "NEBFormDataManager") { + return new NEBFormDataManager_1.default(contextItem, externalContext); + } + if (name === "BoundaryConditionsFormDataManager") { + return new BoundaryConditionsFormDataManager_1.default(contextItem, externalContext); + } + if (name === "MLSettingsDataManager") { + return new MLSettingsDataManager_1.default(contextItem, externalContext); + } + if (name === "MLTrainTestSplitDataManager") { + return new MLTrainTestSplitDataManager_1.default(contextItem, externalContext); + } + if (name === "IonDynamicsContextProvider") { + return new IonDynamicsContextProvider_1.default(contextItem, externalContext); + } + if (name === "CollinearMagnetizationDataManager") { + return new CollinearMagnetizationDataManager_1.default(contextItem, externalContext); + } + if (name === "NonCollinearMagnetizationDataManager") { + return new NonCollinearMagnetizationDataManager_1.default(contextItem, externalContext); + } + if (name === "QEPWXInputDataManager") { + return new QEPWXInputDataManager_1.default(contextItem, externalContext); + } + if (name === "QENEBInputDataManager") { + return new QENEBInputDataManager_1.default(contextItem, externalContext); + } + if (name === "VASPInputDataManager") { + return new VASPInputDataManager_1.default(contextItem, externalContext); + } + if (name === "VASPNEBInputDataManager") { + return new VASPNEBInputDataManager_1.default(contextItem, externalContext); + } + if (name === "NWChemInputDataManager") { + return new NWChemInputDataManager_1.default(contextItem, externalContext); } - return new ContextProvider(contextItem); + throw new Error(`Unknown provider: ${name}`); }); return this; } @@ -51,7 +143,7 @@ class ExecutionUnitInput extends entity_1.InMemoryEntity { } getFullContext() { return this.contextProvidersInstances.map((contextProvider) => { - return contextProvider.getContextItem(); + return contextProvider.getContextItemData(); }); } } diff --git a/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts b/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts index 5edb0465..fdf4e8c9 100644 --- a/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts +++ b/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts @@ -10,8 +10,4 @@ export type ContextMixin = { updatePersistentContext(ctx: Context): void; getCombinedContext(): Context; }; -type AbstractBase = { - render(ctx: Context): void; -}; -export declare function contextMixin(item: T): asserts item is T & ContextMixin; -export {}; +export declare function contextMixin(item: T): asserts item is T & ContextMixin; diff --git a/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts b/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts index 6d9b33ac..67d25578 100644 --- a/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts +++ b/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts @@ -1,17 +1,9 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -export interface ContextProvider { - domain?: string; -} export type ImportantSettingsProvider = { important: object; setImportant(key: string, value: unknown): void; - importantSettingsProviders: ContextProvider[]; isImportantEdited: boolean | undefined; }; -type AbstractBase = { - contextProviders: ContextProvider[]; -}; export type ImportantSettingsProviderInMemoryEntityConstructor = Constructor; export declare function importantSettingsProviderMixin(item: T): asserts item is T & ImportantSettingsProvider; -export {}; diff --git a/dist/js/context/mixins/ImportantSettingsProviderMixin.js b/dist/js/context/mixins/ImportantSettingsProviderMixin.js index 6be5ff2a..c179f193 100644 --- a/dist/js/context/mixins/ImportantSettingsProviderMixin.js +++ b/dist/js/context/mixins/ImportantSettingsProviderMixin.js @@ -11,9 +11,6 @@ function importantSettingsProviderMixin(item) { setImportant(key, value) { this.setProp("important", { [key]: value }); }, - get importantSettingsProviders() { - return this.contextProviders.filter((p) => p.domain === "important"); - }, get isImportantEdited() { return this.prop("important.isEdited"); }, diff --git a/dist/js/context/mixins/MaterialsSetContextMixin.d.ts b/dist/js/context/mixins/MaterialsSetContextMixin.d.ts index 4845cba3..6fc96c31 100644 --- a/dist/js/context/mixins/MaterialsSetContextMixin.d.ts +++ b/dist/js/context/mixins/MaterialsSetContextMixin.d.ts @@ -1,14 +1,15 @@ +import type ContextProvider from "../providers/base/ContextProvider"; import type { OrderedMaterial } from "./MaterialContextMixin"; type MaterialsSet = { _id: string; }; -export type MaterialsSetContextMixin = { +export type MaterialsSetExternalContext = { materialsSet: MaterialsSet; - initMaterialsSetContextMixin(externalContext: MaterialsSetContextProvider): void; - sortMaterialsByIndexInSet(materials?: OrderedMaterial[]): OrderedMaterial[]; }; -type MaterialsSetContextProvider = { +export type MaterialsSetContextMixin = { materialsSet: MaterialsSet; + initMaterialsSetContextMixin(externalContext: MaterialsSetExternalContext): void; + sortMaterialsByIndexInSet(materials?: OrderedMaterial[]): OrderedMaterial[]; }; -export default function materialsSetContextMixin(item: MaterialsSetContextProvider): void; +export default function materialsSetContextMixin(item: ContextProvider): void; export {}; diff --git a/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts b/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts new file mode 100644 index 00000000..74afceaf --- /dev/null +++ b/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts @@ -0,0 +1,31 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { BoundaryConditionsDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; +import type { ContextItem } from "./base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; +type Name = "boundaryConditions"; +type Data = BoundaryConditionsDataProviderSchema; +export type BoundaryConditionsFormDataManagerContextItem = ContextItem; +export type BoundaryConditionsFormDataManagerExternalContext = JinjaExternalContext & MaterialExternalContext; +type ExternalContext = BoundaryConditionsFormDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; +declare const BoundaryConditionsFormDataManager_base: Base; +export default class BoundaryConditionsFormDataManager extends BoundaryConditionsFormDataManager_base { + readonly name: "boundaryConditions"; + readonly domain: "important"; + readonly humanName = "Boundary Conditions"; + readonly uiSchema: { + type: { + "ui:disabled": boolean; + }; + offset: { + "ui:disabled": boolean; + }; + electricField: {}; + targetFermiEnergy: {}; + }; + constructor(contextItem: ContextItem, externalContext: ExternalContext); + getDefaultData(): Data; + get jsonSchema(): import("json-schema").JSONSchema7 | undefined; +} +export {}; diff --git a/dist/js/context/providers/BoundaryConditionsFormDataManager.js b/dist/js/context/providers/BoundaryConditionsFormDataManager.js new file mode 100644 index 00000000..2953e506 --- /dev/null +++ b/dist/js/context/providers/BoundaryConditionsFormDataManager.js @@ -0,0 +1,51 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/boundary-conditions-data-provider"; +class BoundaryConditionsFormDataManager extends JSONSchemaDataProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "boundaryConditions"; + this.domain = "important"; + this.humanName = "Boundary Conditions"; + this.uiSchema = { + type: { "ui:disabled": true }, + offset: { "ui:disabled": true }, + electricField: {}, + targetFermiEnergy: {}, + }; + this.initMaterialContextMixin(externalContext); + } + getDefaultData() { + var _a, _b, _c, _d, _e, _f; + return { + type: ((_c = (_b = (_a = this.material) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.boundaryConditions) === null || _c === void 0 ? void 0 : _c.type) || "pbc", + offset: ((_f = (_e = (_d = this.material) === null || _d === void 0 ? void 0 : _d.metadata) === null || _e === void 0 ? void 0 : _e.boundaryConditions) === null || _f === void 0 ? void 0 : _f.offset) || 0, + electricField: 0, + targetFermiEnergy: 0, + }; + } + // yieldDataForRendering() { + // const data = Utils.clone.deepClone(this.getContextItem()); + // data.boundaryConditions.offset *= Made.coefficients.ANGSTROM_TO_BOHR; + // data.boundaryConditions.targetFermiEnergy *= Made.coefficients.EV_TO_RY; + // data.boundaryConditions.electricField *= Made.coefficients.EV_A_TO_RY_BOHR; + // return data; + // } + get jsonSchema() { + const defaults = this.getDefaultData(); + return JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + type: { default: defaults.type }, + offset: { default: defaults.offset }, + electricField: { default: defaults.electricField }, + targetFermiEnergy: { default: defaults.targetFermiEnergy }, + }); + } +} +exports.default = BoundaryConditionsFormDataManager; +(0, MaterialContextMixin_1.default)(BoundaryConditionsFormDataManager.prototype); diff --git a/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts b/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts new file mode 100644 index 00000000..37f76a76 --- /dev/null +++ b/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts @@ -0,0 +1,43 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { CollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; +import type { ContextItem } from "./base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; +type Name = "collinearMagnetization"; +type Data = CollinearMagnetizationContextProviderSchema; +export type CollinearMagnetizationDataManagerContextItem = ContextItem; +export type CollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & MaterialExternalContext; +type ExternalContext = CollinearMagnetizationDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; +declare const CollinearMagnetizationDataManager_base: Base; +export default class CollinearMagnetizationDataManager extends CollinearMagnetizationDataManager_base { + readonly name: "collinearMagnetization"; + readonly domain: "important"; + readonly jsonSchema: JSONSchema7 | undefined; + private readonly isTotalMagnetization; + private readonly firstElement; + private readonly uniqueElementsWithLabels; + constructor(contextItem: ContextItem, externalContext: ExternalContext); + getDefaultData(): Data; + setData(data: Data): void; + get uiSchemaStyled(): { + startingMagnetization: { + items: { + atomicSpecies: { + "ui:classNames": string; + }; + value: { + "ui:classNames": string; + }; + }; + "ui:readonly": boolean; + }; + isTotalMagnetization: {}; + totalMagnetization: { + "ui:classNames": string; + "ui:readonly": boolean; + }; + }; +} +export {}; diff --git a/dist/js/context/providers/CollinearMagnetizationDataManager.js b/dist/js/context/providers/CollinearMagnetizationDataManager.js new file mode 100644 index 00000000..fe85fb7f --- /dev/null +++ b/dist/js/context/providers/CollinearMagnetizationDataManager.js @@ -0,0 +1,87 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/collinear-magnetization-context-provider"; +class CollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.default { + constructor(contextItem, externalContext) { + var _a, _b, _c, _d; + super(contextItem, externalContext); + this.name = "collinearMagnetization"; + this.domain = "important"; + this.initMaterialContextMixin(externalContext); + this.uniqueElementsWithLabels = [ + ...new Set(((_b = (_a = this.material) === null || _a === void 0 ? void 0 : _a.Basis) === null || _b === void 0 ? void 0 : _b.elementsWithLabelsArray) || []), + ]; + this.firstElement = + ((_c = this.uniqueElementsWithLabels) === null || _c === void 0 ? void 0 : _c.length) > 0 ? this.uniqueElementsWithLabels[0] : ""; + this.isTotalMagnetization = ((_d = this.data) === null || _d === void 0 ? void 0 : _d.isTotalMagnetization) || false; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + "properties.startingMagnetization": { + maxItems: this.uniqueElementsWithLabels.length, + }, + "properties.startingMagnetization.items.properties.atomicSpecies": { + enum: this.uniqueElementsWithLabels, + default: this.firstElement, + }, + "properties.startingMagnetization.items.properties.value": { + default: 0.0, + }, + "properties.isTotalMagnetization": { + default: false, + }, + "properties.totalMagnetization": { + default: 0.0, + }, + }); + } + getDefaultData() { + return { + startingMagnetization: [ + { + index: 1, + atomicSpecies: this.firstElement, + value: 0.0, + }, + ], + isTotalMagnetization: false, + totalMagnetization: 0.0, + }; + } + setData(data) { + const startingMagnetization = data.startingMagnetization.map((row) => ({ + ...row, + index: this.uniqueElementsWithLabels.indexOf(row.atomicSpecies) + 1, + })); + super.setData({ + ...data, + startingMagnetization, + }); + } + get uiSchemaStyled() { + return { + startingMagnetization: { + items: { + atomicSpecies: { + "ui:classNames": "col-xs-3", + }, + value: { + "ui:classNames": "col-xs-6", + }, + }, + "ui:readonly": this.isTotalMagnetization, + }, + isTotalMagnetization: {}, + totalMagnetization: { + "ui:classNames": "col-xs-6", + "ui:readonly": !this.isTotalMagnetization, + }, + }; + } +} +exports.default = CollinearMagnetizationDataManager; +(0, MaterialContextMixin_1.default)(CollinearMagnetizationDataManager.prototype); diff --git a/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts new file mode 100644 index 00000000..32803c7f --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts @@ -0,0 +1,28 @@ +import type { HubbardLegacyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import type { ContextItem } from "../base/ContextProvider"; +import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; +type Name = "hubbard_legacy"; +type Data = HubbardLegacyContextProviderSchema; +export type HubbardContextManagerLegacyContextItem = ContextItem; +export default class HubbardContextManagerLegacy extends HubbardContextProvider { + readonly name: "hubbard_legacy"; + readonly domain: "important"; + readonly jsonSchema: JSONSchema7 | undefined; + readonly uiSchemaStyled: { + readonly "ui:options": { + readonly addable: true; + readonly orderable: false; + readonly removable: true; + }; + readonly items: { + readonly atomicSpeciesIndex: { + readonly "ui:readonly": true; + }; + }; + }; + constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); + getDefaultData(): Data; + setData(data: Data): void; +} +export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js new file mode 100644 index 00000000..7f59a6a8 --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js @@ -0,0 +1,60 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); +const defaultHubbardConfig = { + hubbardUValue: 1.0, +}; +const jsonSchemaId = "context-providers-directory/hubbard-legacy-context-provider"; +class HubbardContextManagerLegacy extends HubbardContextProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "hubbard_legacy"; + this.domain = "important"; + this.uiSchemaStyled = { + "ui:options": { + addable: true, + orderable: false, + removable: true, + }, + items: { + atomicSpeciesIndex: { "ui:readonly": true }, + }, + }; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + "items.properties.atomicSpecies": { + enum: this.uniqueElementsWithLabels, + }, + "items.properties.hubbardUValue": { + default: defaultHubbardConfig.hubbardUValue, + }, + }); + } + getDefaultData() { + var _a; + return [ + { + ...defaultHubbardConfig, + atomicSpecies: this.firstElement, + atomicSpeciesIndex: ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 0 ? 1 : undefined, + }, + ]; + } + setData(data) { + const hubbardUValues = data.map((row) => { + var _a; + const atomicSpeciesIndex = ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 0 + ? this.uniqueElementsWithLabels.indexOf(row.atomicSpecies || "") + 1 + : undefined; + return { + ...row, + atomicSpeciesIndex, + }; + }); + super.setData(hubbardUValues); + } +} +exports.default = HubbardContextManagerLegacy; diff --git a/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts b/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts index a9bcbfc2..013b4ce1 100644 --- a/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts +++ b/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts @@ -1,6 +1,6 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; type HubbardName = "hubbard_u" | "hubbard_j" | "hubbard_v" | "hubbard_legacy"; export type HubbardExternalContext = JinjaExternalContext & MaterialExternalContext; @@ -9,7 +9,7 @@ declare const HubbardContextProvider_base: Base; export default abstract class HubbardContextProvider extends HubbardContextProvider_base { abstract readonly name: N; abstract getDefaultData(): D; - readonly domain: Domain; + readonly domain: "important"; protected readonly uniqueElementsWithLabels: string[]; protected readonly firstElement: string; protected readonly secondSpecies: string; diff --git a/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts b/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts new file mode 100644 index 00000000..12cf12f1 --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts @@ -0,0 +1,21 @@ +import type { HubbardJContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import type { ContextItem } from "../base/ContextProvider"; +import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; +type Name = "hubbard_j"; +type Data = HubbardJContextProviderSchema; +export type HubbardJContextManagerContextItem = ContextItem; +export default class HubbardJContextManager extends HubbardContextProvider { + readonly name: "hubbard_j"; + readonly uiSchemaStyled: { + readonly "ui:options": { + readonly addable: true; + readonly orderable: true; + readonly removable: true; + }; + }; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); + getDefaultData(): Data; +} +export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardJContextManager.js b/dist/js/context/providers/Hubbard/HubbardJContextManager.js new file mode 100644 index 00000000..974634eb --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardJContextManager.js @@ -0,0 +1,52 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); +const defaultHubbardConfig = { + paramType: "J", + atomicSpecies: "", + atomicOrbital: "2p", + value: 1.0, +}; +const jsonSchemaId = "context-providers-directory/hubbard-j-context-provider"; +class HubbardJContextManager extends HubbardContextProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "hubbard_j"; + this.uiSchemaStyled = { + "ui:options": { + addable: true, + orderable: true, + removable: true, + }, + }; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + "items.properties.paramType": { + default: defaultHubbardConfig.paramType, + }, + "items.properties.atomicSpecies": { + enum: this.uniqueElementsWithLabels, + default: this.firstElement, + }, + "items.properties.atomicOrbital": { + enum: this.orbitalList, + default: defaultHubbardConfig.atomicOrbital, + }, + "items.properties.value": { + default: defaultHubbardConfig.value, + }, + }); + } + getDefaultData() { + return [ + { + ...defaultHubbardConfig, + atomicSpecies: this.firstElement, + }, + ]; + } +} +exports.default = HubbardJContextManager; diff --git a/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts b/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts new file mode 100644 index 00000000..cc4224f8 --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts @@ -0,0 +1,21 @@ +import type { HubbardUContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import type { ContextItem } from "../base/ContextProvider"; +import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; +type Name = "hubbard_u"; +type Data = HubbardUContextProviderSchema; +export type HubbardUContextManagerContextItem = ContextItem; +export default class HubbardUContextManager extends HubbardContextProvider { + readonly name: "hubbard_u"; + readonly uiSchemaStyled: { + readonly "ui:options": { + readonly addable: true; + readonly orderable: false; + readonly removable: true; + }; + }; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); + getDefaultData(): Data; +} +export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardUContextManager.js b/dist/js/context/providers/Hubbard/HubbardUContextManager.js new file mode 100644 index 00000000..ef555ad9 --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardUContextManager.js @@ -0,0 +1,50 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const MaterialContextMixin_1 = __importDefault(require("../../mixins/MaterialContextMixin")); +const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); +const defaultHubbardConfig = { + atomicSpecies: "", + atomicOrbital: "2p", + hubbardUValue: 1.0, +}; +const jsonSchemaId = "context-providers-directory/hubbard-u-context-provider"; +class HubbardUContextManager extends HubbardContextProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "hubbard_u"; + this.uiSchemaStyled = { + "ui:options": { + addable: true, + orderable: false, + removable: true, + }, + }; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + "items.properties.atomicSpecies": { + enum: this.uniqueElementsWithLabels, + default: this.firstElement, + }, + "items.properties.atomicOrbital": { + enum: this.orbitalList, + default: defaultHubbardConfig.atomicOrbital, + }, + "items.properties.hubbardUValue": { + default: defaultHubbardConfig.hubbardUValue, + }, + }); + } + getDefaultData() { + return [ + { + ...defaultHubbardConfig, + atomicSpecies: this.firstElement, + }, + ]; + } +} +exports.default = HubbardUContextManager; +(0, MaterialContextMixin_1.default)(HubbardUContextManager.prototype); diff --git a/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts b/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts new file mode 100644 index 00000000..9a0a0317 --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts @@ -0,0 +1,21 @@ +import type { HubbardVContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import type { ContextItem } from "../base/ContextProvider"; +import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; +type Name = "hubbard_v"; +type Data = HubbardVContextProviderSchema; +export type HubbardVContextManagerContextItem = ContextItem; +export default class HubbardVContextManager extends HubbardContextProvider { + readonly name: "hubbard_v"; + readonly uiSchemaStyled: { + readonly "ui:options": { + readonly addable: true; + readonly orderable: true; + readonly removable: true; + }; + }; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); + getDefaultData(): Data; +} +export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardVContextManager.js b/dist/js/context/providers/Hubbard/HubbardVContextManager.js new file mode 100644 index 00000000..197c9b8f --- /dev/null +++ b/dist/js/context/providers/Hubbard/HubbardVContextManager.js @@ -0,0 +1,70 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); +const defaultHubbardConfig = { + atomicSpecies: "", + atomicOrbital: "2p", + atomicSpecies2: "", + atomicOrbital2: "2p", + siteIndex: 1, + siteIndex2: 1, + hubbardVValue: 1.0, +}; +const jsonSchemaId = "context-providers-directory/hubbard-v-context-provider"; +class HubbardVContextManager extends HubbardContextProvider_1.default { + constructor(contextItem, externalContext) { + var _a; + super(contextItem, externalContext); + this.name = "hubbard_v"; + this.uiSchemaStyled = { + "ui:options": { + addable: true, + orderable: true, + removable: true, + }, + }; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + "items.properties.atomicSpecies": { + enum: this.uniqueElementsWithLabels, + default: this.firstElement, + }, + "items.properties.siteIndex": { + default: defaultHubbardConfig.siteIndex, + }, + "items.properties.atomicOrbital": { + enum: this.orbitalList, + default: defaultHubbardConfig.atomicOrbital, + }, + "items.properties.atomicSpecies2": { + enum: this.uniqueElementsWithLabels, + default: this.secondSpecies, + }, + "items.properties.siteIndex2": { + default: ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 1 ? 2 : defaultHubbardConfig.siteIndex2, + }, + "items.properties.atomicOrbital2": { + enum: this.orbitalList, + default: defaultHubbardConfig.atomicOrbital, + }, + "items.properties.hubbardVValue": { + default: defaultHubbardConfig.hubbardVValue, + }, + }); + } + getDefaultData() { + var _a; + return [ + { + ...defaultHubbardConfig, + atomicSpecies: this.firstElement, + atomicSpecies2: this.secondSpecies, + siteIndex2: ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 1 ? 2 : defaultHubbardConfig.siteIndex2, + }, + ]; + } +} +exports.default = HubbardVContextManager; diff --git a/dist/js/context/providers/IonDynamicsContextProvider.d.ts b/dist/js/context/providers/IonDynamicsContextProvider.d.ts index 8eca4e70..7d145531 100644 --- a/dist/js/context/providers/IonDynamicsContextProvider.d.ts +++ b/dist/js/context/providers/IonDynamicsContextProvider.d.ts @@ -1,12 +1,14 @@ import type { IonDynamicsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, Domain, ExternalContext } from "./base/ContextProvider"; +import type { ContextItem, ExternalContext } from "./base/ContextProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; type Data = IonDynamicsContextProviderSchema; type Name = "dynamics"; +export type IonDynamicsContextProviderContextItem = ContextItem; +export type IonDynamicsContextProviderExternalContext = ExternalContext; export default class IonDynamicsContextProvider extends JSONSchemaFormDataProvider { - readonly name: Name; - readonly domain: Domain; + readonly name: "dynamics"; + readonly domain: "important"; readonly uiSchema: { numberOfSteps: {}; timeStep: {}; diff --git a/dist/js/context/providers/MLSettingsDataManager.d.ts b/dist/js/context/providers/MLSettingsDataManager.d.ts new file mode 100644 index 00000000..c24d883a --- /dev/null +++ b/dist/js/context/providers/MLSettingsDataManager.d.ts @@ -0,0 +1,28 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { MLSettingsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; +import { type ContextItem } from "./base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; +type Name = "mlSettings"; +type Data = MLSettingsContextProviderSchema; +export type MLSettingsDataManagerContextItem = ContextItem; +export type MLSettingsDataManagerExternalContext = JinjaExternalContext & ApplicationExternalContext; +type ExternalContext = MLSettingsDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; +declare const MLSettingsDataManager_base: Base; +export default class MLSettingsDataManager extends MLSettingsDataManager_base { + readonly name: "mlSettings"; + readonly domain: "important"; + readonly jsonSchema: JSONSchema7 | undefined; + readonly uiSchema: { + target_column_name: {}; + problem_category: {}; + }; + constructor(contextItem: ContextItem, externalContext: ExternalContext); + getDefaultData(): { + target_column_name: string; + problem_category: "regression"; + }; +} +export {}; diff --git a/dist/js/context/providers/MLSettingsDataManager.js b/dist/js/context/providers/MLSettingsDataManager.js new file mode 100644 index 00000000..60d77e16 --- /dev/null +++ b/dist/js/context/providers/MLSettingsDataManager.js @@ -0,0 +1,35 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); +const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/ml-settings-context-provider"; +const defaultData = { + target_column_name: "target", + problem_category: "regression", +}; +class MLSettingsDataManager extends JSONSchemaDataProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "mlSettings"; + this.domain = "important"; + this.uiSchema = { + target_column_name: {}, + problem_category: {}, + }; + this.initApplicationContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + target_column_name: { default: defaultData.target_column_name }, + problem_category: { default: defaultData.problem_category }, + }); + } + // eslint-disable-next-line class-methods-use-this + getDefaultData() { + return defaultData; + } +} +exports.default = MLSettingsDataManager; +(0, ApplicationContextMixin_1.applicationContextMixin)(MLSettingsDataManager.prototype); diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts b/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts new file mode 100644 index 00000000..8b7b78bb --- /dev/null +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts @@ -0,0 +1,27 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { MLTrainTestSplitContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; +import { type ContextItem } from "./base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; +type Name = "mlTrainTestSplit"; +type Data = MLTrainTestSplitContextProviderSchema; +export type MLTrainTestSplitDataManagerContextItem = ContextItem; +export type MLTrainTestSplitDataManagerExternalContext = JinjaExternalContext & ApplicationExternalContext; +type ExternalContext = MLTrainTestSplitDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; +declare const MLTrainTestSplitDataManager_base: Base; +export default class MLTrainTestSplitDataManager extends MLTrainTestSplitDataManager_base { + readonly name: "mlTrainTestSplit"; + readonly domain: "important"; + readonly jsonSchema: JSONSchema7 | undefined; + readonly uiSchema: { + target_column_name: {}; + problem_category: {}; + }; + constructor(contextItem: ContextItem, externalContext: ExternalContext); + getDefaultData(): { + fraction_held_as_test_set: number; + }; +} +export {}; diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.js b/dist/js/context/providers/MLTrainTestSplitDataManager.js new file mode 100644 index 00000000..0154e371 --- /dev/null +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.js @@ -0,0 +1,33 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); +const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; +const defaultData = { + fraction_held_as_test_set: 0.2, +}; +class MLTrainTestSplitDataManager extends JSONSchemaDataProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "mlTrainTestSplit"; + this.domain = "important"; + this.uiSchema = { + target_column_name: {}, + problem_category: {}, + }; + this.initApplicationContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + fraction_held_as_test_set: { default: defaultData.fraction_held_as_test_set }, + }); + } + // eslint-disable-next-line class-methods-use-this + getDefaultData() { + return defaultData; + } +} +exports.default = MLTrainTestSplitDataManager; +(0, ApplicationContextMixin_1.applicationContextMixin)(MLTrainTestSplitDataManager.prototype); diff --git a/dist/js/context/providers/NEBFormDataManager.d.ts b/dist/js/context/providers/NEBFormDataManager.d.ts new file mode 100644 index 00000000..d96de373 --- /dev/null +++ b/dist/js/context/providers/NEBFormDataManager.d.ts @@ -0,0 +1,23 @@ +import type { NEBDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import type { ContextItem } from "./base/ContextProvider"; +import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; +import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; +type Name = "neb"; +type Data = NEBDataProviderSchema; +export type NEBFormDataManagerContextItem = ContextItem; +export type NEBFormDataManagerExternalContext = JinjaExternalContext; +type ExternalContext = NEBFormDataManagerExternalContext; +export default class NEBFormDataManager extends JSONSchemaFormDataProvider { + readonly name: "neb"; + readonly domain: "important"; + readonly uiSchema: { + nImages: {}; + }; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: ContextItem, externalContext: ExternalContext); + getDefaultData(): { + nImages: number; + }; +} +export {}; diff --git a/dist/js/context/providers/NEBFormDataManager.js b/dist/js/context/providers/NEBFormDataManager.js new file mode 100644 index 00000000..27be2759 --- /dev/null +++ b/dist/js/context/providers/NEBFormDataManager.js @@ -0,0 +1,29 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const JSONSchemaFormDataProvider_1 = __importDefault(require("./base/JSONSchemaFormDataProvider")); +const jsonSchemaId = "context-providers-directory/neb-data-provider"; +const defaultData = { + nImages: 1, +}; +class NEBFormDataManager extends JSONSchemaFormDataProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "neb"; + this.domain = "important"; + this.uiSchema = { + nImages: {}, + }; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + nImages: { default: defaultData.nImages }, + }); + } + // eslint-disable-next-line class-methods-use-this + getDefaultData() { + return defaultData; + } +} +exports.default = NEBFormDataManager; diff --git a/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts b/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts new file mode 100644 index 00000000..bce174f8 --- /dev/null +++ b/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts @@ -0,0 +1,79 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { NonCollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; +import type { ContextItem } from "./base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; +type Name = "nonCollinearMagnetization"; +type Data = NonCollinearMagnetizationContextProviderSchema; +export type NonCollinearMagnetizationDataManagerContextItem = ContextItem; +export type NonCollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & MaterialExternalContext; +type ExternalContext = NonCollinearMagnetizationDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; +declare const NonCollinearMagnetizationDataManager_base: Base; +export default class NonCollinearMagnetizationDataManager extends NonCollinearMagnetizationDataManager_base { + readonly name: "nonCollinearMagnetization"; + readonly domain: "important"; + readonly isStartingMagnetization: boolean; + readonly isConstrainedMagnetization: boolean; + readonly isExistingChargeDensity: boolean; + readonly isArbitrarySpinDirection: boolean; + readonly isFixedMagnetization: boolean; + readonly constrainedMagnetization: Data["constrainedMagnetization"]; + readonly jsonSchema: JSONSchema7 | undefined; + private readonly uniqueElementsWithLabels; + constructor(contextItem: ContextItem, externalContext: ExternalContext); + getDefaultData(): Data; + get uiSchemaStyled(): { + isExistingChargeDensity: {}; + lforcet: { + "ui:readonly": boolean; + "ui:widget": string; + "ui:options": { + inline: boolean; + }; + }; + isArbitrarySpinDirection: {}; + spinAngles: { + items: { + atomicSpecies: { + "ui:readonly": boolean; + }; + }; + "ui:readonly": boolean; + "ui:options": { + addable: boolean; + orderable: boolean; + removable: boolean; + }; + }; + isStartingMagnetization: {}; + startingMagnetization: { + items: { + atomicSpecies: { + "ui:readonly": boolean; + }; + value: { + "ui:classNames": string; + }; + }; + "ui:readonly": boolean; + "ui:options": { + addable: boolean; + orderable: boolean; + removable: boolean; + }; + }; + isConstrainedMagnetization: {}; + constrainedMagnetization: { + "ui:readonly": boolean; + }; + isFixedMagnetization: { + "ui:readonly": boolean; + }; + fixedMagnetization: { + "ui:readonly": boolean; + }; + }; +} +export {}; diff --git a/dist/js/context/providers/NonCollinearMagnetizationDataManager.js b/dist/js/context/providers/NonCollinearMagnetizationDataManager.js new file mode 100644 index 00000000..12ee2e24 --- /dev/null +++ b/dist/js/context/providers/NonCollinearMagnetizationDataManager.js @@ -0,0 +1,155 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/non-collinear-magnetization-context-provider"; +class NonCollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.default { + constructor(contextItem, externalContext) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; + super(contextItem, externalContext); + this.name = "nonCollinearMagnetization"; + this.domain = "important"; + this.initMaterialContextMixin(externalContext); + this.isStartingMagnetization = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.isStartingMagnetization) !== null && _b !== void 0 ? _b : true; + this.isConstrainedMagnetization = (_d = (_c = this.data) === null || _c === void 0 ? void 0 : _c.isConstrainedMagnetization) !== null && _d !== void 0 ? _d : false; + this.isExistingChargeDensity = (_f = (_e = this.data) === null || _e === void 0 ? void 0 : _e.isExistingChargeDensity) !== null && _f !== void 0 ? _f : false; + this.isArbitrarySpinDirection = (_h = (_g = this.data) === null || _g === void 0 ? void 0 : _g.isArbitrarySpinDirection) !== null && _h !== void 0 ? _h : false; + this.isFixedMagnetization = (_k = (_j = this.data) === null || _j === void 0 ? void 0 : _j.isFixedMagnetization) !== null && _k !== void 0 ? _k : false; + this.constrainedMagnetization = (_m = (_l = this.data) === null || _l === void 0 ? void 0 : _l.constrainedMagnetization) !== null && _m !== void 0 ? _m : { + lambda: 0.0, + constrainType: "atomic direction", + }; + this.uniqueElementsWithLabels = [ + ...new Set(((_p = (_o = this.material) === null || _o === void 0 ? void 0 : _o.Basis) === null || _p === void 0 ? void 0 : _p.elementsWithLabelsArray) || []), + ]; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + isExistingChargeDensity: { default: false }, + isStartingMagnetization: { default: true }, + isArbitrarySpinAngle: { default: false }, + isConstrainedMagnetization: { default: false }, + isFixedMagnetization: { default: true }, + startingMagnetization: { + minItems: this.uniqueElementsWithLabels.length, + maxItems: this.uniqueElementsWithLabels.length, + }, + "startingMagnetization.items.properties.value": { + default: 0.0, + minimum: -1.0, + maximum: 1.0, + }, + spinAngles: { + minItems: this.uniqueElementsWithLabels.length, + maxItems: this.uniqueElementsWithLabels.length, + }, + "spinAngles.items.properties.angle1": { default: 0.0 }, + "spinAngles.items.properties.angle2": { default: 0.0 }, + "constrainedMagnetization.properties.constrainType": { + default: "atomic direction", + }, + "constrainedMagnetization.properties.lambda": { default: 0.0 }, + "fixedMagnetization.properties.x": { default: 0.0 }, + "fixedMagnetization.properties.y": { default: 0.0 }, + "fixedMagnetization.properties.z": { default: 0.0 }, + }); + } + getDefaultData() { + const startingMagnetization = this.uniqueElementsWithLabels.map((element, index) => { + return { + index: index + 1, + atomicSpecies: element, + value: 0.0, + }; + }); + const spinAngles = this.uniqueElementsWithLabels.map((element, index) => { + return { + index: index + 1, + atomicSpecies: element, + angle1: 0.0, + angle2: 0.0, + }; + }); + return { + isExistingChargeDensity: false, + isStartingMagnetization: true, + isConstrainedMagnetization: false, + isArbitrarySpinAngle: false, + isArbitrarySpinDirection: false, + isFixedMagnetization: false, + lforcet: true, + spinAngles, + startingMagnetization, + constrainedMagnetization: { + lambda: 0.0, + constrainType: "atomic direction", + }, + fixedMagnetization: { + x: 0.0, + y: 0.0, + z: 0.0, + }, + }; + } + get uiSchemaStyled() { + var _a, _b; + return { + isExistingChargeDensity: {}, + lforcet: { + "ui:readonly": !this.isExistingChargeDensity, + "ui:widget": "radio", + "ui:options": { + inline: true, + }, + }, + isArbitrarySpinDirection: {}, + spinAngles: { + items: { + atomicSpecies: { + "ui:readonly": true, + }, + }, + "ui:readonly": !this.isArbitrarySpinDirection, + "ui:options": { + addable: false, + orderable: false, + removable: false, + }, + }, + isStartingMagnetization: {}, + startingMagnetization: { + items: { + atomicSpecies: { + "ui:readonly": true, + }, + value: { + "ui:classNames": "col-xs-6", + }, + }, + "ui:readonly": !this.isStartingMagnetization, + "ui:options": { + addable: false, + orderable: false, + removable: false, + }, + }, + isConstrainedMagnetization: {}, + constrainedMagnetization: { + "ui:readonly": !this.isConstrainedMagnetization, + }, + isFixedMagnetization: { + "ui:readonly": !(this.isConstrainedMagnetization && + ((_a = this.constrainedMagnetization) === null || _a === void 0 ? void 0 : _a.constrainType) === "total"), + }, + fixedMagnetization: { + "ui:readonly": !(this.isFixedMagnetization && + this.isConstrainedMagnetization && + ((_b = this.constrainedMagnetization) === null || _b === void 0 ? void 0 : _b.constrainType) === "total"), + }, + }; + } +} +exports.default = NonCollinearMagnetizationDataManager; +(0, MaterialContextMixin_1.default)(NonCollinearMagnetizationDataManager.prototype); diff --git a/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts b/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts new file mode 100644 index 00000000..36a24336 --- /dev/null +++ b/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts @@ -0,0 +1,28 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { PlanewaveCutoffsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; +import ContextProvider, { type ContextItem, type ExternalContext } from "./base/ContextProvider"; +type Name = "cutoffs"; +type Data = PlanewaveCutoffsContextProviderSchema; +type PlanewaveExternalContext = ExternalContext & ApplicationExternalContext; +type Base = typeof ContextProvider & Constructor; +export type PlanewaveCutoffDataManagerContextItem = ContextItem; +export type PlanewaveCutoffDataManagerExternalContext = PlanewaveExternalContext; +declare const PlanewaveCutoffDataManager_base: Base; +export default class PlanewaveCutoffDataManager extends PlanewaveCutoffDataManager_base { + readonly name: "cutoffs"; + readonly domain: "important"; + readonly entityName: "subworkflow"; + readonly jsonSchema: JSONSchema7 | undefined; + readonly uiSchema: { + wavefunction: {}; + density: {}; + }; + constructor(contextItem: ContextItem, externalContext: PlanewaveExternalContext); + getDefaultData(): { + wavefunction: number | undefined; + density: number | undefined; + }; +} +export {}; diff --git a/dist/js/context/providers/PlanewaveCutoffDataManager.js b/dist/js/context/providers/PlanewaveCutoffDataManager.js new file mode 100644 index 00000000..cf9f8048 --- /dev/null +++ b/dist/js/context/providers/PlanewaveCutoffDataManager.js @@ -0,0 +1,42 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); +const ContextProvider_1 = __importDefault(require("./base/ContextProvider")); +// TODO: create a task to move this handling to standata +const cutoffConfig = { + vasp: { wavefunction: undefined, density: undefined }, + espresso: { wavefunction: 40, density: 200 }, +}; +const jsonSchemaId = "context-providers-directory/planewave-cutoffs-context-provider"; +class PlanewaveCutoffDataManager extends ContextProvider_1.default { + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "cutoffs"; + this.domain = "important"; + this.entityName = "subworkflow"; + this.uiSchema = { + wavefunction: {}, + density: {}, + }; + this.initApplicationContextMixin(externalContext); + const { wavefunction, density } = this.getDefaultData(); + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + wavefunction: { default: wavefunction }, + density: { default: density }, + }); + } + getDefaultData() { + // TODO-QUESTION: what if the application is not in the cutoffConfig? + const { wavefunction, density } = cutoffConfig[this.application.name] || {}; + return { + wavefunction, + density, + }; + } +} +exports.default = PlanewaveCutoffDataManager; +(0, ApplicationContextMixin_1.applicationContextMixin)(PlanewaveCutoffDataManager.prototype); diff --git a/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts index eceea505..ac468e22 100644 --- a/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts @@ -1,7 +1,7 @@ import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; type Name = "igrid"; export default class IGridFormDataManager extends PointsGridFormDataProvider { - readonly name: Name; - readonly divisor: number; + readonly name: "igrid"; + readonly divisor: 0.2; } export {}; diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts index e23b1f43..de14ca54 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts @@ -1,6 +1,7 @@ import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; type Name = "kgrid"; export default class KGridFormDataManager extends PointsGridFormDataProvider { - readonly name: Name; + readonly name: "kgrid"; + readonly divisor: 1; } export {}; diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.js b/dist/js/context/providers/PointsGrid/KGridFormDataManager.js index 991c2ee4..5c7f9355 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.js @@ -8,6 +8,7 @@ class KGridFormDataManager extends PointsGridFormDataProvider_1.default { constructor() { super(...arguments); this.name = "kgrid"; + this.divisor = 1; } } exports.default = KGridFormDataManager; diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts index dc33023b..0f1806de 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts @@ -2,19 +2,19 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { PointsGridDataProviderSchema, Vector3DSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import type { JinjaExternalContext } from "../base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "../base/JSONSchemaFormDataProvider"; -type Name = string; +type Name = "qgrid" | "kgrid" | "igrid"; type Data = PointsGridDataProviderSchema; -type EContext = JinjaExternalContext & MaterialExternalContext & { - divisor: number; -}; +type EContext = JinjaExternalContext & MaterialExternalContext; type Base = typeof JSONSchemaFormDataProvider & Constructor; +export type PointsGridFormDataManagerContextItem = ContextItem; +export type PointsGridFormDataManagerExternalContext = EContext; declare const PointsGridFormDataProvider_base: Base; -export default abstract class PointsGridFormDataProvider extends PointsGridFormDataProvider_base { +export default abstract class PointsGridFormDataProvider extends PointsGridFormDataProvider_base { abstract readonly name: N; - readonly domain: Domain; + readonly domain: "important"; dimensions: Vector3DSchema; shifts: Vector3DSchema; private reciprocalLattice; @@ -23,6 +23,7 @@ export default abstract class PointsGridFormDataProvider, externalContext: EContext); diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js index d5b44188..e93f35f8 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js @@ -56,13 +56,9 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { this.reciprocalVectorRatios = this.reciprocalLattice.reciprocalVectorRatios.map((r) => Number(math_1.math.numberToPrecision(r, 3))); } getDefaultGridMetricValue(metric) { - var _a; switch (metric) { - case "KPPRA": { - const divisor = ((_a = this.externalContext) === null || _a === void 0 ? void 0 : _a.divisor) || 1; - const { defaultKPPRA } = settings_1.globalSettings; - return Math.floor(defaultKPPRA / divisor); - } + case "KPPRA": + return Math.floor(settings_1.globalSettings.defaultKPPRA / this.divisor); case "spacing": return 0.3; default: diff --git a/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts index da727057..32096bb8 100644 --- a/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts @@ -1,7 +1,7 @@ import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; type Name = "qgrid"; export default class QGridFormDataManager extends PointsGridFormDataProvider { - readonly name: Name; - readonly divisor: number; + readonly name: "qgrid"; + readonly divisor: 5; } export {}; diff --git a/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts b/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts index 9470d2cd..138d1388 100644 --- a/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts @@ -1,7 +1,10 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "explicitKPath2PIBA"; +export type ExplicitKPath2PIBAFormDataManagerContextItem = ContextItem; +export type ExplicitKPath2PIBAFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDataProvider { - readonly name: Name; + readonly name: "explicitKPath2PIBA"; readonly is2PIBA = true; readonly useExplicitPath = true; } diff --git a/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts index 64c6a064..7bd35473 100644 --- a/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts @@ -1,7 +1,10 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "explicitKPath"; +export type ExplicitKPathFormDataManagerContextItem = ContextItem; +export type ExplicitKPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class ExplicitKPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name; + readonly name: "explicitKPath"; readonly useExplicitPath = true; } export {}; diff --git a/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts index e756e575..45fa829f 100644 --- a/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts @@ -1,6 +1,9 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "ipath"; +export type IPathFormDataManagerContextItem = ContextItem; +export type IPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class IPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name; + readonly name: "ipath"; } export {}; diff --git a/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts index cc3b49be..6a9a202d 100644 --- a/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts @@ -1,6 +1,9 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "kpath"; +export type KPathFormDataManagerContextItem = ContextItem; +export type KPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class KPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name; + readonly name: "kpath"; } export {}; diff --git a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts index 3c00fee8..d81da7f3 100644 --- a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts @@ -1,11 +1,13 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { PointsPathDataProviderSchema } from "@mat3ra/esse/dist/js/types"; -import { type ApplicationContextMixin } from "../../mixins/ApplicationContextMixin"; +import { type ApplicationContextMixin, type ApplicationExternalContext } from "../../mixins/ApplicationContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; -type Data = PointsPathDataProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext & ApplicationContextMixin; +export type PointsPathFormDataProviderData = PointsPathDataProviderSchema; +export type PointsPathFormDataProviderExternalContext = JinjaExternalContext & MaterialExternalContext & ApplicationExternalContext; +type Data = PointsPathFormDataProviderData; +type ExternalContext = PointsPathFormDataProviderExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; declare const MixinsContextProvider_base: Base; declare abstract class MixinsContextProvider extends MixinsContextProvider_base { @@ -13,7 +15,7 @@ declare abstract class MixinsContextProvider extends MixinsContextProvider_base } declare abstract class PointsPathFormDataProvider extends MixinsContextProvider { abstract name: N; - readonly domain: Domain; + readonly domain: "important"; private reciprocalLattice; readonly useExplicitPath: boolean; readonly is2PIBA: boolean; diff --git a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js index c84169cd..2a834df6 100644 --- a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js +++ b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js @@ -88,7 +88,6 @@ class PointsPathFormDataProvider extends MixinsContextProvider { } const middlePoints = math_1.math.calculateSegmentsBetweenPoints3D(startPoint.coordinates, nextPoint.coordinates, startPoint.steps); const steps = 1; - // TODO-QUESTION: confirm that "point" property should be present after transformation; point was missing in original implementation acc.push({ steps, coordinates: startPoint.coordinates, @@ -96,8 +95,8 @@ class PointsPathFormDataProvider extends MixinsContextProvider { }, ...middlePoints.map((coordinates) => ({ steps, coordinates, - // TODO-QUESTION: is this correct? - point: startPoint.point, + // TODO: make point optional + // point: startPoint.point, }))); // nextPoint is the last point in the path if (path.length - 2 === index) { diff --git a/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts index dcc2e11c..a46ae4ad 100644 --- a/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts @@ -1,6 +1,9 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "qpath"; +export type QPathFormDataManagerContextItem = ContextItem; +export type QPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class QPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name; + readonly name: "qpath"; } export {}; diff --git a/dist/js/context/providers/base/ContextProvider.d.ts b/dist/js/context/providers/base/ContextProvider.d.ts index 219e43fb..936c759f 100644 --- a/dist/js/context/providers/base/ContextProvider.d.ts +++ b/dist/js/context/providers/base/ContextProvider.d.ts @@ -36,6 +36,6 @@ declare abstract class ContextProvider; + getContextItemData(): ExtendedContextItem; } export default ContextProvider; diff --git a/dist/js/context/providers/base/ContextProvider.js b/dist/js/context/providers/base/ContextProvider.js index 0966fc2f..974d566f 100644 --- a/dist/js/context/providers/base/ContextProvider.js +++ b/dist/js/context/providers/base/ContextProvider.js @@ -17,7 +17,7 @@ class ContextProvider { setData(data) { this.data = data ? utils_1.Utils.clone.deepClone(data) : undefined; } - getContextItem() { + getContextItemData() { return { name: this.name, isEdited: this.isEdited, diff --git a/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts b/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts index 8e4d5c0a..26680870 100644 --- a/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts +++ b/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts @@ -1,5 +1,5 @@ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; -import type { ContextItem, EntityName, ExternalContext } from "./ContextProvider"; +import type { ContextItem, ExternalContext } from "./ContextProvider"; import ContextProvider from "./ContextProvider"; export interface JinjaExternalContext extends ExternalContext { isUsingJinjaVariables?: boolean; @@ -9,7 +9,7 @@ export interface JinjaExternalContext extends ExternalContext { */ declare abstract class JSONSchemaDataProvider extends ContextProvider { abstract readonly jsonSchema: JSONSchema | undefined; - readonly entityName: EntityName; + readonly entityName: "unit"; isUsingJinjaVariables: boolean; constructor(contextItem: ContextItem, externalContext: EC); } diff --git a/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js b/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js index 2bc1f66d..ffb4d594 100644 --- a/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js +++ b/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js @@ -13,9 +13,6 @@ const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/Workflow const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const QEPWXContextProvider_1 = __importDefault(require("./QEPWXContextProvider")); const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; -function atomicPositionsToString(atomicPositions) { - return atomicPositions.map(({ X, x, y, z }) => `${X} ${x} ${y} ${z}`).join("\n"); -} class QENEBContextProvider extends JSONSchemaDataProvider_1.default { constructor(config, externalContext) { super(config, externalContext); @@ -38,9 +35,11 @@ class QENEBContextProvider extends JSONSchemaDataProvider_1.default { ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: _, ...rest } = PWXContexts[0]; return { ...rest, - FIRST_IMAGE: atomicPositionsToString(ATOMIC_POSITIONS), - LAST_IMAGE: atomicPositionsToString(PWXContexts[PWXContexts.length - 1].ATOMIC_POSITIONS), - INTERMEDIATE_IMAGES: PWXContexts.slice(1, PWXContexts.length - 1).map((data) => atomicPositionsToString(data.ATOMIC_POSITIONS)), + FIRST_IMAGE: ATOMIC_POSITIONS, + LAST_IMAGE: PWXContexts[PWXContexts.length - 1].ATOMIC_POSITIONS, + INTERMEDIATE_IMAGES: PWXContexts.slice(1, PWXContexts.length - 1).map((data) => { + return data.ATOMIC_POSITIONS; + }), }; } } diff --git a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts new file mode 100644 index 00000000..a6ca8d0f --- /dev/null +++ b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts @@ -0,0 +1,26 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { QENEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; +import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; +import { type MaterialsSetContextMixin, type MaterialsSetExternalContext } from "../../../mixins/MaterialsSetContextMixin"; +import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; +import type { ContextItem } from "../../base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; +type Name = "input"; +type Data = QENEBContextProviderSchema; +export type QENEBInputDataManagerContextItem = ContextItem; +export type QENEBInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; +type ExternalContext = QENEBInputDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +declare const QENEBInputDataManager_base: Base; +export default class QENEBInputDataManager extends QENEBInputDataManager_base { + readonly name: "input"; + readonly domain: "executable"; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(config: ContextItem, externalContext: ExternalContext); + getDefaultData(): Data; +} +export {}; diff --git a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js new file mode 100644 index 00000000..b0e4bc45 --- /dev/null +++ b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js @@ -0,0 +1,52 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); +const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); +const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); +const MaterialsSetContextMixin_1 = __importDefault(require("../../../mixins/MaterialsSetContextMixin")); +const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); +const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); +const QEPWXInputDataManager_1 = __importDefault(require("./QEPWXInputDataManager")); +const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; +class QENEBInputDataManager extends JSONSchemaDataProvider_1.default { + constructor(config, externalContext) { + super(config, externalContext); + this.name = "input"; + this.domain = "executable"; + this.initJobContextMixin(externalContext); + this.initMaterialsContextMixin(externalContext); + this.initMethodDataContextMixin(externalContext); + this.initWorkflowContextMixin(externalContext); + this.initMaterialContextMixin(externalContext); + this.initMaterialsSetContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); + } + getDefaultData() { + const PWXContexts = this.sortMaterialsByIndexInSet(this.materials).map((material) => { + return new QEPWXInputDataManager_1.default({}, { ...this.externalContext, material }).getData(); + }); + const { ATOMIC_POSITIONS, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: _, ...rest } = PWXContexts[0]; + return { + ...rest, + FIRST_IMAGE: ATOMIC_POSITIONS, + LAST_IMAGE: PWXContexts[PWXContexts.length - 1].ATOMIC_POSITIONS, + INTERMEDIATE_IMAGES: PWXContexts.slice(1, PWXContexts.length - 1).map((data) => { + return data.ATOMIC_POSITIONS; + }), + }; + } +} +exports.default = QENEBInputDataManager; +(0, MaterialContextMixin_1.default)(QENEBInputDataManager.prototype); +(0, MaterialsContextMixin_1.default)(QENEBInputDataManager.prototype); +(0, MethodDataContextMixin_1.default)(QENEBInputDataManager.prototype); +(0, WorkflowContextMixin_1.default)(QENEBInputDataManager.prototype); +(0, JobContextMixin_1.default)(QENEBInputDataManager.prototype); +(0, MaterialsSetContextMixin_1.default)(QENEBInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js b/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js index 63ba251d..f1ac66e2 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js +++ b/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js @@ -61,12 +61,15 @@ class QEPWXContextProvider extends JSONSchemaDataProvider_1.default { v3: lattice.vectorArrays[2], }; // const ATOMIC_POSITIONS = basis.getAtomicPositionsWithConstraintsAsStrings().join("\n"); - const ATOMIC_POSITIONS = basis.elementsAndCoordinatesAndLabelsArray.map(([element, coordinate, label]) => { + const ATOMIC_POSITIONS = basis.elementsCoordinatesConstraintsArray.map(([element, label, coordinate, constraint]) => { return { X: `${element}${label}`, x: coordinate[0], y: coordinate[1], z: coordinate[2], + "if_pos(1)": constraint[0] ? 1 : 0, + "if_pos(2)": constraint[1] ? 1 : 0, + "if_pos(3)": constraint[2] ? 1 : 0, }; }); return { diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts new file mode 100644 index 00000000..4fba4f7b --- /dev/null +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts @@ -0,0 +1,91 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { QEPwxContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; +import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; +import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; +import type { ContextItem } from "../../base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; +type Name = "input"; +type Data = QEPwxContextProviderSchema; +export type QEPWXInputDataManagerContextItem = ContextItem; +export type QEPWXInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; +type ExternalContext = QEPWXInputDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; +declare const QEPWXInputDataManager_base: Base; +export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { + readonly name: "input"; + readonly domain: "executable"; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(config: ContextItem, externalContext: ExternalContext); + private buildQEPWXContext; + private getDataPerMaterial; + getDefaultData(): { + perMaterial?: undefined; + IBRAV: number; + RESTART_MODE: "from_scratch" | "restart"; + ATOMIC_SPECIES: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + ATOMIC_SPECIES_WITH_LABELS: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + NAT: number; + NTYP: number; + NTYP_WITH_LABELS: number; + ATOMIC_POSITIONS: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + CELL_PARAMETERS: { + v1?: [number, number, number]; + v2?: [number, number, number]; + v3?: [number, number, number]; + }; + } | { + perMaterial: QEPwxContextProviderSchema[]; + IBRAV: number; + RESTART_MODE: "from_scratch" | "restart"; + ATOMIC_SPECIES: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + ATOMIC_SPECIES_WITH_LABELS: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + NAT: number; + NTYP: number; + NTYP_WITH_LABELS: number; + ATOMIC_POSITIONS: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + CELL_PARAMETERS: { + v1?: [number, number, number]; + v2?: [number, number, number]; + v3?: [number, number, number]; + }; + }; +} +export {}; diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js new file mode 100644 index 00000000..4df5e620 --- /dev/null +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js @@ -0,0 +1,102 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const periodic_table_js_1 = require("@exabyte-io/periodic-table.js"); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const path_1 = __importDefault(require("path")); +const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); +const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); +const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); +const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); +const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/by-application/qe-pwx-context-provider"; +class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { + constructor(config, externalContext) { + super(config, externalContext); + this.name = "input"; + this.domain = "executable"; + this.initMaterialsContextMixin(externalContext); + this.initMethodDataContextMixin(externalContext); + this.initWorkflowContextMixin(externalContext); + this.initJobContextMixin(externalContext); + this.initMaterialContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); + } + buildQEPWXContext(material) { + const { Basis: basis, Lattice: lattice } = material; + const { job, workflow } = this; + const ATOMIC_SPECIES = basis.uniqueElements.map((symbol) => { + var _a; + const pseudo = (((_a = this.methodData) === null || _a === void 0 ? void 0 : _a.pseudo) || []).find((p) => p.element === symbol); + return { + X: symbol, + Mass_X: periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass, + PseudoPot_X: (pseudo === null || pseudo === void 0 ? void 0 : pseudo.filename) || path_1.default.basename((pseudo === null || pseudo === void 0 ? void 0 : pseudo.path) || ""), + }; + // return s.sprintf("%s %f %s", symbol, el.atomic_mass, filename) || ""; + }); // .join("\n"); + const uniqueElementsWithLabels = [...new Set(basis.elementsWithLabelsArray)]; + const ATOMIC_SPECIES_WITH_LABELS = uniqueElementsWithLabels.map((symbol) => { + var _a, _b; + const symbolWithoutLabel = symbol.replace(/\d$/, ""); + const label = symbol.match(/\d$/g) ? (_a = symbol.match(/\d$/g)) === null || _a === void 0 ? void 0 : _a[0] : ""; + const pseudo = (((_b = this.methodData) === null || _b === void 0 ? void 0 : _b.pseudo) || []).find((p) => p.element === symbolWithoutLabel); + return { + X: `${symbolWithoutLabel}${label}`, + Mass_X: periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass, + PseudoPot_X: (pseudo === null || pseudo === void 0 ? void 0 : pseudo.filename) || path_1.default.basename((pseudo === null || pseudo === void 0 ? void 0 : pseudo.path) || ""), + }; + }); + const CELL_PARAMETERS = { + v1: lattice.vectorArrays[0], + v2: lattice.vectorArrays[1], + v3: lattice.vectorArrays[2], + }; + const ATOMIC_POSITIONS = basis.elementsCoordinatesConstraintsArray.map(([element, label, coordinate, constraint]) => { + return { + X: `${element}${label}`, + x: coordinate[0], + y: coordinate[1], + z: coordinate[2], + "if_pos(1)": constraint[0] ? 1 : 0, + "if_pos(2)": constraint[1] ? 1 : 0, + "if_pos(3)": constraint[2] ? 1 : 0, + }; + }); + return { + IBRAV: 0, + RESTART_MODE: job.parent || workflow.hasRelaxation ? "restart" : "from_scratch", + ATOMIC_SPECIES, + ATOMIC_SPECIES_WITH_LABELS, + NAT: basis.atomicPositions.length, + NTYP: basis.uniqueElements.length, + NTYP_WITH_LABELS: uniqueElementsWithLabels.length, + ATOMIC_POSITIONS, + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: basis.atomicPositions.join("\n"), + CELL_PARAMETERS, + }; + } + getDataPerMaterial() { + if (!this.materials || this.materials.length <= 1) + return {}; + return { perMaterial: this.materials.map((material) => this.buildQEPWXContext(material)) }; + } + getDefaultData() { + // the below values are read from PlanewaveDataManager instead + // ECUTWFC = 40; + // ECUTRHO = 200; + return { + ...this.buildQEPWXContext(this.material), + ...this.getDataPerMaterial(), + }; + } +} +exports.default = QEPWXInputDataManager; +(0, MaterialContextMixin_1.default)(QEPWXInputDataManager.prototype); +(0, MaterialsContextMixin_1.default)(QEPWXInputDataManager.prototype); +(0, MethodDataContextMixin_1.default)(QEPWXInputDataManager.prototype); +(0, WorkflowContextMixin_1.default)(QEPWXInputDataManager.prototype); +(0, JobContextMixin_1.default)(QEPWXInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts new file mode 100644 index 00000000..07b2818e --- /dev/null +++ b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts @@ -0,0 +1,35 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { NWChemTotalEnergyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; +import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; +import type { ContextItem } from "../../base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; +type Name = "input"; +type Data = NWChemTotalEnergyContextProviderSchema; +export type NWChemInputDataManagerContextItem = ContextItem; +export type NWChemInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; +type ExternalContext = NWChemInputDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor; +declare const NWChemInputDataManager_base: Base; +export default class NWChemInputDataManager extends NWChemInputDataManager_base { + readonly name: "input"; + readonly domain: "executable"; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(config: ContextItem, externalContext: ExternalContext); + getDefaultData(): { + CHARGE: number; + MULT: number; + BASIS: string; + NAT: number; + NTYP: number; + ATOMIC_POSITIONS: string; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + ATOMIC_SPECIES: string; + FUNCTIONAL: string; + CARTESIAN: boolean; + }; +} +export {}; diff --git a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js new file mode 100644 index 00000000..0b8c989a --- /dev/null +++ b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js @@ -0,0 +1,55 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const periodic_table_js_1 = require("@exabyte-io/periodic-table.js"); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); +const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); +const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); +const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/by-application/nwchem-total-energy-context-provider"; +class NWChemInputDataManager extends JSONSchemaDataProvider_1.default { + constructor(config, externalContext) { + super(config, externalContext); + this.name = "input"; + this.domain = "executable"; + this.initMethodDataContextMixin(externalContext); + this.initWorkflowContextMixin(externalContext); + this.initJobContextMixin(externalContext); + this.initMaterialContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); + } + /* + * TODO: Create ability for user to define CHARGE, MULT, BASIS and FUNCTIONAL parameters. + */ + getDefaultData() { + const basis = this.material.Basis; + const NTYP = basis.uniqueElements.length; + const ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS = basis.atomicPositions.join("\n") || ""; + const ATOMIC_SPECIES = basis.uniqueElements + .map((symbol) => `${symbol} ${periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass} `) + .join("\n"); + basis.toCartesian(); + const atomicPositions = basis.getAtomicPositionsWithConstraintsAsStrings(); + return { + CHARGE: 0, + MULT: 1, + BASIS: "6-31G", + NAT: atomicPositions.length, + NTYP, + ATOMIC_POSITIONS: atomicPositions.join("\n"), + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS, + ATOMIC_SPECIES, + FUNCTIONAL: "B3LYP", + CARTESIAN: basis.toCartesian !== undefined, + }; + } +} +exports.default = NWChemInputDataManager; +(0, MaterialContextMixin_1.default)(NWChemInputDataManager.prototype); +(0, MethodDataContextMixin_1.default)(NWChemInputDataManager.prototype); +(0, WorkflowContextMixin_1.default)(NWChemInputDataManager.prototype); +(0, JobContextMixin_1.default)(NWChemInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts new file mode 100644 index 00000000..700c44e2 --- /dev/null +++ b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts @@ -0,0 +1,35 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; +import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; +import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; +import type { ContextItem } from "../../base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; +type Name = "input"; +type Data = VASPContextProviderSchema; +export type VASPInputDataManagerContextItem = ContextItem; +export type VASPInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext; +type ExternalContext = VASPInputDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; +declare const VASPInputDataManager_base: Base; +export default class VASPInputDataManager extends VASPInputDataManager_base { + readonly name: "input"; + readonly domain: "executable"; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(config: ContextItem, externalContext: ExternalContext); + private buildVASPContext; + private getDataPerMaterial; + getDefaultData(): { + perMaterial?: undefined; + POSCAR: string; + POSCAR_WITH_CONSTRAINTS: string; + } | { + perMaterial: VASPContextProviderSchema[]; + POSCAR: string; + POSCAR_WITH_CONSTRAINTS: string; + }; +} +export {}; diff --git a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js new file mode 100644 index 00000000..5689d6b0 --- /dev/null +++ b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js @@ -0,0 +1,54 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); +const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); +const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); +const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); +const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); +const jsonSchemaId = "context-providers-directory/by-application/vasp-context-provider"; +class VASPInputDataManager extends JSONSchemaDataProvider_1.default { + constructor(config, externalContext) { + super(config, externalContext); + this.name = "input"; + this.domain = "executable"; + this.initJobContextMixin(externalContext); + this.initMaterialsContextMixin(externalContext); + this.initMethodDataContextMixin(externalContext); + this.initWorkflowContextMixin(externalContext); + this.initMaterialContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); + } + // eslint-disable-next-line class-methods-use-this + buildVASPContext(material) { + return { + // TODO: figure out whether we need two separate POSCARS, maybe one is enough + POSCAR: material.getAsPOSCAR(true, true), + POSCAR_WITH_CONSTRAINTS: material.getAsPOSCAR(true), + }; + } + getDataPerMaterial() { + if (!this.materials || this.materials.length <= 1) + return {}; + return { perMaterial: this.materials.map((material) => this.buildVASPContext(material)) }; + } + getDefaultData() { + // consider adjusting so that below values are read from PlanewaveDataManager + // ECUTWFC; + // ECUTRHO; + return { + ...this.buildVASPContext(this.material), + ...this.getDataPerMaterial(), + }; + } +} +exports.default = VASPInputDataManager; +(0, MaterialContextMixin_1.default)(VASPInputDataManager.prototype); +(0, MaterialsContextMixin_1.default)(VASPInputDataManager.prototype); +(0, MethodDataContextMixin_1.default)(VASPInputDataManager.prototype); +(0, WorkflowContextMixin_1.default)(VASPInputDataManager.prototype); +(0, JobContextMixin_1.default)(VASPInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts new file mode 100644 index 00000000..8e6baee4 --- /dev/null +++ b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts @@ -0,0 +1,30 @@ +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { VASPNEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; +import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; +import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; +import { type MaterialsSetContextMixin, type MaterialsSetExternalContext } from "../../../mixins/MaterialsSetContextMixin"; +import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; +import type { ContextItem } from "../../base/ContextProvider"; +import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; +type Name = "input"; +type Data = VASPNEBContextProviderSchema; +export type VASPNEBInputDataManagerContextItem = ContextItem; +export type VASPNEBInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; +type ExternalContext = VASPNEBInputDataManagerExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +declare const VASPNEBInputDataManager_base: Base; +export default class VASPNEBInputDataManager extends VASPNEBInputDataManager_base { + readonly name: "input"; + readonly domain: "executable"; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(config: ContextItem, externalContext: ExternalContext); + getDefaultData(): { + FIRST_IMAGE: string; + LAST_IMAGE: string; + INTERMEDIATE_IMAGES: string[]; + }; +} +export {}; diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js new file mode 100644 index 00000000..af718f44 --- /dev/null +++ b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js @@ -0,0 +1,48 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); +const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); +const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); +const MaterialsSetContextMixin_1 = __importDefault(require("../../../mixins/MaterialsSetContextMixin")); +const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); +const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); +const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); +const VASPInputDataManager_1 = __importDefault(require("./VASPInputDataManager")); +const jsonSchemaId = "context-providers-directory/by-application/vasp-neb-context-provider"; +class VASPNEBInputDataManager extends JSONSchemaDataProvider_1.default { + constructor(config, externalContext) { + super(config, externalContext); + this.name = "input"; + this.domain = "executable"; + this.initMaterialContextMixin(externalContext); + this.initMaterialsContextMixin(externalContext); + this.initMaterialsSetContextMixin(externalContext); + this.initMethodDataContextMixin(externalContext); + this.initWorkflowContextMixin(externalContext); + this.initJobContextMixin(externalContext); + this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); + } + getDefaultData() { + const VASPContexts = this.sortMaterialsByIndexInSet(this.materials).map((material) => { + return new VASPInputDataManager_1.default({}, { ...this.externalContext, material }).getData(); + }); + return { + FIRST_IMAGE: VASPContexts[0].POSCAR_WITH_CONSTRAINTS, + LAST_IMAGE: VASPContexts[VASPContexts.length - 1].POSCAR_WITH_CONSTRAINTS, + INTERMEDIATE_IMAGES: VASPContexts.slice(1, VASPContexts.length - 1).map((data) => { + return data.POSCAR_WITH_CONSTRAINTS; + }), + }; + } +} +exports.default = VASPNEBInputDataManager; +(0, MaterialContextMixin_1.default)(VASPNEBInputDataManager.prototype); +(0, MaterialsContextMixin_1.default)(VASPNEBInputDataManager.prototype); +(0, MaterialsSetContextMixin_1.default)(VASPNEBInputDataManager.prototype); +(0, MethodDataContextMixin_1.default)(VASPNEBInputDataManager.prototype); +(0, WorkflowContextMixin_1.default)(VASPNEBInputDataManager.prototype); +(0, JobContextMixin_1.default)(VASPNEBInputDataManager.prototype); diff --git a/dist/js/enums.d.ts b/dist/js/enums.d.ts index 22ab6b5e..e0fc4983 100644 --- a/dist/js/enums.d.ts +++ b/dist/js/enums.d.ts @@ -40,6 +40,10 @@ export declare const UNIT_TAGS: { hasConvergenceParam: string; hasConvergenceResult: string; }; +export declare enum UnitTag { + hasConvergenceParam = "hasConvergenceParam", + hasConvergenceResult = "hasConvergenceResult" +} export declare const WORKFLOW_STATUSES: { "up-to-date": string; outdated: string; diff --git a/dist/js/enums.js b/dist/js/enums.js index 1e91c562..dc693a7b 100644 --- a/dist/js/enums.js +++ b/dist/js/enums.js @@ -4,7 +4,7 @@ * DO NOT IMPORT ANYTHINGS IN THIS MODULE. */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.WORKFLOW_STATUSES = exports.UNIT_TAGS = exports.UNIT_STATUSES = exports.UnitType = exports.UNIT_TYPES = exports.IO_ID_COLUMN = void 0; +exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.WORKFLOW_STATUSES = exports.UnitTag = exports.UNIT_TAGS = exports.UNIT_STATUSES = exports.UnitType = exports.UNIT_TYPES = exports.IO_ID_COLUMN = void 0; exports.IO_ID_COLUMN = "exabyteId"; exports.UNIT_TYPES = { // not currently used @@ -46,6 +46,11 @@ exports.UNIT_TAGS = { hasConvergenceParam: "hasConvergenceParam", hasConvergenceResult: "hasConvergenceResult", }; +var UnitTag; +(function (UnitTag) { + UnitTag["hasConvergenceParam"] = "hasConvergenceParam"; + UnitTag["hasConvergenceResult"] = "hasConvergenceResult"; +})(UnitTag || (exports.UnitTag = UnitTag = {})); exports.WORKFLOW_STATUSES = { "up-to-date": "up-to-date", outdated: "outdated", diff --git a/dist/js/generated/SubworkflowSchemaMixin.js b/dist/js/generated/SubworkflowSchemaMixin.js index 859e8d5f..638d4d65 100644 --- a/dist/js/generated/SubworkflowSchemaMixin.js +++ b/dist/js/generated/SubworkflowSchemaMixin.js @@ -5,7 +5,7 @@ function subworkflowSchemaMixin(item) { // @ts-expect-error const properties = { get properties() { - return this.prop("properties"); + return this.requiredProp("properties"); }, set properties(value) { this.setProp("properties", value); diff --git a/dist/js/generated/WorkflowSchemaMixin.d.ts b/dist/js/generated/WorkflowSchemaMixin.d.ts new file mode 100644 index 00000000..6e481558 --- /dev/null +++ b/dist/js/generated/WorkflowSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { BaseWorkflowSchema } from "@mat3ra/esse/dist/js/types"; +export type WorkflowSchemaMixin = BaseWorkflowSchema; +export type WorkflowInMemoryEntity = InMemoryEntity & WorkflowSchemaMixin; +export declare function workflowSchemaMixin(item: InMemoryEntity): asserts item is T & WorkflowSchemaMixin; diff --git a/dist/js/generated/WorkflowSchemaMixin.js b/dist/js/generated/WorkflowSchemaMixin.js new file mode 100644 index 00000000..c026e11f --- /dev/null +++ b/dist/js/generated/WorkflowSchemaMixin.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.workflowSchemaMixin = workflowSchemaMixin; +function workflowSchemaMixin(item) { + // @ts-expect-error + const properties = { + get properties() { + return this.requiredProp("properties"); + }, + set properties(value) { + this.setProp("properties", value); + }, + get isUsingDataset() { + return this.prop("isUsingDataset"); + }, + set isUsingDataset(value) { + this.setProp("isUsingDataset", value); + }, + get subworkflows() { + return this.requiredProp("subworkflows"); + }, + set subworkflows(value) { + this.setProp("subworkflows", value); + }, + get units() { + return this.requiredProp("units"); + }, + set units(value) { + this.setProp("units", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index e228fc47..d30033bd 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -23,4 +23,4 @@ import { ReduceUnit } from "./units"; import { SubworkflowUnit } from "./units"; import { defaultMapConfig } from "./units/MapUnit"; import { globalSettings } from "./context/providers/settings"; -export { Subworkflow, Workflow, createWorkflow, createWorkflows, createWorkflowConfigs, createSubworkflowByName, UnitFactory, builders, UNIT_TYPES, UNIT_STATUSES, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, BaseUnit, ExecutionUnit, AssertionUnit, AssignmentUnit, ConditionUnit, IOUnit, MapUnit, ProcessingUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, wodeProviders, PointsPathFormDataProvider, globalSettings }; +export { Subworkflow, Workflow, createWorkflow, createWorkflows, createWorkflowConfigs, createSubworkflowByName, UnitFactory, builders, UNIT_TYPES, UNIT_STATUSES, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, BaseUnit, ExecutionUnit, AssertionUnit, AssignmentUnit, ConditionUnit, IOUnit, MapUnit, ProcessingUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, PointsPathFormDataProvider, globalSettings }; diff --git a/dist/js/index.js b/dist/js/index.js index 466e746a..7dc8baac 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -1,8 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.globalSettings = exports.PointsPathFormDataProvider = exports.wodeProviders = exports.defaultMapConfig = exports.SubworkflowUnit = exports.ReduceUnit = exports.ProcessingUnit = exports.MapUnit = exports.IOUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.ExecutionUnit = exports.BaseUnit = exports.WORKFLOW_STATUSES = exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.UNIT_STATUSES = exports.UNIT_TYPES = exports.builders = exports.UnitFactory = exports.createSubworkflowByName = exports.createWorkflowConfigs = exports.createWorkflows = exports.createWorkflow = exports.Workflow = exports.Subworkflow = void 0; -const providers_1 = require("./context/providers"); -Object.defineProperty(exports, "wodeProviders", { enumerable: true, get: function () { return providers_1.wodeProviders; } }); +exports.globalSettings = exports.PointsPathFormDataProvider = exports.defaultMapConfig = exports.SubworkflowUnit = exports.ReduceUnit = exports.ProcessingUnit = exports.MapUnit = exports.IOUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.ExecutionUnit = exports.BaseUnit = exports.WORKFLOW_STATUSES = exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.UNIT_STATUSES = exports.UNIT_TYPES = exports.builders = exports.UnitFactory = exports.createSubworkflowByName = exports.createWorkflowConfigs = exports.createWorkflows = exports.createWorkflow = exports.Workflow = exports.Subworkflow = void 0; const PointsPathFormDataProvider_1 = require("./context/providers/PointsPath/PointsPathFormDataProvider"); Object.defineProperty(exports, "PointsPathFormDataProvider", { enumerable: true, get: function () { return PointsPathFormDataProvider_1.PointsPathFormDataProvider; } }); const settings_1 = require("./context/providers/settings"); diff --git a/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts b/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts new file mode 100644 index 00000000..5ca3cdce --- /dev/null +++ b/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts @@ -0,0 +1,28 @@ +interface ConvergenceParameterProps { + initialValue: number | [number, number, number]; +} +export type ConvergenceParameterConfig = ConvergenceParameterProps & { + increment?: string | number; +}; +export type UnitContext = { + data: { + dimensions: [string, string, string]; + shifts: [0, 0, 0]; + }; + name: "kgrid"; + isEdited: true; + isUsingJinjaVariables: true; +}; +export default abstract class ConvergenceParameter { + abstract readonly name: "N_k" | "N_k_nonuniform"; + abstract readonly finalValue: string; + abstract readonly increment: string; + abstract readonly unitContext: UnitContext; + readonly initialValue: string; + constructor({ initialValue }: ConvergenceParameterProps); + useVariablesFromUnitContext(_flowchartId: string): { + scope: string; + name: string; + }[]; +} +export {}; diff --git a/dist/js/subworkflows/convergence/ConvergenceParameter.js b/dist/js/subworkflows/convergence/ConvergenceParameter.js new file mode 100644 index 00000000..1f776252 --- /dev/null +++ b/dist/js/subworkflows/convergence/ConvergenceParameter.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class ConvergenceParameter { + constructor({ initialValue }) { + this.initialValue = + typeof initialValue === "string" ? initialValue : JSON.stringify(initialValue); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this + useVariablesFromUnitContext(_flowchartId) { + return []; + } +} +exports.default = ConvergenceParameter; diff --git a/dist/js/subworkflows/convergence/NonUniformKGridConvergence.d.ts b/dist/js/subworkflows/convergence/NonUniformKGridConvergence.d.ts new file mode 100644 index 00000000..786e70a4 --- /dev/null +++ b/dist/js/subworkflows/convergence/NonUniformKGridConvergence.d.ts @@ -0,0 +1,12 @@ +import ConvergenceParameter, { type ConvergenceParameterConfig, type UnitContext } from "./ConvergenceParameter"; +export default class NonUniformKGridConvergence extends ConvergenceParameter { + readonly increment: string; + readonly name: "N_k_nonuniform"; + readonly finalValue: "N_k_nonuniform"; + readonly unitContext: UnitContext; + constructor({ initialValue, increment }: ConvergenceParameterConfig); + useVariablesFromUnitContext(flowchartId: string): { + scope: string; + name: string; + }[]; +} diff --git a/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js b/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js new file mode 100644 index 00000000..ca2fac3c --- /dev/null +++ b/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js @@ -0,0 +1,33 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ConvergenceParameter_1 = __importDefault(require("./ConvergenceParameter")); +class NonUniformKGridConvergence extends ConvergenceParameter_1.default { + constructor({ initialValue, increment }) { + super({ initialValue }); + this.name = "N_k_nonuniform"; + this.finalValue = "N_k_nonuniform"; + this.unitContext = { + data: { + dimensions: [`{{${this.name}[0]}}`, `{{${this.name}[1]}}`, `{{${this.name}[2]}}`], + shifts: [0, 0, 0], + }, + name: "kgrid", + isEdited: true, + isUsingJinjaVariables: true, + }; + this.increment = `[${this.initialValue}[i] + math.floor(iteration * ${increment || ""} * float(context['kgrid']['reciprocalVectorRatios'][i])) for i in range(3)]`; + } + // eslint-disable-next-line class-methods-use-this + useVariablesFromUnitContext(flowchartId) { + return [ + { + scope: flowchartId, + name: "context", + }, + ]; + } +} +exports.default = NonUniformKGridConvergence; diff --git a/dist/js/subworkflows/convergence/UniformKGridConvergence.d.ts b/dist/js/subworkflows/convergence/UniformKGridConvergence.d.ts new file mode 100644 index 00000000..6247faed --- /dev/null +++ b/dist/js/subworkflows/convergence/UniformKGridConvergence.d.ts @@ -0,0 +1,8 @@ +import ConvergenceParameter, { type ConvergenceParameterConfig, type UnitContext } from "./ConvergenceParameter"; +export default class UniformKGridConvergence extends ConvergenceParameter { + readonly increment: string; + readonly name: "N_k"; + readonly finalValue: "N_k + 0"; + readonly unitContext: UnitContext; + constructor({ initialValue, increment }: ConvergenceParameterConfig); +} diff --git a/dist/js/subworkflows/convergence/UniformKGridConvergence.js b/dist/js/subworkflows/convergence/UniformKGridConvergence.js new file mode 100644 index 00000000..8e886a45 --- /dev/null +++ b/dist/js/subworkflows/convergence/UniformKGridConvergence.js @@ -0,0 +1,24 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ConvergenceParameter_1 = __importDefault(require("./ConvergenceParameter")); +class UniformKGridConvergence extends ConvergenceParameter_1.default { + constructor({ initialValue, increment }) { + super({ initialValue }); + this.name = "N_k"; + this.finalValue = `${this.name} + 0`; + this.unitContext = { + name: "kgrid", + data: { + dimensions: [`{{${this.name}}}`, `{{${this.name}}}`, `{{${this.name}}}`], + shifts: [0, 0, 0], + }, + isEdited: true, + isUsingJinjaVariables: true, + }; + this.increment = `${this.name} + ${increment || ""}`; + } +} +exports.default = UniformKGridConvergence; diff --git a/dist/js/subworkflows/convergence/factory.d.ts b/dist/js/subworkflows/convergence/factory.d.ts index 067badb5..4415c167 100644 --- a/dist/js/subworkflows/convergence/factory.d.ts +++ b/dist/js/subworkflows/convergence/factory.d.ts @@ -1,6 +1,8 @@ -export function createConvergenceParameter({ name, initialValue, increment }: { - name: any; - initialValue: any; - increment: any; -}): ConvergenceParameter; -import { ConvergenceParameter } from "./parameter"; +import { type ConvergenceParameterConfig } from "./ConvergenceParameter"; +import NonUniformKGridConvergence from "./NonUniformKGridConvergence"; +import UniformKGridConvergence from "./UniformKGridConvergence"; +type FactoryParams = ConvergenceParameterConfig & { + name: "N_k" | "N_k_nonuniform"; +}; +export declare function createConvergenceParameter({ name, ...params }: FactoryParams): NonUniformKGridConvergence | UniformKGridConvergence; +export {}; diff --git a/dist/js/subworkflows/convergence/factory.js b/dist/js/subworkflows/convergence/factory.js index c016fd8f..b3e90d3a 100644 --- a/dist/js/subworkflows/convergence/factory.js +++ b/dist/js/subworkflows/convergence/factory.js @@ -1,16 +1,18 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.createConvergenceParameter = createConvergenceParameter; -const non_uniform_kgrid_1 = require("./non_uniform_kgrid"); -const parameter_1 = require("./parameter"); -const uniform_kgrid_1 = require("./uniform_kgrid"); -function createConvergenceParameter({ name, initialValue, increment }) { +const NonUniformKGridConvergence_1 = __importDefault(require("./NonUniformKGridConvergence")); +const UniformKGridConvergence_1 = __importDefault(require("./UniformKGridConvergence")); +function createConvergenceParameter({ name, ...params }) { switch (name) { case "N_k": - return new uniform_kgrid_1.UniformKGridConvergence({ name, initialValue, increment }); + return new UniformKGridConvergence_1.default(params); case "N_k_nonuniform": - return new non_uniform_kgrid_1.NonUniformKGridConvergence({ name, initialValue, increment }); + return new NonUniformKGridConvergence_1.default(params); default: - return new parameter_1.ConvergenceParameter({ name, initialValue, increment }); + throw new Error(`Invalid convergence parameter name: ${name}`); } } diff --git a/dist/js/subworkflows/subworkflow.d.ts b/dist/js/subworkflows/subworkflow.d.ts index 0faa7740..d71d5041 100644 --- a/dist/js/subworkflows/subworkflow.d.ts +++ b/dist/js/subworkflows/subworkflow.d.ts @@ -3,90 +3,76 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { ApplicationSchema, BaseMethod, BaseModel } from "@mat3ra/esse/dist/js/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { ApplicationSchema, BaseMethod, BaseModel, JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; import { type Method, Model, ModelFactory } from "@mat3ra/mode"; import { type SubworkflowSchemaMixin } from "../generated/SubworkflowSchemaMixin"; -import { type BaseUnit, UnitFactory } from "../units"; +import { SubworkflowUnit } from "../units"; +import type { AnySubworkflowUnit } from "../units/factory"; +type ConvergenceConfig = { + parameter: "N_k" | "N_k_nonuniform"; + parameterInitial: number | [number, number, number]; + parameterIncrement: number; + result: string; + resultInitial: number; + condition: string; + operator: string; + tolerance: number; + maxOccurrences: number; +}; type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; declare const Subworkflow_base: Base; -export declare class Subworkflow extends Subworkflow_base { +export declare class Subworkflow extends Subworkflow_base implements SubworkflowSchema { static usePredefinedIds: boolean; private ModelFactory; - private UnitFactory; private applicationInstance; - private modelInstance; + modelInstance: Model; private unitsInstances; - constructor(config: SubworkflowSchemaMixin, _ModelFactory?: typeof ModelFactory, _UnitFactory?: typeof UnitFactory); + static createDefault: () => Subworkflow; + constructor(config: SubworkflowSchema, _ModelFactory?: typeof ModelFactory); static generateSubworkflowId(name: string, application?: ApplicationSchema, model?: BaseModel, method?: BaseMethod): any; static get defaultConfig(): { _id: any; name: string; application: import("node_modules/@mat3ra/ade/dist/js/applicationMixin").DefaultApplicationConfig; - model: import("@mat3ra/mode/dist/js/types").ModelConfig; + model: { + method: { + readonly type: "pseudopotential"; + readonly subtype: "us"; + }; + type: "dft"; + subtype: "gga"; + }; properties: never[]; units: never[]; }; - getAsUnit(): BaseUnit; - static fromArguments(application: Application, model: Model, method: Method, name: string, units?: BaseUnit[], config?: {}, Cls?: typeof Subworkflow): Subworkflow; + getAsUnit(): SubworkflowUnit; + static fromArguments(application: Application, model: Model, method: Method, name: string, units?: AnySubworkflowUnit[], config?: {}): Subworkflow; setApplication(application: Application): void; setModel(model: Model): void; - setUnits(units: BaseUnit[]): void; - toJSON(exclude?: string[]): { - compute?: { - queue: "D" | "OR" | "OF" | "OFplus" | "SR" | "SF" | "SFplus" | "GPOF" | "GP2OF" | "GP4OF" | "GPSF" | "GP2SF" | "GP4SF" | "OR4" | "OR8" | "OR16" | "SR4" | "SR8" | "SR16" | "GOF" | "G4OF" | "G8OF" | "GSF" | "G4SF" | "G8SF"; - nodes: number; - ppn: number; - timeLimit: string; - timeLimitType?: "per single attempt" | "compound"; - isRestartable?: boolean; - notify?: string; - email?: string; - maxCPU?: number; - arguments?: { - nimage?: number; - npools?: number; - nband?: number; - ntg?: number; - ndiag?: number; - }; - cluster?: { - fqdn?: string; - jid?: string; - }; - errors?: { - domain?: "rupy" | "alfred" | "celim" | "webapp"; - reason?: string; - message?: string; - traceback?: string; - }[]; - excludeFilesPattern?: string; - } | undefined; - model: Record; - units: import("@mat3ra/esse/dist/js/esse/types").AnyObject[]; - }; - get contextProviders(): any[]; - /** - * Extracts a reduced version of the entity config to be stored inside redux state. - * This is used to track changes to context, monitors, properties, etc. when multiple materials are in state. - */ - extractReducedExternalDependentConfig(): { - id: string; - context: any; - units: any[]; - }; - /** - * Applies the reduced config obtained from extractReducedExternalDependentConfig on the entity. - */ - applyReducedExternalDependentConfig(config: any): void; - get contextFromAssignmentUnits(): {}; + setUnits(units: AnySubworkflowUnit[]): void; + toJSON(exclude?: string[]): SubworkflowSchema & AnyObject; + get contextProviders(): import("../context/providers/PlanewaveCutoffDataManager").default[]; + private getContextFromAssignmentUnits; render(context?: {}): void; /** * TODO: reuse workflow function instead */ - addUnit(unit: BaseUnit, index?: number): void; + addUnit(unit: AnySubworkflowUnit, index?: number): void; removeUnit(flowchartId: string): void; - get properties(): any[]; - getUnit(flowchartId: string): { + get properties(): string[]; + getUnit(flowchartId: string): AnySubworkflowUnit | undefined; + unitIndex(flowchartId: string): number; + replaceUnit(index: number, unit: AnySubworkflowUnit): void; + setIsDraft(bool: boolean): void; + get methodData(): {} | undefined; + /** + * @summary Calculates hash of the subworkflow. Meaningful fields are units, app and model. + * units must be sorted topologically before hashing (already sorted). + */ + calculateHash(): string; + private calculateModelHash; + findUnitById(id: string): { _id?: string; slug?: string; systemName?: string; @@ -362,399 +348,311 @@ export declare class Subworkflow extends Subworkflow_base { applicationVersion?: string; executableName: string; contextProviders: { - name: string; + name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; }[]; content: string; }; rendered: string; isManuallyChanged: boolean; }[]; - context?: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; + context?: ({ + name: "input"; + data: { + CHARGE: number; + MULT: number; + BASIS: string; + NAT: number; + NTYP: number; + ATOMIC_POSITIONS: string; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + ATOMIC_SPECIES: string; + FUNCTIONAL: string; + CARTESIAN: boolean; + } | { + IBRAV: number; + RESTART_MODE: "from_scratch" | "restart"; + ATOMIC_SPECIES: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + ATOMIC_SPECIES_WITH_LABELS: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + NAT: number; + NTYP: number; + NTYP_WITH_LABELS: number; + ATOMIC_POSITIONS?: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: string; + CELL_PARAMETERS: { + v1?: [number, number, number]; + v2?: [number, number, number]; + v3?: [number, number, number]; + }; + FIRST_IMAGE: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + LAST_IMAGE: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + INTERMEDIATE_IMAGES: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[][]; + } | { + IBRAV: number; + RESTART_MODE: "from_scratch" | "restart"; + ATOMIC_SPECIES: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + ATOMIC_SPECIES_WITH_LABELS: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + NAT: number; + NTYP: number; + NTYP_WITH_LABELS: number; + ATOMIC_POSITIONS: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + CELL_PARAMETERS: { + v1?: [number, number, number]; + v2?: [number, number, number]; + v3?: [number, number, number]; + }; + } | { + POSCAR: string; + POSCAR_WITH_CONSTRAINTS: string; + } | { + FIRST_IMAGE: string; + LAST_IMAGE: string; + INTERMEDIATE_IMAGES: string[]; + }; + extraData: { + materialHash?: string; + }; isEdited: boolean; - data: {}; - extraData?: {}; - }[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assignment"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - scope?: string; - input?: { - scope: string; - name: string; - }[]; - operand: string; - value: string | boolean | number; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "processing"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - operation: string; - operationType: string; - inputData: { - [k: string]: unknown; - }; - } | undefined; - unitIndex(flowchartId: string): number; - replaceUnit(index: number, unit: BaseUnit): void; - get scopeVariables(): string[]; - get scalarResults(): string[]; - get isMultiMaterial(): boolean; - get isDraft(): boolean; - setIsDraft(bool: boolean): void; - get methodData(): any; - /** - * @summary Calculates hash of the subworkflow. Meaningful fields are units, app and model. - * units must be sorted topologically before hashing (already sorted). - */ - calculateHash(): string; - _calculateModelHash(): string; - findUnitById(id: string): { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "io"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; - input: ({ - type: "db_ids"; - ids: string[]; - } | { - type: "db_collection"; - collection: string; - draft: boolean; - } | { - type: "object_storage"; - objectData: { - CONTAINER?: string; - NAME?: string; - PROVIDER?: string; - REGION?: string; - SIZE?: number; - TIMESTAMP?: string; - }; - overwrite?: boolean; - pathname?: string; - basename?: string; - filetype?: string; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "reduce"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - mapFlowchartId: string; - input: { - operation: string; - arguments: string[]; - }[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "condition"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - input: { - scope: string; - name: string; - }[]; - statement: string; - then: string; - else: string; - maxOccurrences: number; - throwException?: boolean; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assertion"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - statement: string; - errorMessage?: string; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "execution"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - application: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - shortName: string; - summary: string; - version: string; - build: string; - hasAdvancedComputeOptions?: boolean; - isLicensed?: boolean; - }; - executable?: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - applicationId: string[]; - hasAdvancedComputeOptions?: boolean; - }; - flavor?: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - executableId: string; - executableName?: string; - applicationName?: string; - input: { - templateId?: string; - templateName?: string; - name?: string; - }[]; - supportedApplicationVersions?: string[]; - }; - input: { - template: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - applicationName: string; - applicationVersion?: string; - executableName: string; - contextProviders: { - name: string; - }[]; - content: string; - }; - rendered: string; - isManuallyChanged: boolean; - }[]; - context?: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; - isEdited: boolean; - data: {}; - extraData?: {}; - }[]; + } | { + name: "cutoffs"; + data: { + wavefunction?: number; + density?: number; + }; + isEdited: boolean; + } | { + name: "kgrid" | "qgrid" | "igrid"; + data: { + dimensions: [number, number, number]; + shifts?: [number, number, number]; + reciprocalVectorRatios?: [number, number, number]; + gridMetricType: "KPPRA" | "spacing"; + gridMetricValue: number; + preferGridMetric?: boolean; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "qpath" | "ipath" | "kpath" | "explicitKPath" | "explicitKPath2PIBA"; + data: [{ + point?: string; + steps: number; + coordinates: number[]; + }, ...{ + point?: string; + steps: number; + coordinates: number[]; + }[]]; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "hubbard_j"; + data: [{ + paramType?: "U" | "J" | "B" | "E2" | "E3"; + atomicSpecies?: string; + atomicOrbital?: string; + value?: number; + }, ...{ + paramType?: "U" | "J" | "B" | "E2" | "E3"; + atomicSpecies?: string; + atomicOrbital?: string; + value?: number; + }[]]; + isEdited: boolean; + } | { + name: "hubbard_u"; + data: { + atomicSpecies?: string; + atomicOrbital?: string; + hubbardUValue?: number; + }[]; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "hubbard_v"; + data: [{ + atomicSpecies?: string; + siteIndex?: number; + atomicOrbital?: string; + atomicSpecies2?: string; + siteIndex2?: number; + atomicOrbital2?: string; + hubbardVValue?: number; + }, ...{ + atomicSpecies?: string; + siteIndex?: number; + atomicOrbital?: string; + atomicSpecies2?: string; + siteIndex2?: number; + atomicOrbital2?: string; + hubbardVValue?: number; + }[]]; + isEdited: boolean; + } | { + name: "hubbard_legacy"; + data: [{ + atomicSpecies?: string; + atomicSpeciesIndex?: number; + hubbardUValue?: number; + }, ...{ + atomicSpecies?: string; + atomicSpeciesIndex?: number; + hubbardUValue?: number; + }[]]; + isEdited: boolean; + } | { + name: "neb"; + data: { + nImages?: number; + }; + isEdited: boolean; + } | { + name: "boundaryConditions"; + data: { + type?: "pbc" | "bc1" | "bc2" | "bc3"; + offset?: number; + electricField?: number; + targetFermiEnergy?: number; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "mlSettings"; + data: { + target_column_name?: string; + problem_category?: "regression" | "classification" | "clustering"; + }; + isEdited: boolean; + } | { + name: "mlTrainTestSplit"; + data: { + fraction_held_as_test_set?: number; + }; + isEdited: boolean; + } | { + name: "dynamics"; + data: { + numberOfSteps?: number; + timeStep?: number; + electronMass?: number; + temperature?: number; + }; + isEdited: boolean; + } | { + name: "collinearMagnetization"; + data: { + startingMagnetization: { + atomicSpecies: string; + value: number; + index: number; + }[]; + isTotalMagnetization: boolean; + totalMagnetization: number; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "nonCollinearMagnetization"; + data: { + isExistingChargeDensity?: boolean; + isStartingMagnetization?: boolean; + startingMagnetization?: { + index?: number; + atomicSpecies?: string; + value?: number; + }[]; + isArbitrarySpinAngle?: boolean; + isArbitrarySpinDirection?: boolean; + lforcet?: boolean; + spinAngles?: { + index?: number; + atomicSpecies?: string; + angle1?: number; + angle2?: number; + }[]; + isConstrainedMagnetization?: boolean; + constrainedMagnetization?: { + constrainType?: "none" | "total" | "atomic" | "total direction" | "atomic direction"; + lambda?: number; + }; + isFixedMagnetization?: boolean; + fixedMagnetization?: { + x?: number; + y?: number; + z?: number; + }; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + })[]; } | { _id?: string; slug?: string; @@ -833,372 +731,15 @@ export declare class Subworkflow extends Subworkflow_base { }; } | undefined; findUnitKeyById(id: string): string; - findUnitWithTag(tag: string): { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "io"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; - input: ({ - type: "db_ids"; - ids: string[]; - } | { - type: "db_collection"; - collection: string; - draft: boolean; - } | { - type: "object_storage"; - objectData: { - CONTAINER?: string; - NAME?: string; - PROVIDER?: string; - REGION?: string; - SIZE?: number; - TIMESTAMP?: string; - }; - overwrite?: boolean; - pathname?: string; - basename?: string; - filetype?: string; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "reduce"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - mapFlowchartId: string; - input: { - operation: string; - arguments: string[]; - }[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "condition"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - input: { - scope: string; - name: string; - }[]; - statement: string; - then: string; - else: string; - maxOccurrences: number; - throwException?: boolean; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assertion"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - statement: string; - errorMessage?: string; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "execution"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - application: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - shortName: string; - summary: string; - version: string; - build: string; - hasAdvancedComputeOptions?: boolean; - isLicensed?: boolean; - }; - executable?: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - applicationId: string[]; - hasAdvancedComputeOptions?: boolean; - }; - flavor?: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - executableId: string; - executableName?: string; - applicationName?: string; - input: { - templateId?: string; - templateName?: string; - name?: string; - }[]; - supportedApplicationVersions?: string[]; - }; - input: { - template: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - applicationName: string; - applicationVersion?: string; - executableName: string; - contextProviders: { - name: string; - }[]; - content: string; - }; - rendered: string; - isManuallyChanged: boolean; - }[]; - context?: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; - isEdited: boolean; - data: {}; - extraData?: {}; - }[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assignment"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - scope?: string; - input?: { - scope: string; - name: string; - }[]; - operand: string; - value: string | boolean | number; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "processing"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - operation: string; - operationType: string; - inputData: { - [k: string]: unknown; - }; - } | undefined; + private findUnitWithTag; get hasConvergence(): boolean; + get convergenceParam(): string | undefined; + get convergenceResult(): string | undefined; + convergenceSeries(scopeTrack: JobSchema["scopeTrack"]): { + x: number; + param: any; + y: any; + }[]; + addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, }: ConvergenceConfig): void; } export {}; diff --git a/dist/js/subworkflows/subworkflow.js b/dist/js/subworkflows/subworkflow.js index 418fbdf8..41525c45 100644 --- a/dist/js/subworkflows/subworkflow.js +++ b/dist/js/subworkflows/subworkflow.js @@ -10,25 +10,22 @@ const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/Defaultab const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const mode_1 = require("@mat3ra/mode"); const utils_1 = require("@mat3ra/utils"); -const lodash_1 = __importDefault(require("lodash")); const underscore_1 = __importDefault(require("underscore")); const enums_1 = require("../enums"); const SubworkflowSchemaMixin_1 = require("../generated/SubworkflowSchemaMixin"); const units_1 = require("../units"); const utils_2 = require("../utils"); +const factory_1 = require("./convergence/factory"); class Subworkflow extends entity_1.InMemoryEntity { - constructor(config, _ModelFactory = mode_1.ModelFactory, _UnitFactory = units_1.UnitFactory) { + constructor(config, _ModelFactory = mode_1.ModelFactory) { super(config); this.ModelFactory = _ModelFactory; - this.UnitFactory = _UnitFactory; this.applicationInstance = new ade_1.Application(this.application); this.modelInstance = this.ModelFactory.create({ ...this.model, application: this.application, }); - this.unitsInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.units || []).map((cfg) => { - return this.UnitFactory.create({ ...cfg, application: this.application }); - })); + this.unitsInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.units).map((cfg) => units_1.UnitFactory.createInSubworkflow(cfg))); } static generateSubworkflowId(name, application, model, method) { const appName = (application === null || application === void 0 ? void 0 : application.name) || ""; @@ -50,36 +47,42 @@ class Subworkflow extends entity_1.InMemoryEntity { units: [], }; } - /* - * @returns {SubworkflowUnit} - */ getAsUnit() { - return this.UnitFactory.create({ + return new units_1.SubworkflowUnit({ type: enums_1.UnitType.subworkflow, _id: this.id, name: this.name, + preProcessors: [], + postProcessors: [], + monitors: [], + results: [], + flowchartId: "", }); } /* * @summary Used to generate initial application tree, therefore omit setting application. */ - static fromArguments(application, model, method, name, units = [], config = {}, Cls = Subworkflow) { + static fromArguments(application, model, method, name, units = [], config = {}) { var _a; const nameForIdGeneration = ((_a = config.attributes) === null || _a === void 0 ? void 0 : _a.name) || name; const { functions, attributes, ...cleanConfig } = config; // Set the method on the model so it can be properly serialized model.setMethod(method); - return new Cls({ + return new Subworkflow({ ...cleanConfig, - _id: Cls.generateSubworkflowId(nameForIdGeneration, application, model, method), + _id: Subworkflow.generateSubworkflowId(nameForIdGeneration, application, model, method), name, application: application.toJSON(), - properties: lodash_1.default.sortedUniq(lodash_1.default.flatten(units.filter((x) => x.resultNames).map((x) => x.resultNames))), + properties: Array.from(new Set(units + .filter((x) => x.resultNames) + .map((x) => x.resultNames) + .flat() + .sort())), model: { ...model.toJSON(), method: method.toJSON(), }, - units: units.map((unit) => (unit.toJSON ? unit.toJSON() : unit)), + units: units.map((unit) => unit.toJSON()), }); } setApplication(application) { @@ -93,9 +96,11 @@ class Subworkflow extends entity_1.InMemoryEntity { } else { // propagate new application version to all units - this.units - .filter((unit) => typeof unit.setApplication === "function") - .forEach((unit) => unit.setApplication(this.applicationInstance, true)); + this.unitsInstances + .filter((unit) => unit.type === enums_1.UnitType.execution) + .forEach((unit) => { + unit.setApplication({ application }); + }); } this.application = application.toJSON(); // set model to the default one for the application selected @@ -112,117 +117,96 @@ class Subworkflow extends entity_1.InMemoryEntity { toJSON(exclude = []) { return { ...super.toJSON(exclude), + name: this.name, + properties: this.properties, + application: this.application, model: this.modelInstance.toJSON(), units: this.unitsInstances.map((x) => x.toJSON()), ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation }; } get contextProviders() { - const unitsWithContextProviders = this.units.filter((u) => u.allContextProviders && u.allContextProviders.length); - const allContextProviders = underscore_1.default.flatten(unitsWithContextProviders.map((u) => u.allContextProviders)); - const subworkflowContextProviders = allContextProviders.filter((p) => p.entityName === "subworkflow"); + const subworkflowContextProviders = this.unitsInstances + .filter((u) => u.type === enums_1.UnitType.execution) + .filter((u) => u.allContextProviders.length) + .map((u) => u.allContextProviders) + .flat() + .filter((p) => p.entityName === "subworkflow"); return underscore_1.default.uniq(subworkflowContextProviders, (p) => p.name); } - /** - * Extracts a reduced version of the entity config to be stored inside redux state. - * This is used to track changes to context, monitors, properties, etc. when multiple materials are in state. - */ - extractReducedExternalDependentConfig() { - return { - id: this.id, - context: this.context || {}, - units: this.units.map((unit) => unit.extractReducedExternalDependentConfig()), - }; - } - /** - * Applies the reduced config obtained from extractReducedExternalDependentConfig on the entity. - */ - applyReducedExternalDependentConfig(config) { - this.context = config.context || {}; - this.units.forEach((unit) => { - const unitConfig = (config.units || []).find((c) => c.id === unit.flowchartId); - unit.applyReducedExternalDependentConfig(unitConfig || {}); - }); - } - get contextFromAssignmentUnits() { - const ctx = {}; - this.units - .filter((u) => u.type === enums_1.UNIT_TYPES.assignment) - .forEach((u) => { - ctx[u.operand] = u.value; - }); - return ctx; + getContextFromAssignmentUnits() { + return this.unitsInstances + .filter((u) => u.type === enums_1.UnitType.assignment) + .reduce((acc, u) => { + return { + ...acc, + [u.operand]: u.value, + }; + }, {}); } render(context = {}) { const ctx = { ...context, - application: this.application, - methodData: this.model.Method.data, - model: this.model.toJSON(), + application: this.applicationInstance, + methodData: this.modelInstance.Method.data, + model: this.modelInstance.toJSON(), // context below is assembled from context providers and passed to units to override theirs - ...this.context, - subworkflowContext: this.contextFromAssignmentUnits, + // ...this.context, + subworkflowContext: this.getContextFromAssignmentUnits(), }; - this.units.forEach((u) => u.render(ctx)); + this.unitsInstances.forEach((u) => { + if (u.type === enums_1.UnitType.execution) { + u.render({}, ctx); + } + }); } /** * TODO: reuse workflow function instead */ addUnit(unit, index = -1) { - const { units } = this; - if (units.length === 0) { + const { unitsInstances } = this; + if (unitsInstances.length === 0) { unit.head = true; this.setUnits([unit]); } else { - if (index >= 0) - units.splice(index, 0, unit); - else - units.push(unit); - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(units))); + if (index >= 0) { + unitsInstances.splice(index, 0, unit); + } + else { + unitsInstances.push(unit); + } + this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(unitsInstances))); } } removeUnit(flowchartId) { - const previousUnit = this.units.find((x) => x.next === flowchartId); - if (previousUnit) + const previousUnit = this.unitsInstances.find((x) => x.next === flowchartId); + if (previousUnit) { previousUnit.unsetProp("next"); + } // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.units.filter((x) => x.flowchartId !== flowchartId)))); + this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId)))); } get properties() { - return lodash_1.default.flatten(this.units.map((x) => x.resultNames)); + return this.unitsInstances.map((x) => x.resultNames).flat(); } getUnit(flowchartId) { - return this.units.find((x) => x.flowchartId === flowchartId); + return this.unitsInstances.find((x) => x.flowchartId === flowchartId); } unitIndex(flowchartId) { - return lodash_1.default.findIndex(this.units, (unit) => { + return this.unitsInstances.findIndex((unit) => { return unit.flowchartId === flowchartId; }); } replaceUnit(index, unit) { - this.units[index] = unit; - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.units))); - } - // eslint-disable-next-line class-methods-use-this - get scopeVariables() { - return ["N_k", "N_k_nonuniform"]; - } - // eslint-disable-next-line class-methods-use-this - get scalarResults() { - return ["total_energy", "pressure"]; - } - get isMultiMaterial() { - return this.prop("isMultiMaterial", false); - } - get isDraft() { - return this.prop("isDraft", false); + this.unitsInstances[index] = unit; + this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.unitsInstances))); } setIsDraft(bool) { - return this.setProp("isDraft", bool); + this.isDraft = bool; } get methodData() { - return this.model.Method.data; + return this.modelInstance.Method.data; } /** * @summary Calculates hash of the subworkflow. Meaningful fields are units, app and model. @@ -232,16 +216,17 @@ class Subworkflow extends entity_1.InMemoryEntity { const config = this.toJSON(); const meaningfulFields = { application: utils_1.Utils.specific.removeTimestampableKeysFromConfig(config.application), - model: this._calculateModelHash(), - units: underscore_1.default.map(this.units, (u) => u.calculateHash()).join(), + model: this.calculateModelHash(), + units: underscore_1.default.map(this.unitsInstances, (u) => u.calculateHash()).join(), }; return utils_1.Utils.hash.calculateHashFromObject(meaningfulFields); } - _calculateModelHash() { + calculateModelHash() { const { model } = this.toJSON(); // ignore empty data object - if (this.model.Method.omitInHashCalculation) + if (this.modelInstance.Method.omitInHashCalculation) { delete model.method.data; + } return utils_1.Utils.hash.calculateHashFromObject(model); } findUnitById(id) { @@ -253,10 +238,171 @@ class Subworkflow extends entity_1.InMemoryEntity { return `units.${index}`; } findUnitWithTag(tag) { - return this.units.find((unit) => unit.tags.includes(tag)); + return this.units + .filter((unit) => unit.type === enums_1.UnitType.assignment) + .find((unit) => { var _a; return (_a = unit.tags) === null || _a === void 0 ? void 0 : _a.includes(tag); }); } get hasConvergence() { - return !!this.convergenceParam && !!this.convergenceResult && !!this.convergenceSeries; + return !!this.convergenceParam && !!this.convergenceResult; + } + get convergenceParam() { + var _a; + return (_a = this.findUnitWithTag(enums_1.UnitTag.hasConvergenceParam)) === null || _a === void 0 ? void 0 : _a.operand; + } + get convergenceResult() { + var _a; + return (_a = this.findUnitWithTag(enums_1.UnitTag.hasConvergenceResult)) === null || _a === void 0 ? void 0 : _a.operand; + } + convergenceSeries(scopeTrack) { + if (!this.hasConvergence || !(scopeTrack === null || scopeTrack === void 0 ? void 0 : scopeTrack.length)) { + return []; + } + let lastResult; + return scopeTrack + .map((scopeItem, i) => { + var _a, _b; + return { + x: i, + // TODO-question: what is the type of scopeItem.scope?.global? + param: (_a = scopeItem.scope) === null || _a === void 0 ? void 0 : _a.global[this.convergenceParam], + y: (_b = scopeItem.scope) === null || _b === void 0 ? void 0 : _b.global[this.convergenceResult], + }; + }) + .filter(({ y }) => { + lastResult = y; + const isNewResult = y !== undefined && y !== lastResult; + return isNewResult; + }) + .map((item, i) => { + return { + x: i + 1, + param: item.param, + y: item.y, + }; + }); + } + addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, }) { + // Find unit to converge: should contain passed result in its results list + // TODO: make user to select unit for convergence explicitly + const unitForConvergence = this.unitsInstances + .filter((x) => x.type === enums_1.UnitType.execution) + .find((x) => { + return x.resultNames.find((name) => name === result); + }); + if (!unitForConvergence) { + // sAlert.error( + // `Subworkflow does not contain unit with '${result}' as extracted property.`, + // ); + throw new Error(`Subworkflow does not contain unit with '${result}' as extracted property.`); + } + // initialize parameter + const param = (0, factory_1.createConvergenceParameter)({ + name: parameter, + initialValue: parameterInitial, + increment: parameterIncrement, + }); + // Replace kgrid to be ready for convergence + // TODO: kgrid should be abstracted and selected by user + const gridProvider = unitForConvergence.importantSettingsProviders.find((p) => { + return ["kgrid", "qgrid"].includes(p.name); + }); + let mergedContext = param.unitContext; + if (gridProvider) { + const providerContext = gridProvider.getContextItemData(); + mergedContext = merge(providerContext, param.unitContext); + gridProvider.setData(mergedContext); + gridProvider.setIsEdited(true); + } + unitForConvergence.updateContext(mergedContext); + const prevResult = "prev_result"; + const iteration = "iteration"; + // Assignment with result's initial value + const prevResultInit = new units_1.AssignmentUnit({ + name: "init result", + head: true, + operand: prevResult, + value: resultInitial, + }); + // Assignment with initial value of convergence parameter + const paramInit = new units_1.AssignmentUnit({ + name: "init parameter", + operand: param.name, + value: param.initialValue, + tags: [enums_1.UnitTag.hasConvergenceParam], + }); + // Assignment with initial value of iteration counter + const iterInit = new units_1.AssignmentUnit({ + name: "init counter", + operand: iteration, + value: 1, + }); + // Assignment for storing iteration result: extracts 'result' from convergence unit scope + const storePrevResult = new units_1.AssignmentUnit({ + name: "store result", + input: [ + { + scope: unitForConvergence.flowchartId, + name: result, + }, + ], + operand: prevResult, + value: result, + }); + // Assignment for convergence param increase + const nextStep = new units_1.AssignmentUnit({ + name: "update parameter", + input: param.useVariablesFromUnitContext(unitForConvergence.flowchartId), + operand: param.name, + value: param.increment, + next: unitForConvergence.flowchartId, + }); + // Final step of convergence + const exit = new units_1.AssignmentUnit({ + name: "exit", + input: [], + operand: param.name, + value: param.finalValue, + }); + // Final step of convergence + const storeResult = new units_1.AssignmentUnit({ + name: "update result", + input: [ + { + scope: unitForConvergence.flowchartId, + name: result, + }, + ], + operand: result, + value: result, + tags: [enums_1.UnitTag.hasConvergenceResult], + }); + // Assign next iteration value + const nextIter = new units_1.AssignmentUnit({ + name: "update counter", + input: [], + operand: iteration, + value: `${iteration} + 1`, + }); + // Convergence condition unit + const conditionUnit = new units_1.ConditionUnit({ + name: "check convergence", + statement: `${condition} ${operator} ${tolerance}`, + then: exit.flowchartId, + else: storePrevResult.flowchartId, + maxOccurrences, + next: storePrevResult.flowchartId, + }); + this.addUnit(paramInit, 0); + this.addUnit(prevResultInit, 1); + this.addUnit(iterInit, 2); + this.addUnit(storeResult); + this.addUnit(conditionUnit); + this.addUnit(storePrevResult); + this.addUnit(nextIter); + this.addUnit(nextStep); + this.addUnit(exit); + // `addUnit` adjusts the `next` field, hence the below. + nextStep.next = unitForConvergence.flowchartId; } } exports.Subworkflow = Subworkflow; diff --git a/dist/js/units/AssertionUnit.d.ts b/dist/js/units/AssertionUnit.d.ts index 50b4fd43..7bfb606c 100644 --- a/dist/js/units/AssertionUnit.d.ts +++ b/dist/js/units/AssertionUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { AssertionUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type AssertionUnitSchemaMixin } from "../generated/AssertionUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,6 +8,7 @@ type Base = typeof BaseUnit & Constructor; declare const AssertionUnit_base: Base; export declare class AssertionUnit extends AssertionUnit_base implements Schema { constructor(config: Partial); + toJSON: () => Schema & AnyObject; getHashObject(): { statement: string; errorMessage: string | undefined; diff --git a/dist/js/units/AssignmentUnit.d.ts b/dist/js/units/AssignmentUnit.d.ts index 122ab4c2..bdc71d82 100644 --- a/dist/js/units/AssignmentUnit.d.ts +++ b/dist/js/units/AssignmentUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type AssignmentUnitSchemaMixin } from "../generated/AssignmentUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,6 +8,7 @@ type Base = typeof BaseUnit & Constructor; declare const AssignmentUnit_base: Base; export declare class AssignmentUnit extends AssignmentUnit_base implements Schema { constructor(config: Partial); + toJSON: () => Schema & AnyObject; getHashObject(): object; } export {}; diff --git a/dist/js/units/BaseUnit.d.ts b/dist/js/units/BaseUnit.d.ts index a0e1ed5b..1bd67aa6 100644 --- a/dist/js/units/BaseUnit.d.ts +++ b/dist/js/units/BaseUnit.d.ts @@ -7,6 +7,7 @@ import { type RuntimeItems } from "@mat3ra/code/dist/js/entity/mixins/RuntimeIte import { Taggable } from "@mat3ra/code/dist/js/entity/mixins/TaggableMixin"; import type { NameResultSchema } from "@mat3ra/code/dist/js/utils/object"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { StatusSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type BaseUnitSchemaMixin } from "../generated/BaseUnitSchemaMixin"; import { type StatusSchemaMixin } from "../generated/StatusSchemaMixin"; @@ -17,6 +18,7 @@ declare const BaseUnit_base: Base; export declare class BaseUnit extends BaseUnit_base implements Schema { static usePredefinedIds: boolean; static generateFlowChartId(name: string): any; + toJSON: () => Schema & AnyObject; defaultResults: NameResultSchema[]; defaultMonitors: NameResultSchema[]; defaultPostProcessors: NameResultSchema[]; diff --git a/dist/js/units/ConditionUnit.d.ts b/dist/js/units/ConditionUnit.d.ts index bccbca4c..48c0bf6c 100644 --- a/dist/js/units/ConditionUnit.d.ts +++ b/dist/js/units/ConditionUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ConditionUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type ConditionUnitSchemaMixin } from "../generated/ConditionUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,6 +8,7 @@ type Base = typeof BaseUnit & Constructor; declare const ConditionUnit_base: Base; export declare class ConditionUnit extends ConditionUnit_base implements Schema { constructor(config: Partial); + toJSON: () => Schema & AnyObject; getHashObject(): object; } export {}; diff --git a/dist/js/units/ExecutionUnit.d.ts b/dist/js/units/ExecutionUnit.d.ts index e7e21145..86a0245c 100644 --- a/dist/js/units/ExecutionUnit.d.ts +++ b/dist/js/units/ExecutionUnit.d.ts @@ -26,17 +26,16 @@ export declare class ExecutionUnit extends ExecutionUnit_base implements Schema flavorInstance: Flavor; inputInstances: ExecutionUnitInput[]; renderingContext: ContextItem[]; + toJSON: () => Schema & AnyObject; constructor(config: Schema); setApplication({ application, executable, flavor }: SetApplicationProps): void; setExecutable({ executable, flavor }: SetExecutableProps): void; setFlavor(flavor?: Flavor | FlavorSchema): void; setDefaultInput(): void; - get allContextProviders(): import("../context/providers/base/ContextProvider").default[]; - get contextProviders(): import("../context/providers/base/ContextProvider").default[]; - /** Update rendering context and persistent context - * Note: this function is sometimes being called without passing a context! - */ - render(context?: AnyObject): void; + get allContextProviders(): (import("../context/providers/BoundaryConditionsFormDataManager").default | import("../context/providers/by_application/espresso/QEPWXInputDataManager").default | import("../context/providers/by_application/espresso/QENEBInputDataManager").default | import("../context/providers/by_application/nwchem/NWChemInputDataManager").default | import("../context/providers/by_application/vasp/VASPInputDataManager").default | import("../context/providers/by_application/vasp/VASPNEBInputDataManager").default | import("../context/providers/CollinearMagnetizationDataManager").default | import("../context/providers/Hubbard/HubbardContextManagerLegacy").default | import("../context/providers/Hubbard/HubbardJContextManager").default | import("../context/providers/Hubbard/HubbardUContextManager").default | import("../context/providers/Hubbard/HubbardVContextManager").default | import("../context/providers/IonDynamicsContextProvider").default | import("../context/providers/MLSettingsDataManager").default | import("../context/providers/MLTrainTestSplitDataManager").default | import("../context/providers/NEBFormDataManager").default | import("../context/providers/NonCollinearMagnetizationDataManager").default | import("../context/providers/PlanewaveCutoffDataManager").default | import("../context/providers/PointsGrid/IGridFormDataManager").default | import("../context/providers/PointsGrid/KGridFormDataManager").default | import("../context/providers/PointsGrid/QGridFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPathFormDataManager").default | import("../context/providers/PointsPath/IPathFormDataManager").default | import("../context/providers/PointsPath/KPathFormDataManager").default | import("../context/providers/PointsPath/QPathFormDataManager").default)[]; + get contextProviders(): (import("../context/providers/BoundaryConditionsFormDataManager").default | import("../context/providers/by_application/espresso/QEPWXInputDataManager").default | import("../context/providers/by_application/espresso/QENEBInputDataManager").default | import("../context/providers/by_application/nwchem/NWChemInputDataManager").default | import("../context/providers/by_application/vasp/VASPInputDataManager").default | import("../context/providers/by_application/vasp/VASPNEBInputDataManager").default | import("../context/providers/CollinearMagnetizationDataManager").default | import("../context/providers/Hubbard/HubbardContextManagerLegacy").default | import("../context/providers/Hubbard/HubbardJContextManager").default | import("../context/providers/Hubbard/HubbardUContextManager").default | import("../context/providers/Hubbard/HubbardVContextManager").default | import("../context/providers/IonDynamicsContextProvider").default | import("../context/providers/MLSettingsDataManager").default | import("../context/providers/MLTrainTestSplitDataManager").default | import("../context/providers/NEBFormDataManager").default | import("../context/providers/NonCollinearMagnetizationDataManager").default | import("../context/providers/PointsGrid/IGridFormDataManager").default | import("../context/providers/PointsGrid/KGridFormDataManager").default | import("../context/providers/PointsGrid/QGridFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPathFormDataManager").default | import("../context/providers/PointsPath/IPathFormDataManager").default | import("../context/providers/PointsPath/KPathFormDataManager").default | import("../context/providers/PointsPath/QPathFormDataManager").default)[]; + get importantSettingsProviders(): (import("../context/providers/BoundaryConditionsFormDataManager").default | import("../context/providers/CollinearMagnetizationDataManager").default | import("../context/providers/Hubbard/HubbardContextManagerLegacy").default | import("../context/providers/Hubbard/HubbardJContextManager").default | import("../context/providers/Hubbard/HubbardUContextManager").default | import("../context/providers/Hubbard/HubbardVContextManager").default | import("../context/providers/IonDynamicsContextProvider").default | import("../context/providers/MLSettingsDataManager").default | import("../context/providers/MLTrainTestSplitDataManager").default | import("../context/providers/NEBFormDataManager").default | import("../context/providers/NonCollinearMagnetizationDataManager").default | import("../context/providers/PointsGrid/IGridFormDataManager").default | import("../context/providers/PointsGrid/KGridFormDataManager").default | import("../context/providers/PointsGrid/QGridFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPathFormDataManager").default | import("../context/providers/PointsPath/IPathFormDataManager").default | import("../context/providers/PointsPath/KPathFormDataManager").default | import("../context/providers/PointsPath/QPathFormDataManager").default)[]; + render(externalContext?: AnyObject): void; /** * @summary Calculates hash on unit-specific fields. * The meaningful fields of processing unit are operation, flavor and input at the moment. diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index dfe92ff8..0717ebde 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -71,22 +71,22 @@ class ExecutionUnit extends BaseUnit_1.BaseUnit { get contextProviders() { return this.allContextProviders.filter((p) => p.entityName === "unit"); } - /** Update rendering context and persistent context - * Note: this function is sometimes being called without passing a context! - */ - render(context = {}) { - this.renderingContext = { ...this.renderingContext, ...context }; + get importantSettingsProviders() { + return this.contextProviders.filter((p) => p.domain === "important"); + } + render(externalContext = {}) { + this.renderingContext = this.context; const newInput = []; const newPersistentContext = []; const newRenderingContext = []; this.inputInstances.forEach((input) => { - input.setContext(this.renderingContext); + input.setContext(context, externalContext); input.render(); const inputJSON = input.toJSON(); - const context = input.getFullContext(); + const fullContext = input.getFullContext(); newInput.push(inputJSON); - newRenderingContext.push(...context); - newPersistentContext.push(...context.filter((c) => c.isEdited)); + newRenderingContext.push(...fullContext); + newPersistentContext.push(...fullContext.filter((c) => c.isEdited)); }); this.input = newInput; this.renderingContext = newRenderingContext; diff --git a/dist/js/units/IOUnit.d.ts b/dist/js/units/IOUnit.d.ts index 65fb01bf..76bafb52 100644 --- a/dist/js/units/IOUnit.d.ts +++ b/dist/js/units/IOUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { DataIOUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type IOUnitSchemaMixin } from "../generated/IOUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,5 +8,6 @@ type Base = typeof BaseUnit & Constructor; declare const IOUnit_base: Base; export declare class IOUnit extends IOUnit_base implements Schema { constructor(config: Partial); + toJSON: () => Schema & AnyObject; } export {}; diff --git a/dist/js/units/MapUnit.d.ts b/dist/js/units/MapUnit.d.ts index b2f91acf..6e345ad1 100644 --- a/dist/js/units/MapUnit.d.ts +++ b/dist/js/units/MapUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { MapUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; import { type MapUnitSchemaMixin } from "../generated/MapUnitSchemaMixin"; @@ -19,7 +20,8 @@ export declare const defaultMapConfig: { type Base = typeof BaseUnit & Constructor; declare const MapUnit_base: Base; export declare class MapUnit extends MapUnit_base implements Schema { - constructor(config: Partial); + constructor(config?: Partial); + toJSON: () => Schema & AnyObject; setWorkflowId(id: string): void; } export {}; diff --git a/dist/js/units/ProcessingUnit.d.ts b/dist/js/units/ProcessingUnit.d.ts index 05d1c5db..c8000556 100644 --- a/dist/js/units/ProcessingUnit.d.ts +++ b/dist/js/units/ProcessingUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ProcessingUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type ProcessingUnitSchemaMixin } from "../generated/ProcessingUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,6 +8,7 @@ type Base = typeof BaseUnit & Constructor; declare const ProcessingUnit_base: Base; export declare class ProcessingUnit extends ProcessingUnit_base implements Schema { constructor(config: Partial); + toJSON: () => Schema & AnyObject; setOperation(op: ProcessingUnitSchema["operation"]): void; setOperationType(type: ProcessingUnitSchema["operationType"]): void; setInput(input: ProcessingUnitSchema["inputData"]): void; diff --git a/dist/js/units/ReduceUnit.d.ts b/dist/js/units/ReduceUnit.d.ts index 6ff8fd18..1c4257eb 100644 --- a/dist/js/units/ReduceUnit.d.ts +++ b/dist/js/units/ReduceUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ReduceUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type ReduceUnitSchemaMixin } from "../generated/ReduceUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,5 +8,6 @@ type Base = typeof BaseUnit & Constructor; declare const ReduceUnit_base: Base; export declare class ReduceUnit extends ReduceUnit_base implements Schema { constructor(unitName: string, mapUnit: string, input: ReduceUnitSchema["input"]); + toJSON: () => Schema & AnyObject; } export {}; diff --git a/dist/js/units/SubworkflowUnit.d.ts b/dist/js/units/SubworkflowUnit.d.ts index 6514b002..df756fc0 100644 --- a/dist/js/units/SubworkflowUnit.d.ts +++ b/dist/js/units/SubworkflowUnit.d.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type SubworkflowUnitSchemaMixin } from "../generated/SubworkflowUnitSchemaMixin"; import { BaseUnit } from "./BaseUnit"; @@ -7,5 +8,6 @@ type Base = typeof BaseUnit & Constructor; declare const SubworkflowUnit_base: Base; export declare class SubworkflowUnit extends SubworkflowUnit_base implements Schema { constructor(config: Partial); + toJSON: () => Schema & AnyObject; } export {}; diff --git a/dist/js/units/factory.d.ts b/dist/js/units/factory.d.ts index 4c24e16f..d3540a4e 100644 --- a/dist/js/units/factory.d.ts +++ b/dist/js/units/factory.d.ts @@ -1,8 +1,16 @@ -import type { AssertionUnitSchema, AssignmentUnitSchema, ConditionUnitSchema, DataIOUnitSchema, MapUnitSchema, ProcessingUnitSchema, SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; -import { BaseUnit } from "./BaseUnit"; -import { type ExecutionUnitSchema } from "./ExecutionUnit"; -type UnitConfig = ExecutionUnitSchema | AssignmentUnitSchema | ConditionUnitSchema | DataIOUnitSchema | ProcessingUnitSchema | MapUnitSchema | SubworkflowUnitSchema | AssertionUnitSchema; +import type { AssertionUnitSchema, AssignmentUnitSchema, ConditionUnitSchema, DataIOUnitSchema, MapUnitSchema, ProcessingUnitSchema, ReduceUnitSchema, SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; +import { AssertionUnit } from "./AssertionUnit"; +import { AssignmentUnit } from "./AssignmentUnit"; +import { ConditionUnit } from "./ConditionUnit"; +import { type ExecutionUnitSchema, ExecutionUnit } from "./ExecutionUnit"; +import { IOUnit } from "./IOUnit"; +import { MapUnit } from "./MapUnit"; +import { ProcessingUnit } from "./ProcessingUnit"; +import { SubworkflowUnit } from "./SubworkflowUnit"; +export type UnitConfig = ExecutionUnitSchema | AssignmentUnitSchema | ConditionUnitSchema | DataIOUnitSchema | ProcessingUnitSchema | MapUnitSchema | SubworkflowUnitSchema | AssertionUnitSchema | ReduceUnitSchema; +export type AnyUnit = MapUnit | SubworkflowUnit; +export type AnySubworkflowUnit = ExecutionUnit | AssignmentUnit | ConditionUnit | IOUnit | ProcessingUnit | AssertionUnit; export declare class UnitFactory { - static create(config: UnitConfig): BaseUnit; + static createInWorkflow(config: UnitConfig): AnyUnit; + static createInSubworkflow(config: UnitConfig): AnySubworkflowUnit; } -export {}; diff --git a/dist/js/units/factory.js b/dist/js/units/factory.js index 5f395545..9f4bf0b6 100644 --- a/dist/js/units/factory.js +++ b/dist/js/units/factory.js @@ -11,7 +11,32 @@ const MapUnit_1 = require("./MapUnit"); const ProcessingUnit_1 = require("./ProcessingUnit"); const SubworkflowUnit_1 = require("./SubworkflowUnit"); class UnitFactory { - static create(config) { + static createInWorkflow(config) { + switch (config.type) { + // case UnitType.execution: + // return new ExecutionUnit(config); + // case UnitType.assignment: + // return new AssignmentUnit(config); + // case UnitType.condition: + // return new ConditionUnit(config); + // case UnitType.io: + // return new IOUnit(config); + // case UnitType.processing: + // return new ProcessingUnit(config); + case enums_1.UnitType.map: + return new MapUnit_1.MapUnit(config); + case enums_1.UnitType.subworkflow: + return new SubworkflowUnit_1.SubworkflowUnit(config); + // case UnitType.assertion: + // return new AssertionUnit(config); + // TODO-question: why there was no reduce unit in the factory? + // case UnitType.reduce: + // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); + default: + throw new Error(`Unknown unit type: ${config.type}`); + } + } + static createInSubworkflow(config) { switch (config.type) { case enums_1.UnitType.execution: return new ExecutionUnit_1.ExecutionUnit(config); @@ -23,12 +48,11 @@ class UnitFactory { return new IOUnit_1.IOUnit(config); case enums_1.UnitType.processing: return new ProcessingUnit_1.ProcessingUnit(config); - case enums_1.UnitType.map: - return new MapUnit_1.MapUnit(config); - case enums_1.UnitType.subworkflow: - return new SubworkflowUnit_1.SubworkflowUnit(config); case enums_1.UnitType.assertion: return new AssertionUnit_1.AssertionUnit(config); + // // TODO-question: why there was no reduce unit in the factory? + // case UnitType.reduce: + // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); default: throw new Error(`Unknown unit type: ${config.type}`); } diff --git a/dist/js/utils.d.ts b/dist/js/utils.d.ts index cf6bc75e..e86a8eb0 100644 --- a/dist/js/utils.d.ts +++ b/dist/js/utils.d.ts @@ -1,15 +1,12 @@ +import type { SubworkflowSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; /** * @summary set the head of an array of units - * @param units - * @returns {Unit[]} */ -export function setUnitsHead(units: any): Unit[]; +export declare function setUnitsHead(units: T[]): T[]; /** * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - * @params units {Unit[]} - * @returns units {Unit[]} */ -export function setNextLinks(units: any): any; +export declare function setNextLinks(units: T[]): T[]; /** * @summary Apply configuration data to an object * @param obj {*} object / class containing methods or attributes to be set @@ -17,12 +14,676 @@ export function setNextLinks(units: any): any; * @param callBuild {boolean} if true; call build between applying functions and attributes * @returns {*} updated object */ -export function applyConfig({ obj, config, callBuild }: any): any; +export declare function applyConfig({ obj, config, callBuild, }: { + obj: any; + config: { + functions?: Record; + attributes?: Record; + }; + callBuild: boolean; +}): any; /** * @summary Safely extract unit object from subworkflow data - * @param subworkflowData {Object} subworkflow data - * @param index {number} index of subworkflow unit - * @param type {string} type of subworkflow unit - * @returns {Object|null} subworkflow unit object (not a unit class instance!) */ -export function findUnit({ subworkflowData, index, type }: Object): Object | null; +export declare function findUnit({ subworkflowData, index, type, }: { + subworkflowData: SubworkflowSchema; + index: number; + type: "assignment" | "condition" | "processing" | "io" | "assertion" | "execution" | "reduce"; +}): { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "io"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + subtype: "input" | "output" | "dataFrame"; + source: "api" | "db" | "object_storage"; + input: ({ + type: "db_ids"; + ids: string[]; + } | { + type: "db_collection"; + collection: string; + draft: boolean; + } | { + type: "object_storage"; + objectData: { + CONTAINER?: string; + NAME?: string; + PROVIDER?: string; + REGION?: string; + SIZE?: number; + TIMESTAMP?: string; + }; + overwrite?: boolean; + pathname?: string; + basename?: string; + filetype?: string; + })[]; +} | { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "reduce"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + mapFlowchartId: string; + input: { + operation: string; + arguments: string[]; + }[]; +} | { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "condition"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + input: { + scope: string; + name: string; + }[]; + statement: string; + then: string; + else: string; + maxOccurrences: number; + throwException?: boolean; +} | { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "assertion"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + statement: string; + errorMessage?: string; +} | { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "execution"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + application: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + shortName: string; + summary: string; + version: string; + build: string; + hasAdvancedComputeOptions?: boolean; + isLicensed?: boolean; + }; + executable?: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + applicationId: string[]; + hasAdvancedComputeOptions?: boolean; + }; + flavor?: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + executableId: string; + executableName?: string; + applicationName?: string; + input: { + templateId?: string; + templateName?: string; + name?: string; + }[]; + supportedApplicationVersions?: string[]; + }; + input: { + template: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + applicationName: string; + applicationVersion?: string; + executableName: string; + contextProviders: { + name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; + }[]; + content: string; + }; + rendered: string; + isManuallyChanged: boolean; + }[]; + context?: ({ + name: "input"; + data: { + CHARGE: number; + MULT: number; + BASIS: string; + NAT: number; + NTYP: number; + ATOMIC_POSITIONS: string; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + ATOMIC_SPECIES: string; + FUNCTIONAL: string; + CARTESIAN: boolean; + } | { + IBRAV: number; + RESTART_MODE: "from_scratch" | "restart"; + ATOMIC_SPECIES: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + ATOMIC_SPECIES_WITH_LABELS: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + NAT: number; + NTYP: number; + NTYP_WITH_LABELS: number; + ATOMIC_POSITIONS?: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: string; + CELL_PARAMETERS: { + v1?: [number, number, number]; + v2?: [number, number, number]; + v3?: [number, number, number]; + }; + FIRST_IMAGE: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + LAST_IMAGE: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + INTERMEDIATE_IMAGES: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[][]; + } | { + IBRAV: number; + RESTART_MODE: "from_scratch" | "restart"; + ATOMIC_SPECIES: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + ATOMIC_SPECIES_WITH_LABELS: { + X: string; + Mass_X: number; + PseudoPot_X: string; + }[]; + NAT: number; + NTYP: number; + NTYP_WITH_LABELS: number; + ATOMIC_POSITIONS: { + X?: string; + x: number; + y: number; + z: number; + "if_pos(1)"?: number; + "if_pos(2)"?: number; + "if_pos(3)"?: number; + }[]; + ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; + CELL_PARAMETERS: { + v1?: [number, number, number]; + v2?: [number, number, number]; + v3?: [number, number, number]; + }; + } | { + POSCAR: string; + POSCAR_WITH_CONSTRAINTS: string; + } | { + FIRST_IMAGE: string; + LAST_IMAGE: string; + INTERMEDIATE_IMAGES: string[]; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "cutoffs"; + data: { + wavefunction?: number; + density?: number; + }; + isEdited: boolean; + } | { + name: "kgrid" | "qgrid" | "igrid"; + data: { + dimensions: [number, number, number]; + shifts?: [number, number, number]; + reciprocalVectorRatios?: [number, number, number]; + gridMetricType: "KPPRA" | "spacing"; + gridMetricValue: number; + preferGridMetric?: boolean; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "qpath" | "ipath" | "kpath" | "explicitKPath" | "explicitKPath2PIBA"; + data: [{ + point?: string; + steps: number; + coordinates: number[]; + }, ...{ + point?: string; + steps: number; + coordinates: number[]; + }[]]; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "hubbard_j"; + data: [{ + paramType?: "U" | "J" | "B" | "E2" | "E3"; + atomicSpecies?: string; + atomicOrbital?: string; + value?: number; + }, ...{ + paramType?: "U" | "J" | "B" | "E2" | "E3"; + atomicSpecies?: string; + atomicOrbital?: string; + value?: number; + }[]]; + isEdited: boolean; + } | { + name: "hubbard_u"; + data: { + atomicSpecies?: string; + atomicOrbital?: string; + hubbardUValue?: number; + }[]; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "hubbard_v"; + data: [{ + atomicSpecies?: string; + siteIndex?: number; + atomicOrbital?: string; + atomicSpecies2?: string; + siteIndex2?: number; + atomicOrbital2?: string; + hubbardVValue?: number; + }, ...{ + atomicSpecies?: string; + siteIndex?: number; + atomicOrbital?: string; + atomicSpecies2?: string; + siteIndex2?: number; + atomicOrbital2?: string; + hubbardVValue?: number; + }[]]; + isEdited: boolean; + } | { + name: "hubbard_legacy"; + data: [{ + atomicSpecies?: string; + atomicSpeciesIndex?: number; + hubbardUValue?: number; + }, ...{ + atomicSpecies?: string; + atomicSpeciesIndex?: number; + hubbardUValue?: number; + }[]]; + isEdited: boolean; + } | { + name: "neb"; + data: { + nImages?: number; + }; + isEdited: boolean; + } | { + name: "boundaryConditions"; + data: { + type?: "pbc" | "bc1" | "bc2" | "bc3"; + offset?: number; + electricField?: number; + targetFermiEnergy?: number; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "mlSettings"; + data: { + target_column_name?: string; + problem_category?: "regression" | "classification" | "clustering"; + }; + isEdited: boolean; + } | { + name: "mlTrainTestSplit"; + data: { + fraction_held_as_test_set?: number; + }; + isEdited: boolean; + } | { + name: "dynamics"; + data: { + numberOfSteps?: number; + timeStep?: number; + electronMass?: number; + temperature?: number; + }; + isEdited: boolean; + } | { + name: "collinearMagnetization"; + data: { + startingMagnetization: { + atomicSpecies: string; + value: number; + index: number; + }[]; + isTotalMagnetization: boolean; + totalMagnetization: number; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + } | { + name: "nonCollinearMagnetization"; + data: { + isExistingChargeDensity?: boolean; + isStartingMagnetization?: boolean; + startingMagnetization?: { + index?: number; + atomicSpecies?: string; + value?: number; + }[]; + isArbitrarySpinAngle?: boolean; + isArbitrarySpinDirection?: boolean; + lforcet?: boolean; + spinAngles?: { + index?: number; + atomicSpecies?: string; + angle1?: number; + angle2?: number; + }[]; + isConstrainedMagnetization?: boolean; + constrainedMagnetization?: { + constrainType?: "none" | "total" | "atomic" | "total direction" | "atomic direction"; + lambda?: number; + }; + isFixedMagnetization?: boolean; + fixedMagnetization?: { + x?: number; + y?: number; + z?: number; + }; + }; + extraData: { + materialHash?: string; + }; + isEdited: boolean; + })[]; +} | { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "assignment"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + scope?: string; + input?: { + scope: string; + name: string; + }[]; + operand: string; + value: string | boolean | number; +} | { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + tags?: string[]; + status?: "idle" | "active" | "warning" | "error" | "finished"; + statusTrack?: { + trackedAt: number; + status: string; + repetition?: number; + }[]; + isDraft?: boolean; + type: "processing"; + head?: boolean; + flowchartId: string; + next?: string; + enableRender?: boolean; + operation: string; + operationType: string; + inputData: { + [k: string]: unknown; + }; +}; diff --git a/dist/js/utils.js b/dist/js/utils.js index 697fff99..3c631cdf 100644 --- a/dist/js/utils.js +++ b/dist/js/utils.js @@ -10,8 +10,6 @@ exports.findUnit = findUnit; const lodash_1 = __importDefault(require("lodash")); /** * @summary set the head of an array of units - * @param units - * @returns {Unit[]} */ function setUnitsHead(units) { if (units.length > 0) { @@ -23,10 +21,9 @@ function setUnitsHead(units) { // TODO: fix setNextLinks on unit removal and convergence logic. /** * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - * @params units {Unit[]} - * @returns units {Unit[]} */ function setNextLinks(units) { + var _a; const flowchartIds = units.map((u) => u.flowchartId); for (let i = 0; i < units.length - 1; i++) { if (!units[i].next) { @@ -35,7 +32,7 @@ function setNextLinks(units) { if (i > 0) units[i - 1].next = units[i].flowchartId; } - else if (!flowchartIds.includes(units[i].next)) { + else if (!flowchartIds.includes((_a = units[i].next) !== null && _a !== void 0 ? _a : "")) { // newly removed units may create broken next links => fix it units[i].next = units[i + 1].flowchartId; } @@ -49,7 +46,7 @@ function setNextLinks(units) { * @param callBuild {boolean} if true; call build between applying functions and attributes * @returns {*} updated object */ -function applyConfig({ obj, config = {}, callBuild = false }) { +function applyConfig({ obj, config = {}, callBuild = false, }) { const { functions = {}, attributes = {} } = config; // eslint-disable-next-line no-restricted-syntax for (const [func, args] of Object.entries(functions)) { @@ -70,12 +67,8 @@ function applyConfig({ obj, config = {}, callBuild = false }) { } /** * @summary Safely extract unit object from subworkflow data - * @param subworkflowData {Object} subworkflow data - * @param index {number} index of subworkflow unit - * @param type {string} type of subworkflow unit - * @returns {Object|null} subworkflow unit object (not a unit class instance!) */ -function findUnit({ subworkflowData, index, type }) { +function findUnit({ subworkflowData, index, type, }) { const unit = subworkflowData.units[index]; if (unit.type !== type) throw new Error("findUnit() error: unit type does not match!"); diff --git a/dist/js/workflows/default.d.ts b/dist/js/workflows/default.d.ts index 1a74f6f7..4beac8a8 100644 --- a/dist/js/workflows/default.d.ts +++ b/dist/js/workflows/default.d.ts @@ -1,36 +1,3 @@ -declare namespace _default { - let name: string; - let properties: never[]; - let subworkflows: { - _id: string; - application: { - name: string; - summary: string; - version: string; - }; - model: { - method: { - subtype: string; - type: string; - }; - subtype: string; - type: string; - }; - name: string; - properties: never[]; - units: never[]; - }[]; - let workflows: never[]; - let units: { - _id: string; - flowchartId: string; - head: boolean; - monitors: never[]; - postProcessors: never[]; - preProcessors: never[]; - results: never[]; - type: string; - name: string; - }[]; -} -export default _default; +import type { WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +declare const defaultWorkflowConfig: WorkflowSchema; +export default defaultWorkflowConfig; diff --git a/dist/js/workflows/default.js b/dist/js/workflows/default.js index ed743f2a..14ca2751 100644 --- a/dist/js/workflows/default.js +++ b/dist/js/workflows/default.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = { +const defaultWorkflowConfig = { name: "New Workflow", properties: [], subworkflows: [ @@ -8,7 +8,9 @@ exports.default = { _id: "c6e9dbbee8929de01f4e76ee", application: { name: "espresso", + shortName: "espresso", summary: "Quantum Espresso", + build: "6.3", version: "6.3", }, model: { @@ -39,3 +41,4 @@ exports.default = { }, ], }; +exports.default = defaultWorkflowConfig; diff --git a/dist/js/workflows/workflow.d.ts b/dist/js/workflows/workflow.d.ts index 59c86476..6ae6280a 100644 --- a/dist/js/workflows/workflow.d.ts +++ b/dist/js/workflows/workflow.d.ts @@ -1,4555 +1,57 @@ -export class Workflow extends BaseWorkflow { - static getDefaultComputeConfig: any; - static jsonSchema: { - $id: string; - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - subworkflows: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - properties: { - description: string; - type: string; - items: { - description: string; - type: string; - }; - }; - compute: { - $schema: string; - title: string; - description: string; - type: string; - required: string[]; - properties: { - queue: { - description: string; - type: string; - enum: string[]; - }; - nodes: { - description: string; - type: string; - }; - ppn: { - description: string; - type: string; - }; - timeLimit: { - description: string; - type: string; - }; - timeLimitType: { - description: string; - type: string; - default: string; - enum: string[]; - }; - isRestartable: { - description: string; - type: string; - default: boolean; - }; - notify: { - description: string; - type: string; - }; - email: { - description: string; - type: string; - }; - maxCPU: { - description: string; - type: string; - }; - arguments: { - description: string; - default: {}; - $schema: string; - title: string; - type: string; - additionalProperties: boolean; - properties: { - nimage: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - npools: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - nband: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - ntg: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - ndiag: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - }; - }; - cluster: { - description: string; - type: string; - properties: { - fqdn: { - description: string; - type: string; - }; - jid: { - description: string; - type: string; - }; - }; - }; - errors: { - description: string; - type: string; - items: { - type: string; - properties: { - domain: { - description: string; - type: string; - enum: string[]; - }; - reason: { - description: string; - type: string; - }; - message: { - description: string; - type: string; - }; - traceback: { - description: string; - type: string; - }; - }; - }; - }; - excludeFilesPattern: { - description: string; - type: string; - }; - }; - }; - units: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - oneOf: ({ - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - subtype: { - enum: string[]; - }; - source: { - enum: string[]; - }; - input: { - type: string; - items: { - oneOf: ({ - $schema: string; - title: string; - type: string; - properties: { - type: { - const: string; - }; - ids: { - description: string; - type: string; - items: { - type: string; - }; - }; - collection?: undefined; - draft?: undefined; - objectData?: undefined; - overwrite?: undefined; - pathname?: undefined; - basename?: undefined; - filetype?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - type: string; - properties: { - type: { - const: string; - }; - collection: { - description: string; - type: string; - }; - draft: { - description: string; - type: string; - }; - ids?: undefined; - objectData?: undefined; - overwrite?: undefined; - pathname?: undefined; - basename?: undefined; - filetype?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - const: string; - }; - objectData: { - $schema: string; - title: string; - type: string; - properties: { - CONTAINER: { - description: string; - type: string; - }; - NAME: { - description: string; - type: string; - }; - PROVIDER: { - description: string; - type: string; - }; - REGION: { - description: string; - type: string; - }; - SIZE: { - description: string; - type: string; - }; - TIMESTAMP: { - description: string; - type: string; - }; - }; - }; - overwrite: { - description: string; - type: string; - }; - pathname: { - description: string; - type: string; - }; - basename: { - description: string; - type: string; - $comment: string; - }; - filetype: { - description: string; - type: string; - }; - ids?: undefined; - collection?: undefined; - draft?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - type?: undefined; - required?: undefined; - properties?: undefined; - $schema?: undefined; - title?: undefined; - }; - description?: undefined; - }; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - mapFlowchartId: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - items: { - type: string; - required: string[]; - properties: { - operation: { - description: string; - type: string; - }; - arguments: { - description: string; - type: string; - items: { - type: string; - }; - }; - scope?: undefined; - name?: undefined; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - $schema?: undefined; - title?: undefined; - }; - }; - subtype?: undefined; - source?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - operation?: undefined; - arguments?: undefined; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - }; - statement: { - description: string; - type: string; - }; - then: { - description: string; - type: string; - }; - else: { - description: string; - type: string; - }; - maxOccurrences: { - description: string; - type: string; - }; - throwException: { - description: string; - type: string; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - statement: { - type: string; - description: string; - }; - errorMessage: { - type: string; - description: string; - }; - subtype?: undefined; - source?: undefined; - input?: undefined; - mapFlowchartId?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - application: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - shortName: { - description: string; - type: string; - }; - summary: { - description: string; - type: string; - }; - version: { - description: string; - type: string; - }; - build: { - description: string; - type: string; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - isLicensed: { - description: string; - type: string; - }; - }; - }; - executable: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - applicationId: { - description: string; - type: string; - items: { - type: string; - }; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - }; - }; - flavor: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - executableId: { - description: string; - type: string; - }; - executableName: { - description: string; - type: string; - }; - applicationName: { - description: string; - type: string; - }; - input: { - title: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - additionalProperties: boolean; - properties: { - templateId: { - type: string; - }; - templateName: { - type: string; - }; - name: { - description: string; - type: string; - }; - }; - }; - }; - supportedApplicationVersions: { - description: string; - type: string; - items: { - type: string; - }; - }; - }; - }; - input: { - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - template: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - applicationName: { - type: string; - }; - applicationVersion: { - type: string; - }; - executableName: { - type: string; - }; - contextProviders: { - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - content: { - description: string; - type: string; - }; - }; - }; - rendered: { - description: string; - type: string; - }; - isManuallyChanged: { - type: string; - default: boolean; - }; - operation?: undefined; - arguments?: undefined; - scope?: undefined; - name?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - description?: undefined; - }; - context: { - type: string; - items: { - type: string; - required: string[]; - properties: { - name: { - type: string; - tsType: string; - }; - isEdited: { - type: string; - }; - data: { - type: string; - }; - extraData: { - type: string; - }; - }; - }; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - scope: { - type: string; - }; - input: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - operation?: undefined; - arguments?: undefined; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - }; - operand: { - description: string; - type: string; - }; - value: { - description: string; - oneOf: { - type: string; - }[]; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - operation: { - description: string; - type: string; - }; - operationType: { - description: string; - type: string; - }; - inputData: { - description: string; - }; - subtype?: undefined; - source?: undefined; - input?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - required: string[]; - }; - }; - model: { - $schema: string; - title: string; - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - method: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - precision: { - description: string; - type: string; - }; - data: { - description: string; - type: string; - }; - }; - }; - }; - }; - application: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - shortName: { - description: string; - type: string; - }; - summary: { - description: string; - type: string; - }; - version: { - description: string; - type: string; - }; - build: { - description: string; - type: string; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - isLicensed: { - description: string; - type: string; - }; - }; - }; - isDraft: { - description: string; - type: string; - default: boolean; - }; - }; - }; - }; - units: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - oneOf: ({ - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - subtype: { - enum: string[]; - }; - source: { - enum: string[]; - }; - input: { - type: string; - items: { - oneOf: ({ - $schema: string; - title: string; - type: string; - properties: { - type: { - const: string; - }; - ids: { - description: string; - type: string; - items: { - type: string; - }; - }; - collection?: undefined; - draft?: undefined; - objectData?: undefined; - overwrite?: undefined; - pathname?: undefined; - basename?: undefined; - filetype?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - type: string; - properties: { - type: { - const: string; - }; - collection: { - description: string; - type: string; - }; - draft: { - description: string; - type: string; - }; - ids?: undefined; - objectData?: undefined; - overwrite?: undefined; - pathname?: undefined; - basename?: undefined; - filetype?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - const: string; - }; - objectData: { - $schema: string; - title: string; - type: string; - properties: { - CONTAINER: { - description: string; - type: string; - }; - NAME: { - description: string; - type: string; - }; - PROVIDER: { - description: string; - type: string; - }; - REGION: { - description: string; - type: string; - }; - SIZE: { - description: string; - type: string; - }; - TIMESTAMP: { - description: string; - type: string; - }; - }; - }; - overwrite: { - description: string; - type: string; - }; - pathname: { - description: string; - type: string; - }; - basename: { - description: string; - type: string; - $comment: string; - }; - filetype: { - description: string; - type: string; - }; - ids?: undefined; - collection?: undefined; - draft?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - type?: undefined; - required?: undefined; - properties?: undefined; - $schema?: undefined; - title?: undefined; - }; - description?: undefined; - required?: undefined; - properties?: undefined; - }; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - mapFlowchartId: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - items: { - type: string; - required: string[]; - properties: { - operation: { - description: string; - type: string; - }; - arguments: { - description: string; - type: string; - items: { - type: string; - }; - }; - scope?: undefined; - name?: undefined; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - $schema?: undefined; - title?: undefined; - }; - required?: undefined; - properties?: undefined; - }; - subtype?: undefined; - source?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - operation?: undefined; - arguments?: undefined; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - required?: undefined; - properties?: undefined; - }; - statement: { - description: string; - type: string; - }; - then: { - description: string; - type: string; - }; - else: { - description: string; - type: string; - }; - maxOccurrences: { - description: string; - type: string; - }; - throwException: { - description: string; - type: string; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - statement: { - type: string; - description: string; - }; - errorMessage: { - type: string; - description: string; - }; - subtype?: undefined; - source?: undefined; - input?: undefined; - mapFlowchartId?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - application: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - shortName: { - description: string; - type: string; - }; - summary: { - description: string; - type: string; - }; - version: { - description: string; - type: string; - }; - build: { - description: string; - type: string; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - isLicensed: { - description: string; - type: string; - }; - }; - }; - executable: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - applicationId: { - description: string; - type: string; - items: { - type: string; - }; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - }; - }; - flavor: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - executableId: { - description: string; - type: string; - }; - executableName: { - description: string; - type: string; - }; - applicationName: { - description: string; - type: string; - }; - input: { - title: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - additionalProperties: boolean; - properties: { - templateId: { - type: string; - }; - templateName: { - type: string; - }; - name: { - description: string; - type: string; - }; - }; - }; - }; - supportedApplicationVersions: { - description: string; - type: string; - items: { - type: string; - }; - }; - }; - }; - input: { - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - template: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - applicationName: { - type: string; - }; - applicationVersion: { - type: string; - }; - executableName: { - type: string; - }; - contextProviders: { - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - content: { - description: string; - type: string; - }; - }; - }; - rendered: { - description: string; - type: string; - }; - isManuallyChanged: { - type: string; - default: boolean; - }; - operation?: undefined; - arguments?: undefined; - scope?: undefined; - name?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - description?: undefined; - required?: undefined; - properties?: undefined; - }; - context: { - type: string; - items: { - type: string; - required: string[]; - properties: { - name: { - type: string; - tsType: string; - }; - isEdited: { - type: string; - }; - data: { - type: string; - }; - extraData: { - type: string; - }; - }; - }; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - scope: { - type: string; - }; - input: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - operation?: undefined; - arguments?: undefined; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - required?: undefined; - properties?: undefined; - }; - operand: { - description: string; - type: string; - }; - value: { - description: string; - oneOf: { - type: string; - }[]; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - operation: { - description: string; - type: string; - }; - operationType: { - description: string; - type: string; - }; - inputData: { - description: string; - }; - subtype?: undefined; - source?: undefined; - input?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - workflowId: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - required: string[]; - properties: { - target: { - description: string; - type: string; - }; - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - values: { - description: string; - type: string; - items: { - oneOf: { - type: string; - }[]; - }; - }; - useValues: { - type: string; - }; - }; - items?: undefined; - }; - subtype?: undefined; - source?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - subtype?: undefined; - source?: undefined; - input?: undefined; - mapFlowchartId?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - operation?: undefined; - operationType?: undefined; - inputData?: undefined; - workflowId?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - required: string[]; - }; - }; - properties: { - description: string; - type: string; - items: { - description: string; - oneOf: { - type: string; - }[]; - }; - }; - isUsingDataset: { - description: string; - type: string; - }; - workflows: { - description: string; - type: string; - items: { - type: string; - }; - }; - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - metadata: { - type: string; - }; - }; - }; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import { UnitType } from "../enums"; +import { type WorkflowSchemaMixin } from "../generated/WorkflowSchemaMixin"; +import { Subworkflow } from "../subworkflows/subworkflow"; +import { MapUnit } from "../units"; +import { type AnyUnit } from "../units/factory"; +type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; +declare const Workflow_base: Base; +export declare class Workflow extends Workflow_base { static usePredefinedIds: boolean; - static get defaultConfig(): { - name: string; - properties: never[]; - subworkflows: { - _id: string; - application: { - name: string; - summary: string; - version: string; - }; - model: { - method: { - subtype: string; - type: string; - }; - subtype: string; - type: string; - }; - name: string; - properties: never[]; - units: never[]; - }[]; - workflows: never[]; - units: { - _id: string; - flowchartId: string; - head: boolean; - monitors: never[]; - postProcessors: never[]; - preProcessors: never[]; - results: never[]; - type: string; - name: string; - }[]; - }; - static generateWorkflowId(name: any, properties?: null, subworkflows?: null, applicationName?: null): any; - static fromSubworkflow(subworkflow: any, ClsConstructor?: typeof Workflow): Workflow; - static fromSubworkflows(name: any, ClsConstructor?: typeof Workflow, ...subworkflows: any[]): Workflow; - constructor(config: any, _Subworkflow?: typeof Subworkflow, _UnitFactory?: typeof UnitFactory, _Workflow?: typeof Workflow, _MapUnit?: typeof MapUnit); - _Subworkflow: typeof Subworkflow; - _UnitFactory: typeof UnitFactory; - _Workflow: typeof Workflow; - _MapUnit: typeof MapUnit; - initialize(): void; - _subworkflows: any; - _units: any; - _workflows: any; - /** - * @summary Adds subworkflow to current workflow. - * @param subworkflow {Subworkflow} - * @param head {Boolean} - */ + static readonly defaultConfig: WorkflowSchema; + static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; + private subworkflowInstances; + private unitInstances; + private workflowInstances; + private static generateDefaultWorkflowId; + private static generateStandataWorkflowId; + static fromSubworkflow(subworkflow: Subworkflow): Workflow; + constructor(config: WorkflowSchema & { + applicationName?: string; + }); + get workflows(): WorkflowSchema[] | undefined; + set workflows(value: WorkflowSchema[] | undefined); addSubworkflow(subworkflow: Subworkflow, head?: boolean, index?: number): void; - removeSubworkflow(id: any): void; - subworkflowId(index: any): any; - replaceSubworkflowAtIndex(index: any, newSubworkflow: any): void; - get units(): any; - setUnits(arr: any): void; - get usedApplications(): any[]; - get usedApplicationNames(): any[]; - get usedApplicationVersions(): any[]; + removeSubworkflow(id: string): void; + setUnits(arr: AnyUnit[]): void; + get usedApplications(): ApplicationSchema[]; + get usedApplicationVersions(): string[]; get usedApplicationNamesWithVersions(): string[]; - get usedModels(): any[]; - get humanReadableUsedModels(): any[]; - toJSON(exclude?: any[]): lodash.Omit; - get isDefault(): any; - set isMultiMaterial(value: any); - get isMultiMaterial(): any; - set isUsingDataset(value: boolean); - get isUsingDataset(): boolean; - get properties(): any[]; + get usedModels(): ("dft" | "ml" | "unknown")[]; + get humanReadableUsedModels(): string[]; + toJSON(): WorkflowSchema & AnyObject; + get properties(): string[]; get humanReadableProperties(): string[]; get systemName(): string; get defaultDescription(): string; - get exabyteId(): any; - get hash(): any; - get isOutdated(): any; - get history(): any; - setMethodData(methodData: any): void; - /** - * @param unit {Unit} - * @param head {Boolean} - * @param index {Number} - */ - addUnit(unit: Unit, head?: boolean, index?: number): void; - removeUnit(flowchartId: any): void; - /** - * @return Subworkflow[] - */ - get subworkflows(): any; - get workflows(): any; - addUnitType(type: any, head?: boolean, index?: number): void; - addMapUnit(mapUnit: any, mapWorkflow: any): void; - findSubworkflowById(id: any): any; - get allSubworkflows(): any[]; + private addUnit; + private removeUnit; + addUnitType(type: UnitType, head?: boolean, index?: number): void; + addMapUnit(mapUnit: MapUnit, mapWorkflow: Workflow): void; + get allSubworkflows(): Subworkflow[]; /** * @summary Calculates hash of the workflow. Meaningful fields are units and subworkflows. * units and subworkflows must be sorted topologically before hashing (already sorted). */ calculateHash(): string; + get hasRelaxation(): boolean; + toggleRelaxation(): void; + private getStandataRelaxationSubworkflow; + private getRelaxationSubworkflow; } -declare class BaseWorkflow { -} -import { Subworkflow } from "../subworkflows/subworkflow"; -import { UnitFactory } from "../units/factory"; -import { MapUnit } from "../units"; -import lodash from "lodash"; export {}; diff --git a/dist/js/workflows/workflow.js b/dist/js/workflows/workflow.js index 0f6706d0..e1aca5bf 100644 --- a/dist/js/workflows/workflow.js +++ b/dist/js/workflows/workflow.js @@ -4,50 +4,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Workflow = void 0; -/* eslint-disable max-classes-per-file */ const entity_1 = require("@mat3ra/code/dist/js/entity"); -const workflow_json_1 = __importDefault(require("@mat3ra/esse/dist/js/schema/workflow.json")); -const ide_1 = require("@mat3ra/ide"); +const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const mode_1 = require("@mat3ra/mode"); +const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); -const lodash_1 = __importDefault(require("lodash")); -const mixwith_1 = require("mixwith"); +// import { mix } from "mixwith"; const underscore_1 = __importDefault(require("underscore")); const underscore_string_1 = __importDefault(require("underscore.string")); const enums_1 = require("../enums"); +const WorkflowSchemaMixin_1 = require("../generated/WorkflowSchemaMixin"); const subworkflow_1 = require("../subworkflows/subworkflow"); const units_1 = require("../units"); const factory_1 = require("../units/factory"); const utils_2 = require("../utils"); const default_1 = __importDefault(require("./default")); -const relaxation_1 = require("./relaxation"); const { MODEL_NAMES } = mode_1.tree; -class BaseWorkflow extends (0, mixwith_1.mix)(entity_1.NamedDefaultableRepetitionContextAndRenderInMemoryEntity).with(ide_1.ComputedEntityMixin, relaxation_1.RelaxationLogicMixin) { -} -class Workflow extends BaseWorkflow { - constructor(config, _Subworkflow = subworkflow_1.Subworkflow, _UnitFactory = factory_1.UnitFactory, _Workflow = Workflow, _MapUnit = units_1.MapUnit) { - if (!config._id) { - config._id = Workflow.generateWorkflowId(config.name, config.properties, config.subworkflows, config.applicationName); - } - super(config); - this._Subworkflow = _Subworkflow; - this._UnitFactory = _UnitFactory; - this._Workflow = _Workflow; - this._MapUnit = _MapUnit; - if (!config.skipInitialize) - this.initialize(); +class Workflow extends entity_1.InMemoryEntity { + static get jsonSchema() { + return JSONSchemasInterface_1.default.getSchemaById("workflow"); } - initialize() { - const me = this; - this._subworkflows = this.prop("subworkflows").map((x) => new me._Subworkflow(x)); - this._units = this.prop("units").map((unit) => me._UnitFactory.create(unit)); - this._json.workflows = this._json.workflows || []; - this._workflows = this.prop("workflows").map((x) => new me._Workflow(x)); - } - static get defaultConfig() { - return default_1.default; + static generateDefaultWorkflowId() { + return utils_1.Utils.uuid.getUUID(); } - static generateWorkflowId(name, properties = null, subworkflows = null, applicationName = null) { + static generateStandataWorkflowId({ name, properties, subworkflows, applicationName, }) { const propsInfo = (properties === null || properties === void 0 ? void 0 : properties.length) ? properties.sort().join(",") : ""; const swInfo = (subworkflows === null || subworkflows === void 0 ? void 0 : subworkflows.length) ? subworkflows.map((sw) => sw.name || "unknown").join(",") @@ -55,68 +37,78 @@ class Workflow extends BaseWorkflow { const seed = [`workflow-${name}`, applicationName, propsInfo, swInfo] .filter((p) => p) .join("-"); - if (this.usePredefinedIds) - return utils_1.Utils.uuid.getUUIDFromNamespace(seed); - return utils_1.Utils.uuid.getUUID(); + return utils_1.Utils.uuid.getUUIDFromNamespace(seed); } - static fromSubworkflow(subworkflow, ClsConstructor = Workflow) { + static fromSubworkflow(subworkflow) { const config = { name: subworkflow.name, subworkflows: [subworkflow.toJSON()], units: (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)([subworkflow.getAsUnit().toJSON()])), properties: subworkflow.properties, applicationName: subworkflow.application.name, + workflows: [], }; - return new ClsConstructor(config); + return new Workflow(config); } - static fromSubworkflows(name, ClsConstructor = Workflow, ...subworkflows) { - return new ClsConstructor(name, subworkflows, subworkflows.map((sw) => sw.getAsUnit())); + constructor(config) { + var _a; + if (!config._id) { + if (Workflow.usePredefinedIds) { + if (!config.applicationName) { + throw new Error("applicationName is required when usePredefinedIds is true"); + } + config._id = Workflow.generateStandataWorkflowId(config); + } + else { + config._id = Workflow.generateDefaultWorkflowId(); + } + } + super(config); + this.subworkflowInstances = this.subworkflows.map((x) => new subworkflow_1.Subworkflow(x)); + this.unitInstances = this.units.map((unit) => factory_1.UnitFactory.createInWorkflow(unit)); + this.workflowInstances = ((_a = this.workflows) === null || _a === void 0 ? void 0 : _a.map((x) => new Workflow(x))) || []; + } + get workflows() { + return this.prop("workflows"); + } + set workflows(value) { + this.setProp("workflows", value); } - /** - * @summary Adds subworkflow to current workflow. - * @param subworkflow {Subworkflow} - * @param head {Boolean} - */ addSubworkflow(subworkflow, head = false, index = -1) { const subworkflowUnit = subworkflow.getAsUnit(); if (head) { - this.subworkflows.unshift(subworkflow); + this.subworkflowInstances.unshift(subworkflow); this.addUnit(subworkflowUnit, head, index); } else { - this.subworkflows.push(subworkflow); + this.subworkflowInstances.push(subworkflow); this.addUnit(subworkflowUnit, head, index); } } removeSubworkflow(id) { - const subworkflowUnit = this.units.find((u) => u.id === id); - if (subworkflowUnit) + const subworkflowUnit = this.unitInstances.find((u) => u.id === id); + if (subworkflowUnit) { this.removeUnit(subworkflowUnit.flowchartId); - } - subworkflowId(index) { - const sw = this.prop(`subworkflows[${index}]`); - return sw ? sw._id : null; - } - replaceSubworkflowAtIndex(index, newSubworkflow) { - this._subworkflows[index] = newSubworkflow; - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this._units))); - } - get units() { - return this._units; + } } setUnits(arr) { - this._units = arr; + this.unitInstances = arr; } - // returns a list of `app` Classes get usedApplications() { const swApplications = this.subworkflows.map((sw) => sw.application); - const wfApplications = lodash_1.default.flatten(this.workflows.map((w) => w.usedApplications)); - return lodash_1.default.uniqBy(swApplications.concat(wfApplications), (a) => a.name); + const wfApplications = this.workflowInstances.map((w) => w.usedApplications).flat(); + const usedApplications = [...swApplications, ...wfApplications].reduce((acc, app) => { + if (!acc.some((a) => a.name === app.name)) { + acc.push(app); + } + return acc; + }, []); + return usedApplications; } // return application names - get usedApplicationNames() { - return this.usedApplications.map((a) => a.name); - } + // get usedApplicationNames() { + // return this.usedApplications.map((a) => a.name); + // } get usedApplicationVersions() { return this.usedApplications.map((a) => a.version); } @@ -124,119 +116,70 @@ class Workflow extends BaseWorkflow { return this.usedApplications.map((a) => `${a.name} ${a.version}`); } get usedModels() { - return lodash_1.default.uniq(this.subworkflows.map((sw) => sw.model.type)); + return Array.from(new Set(this.subworkflows.map((sw) => sw.model.type))); } get humanReadableUsedModels() { return this.usedModels.filter((m) => m !== "unknown").map((m) => MODEL_NAMES[m]); } - toJSON(exclude = []) { - return lodash_1.default.omit({ + toJSON() { + return { ...super.toJSON(), - units: this._units.map((x) => x.toJSON()), - subworkflows: this._subworkflows.map((x) => x.toJSON()), - workflows: this.workflows.map((x) => x.toJSON()), - ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation - }, exclude); - } - get isDefault() { - return this.prop("isDefault", false); - } - get isMultiMaterial() { - const fromSubworkflows = this.subworkflows.some((sw) => sw.isMultiMaterial); - return this.prop("isMultiMaterial") || fromSubworkflows; - } - set isMultiMaterial(value) { - this.setProp("isMultiMaterial", value); - } - set isUsingDataset(value) { - this.setProp("isUsingDataset", value); - } - get isUsingDataset() { - return !!this.prop("isUsingDataset", false); + name: this.name, + properties: this.properties, + units: this.unitInstances.map((x) => x.toJSON()), + subworkflows: this.subworkflowInstances.map((x) => x.toJSON()), + workflows: this.workflowInstances.map((x) => x.toJSON()), + }; } get properties() { - return lodash_1.default.uniq(lodash_1.default.flatten(this._subworkflows.map((x) => x.properties))); + return [...new Set(this.subworkflows.map((x) => x.properties || []).flat())]; } get humanReadableProperties() { return this.properties.map((name) => underscore_string_1.default.humanize(name)); } get systemName() { - return underscore_string_1.default.slugify(`${this.usedApplicationNames.join(":")}-${this.name.toLowerCase()}`); + const applicationNames = this.usedApplications.map((a) => a.name); + return underscore_string_1.default.slugify(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); } get defaultDescription() { - return `${this.usedModels - .join(", ") - .toUpperCase()} workflow using ${this.usedApplicationNames.join(", ")}.`; - } - get exabyteId() { - return this.prop("exabyteId"); + return `${this.usedModels.join(", ").toUpperCase()} workflow using ${this.usedApplications + .map((a) => a.name) + .join(", ")}.`; } - get hash() { - return this.prop("hash", ""); - } - get isOutdated() { - return this.prop("isOutdated", false); - } - get history() { - return this.prop("history", []); - } - setMethodData(methodData) { - this.subworkflows.forEach((sw) => { - const method = methodData.getMethodBySubworkflow(sw); - if (method) - sw.model.setMethod(method); - }); - this.workflows.forEach((wf) => { - wf.subworkflows.forEach((sw) => { - const method = methodData.getMethodBySubworkflow(sw); - if (method) - sw.model.setMethod(method); - }); - }); - } - /** - * @param unit {Unit} - * @param head {Boolean} - * @param index {Number} - */ + // TODO-question: clarify head logic addUnit(unit, head = false, index = -1) { - const { units } = this; - if (units.length === 0) { + const [...unitInstances] = this.unitInstances; + if (unitInstances.length === 0) { unit.head = true; this.setUnits([unit]); } else { if (head) { - units.unshift(unit); + unitInstances.unshift(unit); } else if (index >= 0) { - units.splice(index, 0, unit); + unitInstances.splice(index, 0, unit); } else { - units.push(unit); + unitInstances.push(unit); } - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(units))); + this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(unitInstances))); } } removeUnit(flowchartId) { - if (this.units.length < 2) + if (this.units.length < 2) { + return; + } + const unit = this.unitInstances.find((x) => x.flowchartId === flowchartId); + if (!unit) { return; - const unit = this.units.find((x) => x.flowchartId === flowchartId); - const previousUnit = this.units.find((x) => x.next === unit.flowchartId); + } + const previousUnit = this.unitInstances.find((x) => x.next === unit.flowchartId); if (previousUnit) { delete previousUnit.next; } - this._subworkflows = this._subworkflows.filter((x) => x.id !== unit.id); - this._units = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this._units.filter((x) => x.flowchartId !== flowchartId))); - } - /** - * @return Subworkflow[] - */ - get subworkflows() { - return this._subworkflows; - } - get workflows() { - return this._workflows; + this.subworkflowInstances = this.subworkflowInstances.filter((x) => x.id !== unit.id); + this.unitInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.unitInstances.filter((x) => x.flowchartId !== flowchartId))); } /* * @param type {String|Object} Unit type, map or subworkflow @@ -245,52 +188,40 @@ class Workflow extends BaseWorkflow { */ addUnitType(type, head = false, index = -1) { switch (type) { - case enums_1.UNIT_TYPES.map: - // eslint-disable-next-line no-case-declarations - const workflowConfig = default_1.default; - // eslint-disable-next-line no-case-declarations - const mapUnit = new this._MapUnit(); - workflowConfig._id = this._Workflow.generateWorkflowId(workflowConfig.name, workflowConfig.properties, workflowConfig.subworkflows, this.applicationName); - this.prop("workflows").push(workflowConfig); - this._workflows = this.prop("workflows").map((x) => new this._Workflow(x)); - mapUnit.setWorkflowId(workflowConfig._id); + case enums_1.UnitType.map: { + const mapWorkflowConfig = { + ...default_1.default, + _id: Workflow.generateDefaultWorkflowId(), + }; + const mapUnit = new units_1.MapUnit({ + workflowId: mapWorkflowConfig._id, + }); + this.workflows = [...(this.workflows || []), mapWorkflowConfig]; + this.workflowInstances = this.workflows.map((x) => new Workflow(x)); this.addUnit(mapUnit, head, index); break; - case enums_1.UNIT_TYPES.subworkflow: - this.addSubworkflow(this._Subworkflow.createDefault(), head, index); + } + case enums_1.UnitType.subworkflow: + this.addSubworkflow(subworkflow_1.Subworkflow.createDefault(), head, index); break; default: console.log(`unit_type=${type} unrecognized, skipping.`); } } addMapUnit(mapUnit, mapWorkflow) { - const mapWorkflowConfig = mapWorkflow.toJSON(); - if (!mapWorkflowConfig._id) { - mapWorkflowConfig._id = this._Workflow.generateWorkflowId(mapWorkflowConfig.name, mapWorkflowConfig.properties, mapWorkflowConfig.subworkflows, mapWorkflow.applicationName || this.applicationName); - } + const mapWorkflowConfig = { + _id: Workflow.generateDefaultWorkflowId(), + ...mapWorkflow.toJSON(), + }; mapUnit.setWorkflowId(mapWorkflowConfig._id); this.addUnit(mapUnit); - this._json.workflows.push(mapWorkflowConfig); - const me = this; - this._workflows = this.prop("workflows").map((x) => new me._Workflow(x)); - } - findSubworkflowById(id) { - if (!id) - return; - const workflows = this.workflows || []; - const subworkflows = this.subworkflows || []; - const subworkflow = subworkflows.find((sw) => sw.id === id); - if (subworkflow) - return subworkflow; - const workflow = workflows.find((w) => w.findSubworkflowById(id)); - if (workflow) - return workflow.findSubworkflowById(id); - console.warn("attempted to find a non-existing subworkflow"); + this.workflows = [...(this.workflows || []), mapWorkflowConfig]; + this.workflowInstances = this.workflows.map((x) => new Workflow(x)); } get allSubworkflows() { const subworkflowsList = []; - this.subworkflows.forEach((sw) => subworkflowsList.push(sw)); - this.workflows.forEach((workflow) => { + this.subworkflowInstances.forEach((sw) => subworkflowsList.push(sw)); + this.workflowInstances.forEach((workflow) => { return Array.prototype.push.apply(subworkflowsList, workflow.allSubworkflows); }); return subworkflowsList; @@ -301,14 +232,41 @@ class Workflow extends BaseWorkflow { */ calculateHash() { const meaningfulFields = { - units: underscore_1.default.map(this.units, (u) => u.calculateHash()).join(), - subworkflows: underscore_1.default.map(this.subworkflows, (sw) => sw.calculateHash()).join(), - workflows: underscore_1.default.map(this.workflows, (w) => w.calculateHash()).join(), + units: underscore_1.default.map(this.unitInstances, (u) => u.calculateHash()).join(), + subworkflows: underscore_1.default.map(this.subworkflowInstances, (sw) => sw.calculateHash()).join(), + workflows: underscore_1.default.map(this.workflowInstances, (w) => w.calculateHash()).join(), }; return utils_1.Utils.hash.calculateHashFromObject(meaningfulFields); } + get hasRelaxation() { + return Boolean(this.getRelaxationSubworkflow()); + } + toggleRelaxation() { + const relaxSubworkflow = this.getRelaxationSubworkflow(); + if (relaxSubworkflow === null || relaxSubworkflow === void 0 ? void 0 : relaxSubworkflow._id) { + this.removeSubworkflow(relaxSubworkflow._id); + } + else { + const vcRelax = this.getStandataRelaxationSubworkflow(); + if (vcRelax) { + this.addSubworkflow(new subworkflow_1.Subworkflow(vcRelax), true); + } + } + } + getStandataRelaxationSubworkflow() { + // TODO: fix standata type + return new standata_1.SubworkflowStandata().getRelaxationSubworkflowByApplication(this.subworkflowInstances[0].application.name); + } + getRelaxationSubworkflow() { + const standataSubworkflow = this.getStandataRelaxationSubworkflow(); + return this.subworkflows.find((sw) => { + return standataSubworkflow && standataSubworkflow.systemName === sw.systemName; + }); + } } exports.Workflow = Workflow; -Workflow.getDefaultComputeConfig = ide_1.getDefaultComputeConfig; -Workflow.jsonSchema = workflow_json_1.default; Workflow.usePredefinedIds = false; +Workflow.defaultConfig = default_1.default; +(0, NamedEntityMixin_1.namedEntityMixin)(Workflow.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(Workflow); +(0, WorkflowSchemaMixin_1.workflowSchemaMixin)(Workflow.prototype); diff --git a/package-lock.json b/package-lock.json index 3694f3a7..4505ff44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,7 @@ "crypto-js": "^4.2.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "mixwith": "^0.1.1", "nunjucks": "^3.2.4", - "ts-node": "^10.9.2", - "typescript": "^5.6.6", "underscore": "^1.13.3", "underscore.string": "^3.3.4", "v20": "^0.1.0" @@ -28,10 +25,10 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#b324747a87f4b3363936974f512e75fe255b52a9", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1bad6cb6b0761a411cc431b681119d1d47081831", "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", - "@mat3ra/mode": "2025.11.13-0", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "2026.1.12-0", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", @@ -53,7 +50,9 @@ "lint-staged": "^12.1.2", "mocha": "^9.1.3", "nyc": "^15.1.0", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "ts-node": "^10.9.2", + "typescript": "^5.6.6" }, "engines": { "node": ">=20.0.0" @@ -2344,6 +2343,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2356,6 +2356,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2861,8 +2862,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#b324747a87f4b3363936974f512e75fe255b52a9", - "integrity": "sha512-2oi8jV/427kyC8USMPJavMbi9qHas+9OeC70jOrhb4yFdVkeZ8U4dgDYuzKzZYXHnItETnQdFhP/3JXKMfcLBA==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#1bad6cb6b0761a411cc431b681119d1d47081831", + "integrity": "sha512-b+r/ApKPq2HPCDjf1Xf3IGR/QrMhvYQcGbMj/K6fjCLuKODEC2lJ3lOLhBnDAqwiNVzmVKuQX9k9An8ipxlCFg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3915,9 +3916,9 @@ "license": "MIT" }, "node_modules/@mat3ra/mode": { - "version": "2025.11.13-0", - "resolved": "https://registry.npmjs.org/@mat3ra/mode/-/mode-2025.11.13-0.tgz", - "integrity": "sha512-wXXz0HddP35svfUmfUEJ4VvWPkj0T2ovaVLCQ+e4l7LBxjlehoApNeSU0Ra5+FSjOO8MMnuzx3XCO3GlfjztcA==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", + "integrity": "sha512-UqkOxMT4q3BrhiTanNggifYtj9aLiD2W0VArUZoE64/65CwQjXHQfw369TunOGUX0RUTaN7TTBchyEgbSNBfbw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4282,24 +4283,28 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, "license": "MIT" }, "node_modules/@types/chai": { @@ -4377,6 +4382,7 @@ "version": "20.19.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -4730,6 +4736,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -4742,6 +4749,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4912,6 +4920,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -5723,6 +5732,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { @@ -9206,6 +9216,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, "license": "ISC" }, "node_modules/math-intrinsics": { @@ -9335,6 +9346,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/mixwith/-/mixwith-0.1.1.tgz", "integrity": "sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A==", + "dev": true, "license": "Apache-2.0" }, "node_modules/mocha": { @@ -11631,6 +11643,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -11674,6 +11687,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -11686,6 +11700,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -11917,6 +11932,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -11968,6 +11984,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -12081,6 +12098,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, "license": "MIT" }, "node_modules/valid-url": { @@ -12456,6 +12474,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/package.json b/package.json index dd8b57d3..ae36aecc 100644 --- a/package.json +++ b/package.json @@ -37,10 +37,7 @@ "crypto-js": "^4.2.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "mixwith": "^0.1.1", "nunjucks": "^3.2.4", - "ts-node": "^10.9.2", - "typescript": "^5.6.6", "underscore": "^1.13.3", "underscore.string": "^3.3.4", "v20": "^0.1.0" @@ -49,10 +46,10 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#b324747a87f4b3363936974f512e75fe255b52a9", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1bad6cb6b0761a411cc431b681119d1d47081831", "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", - "@mat3ra/mode": "2025.11.13-0", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "2026.1.12-0", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", @@ -74,7 +71,9 @@ "lint-staged": "^12.1.2", "mocha": "^9.1.3", "nyc": "^15.1.0", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "ts-node": "^10.9.2", + "typescript": "^5.6.6" }, "peerDependencies": { "@mat3ra/ade": "*", diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts index b62604b4..d1efb030 100644 --- a/scripts/generate-mixins.ts +++ b/scripts/generate-mixins.ts @@ -31,6 +31,7 @@ const OUTPUT_PATHS = { "workflow/unit/mixins/subworkflow": "src/js/generated/SubworkflowUnitSchemaMixin.ts", "workflow/unit/input/-inputItem": "src/js/generated/ExecutionUnitInputSchemaMixin.ts", "workflow/subworkflow/mixin": "src/js/generated/SubworkflowSchemaMixin.ts", + "workflow/base": "src/js/generated/WorkflowSchemaMixin.ts", }; function main() { diff --git a/src/js/ExecutionUnitInput.ts b/src/js/ExecutionUnitInput.ts index 0f6a0d62..a3353c49 100644 --- a/src/js/ExecutionUnitInput.ts +++ b/src/js/ExecutionUnitInput.ts @@ -1,14 +1,116 @@ -import { Template } from "@mat3ra/ade"; +import { type Application, Template } from "@mat3ra/ade"; import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import type { + ContextProviderNameEnum, + JobSchema, + TemplateSchema, + WorkflowSchema, +} from "@mat3ra/esse/dist/js/types"; import nunjucks from "nunjucks"; -import { providers } from "./context/providers"; -import type { ContextItem, ContextProviderConfig } from "./context/providers/base/ContextProvider"; -import type ContextProvider from "./context/providers/base/ContextProvider"; +import type { OrderedMaterial } from "./context/mixins/MaterialContextMixin"; +import BoundaryConditionsFormDataManager, { + type BoundaryConditionsFormDataManagerContextItem, + type BoundaryConditionsFormDataManagerExternalContext, +} from "./context/providers/BoundaryConditionsFormDataManager"; +import QENEBInputDataManager, { + type QENEBInputDataManagerContextItem, + type QENEBInputDataManagerExternalContext, +} from "./context/providers/by_application/espresso/QENEBInputDataManager"; +import type { + QEPWXInputDataManagerContextItem, + QEPWXInputDataManagerExternalContext, +} from "./context/providers/by_application/espresso/QEPWXInputDataManager"; +import QEPWXInputDataManager from "./context/providers/by_application/espresso/QEPWXInputDataManager"; +import NWChemInputDataManager, { + type NWChemInputDataManagerContextItem, + type NWChemInputDataManagerExternalContext, +} from "./context/providers/by_application/nwchem/NWChemInputDataManager"; +import VASPInputDataManager, { + type VASPInputDataManagerContextItem, + type VASPInputDataManagerExternalContext, +} from "./context/providers/by_application/vasp/VASPInputDataManager"; +import VASPNEBInputDataManager, { + type VASPNEBInputDataManagerContextItem, + type VASPNEBInputDataManagerExternalContext, +} from "./context/providers/by_application/vasp/VASPNEBInputDataManager"; +import type { + CollinearMagnetizationDataManagerContextItem, + CollinearMagnetizationDataManagerExternalContext, +} from "./context/providers/CollinearMagnetizationDataManager"; +import CollinearMagnetizationDataManager from "./context/providers/CollinearMagnetizationDataManager"; +import type { HubbardContextManagerLegacyContextItem } from "./context/providers/Hubbard/HubbardContextManagerLegacy"; +import HubbardContextManagerLegacy from "./context/providers/Hubbard/HubbardContextManagerLegacy"; +import type { HubbardExternalContext } from "./context/providers/Hubbard/HubbardContextProvider"; +import HubbardJContextManager, { + type HubbardJContextManagerContextItem, +} from "./context/providers/Hubbard/HubbardJContextManager"; +import HubbardUContextManager, { + type HubbardUContextManagerContextItem, +} from "./context/providers/Hubbard/HubbardUContextManager"; +import HubbardVContextManager, { + type HubbardVContextManagerContextItem, +} from "./context/providers/Hubbard/HubbardVContextManager"; +import type { + IonDynamicsContextProviderContextItem, + IonDynamicsContextProviderExternalContext, +} from "./context/providers/IonDynamicsContextProvider"; +import IonDynamicsContextProvider from "./context/providers/IonDynamicsContextProvider"; +import type { + MLSettingsDataManagerContextItem, + MLSettingsDataManagerExternalContext, +} from "./context/providers/MLSettingsDataManager"; +import MLSettingsDataManager from "./context/providers/MLSettingsDataManager"; +import type { + MLTrainTestSplitDataManagerContextItem, + MLTrainTestSplitDataManagerExternalContext, +} from "./context/providers/MLTrainTestSplitDataManager"; +import MLTrainTestSplitDataManager from "./context/providers/MLTrainTestSplitDataManager"; +import type { + NEBFormDataManagerContextItem, + NEBFormDataManagerExternalContext, +} from "./context/providers/NEBFormDataManager"; +import NEBFormDataManager from "./context/providers/NEBFormDataManager"; +import NonCollinearMagnetizationDataManager, { + type NonCollinearMagnetizationDataManagerContextItem, + type NonCollinearMagnetizationDataManagerExternalContext, +} from "./context/providers/NonCollinearMagnetizationDataManager"; +import PlanewaveCutoffDataManager, { + type PlanewaveCutoffDataManagerContextItem, + type PlanewaveCutoffDataManagerExternalContext, +} from "./context/providers/PlanewaveCutoffDataManager"; +import IGridFormDataManager from "./context/providers/PointsGrid/IGridFormDataManager"; +import KGridFormDataManager from "./context/providers/PointsGrid/KGridFormDataManager"; +import type { + PointsGridFormDataManagerContextItem, + PointsGridFormDataManagerExternalContext, +} from "./context/providers/PointsGrid/PointsGridFormDataProvider"; +import QGridFormDataManager from "./context/providers/PointsGrid/QGridFormDataManager"; +import ExplicitKPath2PIBAFormDataManager, { + type ExplicitKPath2PIBAFormDataManagerContextItem, + type ExplicitKPath2PIBAFormDataManagerExternalContext, +} from "./context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager"; +import type { + ExplicitKPathFormDataManagerContextItem, + ExplicitKPathFormDataManagerExternalContext, +} from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; +import ExplicitKPathFormDataManager from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; +import type { + IPathFormDataManagerContextItem, + IPathFormDataManagerExternalContext, +} from "./context/providers/PointsPath/IPathFormDataManager"; +import IPathFormDataManager from "./context/providers/PointsPath/IPathFormDataManager"; +import KPathFormDataManager, { + type KPathFormDataManagerContextItem, + type KPathFormDataManagerExternalContext, +} from "./context/providers/PointsPath/KPathFormDataManager"; +import QPathFormDataManager, { + type QPathFormDataManagerContextItem, + type QPathFormDataManagerExternalContext, +} from "./context/providers/PointsPath/QPathFormDataManager"; import type { ExecutionUnitInputSchemaMixin } from "./generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; @@ -17,6 +119,92 @@ type Base = typeof InMemoryEntity & Constructor; type ConstructorConfig = Schema | (Omit & { template: Template }); +type AnyContextItem = + | PlanewaveCutoffDataManagerContextItem + | PointsGridFormDataManagerContextItem + | QPathFormDataManagerContextItem + | IPathFormDataManagerContextItem + | KPathFormDataManagerContextItem + | ExplicitKPathFormDataManagerContextItem + | ExplicitKPath2PIBAFormDataManagerContextItem + | HubbardJContextManagerContextItem + | HubbardUContextManagerContextItem + | HubbardVContextManagerContextItem + | HubbardContextManagerLegacyContextItem + | NEBFormDataManagerContextItem + | BoundaryConditionsFormDataManagerContextItem + | MLSettingsDataManagerContextItem + | MLTrainTestSplitDataManagerContextItem + | IonDynamicsContextProviderContextItem + | CollinearMagnetizationDataManagerContextItem + | NonCollinearMagnetizationDataManagerContextItem + | QEPWXInputDataManagerContextItem + | QENEBInputDataManagerContextItem + | VASPInputDataManagerContextItem + | VASPNEBInputDataManagerContextItem + | NWChemInputDataManagerContextItem; + +export type AnyContextExternalContext = + | PlanewaveCutoffDataManagerExternalContext + | PointsGridFormDataManagerExternalContext + | QPathFormDataManagerExternalContext + | IPathFormDataManagerExternalContext + | KPathFormDataManagerExternalContext + | ExplicitKPathFormDataManagerExternalContext + | ExplicitKPath2PIBAFormDataManagerExternalContext + | HubbardExternalContext + | NEBFormDataManagerExternalContext + | BoundaryConditionsFormDataManagerExternalContext + | MLSettingsDataManagerExternalContext + | MLTrainTestSplitDataManagerExternalContext + | IonDynamicsContextProviderExternalContext + | CollinearMagnetizationDataManagerExternalContext + | NonCollinearMagnetizationDataManagerExternalContext + | QEPWXInputDataManagerExternalContext + | QENEBInputDataManagerExternalContext + | VASPInputDataManagerExternalContext + | VASPNEBInputDataManagerExternalContext + | NWChemInputDataManagerExternalContext; + +type AnyContextProvider = + | BoundaryConditionsFormDataManager + | MLSettingsDataManager + | MLTrainTestSplitDataManager + | IonDynamicsContextProvider + | CollinearMagnetizationDataManager + | NonCollinearMagnetizationDataManager + | QEPWXInputDataManager + | QENEBInputDataManager + | VASPInputDataManager + | VASPNEBInputDataManager + | NWChemInputDataManager + | PlanewaveCutoffDataManager + | KGridFormDataManager + | QGridFormDataManager + | IGridFormDataManager + | QPathFormDataManager + | IPathFormDataManager + | KPathFormDataManager + | ExplicitKPathFormDataManager + | ExplicitKPath2PIBAFormDataManager + | HubbardJContextManager + | HubbardUContextManager + | HubbardVContextManager + | HubbardContextManagerLegacy + | NEBFormDataManager; + +export type ExecutionUnitInputContext = (AnyContextItem & { name: ContextProviderNameEnum })[]; + +type ExternalContext = { + application: Application; + material: OrderedMaterial; + materials: OrderedMaterial[]; + workflow: WorkflowSchema; + job: JobSchema; + isUsingJinjaVariables?: boolean; + materialsSet: { _id: string }; +}; + export default class ExecutionUnitInput extends (InMemoryEntity as Base) implements Schema { declare _json: Schema & AnyObject; @@ -28,7 +216,7 @@ export default class ExecutionUnitInput extends (InMemoryEntity as Base) impleme return JSONSchemasInterface.getSchemaById("workflow/unit/input/-inputItem"); } - contextProvidersInstances: ContextProvider[] = []; + contextProvidersInstances: AnyContextProvider[] = []; readonly templateInstance: Template; @@ -49,20 +237,161 @@ export default class ExecutionUnitInput extends (InMemoryEntity as Base) impleme this.templateInstance = templateInstance; } - setContext(context: ContextItem[]) { + setContext(context: ExecutionUnitInputContext, externalContext: ExternalContext) { this.contextProvidersInstances = this.template.contextProviders.map(({ name }) => { - if (!providers) { - throw new Error("Providers config not set"); - } - - const ContextProvider = providers[name as keyof typeof providers]; const contextItem = context.find((c) => c.name === name); - if (!contextItem) { - throw new Error(`Context item for provider ${name} not found`); + if (name === "PlanewaveCutoffDataManager") { + return new PlanewaveCutoffDataManager( + contextItem as PlanewaveCutoffDataManagerContextItem, + externalContext, + ); } - - return new ContextProvider(contextItem); + if (name === "KGridFormDataManager") { + return new KGridFormDataManager( + contextItem as PointsGridFormDataManagerContextItem, + externalContext, + ); + } + if (name === "QGridFormDataManager") { + return new QGridFormDataManager( + contextItem as PointsGridFormDataManagerContextItem, + externalContext, + ); + } + if (name === "IGridFormDataManager") { + return new IGridFormDataManager( + contextItem as PointsGridFormDataManagerContextItem, + externalContext, + ); + } + if (name === "QPathFormDataManager") { + return new QPathFormDataManager( + contextItem as QPathFormDataManagerContextItem, + externalContext, + ); + } + if (name === "IPathFormDataManager") { + return new IPathFormDataManager( + contextItem as IPathFormDataManagerContextItem, + externalContext, + ); + } + if (name === "KPathFormDataManager") { + return new KPathFormDataManager( + contextItem as KPathFormDataManagerContextItem, + externalContext, + ); + } + if (name === "ExplicitKPathFormDataManager") { + return new ExplicitKPathFormDataManager( + contextItem as ExplicitKPathFormDataManagerContextItem, + externalContext, + ); + } + if (name === "ExplicitKPath2PIBAFormDataManager") { + return new ExplicitKPath2PIBAFormDataManager( + contextItem as ExplicitKPath2PIBAFormDataManagerContextItem, + externalContext, + ); + } + if (name === "HubbardJContextManager") { + return new HubbardJContextManager( + contextItem as HubbardJContextManagerContextItem, + externalContext, + ); + } + if (name === "HubbardUContextManager") { + return new HubbardUContextManager( + contextItem as HubbardUContextManagerContextItem, + externalContext, + ); + } + if (name === "HubbardVContextManager") { + return new HubbardVContextManager( + contextItem as HubbardVContextManagerContextItem, + externalContext, + ); + } + if (name === "HubbardContextManagerLegacy") { + return new HubbardContextManagerLegacy( + contextItem as HubbardContextManagerLegacyContextItem, + externalContext, + ); + } + if (name === "NEBFormDataManager") { + return new NEBFormDataManager( + contextItem as NEBFormDataManagerContextItem, + externalContext, + ); + } + if (name === "BoundaryConditionsFormDataManager") { + return new BoundaryConditionsFormDataManager( + contextItem as BoundaryConditionsFormDataManagerContextItem, + externalContext, + ); + } + if (name === "MLSettingsDataManager") { + return new MLSettingsDataManager( + contextItem as MLSettingsDataManagerContextItem, + externalContext, + ); + } + if (name === "MLTrainTestSplitDataManager") { + return new MLTrainTestSplitDataManager( + contextItem as MLTrainTestSplitDataManagerContextItem, + externalContext, + ); + } + if (name === "IonDynamicsContextProvider") { + return new IonDynamicsContextProvider( + contextItem as IonDynamicsContextProviderContextItem, + externalContext, + ); + } + if (name === "CollinearMagnetizationDataManager") { + return new CollinearMagnetizationDataManager( + contextItem as CollinearMagnetizationDataManagerContextItem, + externalContext, + ); + } + if (name === "NonCollinearMagnetizationDataManager") { + return new NonCollinearMagnetizationDataManager( + contextItem as NonCollinearMagnetizationDataManagerContextItem, + externalContext, + ); + } + if (name === "QEPWXInputDataManager") { + return new QEPWXInputDataManager( + contextItem as QEPWXInputDataManagerContextItem, + externalContext, + ); + } + if (name === "QENEBInputDataManager") { + return new QENEBInputDataManager( + contextItem as QENEBInputDataManagerContextItem, + externalContext, + ); + } + if (name === "VASPInputDataManager") { + return new VASPInputDataManager( + contextItem as VASPInputDataManagerContextItem, + externalContext, + ); + } + if (name === "VASPNEBInputDataManager") { + return new VASPNEBInputDataManager( + contextItem as VASPNEBInputDataManagerContextItem, + externalContext, + ); + } + if (name === "NWChemInputDataManager") { + return new NWChemInputDataManager( + contextItem as NWChemInputDataManagerContextItem, + externalContext, + ); + } + throw new Error(`Unknown provider: ${name}`); }); return this; @@ -83,7 +412,7 @@ export default class ExecutionUnitInput extends (InMemoryEntity as Base) impleme getFullContext() { return this.contextProvidersInstances.map((contextProvider) => { - return contextProvider.getContextItem(); + return contextProvider.getContextItemData(); }); } } diff --git a/src/js/context/mixins/ApplicationContextMixin.ts b/src/js/context/mixins/ApplicationContextMixin.ts index 45d7475a..948a738a 100644 --- a/src/js/context/mixins/ApplicationContextMixin.ts +++ b/src/js/context/mixins/ApplicationContextMixin.ts @@ -8,15 +8,11 @@ export type ApplicationContextMixin = { initApplicationContextMixin(externalContext: ApplicationExternalContext): void; }; -type PrivateProperties = { - application?: Application; -}; - export type ApplicationExternalContext = { application?: Application }; export function applicationContextMixin(item: ContextProvider) { // @ts-expect-error - const properties: Provider & ApplicationContextMixin & PrivateProperties = { + const properties: Provider & ApplicationContextMixin = { initApplicationContextMixin(externalContext: ApplicationExternalContext) { this.application = externalContext.application ?? globalSettings.Application.createDefault(); diff --git a/src/js/context/mixins/ContextAndRenderFieldsMixin.ts b/src/js/context/mixins/ContextAndRenderFieldsMixin.ts index ea4c7653..86ca2bb1 100644 --- a/src/js/context/mixins/ContextAndRenderFieldsMixin.ts +++ b/src/js/context/mixins/ContextAndRenderFieldsMixin.ts @@ -13,13 +13,7 @@ export type ContextMixin = { getCombinedContext(): Context; }; -type AbstractBase = { - render(ctx: Context): void; -}; - -export function contextMixin( - item: T, -): asserts item is T & ContextMixin { +export function contextMixin(item: T): asserts item is T & ContextMixin { // @ts-expect-error const properties: InMemoryEntity & ContextMixin = { get context() { diff --git a/src/js/context/mixins/ImportantSettingsProviderMixin.ts b/src/js/context/mixins/ImportantSettingsProviderMixin.ts index 21f1d989..ea77c701 100644 --- a/src/js/context/mixins/ImportantSettingsProviderMixin.ts +++ b/src/js/context/mixins/ImportantSettingsProviderMixin.ts @@ -2,25 +2,16 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { deepClone } from "@mat3ra/code/dist/js/utils/clone"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -export interface ContextProvider { - domain?: string; -} - export type ImportantSettingsProvider = { important: object; setImportant(key: string, value: unknown): void; - importantSettingsProviders: ContextProvider[]; isImportantEdited: boolean | undefined; }; -type AbstractBase = { - contextProviders: ContextProvider[]; -}; - export type ImportantSettingsProviderInMemoryEntityConstructor = Constructor; -export function importantSettingsProviderMixin( +export function importantSettingsProviderMixin( item: T, ): asserts item is T & ImportantSettingsProvider { // @ts-expect-error @@ -33,10 +24,6 @@ export function importantSettingsProviderMixin p.domain === "important"); - }, - get isImportantEdited() { return this.prop("important.isEdited"); }, diff --git a/src/js/context/mixins/MaterialsSetContextMixin.ts b/src/js/context/mixins/MaterialsSetContextMixin.ts index 11113801..f0f9c76e 100644 --- a/src/js/context/mixins/MaterialsSetContextMixin.ts +++ b/src/js/context/mixins/MaterialsSetContextMixin.ts @@ -1,25 +1,26 @@ import { compareEntitiesInOrderedSetForSorting } from "@mat3ra/code/dist/js/entity/set/ordered/utils"; +import type ContextProvider from "../providers/base/ContextProvider"; import type { OrderedMaterial } from "./MaterialContextMixin"; type MaterialsSet = { _id: string; }; -export type MaterialsSetContextMixin = { +export type MaterialsSetExternalContext = { materialsSet: MaterialsSet; - initMaterialsSetContextMixin(externalContext: MaterialsSetContextProvider): void; - sortMaterialsByIndexInSet(materials?: OrderedMaterial[]): OrderedMaterial[]; }; -type MaterialsSetContextProvider = { +export type MaterialsSetContextMixin = { materialsSet: MaterialsSet; + initMaterialsSetContextMixin(externalContext: MaterialsSetExternalContext): void; + sortMaterialsByIndexInSet(materials?: OrderedMaterial[]): OrderedMaterial[]; }; -export default function materialsSetContextMixin(item: MaterialsSetContextProvider) { +export default function materialsSetContextMixin(item: ContextProvider) { // @ts-expect-error const properties: MaterialsSetContextProvider & MaterialsSetContextMixin = { - initMaterialsSetContextMixin(externalContext: MaterialsSetContextProvider) { + initMaterialsSetContextMixin(externalContext: MaterialsSetExternalContext) { this.materialsSet = externalContext.materialsSet; }, diff --git a/src/js/context/providers.ts b/src/js/context/providers.ts deleted file mode 100644 index ec304edd..00000000 --- a/src/js/context/providers.ts +++ /dev/null @@ -1,183 +0,0 @@ -// import type { ContextProviderNameEnum as ProviderName } from "@mat3ra/esse/dist/js/types"; - -// import type ContextProvider from "./providers/base/ContextProvider"; -// import type { ContextItem } from "./providers/base/ContextProvider"; -import BoundaryConditionsFormDataProvider from "./providers/BoundaryConditionsFormDataProvider"; -import QENEBContextProvider from "./providers/by_application/espresso/QENEBContextProvider"; -import QEPWXContextProvider from "./providers/by_application/espresso/QEPWXContextProvider"; -import NWChemTotalEnergyContextProvider from "./providers/by_application/nwchem/NWChemTotalEnergyContextProvider"; -import VASPContextProvider from "./providers/by_application/vasp/VASPContextProvider"; -import VASPNEBContextProvider from "./providers/by_application/vasp/VASPNEBContextProvider"; -import CollinearMagnetizationContextProvider from "./providers/CollinearMagnetizationContextProvider"; -import HubbardContextProviderLegacy from "./providers/Hubbard/HubbardContextProviderLegacy"; -import HubbardJContextProvider from "./providers/Hubbard/HubbardJContextProvider"; -import HubbardUContextProvider from "./providers/Hubbard/HubbardUContextProvider"; -import HubbardVContextProvider from "./providers/Hubbard/HubbardVContextProvider"; -import IonDynamicsContextProvider from "./providers/IonDynamicsContextProvider"; -import MLSettingsContextProvider from "./providers/MLSettingsContextProvider"; -import MLTrainTestSplitContextProvider from "./providers/MLTrainTestSplitContextProvider"; -import NEBFormDataProvider from "./providers/NEBFormDataProvider"; -import NonCollinearMagnetizationContextProvider from "./providers/NonCollinearMagnetizationContextProvider"; -import PlanewaveCutoffsContextProvider from "./providers/PlanewaveCutoffsContextProvider"; -import IGridFormDataManager from "./providers/PointsGrid/IGridFormDataManager"; -import KGridFormDataManager from "./providers/PointsGrid/KGridFormDataManager"; -import QGridFormDataManager from "./providers/PointsGrid/QGridFormDataManager"; -import ExplicitKPath2PIBAFormDataManager from "./providers/PointsPath/ExplicitKPath2PIBAFormDataManager"; -import ExplicitKPathFormDataManager from "./providers/PointsPath/ExplicitKPathFormDataManager"; -import IPathFormDataManager from "./providers/PointsPath/IPathFormDataManager"; -import KPathFormDataManager from "./providers/PointsPath/KPathFormDataManager"; -import QPathFormDataManager from "./providers/PointsPath/QPathFormDataManager"; - -// const CONTEXT_DOMAINS = { -// important: "important", // used to generate `ImportantSettings` form -// }; - -// export type ProvidersConfig = Record< -// ProviderName, -// new ( -// config: ContextItem, -// domain?: string, -// entityName?: "unit" | "subworkflow", -// ) => ContextProvider -// >; - -/** ******************************** - * Method-based context providers * - ********************************* */ - -// export const wodeProviders = { -// // NOTE: subworkflow-level data manager. Will override the unit-level data with the same name via subworkflow context. -// PlanewaveCutoffDataManager: { -// providerCls: PlanewaveCutoffsContextProvider, -// config: _makeImportant({ name: "cutoffs", entityName: "subworkflow" }), -// }, -// KGridFormDataManager: { -// providerCls: PointsGridFormDataProvider, -// config: _makeImportant({ name: "kgrid" }), -// }, -// QGridFormDataManager: { -// providerCls: PointsGridFormDataProvider, -// config: _makeImportant({ name: "qgrid", divisor: 5 }), // Using less points for Qgrid by default -// }, -// IGridFormDataManager: { -// providerCls: PointsGridFormDataProvider, -// config: _makeImportant({ name: "igrid", divisor: 0.2 }), // Using more points for interpolated grid by default -// }, -// QPathFormDataManager: { -// providerCls: PointsPathFormDataProvider, -// config: _makeImportant({ name: "qpath" }), -// }, -// IPathFormDataManager: { -// providerCls: PointsPathFormDataProvider, -// config: _makeImportant({ name: "ipath" }), -// }, -// KPathFormDataManager: { -// providerCls: PointsPathFormDataProvider, -// config: _makeImportant({ name: "kpath" }), -// }, -// ExplicitKPathFormDataManager: { -// providerCls: ExplicitPointsPathFormDataProvider, -// config: _makeImportant({ name: "explicitKPath" }), -// }, -// ExplicitKPath2PIBAFormDataManager: { -// providerCls: ExplicitPointsPath2PIBAFormDataProvider, -// config: _makeImportant({ name: "explicitKPath2PIBA" }), -// }, -// HubbardJContextManager: { -// providerCls: HubbardJContextProvider, -// config: _makeImportant({ name: "hubbard_j" }), -// }, -// HubbardUContextManager: { -// providerCls: HubbardUContextProvider, -// config: _makeImportant({ name: "hubbard_u" }), -// }, -// HubbardVContextManager: { -// providerCls: HubbardVContextProvider, -// config: _makeImportant({ name: "hubbard_v" }), -// }, -// HubbardContextManagerLegacy: { -// providerCls: HubbardContextProviderLegacy, -// config: _makeImportant({ name: "hubbard_legacy" }), -// }, -// // NEBFormDataManager context is stored under the same key (`input`) as InputDataManager contexts. -// NEBFormDataManager: { -// providerCls: NEBFormDataProvider, -// config: _makeImportant({ name: "neb" }), -// }, -// BoundaryConditionsFormDataManager: { -// providerCls: BoundaryConditionsFormDataProvider, -// config: _makeImportant({ name: "boundaryConditions" }), -// }, -// MLSettingsDataManager: { -// providerCls: MLSettingsContextProvider, -// config: _makeImportant({ name: "mlSettings" }), -// }, -// MLTrainTestSplitDataManager: { -// providerCls: MLTrainTestSplitContextProvider, -// config: _makeImportant({ name: "mlTrainTestSplit" }), -// }, -// IonDynamicsContextProvider: { -// providerCls: IonDynamicsContextProvider, -// config: _makeImportant({ name: "dynamics" }), -// }, -// CollinearMagnetizationDataManager: { -// providerCls: CollinearMagnetizationContextProvider, -// config: _makeImportant({ name: "collinearMagnetization" }), -// }, -// NonCollinearMagnetizationDataManager: { -// providerCls: NonCollinearMagnetizationContextProvider, -// config: _makeImportant({ name: "nonCollinearMagnetization" }), -// }, -// QEPWXInputDataManager: { -// providerCls: QEPWXContextProvider, -// config: { name: "input" }, -// }, -// QENEBInputDataManager: { -// providerCls: QENEBContextProvider, -// config: { name: "input" }, -// }, -// VASPInputDataManager: { -// providerCls: VASPContextProvider, -// config: { name: "input" }, -// }, -// VASPNEBInputDataManager: { -// providerCls: VASPNEBContextProvider, -// config: { name: "input" }, -// }, -// NWChemInputDataManager: { -// providerCls: NWChemTotalEnergyContextProvider, -// config: { name: "input" }, -// }, -// }; - -export const newWodeProviders = { - PlanewaveCutoffDataManager: PlanewaveCutoffsContextProvider, - - KGridFormDataManager, - QGridFormDataManager, - IGridFormDataManager, - - QPathFormDataManager, - IPathFormDataManager, - KPathFormDataManager, - ExplicitKPathFormDataManager, - ExplicitKPath2PIBAFormDataManager, - - HubbardJContextManager: HubbardJContextProvider, - HubbardUContextManager: HubbardUContextProvider, - HubbardVContextManager: HubbardVContextProvider, - HubbardContextManagerLegacy: HubbardContextProviderLegacy, - NEBFormDataManager: NEBFormDataProvider, - BoundaryConditionsFormDataManager: BoundaryConditionsFormDataProvider, - MLSettingsDataManager: MLSettingsContextProvider, - MLTrainTestSplitDataManager: MLTrainTestSplitContextProvider, - IonDynamicsContextProvider, - CollinearMagnetizationDataManager: CollinearMagnetizationContextProvider, - NonCollinearMagnetizationDataManager: NonCollinearMagnetizationContextProvider, - - QEPWXInputDataManager: QEPWXContextProvider, - QENEBInputDataManager: QENEBContextProvider, - VASPInputDataManager: VASPContextProvider, - VASPNEBInputDataManager: VASPNEBContextProvider, - NWChemInputDataManager: NWChemTotalEnergyContextProvider, -}; diff --git a/src/js/context/providers/BoundaryConditionsFormDataProvider.ts b/src/js/context/providers/BoundaryConditionsFormDataManager.ts similarity index 79% rename from src/js/context/providers/BoundaryConditionsFormDataProvider.ts rename to src/js/context/providers/BoundaryConditionsFormDataManager.ts index daa1008a..c69149af 100644 --- a/src/js/context/providers/BoundaryConditionsFormDataProvider.ts +++ b/src/js/context/providers/BoundaryConditionsFormDataManager.ts @@ -6,21 +6,24 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "./base/ContextProvider"; +import type { ContextItem } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Name = "boundaryConditions"; type Data = BoundaryConditionsDataProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext; +export type BoundaryConditionsFormDataManagerContextItem = ContextItem; +export type BoundaryConditionsFormDataManagerExternalContext = JinjaExternalContext & + MaterialExternalContext; +type ExternalContext = BoundaryConditionsFormDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor; const jsonSchemaId = "context-providers-directory/boundary-conditions-data-provider"; -export default class BoundaryConditionsFormDataProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "boundaryConditions"; +export default class BoundaryConditionsFormDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "boundaryConditions" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly humanName = "Boundary Conditions"; @@ -64,4 +67,4 @@ export default class BoundaryConditionsFormDataProvider extends (JSONSchemaDataP } } -materialContextMixin(BoundaryConditionsFormDataProvider.prototype); +materialContextMixin(BoundaryConditionsFormDataManager.prototype); diff --git a/src/js/context/providers/CollinearMagnetizationContextProvider.ts b/src/js/context/providers/CollinearMagnetizationDataManager.ts similarity index 85% rename from src/js/context/providers/CollinearMagnetizationContextProvider.ts rename to src/js/context/providers/CollinearMagnetizationDataManager.ts index 4ab7b989..d49c1ca4 100644 --- a/src/js/context/providers/CollinearMagnetizationContextProvider.ts +++ b/src/js/context/providers/CollinearMagnetizationDataManager.ts @@ -7,21 +7,24 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "./base/ContextProvider"; +import type { ContextItem } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Name = "collinearMagnetization"; type Data = CollinearMagnetizationContextProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext; +export type CollinearMagnetizationDataManagerContextItem = ContextItem; +export type CollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & + MaterialExternalContext; +type ExternalContext = CollinearMagnetizationDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor; const jsonSchemaId = "context-providers-directory/collinear-magnetization-context-provider"; -export default class CollinearMagnetizationContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "collinearMagnetization"; +export default class CollinearMagnetizationDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "collinearMagnetization" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -112,4 +115,4 @@ export default class CollinearMagnetizationContextProvider extends (JSONSchemaDa } } -materialContextMixin(CollinearMagnetizationContextProvider.prototype); +materialContextMixin(CollinearMagnetizationDataManager.prototype); diff --git a/src/js/context/providers/Hubbard/HubbardContextProviderLegacy.ts b/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts similarity index 86% rename from src/js/context/providers/Hubbard/HubbardContextProviderLegacy.ts rename to src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts index 0b60691a..eaf996a1 100644 --- a/src/js/context/providers/Hubbard/HubbardContextProviderLegacy.ts +++ b/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts @@ -2,11 +2,12 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { HubbardLegacyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; type Name = "hubbard_legacy"; type Data = HubbardLegacyContextProviderSchema; +export type HubbardContextManagerLegacyContextItem = ContextItem; const defaultHubbardConfig = { hubbardUValue: 1.0, @@ -14,10 +15,10 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-legacy-context-provider"; -export default class HubbardContextProviderLegacy extends HubbardContextProvider { - readonly name: Name = "hubbard_legacy"; +export default class HubbardContextManagerLegacy extends HubbardContextProvider { + readonly name = "hubbard_legacy" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -30,7 +31,7 @@ export default class HubbardContextProviderLegacy extends HubbardContextProvider items: { atomicSpeciesIndex: { "ui:readonly": true }, }, - }; + } as const; constructor(contextItem: ContextItem, externalContext: HubbardExternalContext) { super(contextItem, externalContext); diff --git a/src/js/context/providers/Hubbard/HubbardContextProvider.ts b/src/js/context/providers/Hubbard/HubbardContextProvider.ts index 39648163..0ade044d 100644 --- a/src/js/context/providers/Hubbard/HubbardContextProvider.ts +++ b/src/js/context/providers/Hubbard/HubbardContextProvider.ts @@ -4,7 +4,7 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; type HubbardName = "hubbard_u" | "hubbard_j" | "hubbard_v" | "hubbard_legacy"; @@ -23,7 +23,7 @@ export default abstract class HubbardContextProvider< abstract getDefaultData(): D; - readonly domain: Domain = "important"; + readonly domain = "important" as const; protected readonly uniqueElementsWithLabels: string[]; diff --git a/src/js/context/providers/Hubbard/HubbardJContextProvider.ts b/src/js/context/providers/Hubbard/HubbardJContextManager.ts similarity index 89% rename from src/js/context/providers/Hubbard/HubbardJContextProvider.ts rename to src/js/context/providers/Hubbard/HubbardJContextManager.ts index 9eaa9a4e..6c07f843 100644 --- a/src/js/context/providers/Hubbard/HubbardJContextProvider.ts +++ b/src/js/context/providers/Hubbard/HubbardJContextManager.ts @@ -8,6 +8,8 @@ import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardCo type Name = "hubbard_j"; type Data = HubbardJContextProviderSchema; +export type HubbardJContextManagerContextItem = ContextItem; + const defaultHubbardConfig = { paramType: "J" as const, atomicSpecies: "", @@ -17,8 +19,8 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-j-context-provider"; -export default class HubbardJContextProvider extends HubbardContextProvider { - readonly name: Name = "hubbard_j"; +export default class HubbardJContextManager extends HubbardContextProvider { + readonly name = "hubbard_j" as const; readonly uiSchemaStyled = { "ui:options": { @@ -26,7 +28,7 @@ export default class HubbardJContextProvider extends HubbardContextProvider; const defaultHubbardConfig = { atomicSpecies: "", @@ -17,8 +18,8 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-u-context-provider"; -export default class HubbardUContextProvider extends HubbardContextProvider { - readonly name: Name = "hubbard_u"; +export default class HubbardUContextManager extends HubbardContextProvider { + readonly name = "hubbard_u" as const; readonly uiSchemaStyled = { "ui:options": { @@ -26,7 +27,7 @@ export default class HubbardUContextProvider extends HubbardContextProvider; const defaultHubbardConfig = { atomicSpecies: "", @@ -20,8 +21,8 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-v-context-provider"; -export default class HubbardVContextProvider extends HubbardContextProvider { - readonly name: Name = "hubbard_v"; +export default class HubbardVContextManager extends HubbardContextProvider { + readonly name = "hubbard_v" as const; readonly uiSchemaStyled = { "ui:options": { @@ -29,7 +30,7 @@ export default class HubbardVContextProvider extends HubbardContextProvider; +export type IonDynamicsContextProviderExternalContext = ExternalContext; const jsonSchemaId = "context-providers-directory/ion-dynamics-context-provider"; @@ -18,9 +20,9 @@ const defaultData = { }; export default class IonDynamicsContextProvider extends JSONSchemaFormDataProvider { - readonly name: Name = "dynamics"; + readonly name = "dynamics" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly uiSchema = { numberOfSteps: {}, diff --git a/src/js/context/providers/MLSettingsContextProvider.ts b/src/js/context/providers/MLSettingsDataManager.ts similarity index 73% rename from src/js/context/providers/MLSettingsContextProvider.ts rename to src/js/context/providers/MLSettingsDataManager.ts index 06c81a9e..8fc9d927 100644 --- a/src/js/context/providers/MLSettingsContextProvider.ts +++ b/src/js/context/providers/MLSettingsDataManager.ts @@ -5,14 +5,20 @@ import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, + type ApplicationExternalContext, applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import { type ContextItem, type Domain } from "./base/ContextProvider"; +import { type ContextItem } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Name = "mlSettings"; type Data = MLSettingsContextProviderSchema; -type ExternalContext = JinjaExternalContext & ApplicationContextMixin; + +export type MLSettingsDataManagerContextItem = ContextItem; +export type MLSettingsDataManagerExternalContext = JinjaExternalContext & + ApplicationExternalContext; + +type ExternalContext = MLSettingsDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor; @@ -23,10 +29,10 @@ const defaultData = { problem_category: "regression" as const, }; -export default class MLSettingsContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "mlSettings"; +export default class MLSettingsDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "mlSettings" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -51,4 +57,4 @@ export default class MLSettingsContextProvider extends (JSONSchemaDataProvider a } } -applicationContextMixin(MLSettingsContextProvider.prototype); +applicationContextMixin(MLSettingsDataManager.prototype); diff --git a/src/js/context/providers/MLTrainTestSplitContextProvider.ts b/src/js/context/providers/MLTrainTestSplitDataManager.ts similarity index 71% rename from src/js/context/providers/MLTrainTestSplitContextProvider.ts rename to src/js/context/providers/MLTrainTestSplitDataManager.ts index 34a374c6..6339f710 100644 --- a/src/js/context/providers/MLTrainTestSplitContextProvider.ts +++ b/src/js/context/providers/MLTrainTestSplitDataManager.ts @@ -5,14 +5,20 @@ import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, + type ApplicationExternalContext, applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import { type ContextItem, type Domain } from "./base/ContextProvider"; +import { type ContextItem } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Name = "mlTrainTestSplit"; type Data = MLTrainTestSplitContextProviderSchema; -type ExternalContext = JinjaExternalContext & ApplicationContextMixin; + +export type MLTrainTestSplitDataManagerContextItem = ContextItem; +export type MLTrainTestSplitDataManagerExternalContext = JinjaExternalContext & + ApplicationExternalContext; + +type ExternalContext = MLTrainTestSplitDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor; const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; @@ -21,10 +27,10 @@ const defaultData = { fraction_held_as_test_set: 0.2, }; -export default class MLTrainTestSplitContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "mlTrainTestSplit"; +export default class MLTrainTestSplitDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "mlTrainTestSplit" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -48,4 +54,4 @@ export default class MLTrainTestSplitContextProvider extends (JSONSchemaDataProv } } -applicationContextMixin(MLTrainTestSplitContextProvider.prototype); +applicationContextMixin(MLTrainTestSplitDataManager.prototype); diff --git a/src/js/context/providers/NEBFormDataProvider.ts b/src/js/context/providers/NEBFormDataManager.ts similarity index 71% rename from src/js/context/providers/NEBFormDataProvider.ts rename to src/js/context/providers/NEBFormDataManager.ts index df67cc78..b1f13d46 100644 --- a/src/js/context/providers/NEBFormDataProvider.ts +++ b/src/js/context/providers/NEBFormDataManager.ts @@ -2,13 +2,15 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { NEBDataProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, Domain } from "./base/ContextProvider"; +import type { ContextItem } from "./base/ContextProvider"; import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; type Name = "neb"; type Data = NEBDataProviderSchema; -type ExternalContext = JinjaExternalContext; +export type NEBFormDataManagerContextItem = ContextItem; +export type NEBFormDataManagerExternalContext = JinjaExternalContext; +type ExternalContext = NEBFormDataManagerExternalContext; const jsonSchemaId = "context-providers-directory/neb-data-provider"; @@ -16,10 +18,10 @@ const defaultData = { nImages: 1, }; -export default class NEBFormDataProvider extends JSONSchemaFormDataProvider { - readonly name: Name = "neb"; +export default class NEBFormDataManager extends JSONSchemaFormDataProvider { + readonly name = "neb" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly uiSchema = { nImages: {}, diff --git a/src/js/context/providers/NonCollinearMagnetizationContextProvider.ts b/src/js/context/providers/NonCollinearMagnetizationDataManager.ts similarity index 91% rename from src/js/context/providers/NonCollinearMagnetizationContextProvider.ts rename to src/js/context/providers/NonCollinearMagnetizationDataManager.ts index 299e2637..60de8f22 100644 --- a/src/js/context/providers/NonCollinearMagnetizationContextProvider.ts +++ b/src/js/context/providers/NonCollinearMagnetizationDataManager.ts @@ -7,20 +7,23 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "./base/ContextProvider"; +import type { ContextItem } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Name = "nonCollinearMagnetization"; type Data = NonCollinearMagnetizationContextProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext; +export type NonCollinearMagnetizationDataManagerContextItem = ContextItem; +export type NonCollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & + MaterialExternalContext; +type ExternalContext = NonCollinearMagnetizationDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor; const jsonSchemaId = "context-providers-directory/non-collinear-magnetization-context-provider"; -export default class NonCollinearMagnetizationContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "nonCollinearMagnetization"; +export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "nonCollinearMagnetization" as const; - readonly domain: Domain = "important"; + readonly domain = "important" as const; readonly isStartingMagnetization: boolean; @@ -188,4 +191,4 @@ export default class NonCollinearMagnetizationContextProvider extends (JSONSchem } } -materialContextMixin(NonCollinearMagnetizationContextProvider.prototype); +materialContextMixin(NonCollinearMagnetizationDataManager.prototype); diff --git a/src/js/context/providers/PlanewaveCutoffsContextProvider.ts b/src/js/context/providers/PlanewaveCutoffDataManager.ts similarity index 71% rename from src/js/context/providers/PlanewaveCutoffsContextProvider.ts rename to src/js/context/providers/PlanewaveCutoffDataManager.ts index d48875c1..0069788d 100644 --- a/src/js/context/providers/PlanewaveCutoffsContextProvider.ts +++ b/src/js/context/providers/PlanewaveCutoffDataManager.ts @@ -5,22 +5,22 @@ import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, + type ApplicationExternalContext, applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import ContextProvider, { - type ContextItem, - type Domain, - type EntityName, - type ExternalContext, -} from "./base/ContextProvider"; +import ContextProvider, { type ContextItem, type ExternalContext } from "./base/ContextProvider"; type ApplicationName = "vasp" | "espresso"; type Name = "cutoffs"; type Data = PlanewaveCutoffsContextProviderSchema; -type PlanewaveExternalContext = ExternalContext & ApplicationContextMixin; +type PlanewaveExternalContext = ExternalContext & ApplicationExternalContext; type Base = typeof ContextProvider & Constructor; +export type PlanewaveCutoffDataManagerContextItem = ContextItem; +export type PlanewaveCutoffDataManagerExternalContext = PlanewaveExternalContext; + +// TODO: create a task to move this handling to standata const cutoffConfig: Record = { vasp: { wavefunction: undefined, density: undefined }, espresso: { wavefunction: 40, density: 200 }, @@ -28,12 +28,12 @@ const cutoffConfig: Record { - readonly name: Name = "igrid"; + readonly name = "igrid" as const; - readonly divisor: number = 0.2; + readonly divisor = 0.2 as const; } diff --git a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts index a41059ca..3af3f0d6 100644 --- a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts @@ -3,5 +3,7 @@ import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; type Name = "kgrid"; export default class KGridFormDataManager extends PointsGridFormDataProvider { - readonly name: Name = "kgrid"; + readonly name = "kgrid" as const; + + readonly divisor = 1 as const; } diff --git a/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts b/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts index 30fce02d..d59cc1a5 100644 --- a/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts +++ b/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts @@ -11,21 +11,21 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import type { JinjaExternalContext } from "../base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "../base/JSONSchemaFormDataProvider"; import { globalSettings } from "../settings"; -type Name = string; +type Name = "qgrid" | "kgrid" | "igrid"; type Data = PointsGridDataProviderSchema; -type EContext = JinjaExternalContext & - MaterialExternalContext & { - divisor: number; - }; +type EContext = JinjaExternalContext & MaterialExternalContext; type Base = typeof JSONSchemaFormDataProvider & Constructor; -type GridMetricType = Required["gridMetricType"]; +type GridMetricType = Data["gridMetricType"]; + +export type PointsGridFormDataManagerContextItem = ContextItem; +export type PointsGridFormDataManagerExternalContext = EContext; // Helper function to create vector schema with defaults const vector = ( @@ -51,11 +51,11 @@ const defaultShift = 0; const defaultShifts: Vector3DSchema = [defaultShift, defaultShift, defaultShift]; export default abstract class PointsGridFormDataProvider< - N extends string = string, + N extends Name, > extends (JSONSchemaFormDataProvider as Base) { abstract readonly name: N; - readonly domain: Domain = "important"; + readonly domain = "important" as const; public dimensions!: Vector3DSchema; @@ -73,6 +73,8 @@ export default abstract class PointsGridFormDataProvider< private reciprocalVectorRatios!: Vector3DSchema; + abstract readonly divisor: number; + private defaultMetric!: { type: GridMetricType; value: number; @@ -117,11 +119,8 @@ export default abstract class PointsGridFormDataProvider< private getDefaultGridMetricValue(metric: GridMetricType) { switch (metric) { - case "KPPRA": { - const divisor = this.externalContext?.divisor || 1; - const { defaultKPPRA } = globalSettings; - return Math.floor(defaultKPPRA / divisor); - } + case "KPPRA": + return Math.floor(globalSettings.defaultKPPRA / this.divisor); case "spacing": return 0.3; default: diff --git a/src/js/context/providers/PointsGrid/QGridFormDataManager.ts b/src/js/context/providers/PointsGrid/QGridFormDataManager.ts index 4ce4c14a..365eda50 100644 --- a/src/js/context/providers/PointsGrid/QGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/QGridFormDataManager.ts @@ -3,7 +3,7 @@ import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; type Name = "qgrid"; export default class QGridFormDataManager extends PointsGridFormDataProvider { - readonly name: Name = "qgrid"; + readonly name = "qgrid" as const; - readonly divisor: number = 5; + readonly divisor = 5 as const; } diff --git a/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts b/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts index dde317b6..1d8257aa 100644 --- a/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts +++ b/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts @@ -1,9 +1,18 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { + type PointsPathFormDataProviderData, + type PointsPathFormDataProviderExternalContext, +} from "./PointsPathFormDataProvider"; type Name = "explicitKPath2PIBA"; +export type ExplicitKPath2PIBAFormDataManagerContextItem = + ContextItem; +export type ExplicitKPath2PIBAFormDataManagerExternalContext = + PointsPathFormDataProviderExternalContext; + export default class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDataProvider { - readonly name: Name = "explicitKPath2PIBA"; + readonly name = "explicitKPath2PIBA" as const; readonly is2PIBA = true; diff --git a/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts b/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts index 5cffa4bc..e7194557 100644 --- a/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts @@ -1,9 +1,16 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { + type PointsPathFormDataProviderData, + type PointsPathFormDataProviderExternalContext, +} from "./PointsPathFormDataProvider"; type Name = "explicitKPath"; +export type ExplicitKPathFormDataManagerContextItem = ContextItem; +export type ExplicitKPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; + export default class ExplicitKPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name = "explicitKPath"; + readonly name = "explicitKPath" as const; readonly useExplicitPath = true; } diff --git a/src/js/context/providers/PointsPath/IPathFormDataManager.ts b/src/js/context/providers/PointsPath/IPathFormDataManager.ts index 9d29fabb..cc743020 100644 --- a/src/js/context/providers/PointsPath/IPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/IPathFormDataManager.ts @@ -1,7 +1,14 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { + type PointsPathFormDataProviderData, + type PointsPathFormDataProviderExternalContext, +} from "./PointsPathFormDataProvider"; type Name = "ipath"; +export type IPathFormDataManagerContextItem = ContextItem; +export type IPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; + export default class IPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name = "ipath"; + readonly name = "ipath" as const; } diff --git a/src/js/context/providers/PointsPath/KPathFormDataManager.ts b/src/js/context/providers/PointsPath/KPathFormDataManager.ts index 5e4e8461..f64048f0 100644 --- a/src/js/context/providers/PointsPath/KPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/KPathFormDataManager.ts @@ -1,7 +1,14 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { + type PointsPathFormDataProviderData, + type PointsPathFormDataProviderExternalContext, +} from "./PointsPathFormDataProvider"; type Name = "kpath"; +export type KPathFormDataManagerContextItem = ContextItem; +export type KPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; + export default class KPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name = "kpath"; + readonly name = "kpath" as const; } diff --git a/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts b/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts index 2929e21e..a00accd0 100644 --- a/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts +++ b/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts @@ -7,21 +7,27 @@ import s from "underscore.string"; import { type ApplicationContextMixin, + type ApplicationExternalContext, applicationContextMixin, } from "../../mixins/ApplicationContextMixin"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "../base/ContextProvider"; +import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; const defaultPoint = "Г" as const; const defaultSteps = 10 as const; -type Data = PointsPathDataProviderSchema; // same as KPointCoordinates +export type PointsPathFormDataProviderData = PointsPathDataProviderSchema; // same as KPointCoordinates +export type PointsPathFormDataProviderExternalContext = JinjaExternalContext & + MaterialExternalContext & + ApplicationExternalContext; + +type Data = PointsPathFormDataProviderData; type DataItem = Data[0]; -type ExternalContext = JinjaExternalContext & MaterialExternalContext & ApplicationContextMixin; +type ExternalContext = PointsPathFormDataProviderExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; @@ -42,7 +48,7 @@ applicationContextMixin(MixinsContextProvider.prototype); abstract class PointsPathFormDataProvider extends MixinsContextProvider { abstract name: N; - readonly domain: Domain = "important"; + readonly domain = "important" as const; private reciprocalLattice: ReciprocalLattice; @@ -131,7 +137,6 @@ abstract class PointsPathFormDataProvider extends MixinsContex const steps = 1; - // TODO-QUESTION: confirm that "point" property should be present after transformation; point was missing in original implementation acc.push( { steps, @@ -141,8 +146,8 @@ abstract class PointsPathFormDataProvider extends MixinsContex ...middlePoints.map((coordinates) => ({ steps, coordinates, - // TODO-QUESTION: is this correct? - point: startPoint.point, + // TODO: make point optional + // point: startPoint.point, })), ); diff --git a/src/js/context/providers/PointsPath/QPathFormDataManager.ts b/src/js/context/providers/PointsPath/QPathFormDataManager.ts index e16a5d03..e5b04ce8 100644 --- a/src/js/context/providers/PointsPath/QPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/QPathFormDataManager.ts @@ -1,7 +1,14 @@ -import PointsPathFormDataProvider from "./PointsPathFormDataProvider"; +import type { ContextItem } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { + type PointsPathFormDataProviderData, + type PointsPathFormDataProviderExternalContext, +} from "./PointsPathFormDataProvider"; type Name = "qpath"; +export type QPathFormDataManagerContextItem = ContextItem; +export type QPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; + export default class QPathFormDataManager extends PointsPathFormDataProvider { - readonly name: Name = "qpath"; + readonly name = "qpath" as const; } diff --git a/src/js/context/providers/base/ContextProvider.ts b/src/js/context/providers/base/ContextProvider.ts index dfb22bd8..30f27449 100644 --- a/src/js/context/providers/base/ContextProvider.ts +++ b/src/js/context/providers/base/ContextProvider.ts @@ -94,7 +94,7 @@ abstract class ContextProvider< this.data = data ? Utils.clone.deepClone(data) : undefined; } - getContextItem(): ExtendedContextItem { + getContextItemData(): ExtendedContextItem { return { name: this.name, isEdited: this.isEdited, diff --git a/src/js/context/providers/base/JSONSchemaDataProvider.ts b/src/js/context/providers/base/JSONSchemaDataProvider.ts index dddf64b5..06da83c1 100644 --- a/src/js/context/providers/base/JSONSchemaDataProvider.ts +++ b/src/js/context/providers/base/JSONSchemaDataProvider.ts @@ -1,7 +1,7 @@ /* eslint-disable class-methods-use-this */ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; -import type { ContextItem, EntityName, ExternalContext } from "./ContextProvider"; +import type { ContextItem, ExternalContext } from "./ContextProvider"; import ContextProvider from "./ContextProvider"; export interface JinjaExternalContext extends ExternalContext { @@ -20,7 +20,7 @@ abstract class JSONSchemaDataProvider< > extends ContextProvider { abstract readonly jsonSchema: JSONSchema | undefined; - readonly entityName: EntityName = "unit"; + readonly entityName = "unit" as const; isUsingJinjaVariables: boolean; diff --git a/src/js/context/providers/by_application/espresso/QENEBContextProvider.ts b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts similarity index 75% rename from src/js/context/providers/by_application/espresso/QENEBContextProvider.ts rename to src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts index 66192f1b..4e7e4c9e 100644 --- a/src/js/context/providers/by_application/espresso/QENEBContextProvider.ts +++ b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts @@ -17,6 +17,7 @@ import materialsContextMixin, { } from "../../../mixins/MaterialsContextMixin"; import materialsSetContextMixin, { type MaterialsSetContextMixin, + type MaterialsSetExternalContext, } from "../../../mixins/MaterialsSetContextMixin"; import methodDataContextMixin, { type MethodDataContextMixin, @@ -26,24 +27,27 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; +import type { ContextItem } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; -import QEPWXContextProvider from "./QEPWXContextProvider"; +import QEPWXInputDataManager from "./QEPWXInputDataManager"; const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; type Name = "input"; type Data = QENEBContextProviderSchema; -type ExternalContext = JinjaExternalContext & +export type QENEBInputDataManagerContextItem = ContextItem; +export type QENEBInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & - MaterialsSetContextMixin & + MaterialsSetExternalContext & MaterialExternalContext; +type ExternalContext = QENEBInputDataManagerExternalContext; + type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & @@ -52,10 +56,10 @@ type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; -export default class QENEBContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "input"; +export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "input" as const; - readonly domain: Domain = "executable"; + readonly domain = "executable" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -73,7 +77,7 @@ export default class QENEBContextProvider extends (JSONSchemaDataProvider as Bas getDefaultData(): Data { const PWXContexts = this.sortMaterialsByIndexInSet(this.materials).map((material) => { - return new QEPWXContextProvider({}, { ...this.externalContext, material }).getData(); + return new QEPWXInputDataManager({}, { ...this.externalContext, material }).getData(); }); const { @@ -94,9 +98,9 @@ export default class QENEBContextProvider extends (JSONSchemaDataProvider as Bas } } -materialContextMixin(QENEBContextProvider.prototype); -materialsContextMixin(QENEBContextProvider.prototype); -methodDataContextMixin(QENEBContextProvider.prototype); -workflowContextMixin(QENEBContextProvider.prototype); -jobContextMixin(QENEBContextProvider.prototype); -materialsSetContextMixin(QENEBContextProvider.prototype); +materialContextMixin(QENEBInputDataManager.prototype); +materialsContextMixin(QENEBInputDataManager.prototype); +methodDataContextMixin(QENEBInputDataManager.prototype); +workflowContextMixin(QENEBInputDataManager.prototype); +jobContextMixin(QENEBInputDataManager.prototype); +materialsSetContextMixin(QENEBInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/espresso/QEPWXContextProvider.ts b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts similarity index 83% rename from src/js/context/providers/by_application/espresso/QEPWXContextProvider.ts rename to src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts index 78735264..ec2b5705 100644 --- a/src/js/context/providers/by_application/espresso/QEPWXContextProvider.ts +++ b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts @@ -27,20 +27,24 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; +import type { ContextItem } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; type Name = "input"; type Data = QEPwxContextProviderSchema; -type ExternalContext = JinjaExternalContext & + +export type QEPWXInputDataManagerContextItem = ContextItem; +export type QEPWXInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; +type ExternalContext = QEPWXInputDataManagerExternalContext; + type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & @@ -50,10 +54,10 @@ type Base = typeof JSONSchemaDataProvider & const jsonSchemaId = "context-providers-directory/by-application/qe-pwx-context-provider"; -export default class QEPWXContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "input"; +export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "input" as const; - readonly domain: Domain = "executable"; + readonly domain = "executable" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -95,13 +99,7 @@ export default class QEPWXContextProvider extends (JSONSchemaDataProvider as Bas Mass_X: PERIODIC_TABLE[symbol].atomic_mass, PseudoPot_X: pseudo?.filename || path.basename(pseudo?.path || ""), }; - // return s.sprintf("%s%s %f %s", symbol, label, el.atomic_mass, filename) || ""; - }); // .join("\n"); - - // Format numbers with 14 total width, 9 decimal places (equivalent to %14.9f) - // const formatNumber = (num: number) => { - // return Number(num.toFixed(9).padStart(14).trim()); - // }; + }); const CELL_PARAMETERS = { v1: lattice.vectorArrays[0], @@ -109,7 +107,6 @@ export default class QEPWXContextProvider extends (JSONSchemaDataProvider as Bas v3: lattice.vectorArrays[2], }; - // const ATOMIC_POSITIONS = basis.getAtomicPositionsWithConstraintsAsStrings().join("\n"); const ATOMIC_POSITIONS = basis.elementsCoordinatesConstraintsArray.map( ([element, label, coordinate, constraint]) => { return { @@ -125,7 +122,7 @@ export default class QEPWXContextProvider extends (JSONSchemaDataProvider as Bas ); return { - IBRAV: 0, // use CELL_PARAMETERS to define Bravais lattice + IBRAV: 0, RESTART_MODE: job.parent || workflow.hasRelaxation ? "restart" : "from_scratch", ATOMIC_SPECIES, ATOMIC_SPECIES_WITH_LABELS, @@ -155,8 +152,8 @@ export default class QEPWXContextProvider extends (JSONSchemaDataProvider as Bas } } -materialContextMixin(QEPWXContextProvider.prototype); -materialsContextMixin(QEPWXContextProvider.prototype); -methodDataContextMixin(QEPWXContextProvider.prototype); -workflowContextMixin(QEPWXContextProvider.prototype); -jobContextMixin(QEPWXContextProvider.prototype); +materialContextMixin(QEPWXInputDataManager.prototype); +materialsContextMixin(QEPWXInputDataManager.prototype); +methodDataContextMixin(QEPWXInputDataManager.prototype); +workflowContextMixin(QEPWXInputDataManager.prototype); +jobContextMixin(QEPWXInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.ts b/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts similarity index 82% rename from src/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.ts rename to src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts index e8c3c8bf..85ec4e7b 100644 --- a/src/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.ts +++ b/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts @@ -20,18 +20,20 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; +import type { ContextItem } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; type Name = "input"; type Data = NWChemTotalEnergyContextProviderSchema; -type ExternalContext = JinjaExternalContext & +export type NWChemInputDataManagerContextItem = ContextItem; +export type NWChemInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; +type ExternalContext = NWChemInputDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor & @@ -42,10 +44,10 @@ type Base = typeof JSONSchemaDataProvider & const jsonSchemaId = "context-providers-directory/by-application/nwchem-total-energy-context-provider"; -export default class NWChemTotalEnergyContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "input"; +export default class NWChemInputDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "input" as const; - readonly domain: Domain = "executable"; + readonly domain = "executable" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -89,7 +91,7 @@ export default class NWChemTotalEnergyContextProvider extends (JSONSchemaDataPro } } -materialContextMixin(NWChemTotalEnergyContextProvider.prototype); -methodDataContextMixin(NWChemTotalEnergyContextProvider.prototype); -workflowContextMixin(NWChemTotalEnergyContextProvider.prototype); -jobContextMixin(NWChemTotalEnergyContextProvider.prototype); +materialContextMixin(NWChemInputDataManager.prototype); +methodDataContextMixin(NWChemInputDataManager.prototype); +workflowContextMixin(NWChemInputDataManager.prototype); +jobContextMixin(NWChemInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/vasp/VASPContextProvider.ts b/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts similarity index 79% rename from src/js/context/providers/by_application/vasp/VASPContextProvider.ts rename to src/js/context/providers/by_application/vasp/VASPInputDataManager.ts index 59369245..1fee20ae 100644 --- a/src/js/context/providers/by_application/vasp/VASPContextProvider.ts +++ b/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts @@ -14,6 +14,7 @@ import materialContextMixin, { } from "../../../mixins/MaterialContextMixin"; import materialsContextMixin, { type MaterialsContextMixin, + type MaterialsExternalContext, } from "../../../mixins/MaterialsContextMixin"; import methodDataContextMixin, { type MethodDataContextMixin, @@ -23,19 +24,22 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; +import type { ContextItem } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; type Name = "input"; type Data = VASPContextProviderSchema; -type ExternalContext = JinjaExternalContext & +export type VASPInputDataManagerContextItem = ContextItem; +export type VASPInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & - MaterialsContextMixin; + MaterialsExternalContext; + +type ExternalContext = VASPInputDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor & @@ -46,10 +50,10 @@ type Base = typeof JSONSchemaDataProvider & const jsonSchemaId = "context-providers-directory/by-application/vasp-context-provider"; -export default class VASPContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "input"; +export default class VASPInputDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "input" as const; - readonly domain: Domain = "executable"; + readonly domain = "executable" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -76,7 +80,6 @@ export default class VASPContextProvider extends (JSONSchemaDataProvider as Base private getDataPerMaterial() { if (!this.materials || this.materials.length <= 1) return {}; - // TODO-QUESTION: perMaterial is not defined in the schema return { perMaterial: this.materials.map((material) => this.buildVASPContext(material)) }; } @@ -92,8 +95,8 @@ export default class VASPContextProvider extends (JSONSchemaDataProvider as Base } } -materialContextMixin(VASPContextProvider.prototype); -materialsContextMixin(VASPContextProvider.prototype); -methodDataContextMixin(VASPContextProvider.prototype); -workflowContextMixin(VASPContextProvider.prototype); -jobContextMixin(VASPContextProvider.prototype); +materialContextMixin(VASPInputDataManager.prototype); +materialsContextMixin(VASPInputDataManager.prototype); +methodDataContextMixin(VASPInputDataManager.prototype); +workflowContextMixin(VASPInputDataManager.prototype); +jobContextMixin(VASPInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/vasp/VASPNEBContextProvider.ts b/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts similarity index 72% rename from src/js/context/providers/by_application/vasp/VASPNEBContextProvider.ts rename to src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts index 45a88060..08928cd7 100644 --- a/src/js/context/providers/by_application/vasp/VASPNEBContextProvider.ts +++ b/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts @@ -13,9 +13,11 @@ import materialContextMixin, { } from "../../../mixins/MaterialContextMixin"; import materialsContextMixin, { type MaterialsContextMixin, + type MaterialsExternalContext, } from "../../../mixins/MaterialsContextMixin"; import materialsSetContextMixin, { type MaterialsSetContextMixin, + type MaterialsSetExternalContext, } from "../../../mixins/MaterialsSetContextMixin"; import methodDataContextMixin, { type MethodDataContextMixin, @@ -25,21 +27,25 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; +import type { ContextItem } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; -import VASPContextProvider from "./VASPContextProvider"; +import VASPInputDataManager from "./VASPInputDataManager"; type Name = "input"; type Data = VASPNEBContextProviderSchema; -type ExternalContext = JinjaExternalContext & + +export type VASPNEBInputDataManagerContextItem = ContextItem; +export type VASPNEBInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & - MaterialsContextMixin & - MaterialsSetContextMixin; + MaterialsExternalContext & + MaterialsSetExternalContext; + +type ExternalContext = VASPNEBInputDataManagerExternalContext; type Base = typeof JSONSchemaDataProvider & Constructor & @@ -51,10 +57,10 @@ type Base = typeof JSONSchemaDataProvider & const jsonSchemaId = "context-providers-directory/by-application/vasp-neb-context-provider"; -export default class VASPNEBContextProvider extends (JSONSchemaDataProvider as Base) { - readonly name: Name = "input"; +export default class VASPNEBInputDataManager extends (JSONSchemaDataProvider as Base) { + readonly name = "input" as const; - readonly domain: Domain = "executable"; + readonly domain = "executable" as const; readonly jsonSchema: JSONSchema7 | undefined; @@ -72,7 +78,7 @@ export default class VASPNEBContextProvider extends (JSONSchemaDataProvider as B getDefaultData() { const VASPContexts = this.sortMaterialsByIndexInSet(this.materials).map((material) => { - return new VASPContextProvider({}, { ...this.externalContext, material }).getData(); + return new VASPInputDataManager({}, { ...this.externalContext, material }).getData(); }); return { @@ -85,9 +91,9 @@ export default class VASPNEBContextProvider extends (JSONSchemaDataProvider as B } } -materialContextMixin(VASPNEBContextProvider.prototype); -materialsContextMixin(VASPNEBContextProvider.prototype); -materialsSetContextMixin(VASPNEBContextProvider.prototype); -methodDataContextMixin(VASPNEBContextProvider.prototype); -workflowContextMixin(VASPNEBContextProvider.prototype); -jobContextMixin(VASPNEBContextProvider.prototype); +materialContextMixin(VASPNEBInputDataManager.prototype); +materialsContextMixin(VASPNEBInputDataManager.prototype); +materialsSetContextMixin(VASPNEBInputDataManager.prototype); +methodDataContextMixin(VASPNEBInputDataManager.prototype); +workflowContextMixin(VASPNEBInputDataManager.prototype); +jobContextMixin(VASPNEBInputDataManager.prototype); diff --git a/src/js/enums.ts b/src/js/enums.ts index 675ab294..a9c6a720 100644 --- a/src/js/enums.ts +++ b/src/js/enums.ts @@ -48,6 +48,11 @@ export const UNIT_TAGS = { hasConvergenceResult: "hasConvergenceResult", }; +export enum UnitTag { + hasConvergenceParam = "hasConvergenceParam", + hasConvergenceResult = "hasConvergenceResult", +} + export const WORKFLOW_STATUSES = { "up-to-date": "up-to-date", outdated: "outdated", diff --git a/src/js/generated/SubworkflowSchemaMixin.ts b/src/js/generated/SubworkflowSchemaMixin.ts index b32fbac5..a9954d11 100644 --- a/src/js/generated/SubworkflowSchemaMixin.ts +++ b/src/js/generated/SubworkflowSchemaMixin.ts @@ -11,7 +11,7 @@ export function subworkflowSchemaMixin( // @ts-expect-error const properties: InMemoryEntity & SubworkflowSchemaMixin = { get properties() { - return this.prop("properties"); + return this.requiredProp("properties"); }, set properties(value: SubworkflowMixinSchema["properties"]) { this.setProp("properties", value); diff --git a/src/js/generated/WorkflowSchemaMixin.ts b/src/js/generated/WorkflowSchemaMixin.ts new file mode 100644 index 00000000..02d5f468 --- /dev/null +++ b/src/js/generated/WorkflowSchemaMixin.ts @@ -0,0 +1,40 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { BaseWorkflowSchema } from "@mat3ra/esse/dist/js/types"; + +export type WorkflowSchemaMixin = BaseWorkflowSchema; + +export type WorkflowInMemoryEntity = InMemoryEntity & WorkflowSchemaMixin; + +export function workflowSchemaMixin( + item: InMemoryEntity, +): asserts item is T & WorkflowSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & WorkflowSchemaMixin = { + get properties() { + return this.requiredProp("properties"); + }, + set properties(value: BaseWorkflowSchema["properties"]) { + this.setProp("properties", value); + }, + get isUsingDataset() { + return this.prop("isUsingDataset"); + }, + set isUsingDataset(value: BaseWorkflowSchema["isUsingDataset"]) { + this.setProp("isUsingDataset", value); + }, + get subworkflows() { + return this.requiredProp("subworkflows"); + }, + set subworkflows(value: BaseWorkflowSchema["subworkflows"]) { + this.setProp("subworkflows", value); + }, + get units() { + return this.requiredProp("units"); + }, + set units(value: BaseWorkflowSchema["units"]) { + this.setProp("units", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/index.js b/src/js/index.js index e9b535c5..3d617f51 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1,4 +1,3 @@ -import { wodeProviders } from "./context/providers"; import { PointsPathFormDataProvider } from "./context/providers/PointsPath/PointsPathFormDataProvider"; import { globalSettings } from "./context/providers/settings"; import { @@ -51,7 +50,6 @@ export { ReduceUnit, SubworkflowUnit, defaultMapConfig, - wodeProviders, PointsPathFormDataProvider, globalSettings, }; diff --git a/src/js/subworkflows/convergence/ConvergenceParameter.ts b/src/js/subworkflows/convergence/ConvergenceParameter.ts new file mode 100644 index 00000000..a28a59e1 --- /dev/null +++ b/src/js/subworkflows/convergence/ConvergenceParameter.ts @@ -0,0 +1,39 @@ +interface ConvergenceParameterProps { + initialValue: number | [number, number, number]; +} + +export type ConvergenceParameterConfig = ConvergenceParameterProps & { + increment?: string | number; +}; + +export type UnitContext = { + data: { + dimensions: [string, string, string]; + shifts: [0, 0, 0]; + }; + name: "kgrid"; + isEdited: true; + isUsingJinjaVariables: true; +}; + +export default abstract class ConvergenceParameter { + abstract readonly name: "N_k" | "N_k_nonuniform"; + + abstract readonly finalValue: string; + + abstract readonly increment: string; + + abstract readonly unitContext: UnitContext; + + readonly initialValue: string; + + constructor({ initialValue }: ConvergenceParameterProps) { + this.initialValue = + typeof initialValue === "string" ? initialValue : JSON.stringify(initialValue); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this + useVariablesFromUnitContext(_flowchartId: string): { scope: string; name: string }[] { + return []; + } +} diff --git a/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts b/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts new file mode 100644 index 00000000..be490be6 --- /dev/null +++ b/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts @@ -0,0 +1,40 @@ +import ConvergenceParameter, { + type ConvergenceParameterConfig, + type UnitContext, +} from "./ConvergenceParameter"; + +export default class NonUniformKGridConvergence extends ConvergenceParameter { + readonly increment: string; + + readonly name = "N_k_nonuniform" as const; + + readonly finalValue = "N_k_nonuniform" as const; + + readonly unitContext: UnitContext = { + data: { + dimensions: [`{{${this.name}[0]}}`, `{{${this.name}[1]}}`, `{{${this.name}[2]}}`], + shifts: [0, 0, 0], + }, + name: "kgrid", + isEdited: true, + isUsingJinjaVariables: true, + }; + + constructor({ initialValue, increment }: ConvergenceParameterConfig) { + super({ initialValue }); + + this.increment = `[${this.initialValue}[i] + math.floor(iteration * ${ + increment || "" + } * float(context['kgrid']['reciprocalVectorRatios'][i])) for i in range(3)]`; + } + + // eslint-disable-next-line class-methods-use-this + useVariablesFromUnitContext(flowchartId: string) { + return [ + { + scope: flowchartId, + name: "context", + }, + ]; + } +} diff --git a/src/js/subworkflows/convergence/UniformKGridConvergence.ts b/src/js/subworkflows/convergence/UniformKGridConvergence.ts new file mode 100644 index 00000000..853b4f80 --- /dev/null +++ b/src/js/subworkflows/convergence/UniformKGridConvergence.ts @@ -0,0 +1,28 @@ +import ConvergenceParameter, { + type ConvergenceParameterConfig, + type UnitContext, +} from "./ConvergenceParameter"; + +export default class UniformKGridConvergence extends ConvergenceParameter { + readonly increment: string; + + readonly name = "N_k" as const; + + readonly finalValue = `${this.name} + 0` as const; + + readonly unitContext: UnitContext = { + name: "kgrid", + data: { + dimensions: [`{{${this.name}}}`, `{{${this.name}}}`, `{{${this.name}}}`], + shifts: [0, 0, 0], + }, + isEdited: true, + isUsingJinjaVariables: true, + }; + + constructor({ initialValue, increment }: ConvergenceParameterConfig) { + super({ initialValue }); + + this.increment = `${this.name} + ${increment || ""}`; + } +} diff --git a/src/js/subworkflows/convergence/factory.js b/src/js/subworkflows/convergence/factory.js deleted file mode 100644 index 205d8229..00000000 --- a/src/js/subworkflows/convergence/factory.js +++ /dev/null @@ -1,14 +0,0 @@ -import { NonUniformKGridConvergence } from "./non_uniform_kgrid"; -import { ConvergenceParameter } from "./parameter"; -import { UniformKGridConvergence } from "./uniform_kgrid"; - -export function createConvergenceParameter({ name, initialValue, increment }) { - switch (name) { - case "N_k": - return new UniformKGridConvergence({ name, initialValue, increment }); - case "N_k_nonuniform": - return new NonUniformKGridConvergence({ name, initialValue, increment }); - default: - return new ConvergenceParameter({ name, initialValue, increment }); - } -} diff --git a/src/js/subworkflows/convergence/factory.ts b/src/js/subworkflows/convergence/factory.ts new file mode 100644 index 00000000..888237eb --- /dev/null +++ b/src/js/subworkflows/convergence/factory.ts @@ -0,0 +1,18 @@ +import { type ConvergenceParameterConfig } from "./ConvergenceParameter"; +import NonUniformKGridConvergence from "./NonUniformKGridConvergence"; +import UniformKGridConvergence from "./UniformKGridConvergence"; + +type FactoryParams = ConvergenceParameterConfig & { + name: "N_k" | "N_k_nonuniform"; +}; + +export function createConvergenceParameter({ name, ...params }: FactoryParams) { + switch (name) { + case "N_k": + return new UniformKGridConvergence(params); + case "N_k_nonuniform": + return new NonUniformKGridConvergence(params); + default: + throw new Error(`Invalid convergence parameter name: ${name}`); + } +} diff --git a/src/js/subworkflows/convergence/non_uniform_kgrid.js b/src/js/subworkflows/convergence/non_uniform_kgrid.js deleted file mode 100644 index 0449d67d..00000000 --- a/src/js/subworkflows/convergence/non_uniform_kgrid.js +++ /dev/null @@ -1,28 +0,0 @@ -import { ConvergenceParameter } from "./parameter"; - -export class NonUniformKGridConvergence extends ConvergenceParameter { - get increment() { - return `[${this.initialValue}[i] + math.floor(iteration * ${this._increment} * float(context['kgrid']['reciprocalVectorRatios'][i])) for i in range(3)]`; - } - - get unitContext() { - return { - kgrid: { - dimensions: [`{{${this.name}[0]}}`, `{{${this.name}[1]}}`, `{{${this.name}[2]}}`], - shifts: [0, 0, 0], - }, - isKgridEdited: true, - isUsingJinjaVariables: true, - }; - } - - // eslint-disable-next-line class-methods-use-this - useVariablesFromUnitContext(flowchartId) { - return [ - { - scope: flowchartId, - name: "context", - }, - ]; - } -} diff --git a/src/js/subworkflows/convergence/parameter.js b/src/js/subworkflows/convergence/parameter.js deleted file mode 100644 index 576bf3e1..00000000 --- a/src/js/subworkflows/convergence/parameter.js +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable class-methods-use-this */ -import lodash from "lodash"; - -export class ConvergenceParameter { - constructor({ name, initialValue, increment }) { - this.name = name; - this._initialValue = initialValue; - this._increment = increment; - } - - /** - * Getter for initial value as string. - * Note: this will be used in assignment unit. - * @return {string} - */ - get initialValue() { - if (!lodash.isString(this._initialValue)) { - return JSON.stringify(this._initialValue); - } - return this._initialValue; - } - - /** - * @summary Defines how to increment the parameter. - * @return {string} - increment operation used in assignment unit - */ - get increment() { - return ""; // overwrite in derived class - } - - /** - * Defines content for updating the unit context - * @return {Object} - */ - get unitContext() { - return {}; - } - - /** - * Defines value once convergence is reached (for 'exit' unit). - * Note: This is used in assignment unit and most often the variable will be assigned to itself. - * @return {string} - */ - get finalValue() { - return `${this.name}`; - } - - /** - * Create list of variables to fetch from a unit. - * Note: this is used for the `input` field for an assignment unit. - * @param {string} flowchartId - flowchartId of unit containing context variables - * @return {Object|{scope, name}} - */ - // eslint-disable-next-line class-methods-use-this, no-unused-vars - useVariablesFromUnitContext(flowchartId) { - return []; - } -} diff --git a/src/js/subworkflows/convergence/uniform_kgrid.js b/src/js/subworkflows/convergence/uniform_kgrid.js deleted file mode 100644 index 182563a0..00000000 --- a/src/js/subworkflows/convergence/uniform_kgrid.js +++ /dev/null @@ -1,22 +0,0 @@ -import { ConvergenceParameter } from "./parameter"; - -export class UniformKGridConvergence extends ConvergenceParameter { - get increment() { - return `${this.name} + ${this._increment}`; - } - - get unitContext() { - return { - kgrid: { - dimensions: [`{{${this.name}}}`, `{{${this.name}}}`, `{{${this.name}}}`], - shifts: [0, 0, 0], - }, - isKgridEdited: true, - isUsingJinjaVariables: true, - }; - } - - get finalValue() { - return `${this.name} + 0`; - } -} diff --git a/src/js/subworkflows/subworkflow.ts b/src/js/subworkflows/subworkflow.ts index f462d688..9d54503f 100644 --- a/src/js/subworkflows/subworkflow.ts +++ b/src/js/subworkflows/subworkflow.ts @@ -9,54 +9,66 @@ import { namedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { ApplicationSchema, BaseMethod, BaseModel } from "@mat3ra/esse/dist/js/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { + ApplicationSchema, + BaseMethod, + BaseModel, + JobSchema, + SubworkflowSchema, +} from "@mat3ra/esse/dist/js/types"; import { type Method, Model, ModelFactory } from "@mat3ra/mode"; import { Utils } from "@mat3ra/utils"; -import lodash from "lodash"; import _ from "underscore"; -import { UNIT_TYPES, UnitType } from "../enums"; +import { UnitTag, UnitType } from "../enums"; import { type SubworkflowSchemaMixin, subworkflowSchemaMixin, } from "../generated/SubworkflowSchemaMixin"; -import { type BaseUnit, UnitFactory } from "../units"; +import { AssignmentUnit, ConditionUnit, SubworkflowUnit, UnitFactory } from "../units"; +import type { AnySubworkflowUnit } from "../units/factory"; import { setNextLinks, setUnitsHead } from "../utils"; -import { ConvergenceMixin } from "./convergence"; - -/* eslint max-classes-per-file:0 */ +import { createConvergenceParameter } from "./convergence/factory"; // class BaseSubworkflow extends mix(NamedDefaultableRepetitionImportantSettingsInMemoryEntity).with( // ConvergenceMixin, // ContextAndRenderFieldsMixin, // ) {} +type ConvergenceConfig = { + parameter: "N_k" | "N_k_nonuniform"; + parameterInitial: number | [number, number, number]; + parameterIncrement: number; + result: string; + resultInitial: number; + condition: string; + operator: string; + tolerance: number; + maxOccurrences: number; +}; + type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; -export class Subworkflow extends (InMemoryEntity as Base) { +export class Subworkflow extends (InMemoryEntity as Base) implements SubworkflowSchema { static usePredefinedIds = false; private ModelFactory: typeof ModelFactory; - private UnitFactory: typeof UnitFactory; - private applicationInstance: Application; - private modelInstance: Model; + modelInstance: Model; - private unitsInstances: BaseUnit[]; + private unitsInstances: AnySubworkflowUnit[]; - constructor( - config: SubworkflowSchemaMixin, - _ModelFactory = ModelFactory, - _UnitFactory = UnitFactory, - ) { + declare static createDefault: () => Subworkflow; + + constructor(config: SubworkflowSchema, _ModelFactory = ModelFactory) { super(config); this.ModelFactory = _ModelFactory; - this.UnitFactory = _UnitFactory; this.applicationInstance = new Application(this.application); this.modelInstance = this.ModelFactory.create({ @@ -64,9 +76,7 @@ export class Subworkflow extends (InMemoryEntity as Base) { application: this.application, }); this.unitsInstances = setNextLinks( - setUnitsHead(this.units || []).map((cfg) => { - return this.UnitFactory.create({ ...cfg, application: this.application }); - }), + setUnitsHead(this.units).map((cfg) => UnitFactory.createInSubworkflow(cfg)), ); } @@ -98,14 +108,16 @@ export class Subworkflow extends (InMemoryEntity as Base) { }; } - /* - * @returns {SubworkflowUnit} - */ getAsUnit() { - return this.UnitFactory.create({ + return new SubworkflowUnit({ type: UnitType.subworkflow, _id: this.id, name: this.name, + preProcessors: [], + postProcessors: [], + monitors: [], + results: [], + flowchartId: "", }); } @@ -117,9 +129,8 @@ export class Subworkflow extends (InMemoryEntity as Base) { model: Model, method: Method, name: string, - units: BaseUnit[] = [], + units: AnySubworkflowUnit[] = [], config = {}, - Cls = Subworkflow, ) { const nameForIdGeneration = config.attributes?.name || name; const { functions, attributes, ...cleanConfig } = config; @@ -127,19 +138,25 @@ export class Subworkflow extends (InMemoryEntity as Base) { // Set the method on the model so it can be properly serialized model.setMethod(method); - return new Cls({ + return new Subworkflow({ ...cleanConfig, - _id: Cls.generateSubworkflowId(nameForIdGeneration, application, model, method), + _id: Subworkflow.generateSubworkflowId(nameForIdGeneration, application, model, method), name, application: application.toJSON(), - properties: lodash.sortedUniq( - lodash.flatten(units.filter((x) => x.resultNames).map((x) => x.resultNames)), + properties: Array.from( + new Set( + units + .filter((x) => x.resultNames) + .map((x) => x.resultNames) + .flat() + .sort(), + ), ), model: { ...model.toJSON(), method: method.toJSON(), }, - units: units.map((unit) => (unit.toJSON ? unit.toJSON() : unit)), + units: units.map((unit) => unit.toJSON()), }); } @@ -154,9 +171,11 @@ export class Subworkflow extends (InMemoryEntity as Base) { this.setUnits([]); } else { // propagate new application version to all units - this.units - .filter((unit) => typeof unit.setApplication === "function") - .forEach((unit) => unit.setApplication(this.applicationInstance, true)); + this.unitsInstances + .filter((unit) => unit.type === UnitType.execution) + .forEach((unit) => { + unit.setApplication({ application }); + }); } this.application = application.toJSON(); @@ -172,13 +191,16 @@ export class Subworkflow extends (InMemoryEntity as Base) { this.modelInstance = model; } - setUnits(units: BaseUnit[]) { + setUnits(units: AnySubworkflowUnit[]) { this.unitsInstances = units; } - toJSON(exclude: string[] = []) { + toJSON(exclude: string[] = []): SubworkflowSchema & AnyObject { return { ...super.toJSON(exclude), + name: this.name, + properties: this.properties, + application: this.application, model: this.modelInstance.toJSON(), units: this.unitsInstances.map((x) => x.toJSON()), ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation @@ -186,132 +208,104 @@ export class Subworkflow extends (InMemoryEntity as Base) { } get contextProviders() { - const unitsWithContextProviders = this.units.filter( - (u) => u.allContextProviders && u.allContextProviders.length, - ); - const allContextProviders = _.flatten( - unitsWithContextProviders.map((u) => u.allContextProviders), - ); - const subworkflowContextProviders = allContextProviders.filter( - (p) => p.entityName === "subworkflow", - ); - return _.uniq(subworkflowContextProviders, (p) => p.name); - } + const subworkflowContextProviders = this.unitsInstances + .filter((u) => u.type === UnitType.execution) + .filter((u) => u.allContextProviders.length) + .map((u) => u.allContextProviders) + .flat() + .filter((p) => p.entityName === "subworkflow"); - /** - * Extracts a reduced version of the entity config to be stored inside redux state. - * This is used to track changes to context, monitors, properties, etc. when multiple materials are in state. - */ - extractReducedExternalDependentConfig() { - return { - id: this.id, - context: this.context || {}, - units: this.units.map((unit) => unit.extractReducedExternalDependentConfig()), - }; - } - - /** - * Applies the reduced config obtained from extractReducedExternalDependentConfig on the entity. - */ - applyReducedExternalDependentConfig(config) { - this.context = config.context || {}; - this.units.forEach((unit) => { - const unitConfig = (config.units || []).find((c) => c.id === unit.flowchartId); - unit.applyReducedExternalDependentConfig(unitConfig || {}); - }); + return _.uniq(subworkflowContextProviders, (p) => p.name); } - get contextFromAssignmentUnits() { - const ctx = {}; - this.units - .filter((u) => u.type === UNIT_TYPES.assignment) - .forEach((u) => { - ctx[u.operand] = u.value; - }); - return ctx; + private getContextFromAssignmentUnits() { + return this.unitsInstances + .filter((u) => u.type === UnitType.assignment) + .reduce((acc, u) => { + return { + ...acc, + [u.operand]: u.value, + }; + }, {} as Record); } render(context = {}) { const ctx = { ...context, - application: this.application, - methodData: this.model.Method.data, - model: this.model.toJSON(), + application: this.applicationInstance, + methodData: this.modelInstance.Method.data, + model: this.modelInstance.toJSON(), // context below is assembled from context providers and passed to units to override theirs - ...this.context, - subworkflowContext: this.contextFromAssignmentUnits, + // ...this.context, + subworkflowContext: this.getContextFromAssignmentUnits(), }; - this.units.forEach((u) => u.render(ctx)); + this.unitsInstances.forEach((u) => { + if (u.type === UnitType.execution) { + u.render({}, ctx); + } + }); } /** * TODO: reuse workflow function instead */ - addUnit(unit: BaseUnit, index = -1) { - const { units } = this; - if (units.length === 0) { + addUnit(unit: AnySubworkflowUnit, index = -1) { + const { unitsInstances } = this; + + if (unitsInstances.length === 0) { unit.head = true; this.setUnits([unit]); } else { - if (index >= 0) units.splice(index, 0, unit); - else units.push(unit); - this.setUnits(setNextLinks(setUnitsHead(units))); + if (index >= 0) { + unitsInstances.splice(index, 0, unit); + } else { + unitsInstances.push(unit); + } + this.setUnits(setNextLinks(setUnitsHead(unitsInstances))); } } removeUnit(flowchartId: string) { - const previousUnit = this.units.find((x) => x.next === flowchartId); - if (previousUnit) previousUnit.unsetProp("next"); + const previousUnit = this.unitsInstances.find((x) => x.next === flowchartId); + + if (previousUnit) { + previousUnit.unsetProp("next"); + } + // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer this.setUnits( - setNextLinks(setUnitsHead(this.units.filter((x) => x.flowchartId !== flowchartId))), + setNextLinks( + setUnitsHead(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId)), + ), ); } get properties() { - return lodash.flatten(this.units.map((x) => x.resultNames)); + return this.unitsInstances.map((x) => x.resultNames).flat(); } getUnit(flowchartId: string) { - return this.units.find((x) => x.flowchartId === flowchartId); + return this.unitsInstances.find((x) => x.flowchartId === flowchartId); } unitIndex(flowchartId: string) { - return lodash.findIndex(this.units, (unit) => { + return this.unitsInstances.findIndex((unit) => { return unit.flowchartId === flowchartId; }); } - replaceUnit(index: number, unit: BaseUnit) { - this.units[index] = unit; - this.setUnits(setNextLinks(setUnitsHead(this.units))); - } - - // eslint-disable-next-line class-methods-use-this - get scopeVariables() { - return ["N_k", "N_k_nonuniform"]; - } - - // eslint-disable-next-line class-methods-use-this - get scalarResults() { - return ["total_energy", "pressure"]; - } - - get isMultiMaterial() { - return this.prop("isMultiMaterial", false); - } - - get isDraft() { - return this.prop("isDraft", false); + replaceUnit(index: number, unit: AnySubworkflowUnit) { + this.unitsInstances[index] = unit; + this.setUnits(setNextLinks(setUnitsHead(this.unitsInstances))); } setIsDraft(bool: boolean) { - return this.setProp("isDraft", bool); + this.isDraft = bool; } get methodData() { - return this.model.Method.data; + return this.modelInstance.Method.data; } /** @@ -322,16 +316,20 @@ export class Subworkflow extends (InMemoryEntity as Base) { const config = this.toJSON(); const meaningfulFields = { application: Utils.specific.removeTimestampableKeysFromConfig(config.application), - model: this._calculateModelHash(), - units: _.map(this.units, (u) => u.calculateHash()).join(), + model: this.calculateModelHash(), + units: _.map(this.unitsInstances, (u) => u.calculateHash()).join(), }; return Utils.hash.calculateHashFromObject(meaningfulFields); } - _calculateModelHash() { + private calculateModelHash() { const { model } = this.toJSON(); + // ignore empty data object - if (this.model.Method.omitInHashCalculation) delete model.method.data; + if (this.modelInstance.Method.omitInHashCalculation) { + delete model.method.data; + } + return Utils.hash.calculateHashFromObject(model); } @@ -345,12 +343,207 @@ export class Subworkflow extends (InMemoryEntity as Base) { return `units.${index}`; } - findUnitWithTag(tag: string) { - return this.units.find((unit) => unit.tags.includes(tag)); + private findUnitWithTag(tag: UnitTag) { + return this.units + .filter((unit) => unit.type === UnitType.assignment) + .find((unit) => unit.tags?.includes(tag)); } get hasConvergence() { - return !!this.convergenceParam && !!this.convergenceResult && !!this.convergenceSeries; + return !!this.convergenceParam && !!this.convergenceResult; + } + + get convergenceParam() { + return this.findUnitWithTag(UnitTag.hasConvergenceParam)?.operand; + } + + get convergenceResult() { + return this.findUnitWithTag(UnitTag.hasConvergenceResult)?.operand; + } + + convergenceSeries(scopeTrack: JobSchema["scopeTrack"]) { + if (!this.hasConvergence || !scopeTrack?.length) { + return []; + } + + let lastResult; + + return scopeTrack + .map((scopeItem, i) => { + return { + x: i, + // TODO-question: what is the type of scopeItem.scope?.global? + param: scopeItem.scope?.global[this.convergenceParam], + y: scopeItem.scope?.global[this.convergenceResult], + }; + }) + .filter(({ y }) => { + lastResult = y; + const isNewResult = y !== undefined && y !== lastResult; + return isNewResult; + }) + .map((item, i) => { + return { + x: i + 1, + param: item.param, + y: item.y, + }; + }); + } + + addConvergence({ + parameter, + parameterInitial, + parameterIncrement, + result, + resultInitial, + condition, + operator, + tolerance, + maxOccurrences, + }: ConvergenceConfig) { + // Find unit to converge: should contain passed result in its results list + // TODO: make user to select unit for convergence explicitly + const unitForConvergence = this.unitsInstances + .filter((x) => x.type === UnitType.execution) + .find((x) => { + return x.resultNames.find((name) => name === result); + }); + + if (!unitForConvergence) { + // sAlert.error( + // `Subworkflow does not contain unit with '${result}' as extracted property.`, + // ); + throw new Error( + `Subworkflow does not contain unit with '${result}' as extracted property.`, + ); + } + + // initialize parameter + const param = createConvergenceParameter({ + name: parameter, + initialValue: parameterInitial, + increment: parameterIncrement, + }); + + // Replace kgrid to be ready for convergence + // TODO: kgrid should be abstracted and selected by user + const gridProvider = unitForConvergence.importantSettingsProviders.find((p) => { + return ["kgrid", "qgrid"].includes(p.name); + }); + + let mergedContext = param.unitContext; + + if (gridProvider) { + const providerContext = gridProvider.getContextItemData(); + + mergedContext = merge(providerContext, param.unitContext); + gridProvider.setData(mergedContext); + gridProvider.setIsEdited(true); + } + + unitForConvergence.updateContext(mergedContext); + + const prevResult = "prev_result"; + const iteration = "iteration"; + + // Assignment with result's initial value + const prevResultInit = new AssignmentUnit({ + name: "init result", + head: true, + operand: prevResult, + value: resultInitial, + }); + + // Assignment with initial value of convergence parameter + const paramInit = new AssignmentUnit({ + name: "init parameter", + operand: param.name, + value: param.initialValue, + tags: [UnitTag.hasConvergenceParam], + }); + + // Assignment with initial value of iteration counter + const iterInit = new AssignmentUnit({ + name: "init counter", + operand: iteration, + value: 1, + }); + + // Assignment for storing iteration result: extracts 'result' from convergence unit scope + const storePrevResult = new AssignmentUnit({ + name: "store result", + input: [ + { + scope: unitForConvergence.flowchartId, + name: result, + }, + ], + operand: prevResult, + value: result, + }); + + // Assignment for convergence param increase + const nextStep = new AssignmentUnit({ + name: "update parameter", + input: param.useVariablesFromUnitContext(unitForConvergence.flowchartId), + operand: param.name, + value: param.increment, + next: unitForConvergence.flowchartId, + }); + + // Final step of convergence + const exit = new AssignmentUnit({ + name: "exit", + input: [], + operand: param.name, + value: param.finalValue, + }); + + // Final step of convergence + const storeResult = new AssignmentUnit({ + name: "update result", + input: [ + { + scope: unitForConvergence.flowchartId, + name: result, + }, + ], + operand: result, + value: result, + tags: [UnitTag.hasConvergenceResult], + }); + + // Assign next iteration value + const nextIter = new AssignmentUnit({ + name: "update counter", + input: [], + operand: iteration, + value: `${iteration} + 1`, + }); + + // Convergence condition unit + const conditionUnit = new ConditionUnit({ + name: "check convergence", + statement: `${condition} ${operator} ${tolerance}`, + then: exit.flowchartId, + else: storePrevResult.flowchartId, + maxOccurrences, + next: storePrevResult.flowchartId, + }); + + this.addUnit(paramInit, 0); + this.addUnit(prevResultInit, 1); + this.addUnit(iterInit, 2); + this.addUnit(storeResult); + this.addUnit(conditionUnit); + this.addUnit(storePrevResult); + this.addUnit(nextIter); + this.addUnit(nextStep); + this.addUnit(exit); + + // `addUnit` adjusts the `next` field, hence the below. + nextStep.next = unitForConvergence.flowchartId; } } diff --git a/src/js/units/AssertionUnit.ts b/src/js/units/AssertionUnit.ts index df78e23e..ce0f302c 100644 --- a/src/js/units/AssertionUnit.ts +++ b/src/js/units/AssertionUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { AssertionUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -22,6 +23,8 @@ export class AssertionUnit extends (BaseUnit as Base) implements Schema { }); } + declare toJSON: () => Schema & AnyObject; + getHashObject() { return { statement: this.statement, errorMessage: this.errorMessage }; } diff --git a/src/js/units/AssignmentUnit.ts b/src/js/units/AssignmentUnit.ts index 5070c56b..a981394f 100644 --- a/src/js/units/AssignmentUnit.ts +++ b/src/js/units/AssignmentUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -23,6 +24,8 @@ export class AssignmentUnit extends (BaseUnit as Base) implements Schema { }); } + declare toJSON: () => Schema & AnyObject; + getHashObject(): object { return { input: this.input, operand: this.operand, value: this.value }; } diff --git a/src/js/units/BaseUnit.ts b/src/js/units/BaseUnit.ts index 6e1bb52d..5e16597b 100644 --- a/src/js/units/BaseUnit.ts +++ b/src/js/units/BaseUnit.ts @@ -23,6 +23,7 @@ import { import { Taggable, taggableMixin } from "@mat3ra/code/dist/js/entity/mixins/TaggableMixin"; import type { NameResultSchema } from "@mat3ra/code/dist/js/utils/object"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { StatusSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; import { Utils } from "@mat3ra/utils"; @@ -55,6 +56,8 @@ export class BaseUnit extends (InMemoryEntity as Base return Utils.uuid.getUUID(); } + declare toJSON: () => Schema & AnyObject; + defaultResults: NameResultSchema[] = []; defaultMonitors: NameResultSchema[] = []; diff --git a/src/js/units/ConditionUnit.ts b/src/js/units/ConditionUnit.ts index 9c8f066c..b48d81df 100644 --- a/src/js/units/ConditionUnit.ts +++ b/src/js/units/ConditionUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ConditionUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -28,6 +29,8 @@ export class ConditionUnit extends (BaseUnit as Base) implements Schema { }); } + declare toJSON: () => Schema & AnyObject; + getHashObject(): object { return { statement: this.statement, maxOccurrences: this.maxOccurrences }; } diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index ce691063..a8e3c9ce 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -15,7 +15,7 @@ import { importantSettingsProviderMixin, } from "../context/mixins/ImportantSettingsProviderMixin"; import type { ContextItem } from "../context/providers/base/ContextProvider"; -import ExecutionUnitInput from "../ExecutionUnitInput"; +import ExecutionUnitInput, { type ExecutionUnitInputContext } from "../ExecutionUnitInput"; import { type ExecutionUnitSchemaMixin, executionUnitSchemaMixin, @@ -51,6 +51,8 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { renderingContext: ContextItem[] = []; + declare toJSON: () => Schema & AnyObject; + constructor(config: Schema) { super(config); @@ -125,26 +127,27 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { return this.allContextProviders.filter((p) => p.entityName === "unit"); } - /** Update rendering context and persistent context - * Note: this function is sometimes being called without passing a context! - */ - render(context: AnyObject = {}) { - this.renderingContext = { ...this.renderingContext, ...context }; + get importantSettingsProviders() { + return this.contextProviders.filter((p) => p.domain === "important"); + } + + render(externalContext: AnyObject = {}) { + this.renderingContext = this.context; const newInput: ExecutionUnitInputItemSchema[] = []; const newPersistentContext: ContextItem[] = []; const newRenderingContext: ContextItem[] = []; this.inputInstances.forEach((input) => { - input.setContext(this.renderingContext); + input.setContext(context, externalContext); input.render(); const inputJSON = input.toJSON(); - const context = input.getFullContext(); + const fullContext = input.getFullContext(); newInput.push(inputJSON); - newRenderingContext.push(...context); - newPersistentContext.push(...context.filter((c) => c.isEdited)); + newRenderingContext.push(...fullContext); + newPersistentContext.push(...fullContext.filter((c) => c.isEdited)); }); this.input = newInput; diff --git a/src/js/units/IOUnit.ts b/src/js/units/IOUnit.ts index 02e62424..83aed5ae 100644 --- a/src/js/units/IOUnit.ts +++ b/src/js/units/IOUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { DataIOUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -12,6 +13,8 @@ export class IOUnit extends (BaseUnit as Base) implements Schema { constructor(config: Partial) { super({ name: UnitType.io, subtype: "input", ...config, type: UnitType.io }); } + + declare toJSON: () => Schema & AnyObject; } iOUnitSchemaMixin(IOUnit.prototype); diff --git a/src/js/units/MapUnit.ts b/src/js/units/MapUnit.ts index 5a96a781..cc2bc82b 100644 --- a/src/js/units/MapUnit.ts +++ b/src/js/units/MapUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { MapUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -23,10 +24,12 @@ export const defaultMapConfig = { type Base = typeof BaseUnit & Constructor; export class MapUnit extends (BaseUnit as Base) implements Schema { - constructor(config: Partial) { + constructor(config?: Partial) { super({ ...defaultMapConfig, ...config }); } + declare toJSON: () => Schema & AnyObject; + setWorkflowId(id: string) { this.setProp("workflowId", id); } diff --git a/src/js/units/ProcessingUnit.ts b/src/js/units/ProcessingUnit.ts index 460003d3..fb296af8 100644 --- a/src/js/units/ProcessingUnit.ts +++ b/src/js/units/ProcessingUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ProcessingUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -20,6 +21,8 @@ export class ProcessingUnit extends (BaseUnit as Base) implements Schema { }); } + declare toJSON: () => Schema & AnyObject; + setOperation(op: ProcessingUnitSchema["operation"]) { this.setProp("operation", op); } diff --git a/src/js/units/ReduceUnit.ts b/src/js/units/ReduceUnit.ts index 2da9929d..e8116b0b 100644 --- a/src/js/units/ReduceUnit.ts +++ b/src/js/units/ReduceUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ReduceUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -15,6 +16,8 @@ export class ReduceUnit extends (BaseUnit as Base) implements Schema { constructor(unitName: string, mapUnit: string, input: ReduceUnitSchema["input"]) { super({ type: UnitType.reduce, name: unitName, mapFlowchartId: mapUnit, input }); } + + declare toJSON: () => Schema & AnyObject; } reduceUnitSchemaMixin(ReduceUnit.prototype); diff --git a/src/js/units/SubworkflowUnit.ts b/src/js/units/SubworkflowUnit.ts index 78da842b..083e8420 100644 --- a/src/js/units/SubworkflowUnit.ts +++ b/src/js/units/SubworkflowUnit.ts @@ -1,4 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; @@ -15,6 +16,8 @@ export class SubworkflowUnit extends (BaseUnit as Base) implements Schema { constructor(config: Partial) { super({ name: "New Subworkflow", ...config, type: UnitType.subworkflow }); } + + declare toJSON: () => Schema & AnyObject; } subworkflowUnitSchemaMixin(SubworkflowUnit.prototype); diff --git a/src/js/units/factory.ts b/src/js/units/factory.ts index a5e038e1..19de448e 100644 --- a/src/js/units/factory.ts +++ b/src/js/units/factory.ts @@ -5,21 +5,22 @@ import type { DataIOUnitSchema, MapUnitSchema, ProcessingUnitSchema, + ReduceUnitSchema, SubworkflowUnitSchema, } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; import { AssertionUnit } from "./AssertionUnit"; import { AssignmentUnit } from "./AssignmentUnit"; -import { BaseUnit } from "./BaseUnit"; import { ConditionUnit } from "./ConditionUnit"; import { type ExecutionUnitSchema, ExecutionUnit } from "./ExecutionUnit"; import { IOUnit } from "./IOUnit"; import { MapUnit } from "./MapUnit"; import { ProcessingUnit } from "./ProcessingUnit"; +import { ReduceUnit } from "./ReduceUnit"; import { SubworkflowUnit } from "./SubworkflowUnit"; -type UnitConfig = +export type UnitConfig = | ExecutionUnitSchema | AssignmentUnitSchema | ConditionUnitSchema @@ -27,10 +28,55 @@ type UnitConfig = | ProcessingUnitSchema | MapUnitSchema | SubworkflowUnitSchema - | AssertionUnitSchema; + | AssertionUnitSchema + | ReduceUnitSchema; + +export type AnyUnit = + // | ExecutionUnit + // | AssignmentUnit + // | ConditionUnit + // | IOUnit + // | ProcessingUnit + MapUnit | SubworkflowUnit; +// | AssertionUnit; +// | ReduceUnit; + +export type AnySubworkflowUnit = + | ExecutionUnit + | AssignmentUnit + | ConditionUnit + | IOUnit + | ProcessingUnit + | AssertionUnit; export class UnitFactory { - static create(config: UnitConfig): BaseUnit { + static createInWorkflow(config: UnitConfig): AnyUnit { + switch (config.type) { + // case UnitType.execution: + // return new ExecutionUnit(config); + // case UnitType.assignment: + // return new AssignmentUnit(config); + // case UnitType.condition: + // return new ConditionUnit(config); + // case UnitType.io: + // return new IOUnit(config); + // case UnitType.processing: + // return new ProcessingUnit(config); + case UnitType.map: + return new MapUnit(config); + case UnitType.subworkflow: + return new SubworkflowUnit(config); + // case UnitType.assertion: + // return new AssertionUnit(config); + // TODO-question: why there was no reduce unit in the factory? + // case UnitType.reduce: + // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); + default: + throw new Error(`Unknown unit type: ${config.type}`); + } + } + + static createInSubworkflow(config: UnitConfig): AnySubworkflowUnit { switch (config.type) { case UnitType.execution: return new ExecutionUnit(config); @@ -42,12 +88,11 @@ export class UnitFactory { return new IOUnit(config); case UnitType.processing: return new ProcessingUnit(config); - case UnitType.map: - return new MapUnit(config); - case UnitType.subworkflow: - return new SubworkflowUnit(config); case UnitType.assertion: return new AssertionUnit(config); + // // TODO-question: why there was no reduce unit in the factory? + // case UnitType.reduce: + // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); default: throw new Error(`Unknown unit type: ${config.type}`); } diff --git a/src/js/utils.js b/src/js/utils.ts similarity index 72% rename from src/js/utils.js rename to src/js/utils.ts index 993317b7..f2a0f33d 100644 --- a/src/js/utils.js +++ b/src/js/utils.ts @@ -1,11 +1,10 @@ +import type { SubworkflowSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; import lodash from "lodash"; /** * @summary set the head of an array of units - * @param units - * @returns {Unit[]} */ -export function setUnitsHead(units) { +export function setUnitsHead(units: T[]) { if (units.length > 0) { units[0].head = true; lodash.tail(units).map((x) => (x.head = false)); @@ -16,17 +15,15 @@ export function setUnitsHead(units) { // TODO: fix setNextLinks on unit removal and convergence logic. /** * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - * @params units {Unit[]} - * @returns units {Unit[]} */ -export function setNextLinks(units) { +export function setNextLinks(units: T[]) { const flowchartIds = units.map((u) => u.flowchartId); for (let i = 0; i < units.length - 1; i++) { if (!units[i].next) { // newly added units don't have next set yet => set it units[i].next = units[i + 1].flowchartId; if (i > 0) units[i - 1].next = units[i].flowchartId; - } else if (!flowchartIds.includes(units[i].next)) { + } else if (!flowchartIds.includes(units[i].next ?? "")) { // newly removed units may create broken next links => fix it units[i].next = units[i + 1].flowchartId; } @@ -41,7 +38,15 @@ export function setNextLinks(units) { * @param callBuild {boolean} if true; call build between applying functions and attributes * @returns {*} updated object */ -export function applyConfig({ obj, config = {}, callBuild = false }) { +export function applyConfig({ + obj, + config = {}, + callBuild = false, +}: { + obj: any; + config: { functions?: Record; attributes?: Record }; + callBuild: boolean; +}) { const { functions = {}, attributes = {} } = config; // eslint-disable-next-line no-restricted-syntax for (const [func, args] of Object.entries(functions)) { @@ -61,12 +66,16 @@ export function applyConfig({ obj, config = {}, callBuild = false }) { /** * @summary Safely extract unit object from subworkflow data - * @param subworkflowData {Object} subworkflow data - * @param index {number} index of subworkflow unit - * @param type {string} type of subworkflow unit - * @returns {Object|null} subworkflow unit object (not a unit class instance!) */ -export function findUnit({ subworkflowData, index, type }) { +export function findUnit({ + subworkflowData, + index, + type, +}: { + subworkflowData: SubworkflowSchema; + index: number; + type: "assignment" | "condition" | "processing" | "io" | "assertion" | "execution" | "reduce"; +}) { const unit = subworkflowData.units[index]; if (unit.type !== type) throw new Error("findUnit() error: unit type does not match!"); return unit; diff --git a/src/js/workflows/default.js b/src/js/workflows/default.ts similarity index 81% rename from src/js/workflows/default.js rename to src/js/workflows/default.ts index 268e7eae..f7ae0904 100644 --- a/src/js/workflows/default.js +++ b/src/js/workflows/default.ts @@ -1,4 +1,6 @@ -export default { +import type { WorkflowSchema } from "@mat3ra/esse/dist/js/types"; + +const defaultWorkflowConfig: WorkflowSchema = { name: "New Workflow", properties: [], subworkflows: [ @@ -6,7 +8,9 @@ export default { _id: "c6e9dbbee8929de01f4e76ee", application: { name: "espresso", + shortName: "espresso", summary: "Quantum Espresso", + build: "6.3", version: "6.3", }, model: { @@ -37,3 +41,5 @@ export default { }, ], }; + +export default defaultWorkflowConfig; diff --git a/src/js/workflows/workflow.js b/src/js/workflows/workflow.js deleted file mode 100644 index 746e22ad..00000000 --- a/src/js/workflows/workflow.js +++ /dev/null @@ -1,386 +0,0 @@ -/* eslint-disable max-classes-per-file */ -import { NamedDefaultableRepetitionContextAndRenderInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import workflowSchema from "@mat3ra/esse/dist/js/schema/workflow.json"; -import { ComputedEntityMixin, getDefaultComputeConfig } from "@mat3ra/ide"; -import { tree } from "@mat3ra/mode"; -import { Utils } from "@mat3ra/utils"; -import lodash from "lodash"; -import { mix } from "mixwith"; -import _ from "underscore"; -import s from "underscore.string"; - -import { UNIT_TYPES } from "../enums"; -import { Subworkflow } from "../subworkflows/subworkflow"; -import { MapUnit } from "../units"; -import { UnitFactory } from "../units/factory"; -import { setNextLinks, setUnitsHead } from "../utils"; -import defaultWorkflowConfig from "./default"; -import { RelaxationLogicMixin } from "./relaxation"; - -const { MODEL_NAMES } = tree; - -class BaseWorkflow extends mix(NamedDefaultableRepetitionContextAndRenderInMemoryEntity).with( - ComputedEntityMixin, - RelaxationLogicMixin, -) {} - -export class Workflow extends BaseWorkflow { - static getDefaultComputeConfig = getDefaultComputeConfig; - - static jsonSchema = workflowSchema; - - static usePredefinedIds = false; - - constructor( - config, - _Subworkflow = Subworkflow, - _UnitFactory = UnitFactory, - _Workflow = Workflow, - _MapUnit = MapUnit, - ) { - if (!config._id) { - config._id = Workflow.generateWorkflowId( - config.name, - config.properties, - config.subworkflows, - config.applicationName, - ); - } - super(config); - this._Subworkflow = _Subworkflow; - this._UnitFactory = _UnitFactory; - this._Workflow = _Workflow; - this._MapUnit = _MapUnit; - if (!config.skipInitialize) this.initialize(); - } - - initialize() { - const me = this; - this._subworkflows = this.prop("subworkflows").map((x) => new me._Subworkflow(x)); - this._units = this.prop("units").map((unit) => me._UnitFactory.create(unit)); - this._json.workflows = this._json.workflows || []; - this._workflows = this.prop("workflows").map((x) => new me._Workflow(x)); - } - - static get defaultConfig() { - return defaultWorkflowConfig; - } - - static generateWorkflowId( - name, - properties = null, - subworkflows = null, - applicationName = null, - ) { - const propsInfo = properties?.length ? properties.sort().join(",") : ""; - const swInfo = subworkflows?.length - ? subworkflows.map((sw) => sw.name || "unknown").join(",") - : ""; - const seed = [`workflow-${name}`, applicationName, propsInfo, swInfo] - .filter((p) => p) - .join("-"); - if (this.usePredefinedIds) return Utils.uuid.getUUIDFromNamespace(seed); - return Utils.uuid.getUUID(); - } - - static fromSubworkflow(subworkflow, ClsConstructor = Workflow) { - const config = { - name: subworkflow.name, - subworkflows: [subworkflow.toJSON()], - units: setNextLinks(setUnitsHead([subworkflow.getAsUnit().toJSON()])), - properties: subworkflow.properties, - applicationName: subworkflow.application.name, - }; - return new ClsConstructor(config); - } - - static fromSubworkflows(name, ClsConstructor = Workflow, ...subworkflows) { - return new ClsConstructor( - name, - subworkflows, - subworkflows.map((sw) => sw.getAsUnit()), - ); - } - - /** - * @summary Adds subworkflow to current workflow. - * @param subworkflow {Subworkflow} - * @param head {Boolean} - */ - addSubworkflow(subworkflow, head = false, index = -1) { - const subworkflowUnit = subworkflow.getAsUnit(); - if (head) { - this.subworkflows.unshift(subworkflow); - this.addUnit(subworkflowUnit, head, index); - } else { - this.subworkflows.push(subworkflow); - this.addUnit(subworkflowUnit, head, index); - } - } - - removeSubworkflow(id) { - const subworkflowUnit = this.units.find((u) => u.id === id); - if (subworkflowUnit) this.removeUnit(subworkflowUnit.flowchartId); - } - - subworkflowId(index) { - const sw = this.prop(`subworkflows[${index}]`); - return sw ? sw._id : null; - } - - replaceSubworkflowAtIndex(index, newSubworkflow) { - this._subworkflows[index] = newSubworkflow; - this.setUnits(setNextLinks(setUnitsHead(this._units))); - } - - get units() { - return this._units; - } - - setUnits(arr) { - this._units = arr; - } - - // returns a list of `app` Classes - get usedApplications() { - const swApplications = this.subworkflows.map((sw) => sw.application); - const wfApplications = lodash.flatten(this.workflows.map((w) => w.usedApplications)); - return lodash.uniqBy(swApplications.concat(wfApplications), (a) => a.name); - } - - // return application names - get usedApplicationNames() { - return this.usedApplications.map((a) => a.name); - } - - get usedApplicationVersions() { - return this.usedApplications.map((a) => a.version); - } - - get usedApplicationNamesWithVersions() { - return this.usedApplications.map((a) => `${a.name} ${a.version}`); - } - - get usedModels() { - return lodash.uniq(this.subworkflows.map((sw) => sw.model.type)); - } - - get humanReadableUsedModels() { - return this.usedModels.filter((m) => m !== "unknown").map((m) => MODEL_NAMES[m]); - } - - toJSON(exclude = []) { - return lodash.omit( - { - ...super.toJSON(), - units: this._units.map((x) => x.toJSON()), - subworkflows: this._subworkflows.map((x) => x.toJSON()), - workflows: this.workflows.map((x) => x.toJSON()), - ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation - }, - exclude, - ); - } - - get isDefault() { - return this.prop("isDefault", false); - } - - get isMultiMaterial() { - const fromSubworkflows = this.subworkflows.some((sw) => sw.isMultiMaterial); - return this.prop("isMultiMaterial") || fromSubworkflows; - } - - set isMultiMaterial(value) { - this.setProp("isMultiMaterial", value); - } - - set isUsingDataset(value) { - this.setProp("isUsingDataset", value); - } - - get isUsingDataset() { - return !!this.prop("isUsingDataset", false); - } - - get properties() { - return lodash.uniq(lodash.flatten(this._subworkflows.map((x) => x.properties))); - } - - get humanReadableProperties() { - return this.properties.map((name) => s.humanize(name)); - } - - get systemName() { - return s.slugify(`${this.usedApplicationNames.join(":")}-${this.name.toLowerCase()}`); - } - - get defaultDescription() { - return `${this.usedModels - .join(", ") - .toUpperCase()} workflow using ${this.usedApplicationNames.join(", ")}.`; - } - - get exabyteId() { - return this.prop("exabyteId"); - } - - get hash() { - return this.prop("hash", ""); - } - - get isOutdated() { - return this.prop("isOutdated", false); - } - - get history() { - return this.prop("history", []); - } - - setMethodData(methodData) { - this.subworkflows.forEach((sw) => { - const method = methodData.getMethodBySubworkflow(sw); - if (method) sw.model.setMethod(method); - }); - - this.workflows.forEach((wf) => { - wf.subworkflows.forEach((sw) => { - const method = methodData.getMethodBySubworkflow(sw); - if (method) sw.model.setMethod(method); - }); - }); - } - - /** - * @param unit {Unit} - * @param head {Boolean} - * @param index {Number} - */ - addUnit(unit, head = false, index = -1) { - const { units } = this; - if (units.length === 0) { - unit.head = true; - this.setUnits([unit]); - } else { - if (head) { - units.unshift(unit); - } else if (index >= 0) { - units.splice(index, 0, unit); - } else { - units.push(unit); - } - this.setUnits(setNextLinks(setUnitsHead(units))); - } - } - - removeUnit(flowchartId) { - if (this.units.length < 2) return; - - const unit = this.units.find((x) => x.flowchartId === flowchartId); - const previousUnit = this.units.find((x) => x.next === unit.flowchartId); - if (previousUnit) { - delete previousUnit.next; - } - - this._subworkflows = this._subworkflows.filter((x) => x.id !== unit.id); - this._units = setNextLinks( - setUnitsHead(this._units.filter((x) => x.flowchartId !== flowchartId)), - ); - } - - /** - * @return Subworkflow[] - */ - get subworkflows() { - return this._subworkflows; - } - - get workflows() { - return this._workflows; - } - - /* - * @param type {String|Object} Unit type, map or subworkflow - * @param head {Boolean} - * @param index {Number} Index at which the unit will be added. -1 by default (ignored). - */ - addUnitType(type, head = false, index = -1) { - switch (type) { - case UNIT_TYPES.map: - // eslint-disable-next-line no-case-declarations - const workflowConfig = defaultWorkflowConfig; - // eslint-disable-next-line no-case-declarations - const mapUnit = new this._MapUnit(); - workflowConfig._id = this._Workflow.generateWorkflowId( - workflowConfig.name, - workflowConfig.properties, - workflowConfig.subworkflows, - this.applicationName, - ); - this.prop("workflows").push(workflowConfig); - this._workflows = this.prop("workflows").map((x) => new this._Workflow(x)); - mapUnit.setWorkflowId(workflowConfig._id); - this.addUnit(mapUnit, head, index); - break; - case UNIT_TYPES.subworkflow: - this.addSubworkflow(this._Subworkflow.createDefault(), head, index); - break; - default: - console.log(`unit_type=${type} unrecognized, skipping.`); - } - } - - addMapUnit(mapUnit, mapWorkflow) { - const mapWorkflowConfig = mapWorkflow.toJSON(); - if (!mapWorkflowConfig._id) { - mapWorkflowConfig._id = this._Workflow.generateWorkflowId( - mapWorkflowConfig.name, - mapWorkflowConfig.properties, - mapWorkflowConfig.subworkflows, - mapWorkflow.applicationName || this.applicationName, - ); - } - mapUnit.setWorkflowId(mapWorkflowConfig._id); - this.addUnit(mapUnit); - this._json.workflows.push(mapWorkflowConfig); - const me = this; - this._workflows = this.prop("workflows").map((x) => new me._Workflow(x)); - } - - findSubworkflowById(id) { - if (!id) return; - - const workflows = this.workflows || []; - const subworkflows = this.subworkflows || []; - - const subworkflow = subworkflows.find((sw) => sw.id === id); - if (subworkflow) return subworkflow; - - const workflow = workflows.find((w) => w.findSubworkflowById(id)); - if (workflow) return workflow.findSubworkflowById(id); - - console.warn("attempted to find a non-existing subworkflow"); - } - - get allSubworkflows() { - const subworkflowsList = []; - this.subworkflows.forEach((sw) => subworkflowsList.push(sw)); - this.workflows.forEach((workflow) => { - return Array.prototype.push.apply(subworkflowsList, workflow.allSubworkflows); - }); - return subworkflowsList; - } - - /** - * @summary Calculates hash of the workflow. Meaningful fields are units and subworkflows. - * units and subworkflows must be sorted topologically before hashing (already sorted). - */ - calculateHash() { - const meaningfulFields = { - units: _.map(this.units, (u) => u.calculateHash()).join(), - subworkflows: _.map(this.subworkflows, (sw) => sw.calculateHash()).join(), - workflows: _.map(this.workflows, (w) => w.calculateHash()).join(), - }; - return Utils.hash.calculateHashFromObject(meaningfulFields); - } -} diff --git a/src/js/workflows/workflow.ts b/src/js/workflows/workflow.ts new file mode 100644 index 00000000..e42dc017 --- /dev/null +++ b/src/js/workflows/workflow.ts @@ -0,0 +1,358 @@ +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type DefaultableInMemoryEntityConstructor, + defaultableEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { + type NamedInMemoryEntityConstructor, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { + ApplicationSchema, + SubworkflowSchema, + WorkflowSchema, +} from "@mat3ra/esse/dist/js/types"; +import { tree } from "@mat3ra/mode"; +import { SubworkflowStandata } from "@mat3ra/standata"; +import { Utils } from "@mat3ra/utils"; +// import { mix } from "mixwith"; +import _ from "underscore"; +import s from "underscore.string"; + +import { UnitType } from "../enums"; +import { type WorkflowSchemaMixin, workflowSchemaMixin } from "../generated/WorkflowSchemaMixin"; +import { Subworkflow } from "../subworkflows/subworkflow"; +import { MapUnit } from "../units"; +import { type AnyUnit, UnitFactory } from "../units/factory"; +import { setNextLinks, setUnitsHead } from "../utils"; +import defaultWorkflowConfig from "./default"; +import { RelaxationLogicMixin } from "./relaxation"; + +const { MODEL_NAMES } = tree; + +// class BaseWorkflow extends mix(NamedDefaultableRepetitionContextAndRenderInMemoryEntity).with( +// ComputedEntityMixin, +// RelaxationLogicMixin, +// ) {} + +type Base = typeof InMemoryEntity & + DefaultableInMemoryEntityConstructor & + NamedInMemoryEntityConstructor & + Constructor; + +type GenerateWorkflowIdParams = { + name: string; + properties?: string[]; + subworkflows?: SubworkflowSchema[]; + applicationName?: string; +}; + +export class Workflow extends (InMemoryEntity as Base) { + static usePredefinedIds = false; + + static readonly defaultConfig = defaultWorkflowConfig; + + static get jsonSchema() { + return JSONSchemasInterface.getSchemaById("workflow"); + } + + private subworkflowInstances: Subworkflow[]; + + private unitInstances: AnyUnit[]; + + private workflowInstances: Workflow[]; + + private static generateDefaultWorkflowId() { + return Utils.uuid.getUUID(); + } + + private static generateStandataWorkflowId({ + name, + properties, + subworkflows, + applicationName, + }: GenerateWorkflowIdParams) { + const propsInfo = properties?.length ? properties.sort().join(",") : ""; + const swInfo = subworkflows?.length + ? subworkflows.map((sw) => sw.name || "unknown").join(",") + : ""; + const seed = [`workflow-${name}`, applicationName, propsInfo, swInfo] + .filter((p) => p) + .join("-"); + + return Utils.uuid.getUUIDFromNamespace(seed); + } + + static fromSubworkflow(subworkflow: Subworkflow) { + const config = { + name: subworkflow.name, + subworkflows: [subworkflow.toJSON()], + units: setNextLinks(setUnitsHead([subworkflow.getAsUnit().toJSON()])), + properties: subworkflow.properties, + applicationName: subworkflow.application.name, + workflows: [] as WorkflowSchema[], + }; + return new Workflow(config); + } + + constructor(config: WorkflowSchema & { applicationName?: string }) { + if (!config._id) { + if (Workflow.usePredefinedIds) { + if (!config.applicationName) { + throw new Error("applicationName is required when usePredefinedIds is true"); + } + config._id = Workflow.generateStandataWorkflowId(config); + } else { + config._id = Workflow.generateDefaultWorkflowId(); + } + } + + super(config); + + this.subworkflowInstances = this.subworkflows.map((x) => new Subworkflow(x)); + this.unitInstances = this.units.map((unit) => UnitFactory.createInWorkflow(unit)); + this.workflowInstances = this.workflows?.map((x) => new Workflow(x)) || []; + } + + get workflows() { + return this.prop("workflows"); + } + + set workflows(value: WorkflowSchema[] | undefined) { + this.setProp("workflows", value); + } + + addSubworkflow(subworkflow: Subworkflow, head = false, index = -1) { + const subworkflowUnit = subworkflow.getAsUnit(); + + if (head) { + this.subworkflowInstances.unshift(subworkflow); + this.addUnit(subworkflowUnit, head, index); + } else { + this.subworkflowInstances.push(subworkflow); + this.addUnit(subworkflowUnit, head, index); + } + } + + removeSubworkflow(id: string) { + const subworkflowUnit = this.unitInstances.find((u) => u.id === id); + + if (subworkflowUnit) { + this.removeUnit(subworkflowUnit.flowchartId); + } + } + + setUnits(arr: AnyUnit[]) { + this.unitInstances = arr; + } + + get usedApplications(): ApplicationSchema[] { + const swApplications = this.subworkflows.map((sw) => sw.application); + const wfApplications = this.workflowInstances.map((w) => w.usedApplications).flat(); + + const usedApplications = [...swApplications, ...wfApplications].reduce((acc, app) => { + if (!acc.some((a) => a.name === app.name)) { + acc.push(app); + } + return acc; + }, [] as ApplicationSchema[]); + + return usedApplications; + } + + // return application names + // get usedApplicationNames() { + // return this.usedApplications.map((a) => a.name); + // } + + get usedApplicationVersions() { + return this.usedApplications.map((a) => a.version); + } + + get usedApplicationNamesWithVersions() { + return this.usedApplications.map((a) => `${a.name} ${a.version}`); + } + + get usedModels() { + return Array.from(new Set(this.subworkflows.map((sw) => sw.model.type))); + } + + get humanReadableUsedModels() { + return this.usedModels.filter((m) => m !== "unknown").map((m) => MODEL_NAMES[m]); + } + + toJSON(): WorkflowSchema & AnyObject { + return { + ...super.toJSON(), + name: this.name, + properties: this.properties, + units: this.unitInstances.map((x) => x.toJSON()), + subworkflows: this.subworkflowInstances.map((x) => x.toJSON()), + workflows: this.workflowInstances.map((x) => x.toJSON()), + }; + } + + get properties() { + return [...new Set(this.subworkflows.map((x) => x.properties || []).flat())]; + } + + get humanReadableProperties() { + return this.properties.map((name) => s.humanize(name)); + } + + get systemName() { + const applicationNames = this.usedApplications.map((a) => a.name); + return s.slugify(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); + } + + get defaultDescription() { + return `${this.usedModels.join(", ").toUpperCase()} workflow using ${this.usedApplications + .map((a) => a.name) + .join(", ")}.`; + } + + // TODO-question: clarify head logic + private addUnit(unit: AnyUnit, head = false, index = -1) { + const [...unitInstances] = this.unitInstances; + + if (unitInstances.length === 0) { + unit.head = true; + this.setUnits([unit]); + } else { + if (head) { + unitInstances.unshift(unit); + } else if (index >= 0) { + unitInstances.splice(index, 0, unit); + } else { + unitInstances.push(unit); + } + this.setUnits(setNextLinks(setUnitsHead(unitInstances))); + } + } + + private removeUnit(flowchartId: string) { + if (this.units.length < 2) { + return; + } + + const unit = this.unitInstances.find((x) => x.flowchartId === flowchartId); + if (!unit) { + return; + } + + const previousUnit = this.unitInstances.find((x) => x.next === unit.flowchartId); + if (previousUnit) { + delete previousUnit.next; + } + + this.subworkflowInstances = this.subworkflowInstances.filter((x) => x.id !== unit.id); + + this.unitInstances = setNextLinks( + setUnitsHead(this.unitInstances.filter((x) => x.flowchartId !== flowchartId)), + ); + } + + /* + * @param type {String|Object} Unit type, map or subworkflow + * @param head {Boolean} + * @param index {Number} Index at which the unit will be added. -1 by default (ignored). + */ + addUnitType(type: UnitType, head = false, index = -1) { + switch (type) { + case UnitType.map: { + const mapWorkflowConfig = { + ...defaultWorkflowConfig, + _id: Workflow.generateDefaultWorkflowId(), + }; + const mapUnit = new MapUnit({ + workflowId: mapWorkflowConfig._id, + }); + + this.workflows = [...(this.workflows || []), mapWorkflowConfig]; + this.workflowInstances = this.workflows.map((x) => new Workflow(x)); + + this.addUnit(mapUnit, head, index); + + break; + } + case UnitType.subworkflow: + this.addSubworkflow(Subworkflow.createDefault(), head, index); + break; + default: + console.log(`unit_type=${type} unrecognized, skipping.`); + } + } + + addMapUnit(mapUnit: MapUnit, mapWorkflow: Workflow) { + const mapWorkflowConfig = { + _id: Workflow.generateDefaultWorkflowId(), + ...mapWorkflow.toJSON(), + }; + + mapUnit.setWorkflowId(mapWorkflowConfig._id); + this.addUnit(mapUnit); + + this.workflows = [...(this.workflows || []), mapWorkflowConfig]; + this.workflowInstances = this.workflows.map((x) => new Workflow(x)); + } + + get allSubworkflows() { + const subworkflowsList: Subworkflow[] = []; + this.subworkflowInstances.forEach((sw) => subworkflowsList.push(sw)); + this.workflowInstances.forEach((workflow) => { + return Array.prototype.push.apply(subworkflowsList, workflow.allSubworkflows); + }); + return subworkflowsList; + } + + /** + * @summary Calculates hash of the workflow. Meaningful fields are units and subworkflows. + * units and subworkflows must be sorted topologically before hashing (already sorted). + */ + calculateHash(): string { + const meaningfulFields = { + units: _.map(this.unitInstances, (u) => u.calculateHash()).join(), + subworkflows: _.map(this.subworkflowInstances, (sw) => sw.calculateHash()).join(), + workflows: _.map(this.workflowInstances, (w) => w.calculateHash()).join(), + }; + return Utils.hash.calculateHashFromObject(meaningfulFields); + } + + get hasRelaxation() { + return Boolean(this.getRelaxationSubworkflow()); + } + + toggleRelaxation() { + const relaxSubworkflow = this.getRelaxationSubworkflow(); + if (relaxSubworkflow?._id) { + this.removeSubworkflow(relaxSubworkflow._id); + } else { + const vcRelax = this.getStandataRelaxationSubworkflow(); + if (vcRelax) { + this.addSubworkflow(new Subworkflow(vcRelax), true); + } + } + } + + private getStandataRelaxationSubworkflow() { + // TODO: fix standata type + return new SubworkflowStandata().getRelaxationSubworkflowByApplication( + this.subworkflowInstances[0].application.name, + ) as unknown as SubworkflowSchema; + } + + private getRelaxationSubworkflow() { + const standataSubworkflow = this.getStandataRelaxationSubworkflow(); + + return this.subworkflows.find((sw) => { + return standataSubworkflow && standataSubworkflow.systemName === sw.systemName; + }); + } +} + +namedEntityMixin(Workflow.prototype); +defaultableEntityMixin(Workflow); +workflowSchemaMixin(Workflow.prototype); From 9cb0de6758a87e12db16e2b3ea65cb4afdf3da03 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 5 Feb 2026 19:07:33 +0200 Subject: [PATCH 02/30] chore: workflow/subworkflow types --- dist/js/ExecutionUnitInput.d.ts | 71 +--- dist/js/ExecutionUnitInput.js | 119 +----- .../ImportantSettingsProviderMixin.d.ts | 2 +- .../context/mixins/MaterialContextMixin.d.ts | 2 +- .../BoundaryConditionsFormDataManager.d.ts | 33 +- .../BoundaryConditionsFormDataManager.js | 5 + .../CollinearMagnetizationDataManager.d.ts | 16 +- .../CollinearMagnetizationDataManager.js | 22 +- .../Hubbard/HubbardContextManagerLegacy.d.ts | 13 +- .../Hubbard/HubbardContextManagerLegacy.js | 5 + .../Hubbard/HubbardContextProvider.d.ts | 15 +- .../Hubbard/HubbardContextProvider.js | 1 + .../Hubbard/HubbardJContextManager.d.ts | 13 +- .../Hubbard/HubbardJContextManager.js | 5 + .../Hubbard/HubbardUContextManager.d.ts | 13 +- .../Hubbard/HubbardUContextManager.js | 5 + .../Hubbard/HubbardVContextManager.d.ts | 13 +- .../Hubbard/HubbardVContextManager.js | 5 + .../providers/IonDynamicsContextProvider.d.ts | 8 +- .../providers/IonDynamicsDataManager.d.ts | 27 ++ .../providers/IonDynamicsDataManager.js | 44 ++ .../providers/MLSettingsDataManager.d.ts | 22 +- .../providers/MLSettingsDataManager.js | 6 + .../MLTrainTestSplitDataManager.d.ts | 22 +- .../providers/MLTrainTestSplitDataManager.js | 6 + .../context/providers/NEBFormDataManager.d.ts | 20 +- .../context/providers/NEBFormDataManager.js | 6 + .../NonCollinearMagnetizationDataManager.d.ts | 16 +- .../NonCollinearMagnetizationDataManager.js | 78 ++-- .../providers/PlanewaveCutoffDataManager.d.ts | 19 +- .../providers/PlanewaveCutoffDataManager.js | 33 +- .../PointsGrid/IGridFormDataManager.d.ts | 4 +- .../PointsGrid/IGridFormDataManager.js | 4 + .../PointsGrid/KGridFormDataManager.d.ts | 6 +- .../PointsGrid/KGridFormDataManager.js | 13 + .../PointsGridFormDataProvider.d.ts | 56 ++- .../PointsGrid/PointsGridFormDataProvider.js | 43 +- .../PointsGrid/QGridFormDataManager.d.ts | 4 +- .../PointsGrid/QGridFormDataManager.js | 4 + .../ExplicitKPath2PIBAFormDataManager.d.ts | 7 +- .../ExplicitKPath2PIBAFormDataManager.js | 4 + .../ExplicitKPathFormDataManager.d.ts | 7 +- .../ExplicitKPathFormDataManager.js | 4 + .../PointsPath/IPathFormDataManager.d.ts | 7 +- .../PointsPath/IPathFormDataManager.js | 4 + .../PointsPath/KPathFormDataManager.d.ts | 7 +- .../PointsPath/KPathFormDataManager.js | 4 + .../PointsPathFormDataProvider.d.ts | 13 +- .../PointsPath/PointsPathFormDataProvider.js | 1 + .../PointsPath/QPathFormDataManager.d.ts | 7 +- .../PointsPath/QPathFormDataManager.js | 4 + .../providers/base/ContextProvider.d.ts | 47 +-- .../context/providers/base/ContextProvider.js | 9 +- .../base/JSONSchemaDataProvider.d.ts | 7 +- .../base/JSONSchemaFormDataProvider.d.ts | 3 +- .../espresso/QENEBInputDataManager.d.ts | 18 +- .../espresso/QENEBInputDataManager.js | 6 + .../espresso/QEPWXInputDataManager.d.ts | 20 +- .../espresso/QEPWXInputDataManager.js | 9 +- .../nwchem/NWChemInputDataManager.d.ts | 20 +- .../nwchem/NWChemInputDataManager.js | 7 + .../vasp/VASPInputDataManager.d.ts | 20 +- .../vasp/VASPInputDataManager.js | 6 + .../vasp/VASPNEBInputDataManager.d.ts | 19 +- .../vasp/VASPNEBInputDataManager.js | 6 + dist/js/context/providers/index.d.ts | 95 +++++ dist/js/context/providers/index.js | 111 +++++ dist/js/enums.d.ts | 1 - dist/js/enums.js | 1 - dist/js/generated/ExecutionUnitSchemaMixin.js | 8 +- .../convergence/ConvergenceParameter.d.ts | 2 - .../convergence/NonUniformKGridConvergence.js | 2 - .../convergence/UniformKGridConvergence.js | 2 - dist/js/subworkflows/subworkflow.d.ts | 40 +- dist/js/subworkflows/subworkflow.js | 43 +- dist/js/units/ExecutionUnit.d.ts | 18 +- dist/js/units/ExecutionUnit.js | 68 ++-- dist/js/units/factory.d.ts | 7 +- dist/js/units/factory.js | 3 - dist/js/utils.d.ts | 35 +- package-lock.json | 6 +- package.json | 2 +- scripts/generate-mixins.ts | 1 - src/js/ExecutionUnitInput.ts | 381 +----------------- src/js/context/mixins/MaterialContextMixin.ts | 2 +- .../BoundaryConditionsFormDataManager.ts | 31 +- .../CollinearMagnetizationDataManager.ts | 44 +- .../Hubbard/HubbardContextManagerLegacy.ts | 25 +- .../Hubbard/HubbardContextProvider.ts | 26 +- .../Hubbard/HubbardJContextManager.ts | 26 +- .../Hubbard/HubbardUContextManager.ts | 25 +- .../Hubbard/HubbardVContextManager.ts | 25 +- ...tProvider.ts => IonDynamicsDataManager.ts} | 25 +- .../providers/MLSettingsDataManager.ts | 30 +- .../providers/MLTrainTestSplitDataManager.ts | 31 +- .../context/providers/NEBFormDataManager.ts | 27 +- .../NonCollinearMagnetizationDataManager.ts | 101 +++-- .../providers/PlanewaveCutoffDataManager.ts | 58 ++- .../PointsGrid/IGridFormDataManager.ts | 12 +- .../PointsGrid/KGridFormDataManager.ts | 25 +- .../PointsGrid/PointsGridFormDataProvider.ts | 90 +++-- .../PointsGrid/QGridFormDataManager.ts | 12 +- .../ExplicitKPath2PIBAFormDataManager.ts | 20 +- .../ExplicitKPathFormDataManager.ts | 18 +- .../PointsPath/IPathFormDataManager.ts | 18 +- .../PointsPath/KPathFormDataManager.ts | 18 +- .../PointsPath/PointsPathFormDataProvider.ts | 17 +- .../PointsPath/QPathFormDataManager.ts | 18 +- .../context/providers/base/ContextProvider.ts | 82 ++-- .../providers/base/JSONSchemaDataProvider.ts | 12 +- .../base/JSONSchemaFormDataProvider.ts | 9 +- .../espresso/QENEBInputDataManager.ts | 28 +- .../espresso/QEPWXInputDataManager.ts | 32 +- .../nwchem/NWChemInputDataManager.ts | 29 +- .../vasp/VASPInputDataManager.ts | 25 +- .../vasp/VASPNEBInputDataManager.ts | 29 +- src/js/context/providers/index.ts | 143 +++++++ src/js/enums.ts | 1 - src/js/generated/ExecutionUnitSchemaMixin.ts | 8 +- src/js/generated/ProcessingUnitSchemaMixin.ts | 40 -- .../convergence/ConvergenceParameter.ts | 2 - .../convergence/NonUniformKGridConvergence.ts | 2 - .../convergence/UniformKGridConvergence.ts | 2 - src/js/subworkflows/subworkflow.ts | 58 +-- src/js/units/ExecutionUnit.ts | 94 +++-- src/js/units/ProcessingUnit.ts | 39 -- src/js/units/factory.ts | 7 +- 127 files changed, 1754 insertions(+), 1503 deletions(-) create mode 100644 dist/js/context/providers/IonDynamicsDataManager.d.ts create mode 100644 dist/js/context/providers/IonDynamicsDataManager.js create mode 100644 dist/js/context/providers/index.d.ts create mode 100644 dist/js/context/providers/index.js rename src/js/context/providers/{IonDynamicsContextProvider.ts => IonDynamicsDataManager.ts} (63%) create mode 100644 src/js/context/providers/index.ts delete mode 100644 src/js/generated/ProcessingUnitSchemaMixin.ts delete mode 100644 src/js/units/ProcessingUnit.ts diff --git a/dist/js/ExecutionUnitInput.d.ts b/dist/js/ExecutionUnitInput.d.ts index 2c6ec734..a569f42c 100644 --- a/dist/js/ExecutionUnitInput.d.ts +++ b/dist/js/ExecutionUnitInput.d.ts @@ -1,80 +1,23 @@ -import { type Application, Template } from "@mat3ra/ade"; +import { Template } from "@mat3ra/ade"; import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ContextProviderNameEnum, JobSchema, TemplateSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; -import type { OrderedMaterial } from "./context/mixins/MaterialContextMixin"; -import BoundaryConditionsFormDataManager, { type BoundaryConditionsFormDataManagerContextItem, type BoundaryConditionsFormDataManagerExternalContext } from "./context/providers/BoundaryConditionsFormDataManager"; -import QENEBInputDataManager, { type QENEBInputDataManagerContextItem, type QENEBInputDataManagerExternalContext } from "./context/providers/by_application/espresso/QENEBInputDataManager"; -import type { QEPWXInputDataManagerContextItem, QEPWXInputDataManagerExternalContext } from "./context/providers/by_application/espresso/QEPWXInputDataManager"; -import QEPWXInputDataManager from "./context/providers/by_application/espresso/QEPWXInputDataManager"; -import NWChemInputDataManager, { type NWChemInputDataManagerContextItem, type NWChemInputDataManagerExternalContext } from "./context/providers/by_application/nwchem/NWChemInputDataManager"; -import VASPInputDataManager, { type VASPInputDataManagerContextItem, type VASPInputDataManagerExternalContext } from "./context/providers/by_application/vasp/VASPInputDataManager"; -import VASPNEBInputDataManager, { type VASPNEBInputDataManagerContextItem, type VASPNEBInputDataManagerExternalContext } from "./context/providers/by_application/vasp/VASPNEBInputDataManager"; -import type { CollinearMagnetizationDataManagerContextItem, CollinearMagnetizationDataManagerExternalContext } from "./context/providers/CollinearMagnetizationDataManager"; -import CollinearMagnetizationDataManager from "./context/providers/CollinearMagnetizationDataManager"; -import type { HubbardContextManagerLegacyContextItem } from "./context/providers/Hubbard/HubbardContextManagerLegacy"; -import HubbardContextManagerLegacy from "./context/providers/Hubbard/HubbardContextManagerLegacy"; -import type { HubbardExternalContext } from "./context/providers/Hubbard/HubbardContextProvider"; -import HubbardJContextManager, { type HubbardJContextManagerContextItem } from "./context/providers/Hubbard/HubbardJContextManager"; -import HubbardUContextManager, { type HubbardUContextManagerContextItem } from "./context/providers/Hubbard/HubbardUContextManager"; -import HubbardVContextManager, { type HubbardVContextManagerContextItem } from "./context/providers/Hubbard/HubbardVContextManager"; -import type { IonDynamicsContextProviderContextItem, IonDynamicsContextProviderExternalContext } from "./context/providers/IonDynamicsContextProvider"; -import IonDynamicsContextProvider from "./context/providers/IonDynamicsContextProvider"; -import type { MLSettingsDataManagerContextItem, MLSettingsDataManagerExternalContext } from "./context/providers/MLSettingsDataManager"; -import MLSettingsDataManager from "./context/providers/MLSettingsDataManager"; -import type { MLTrainTestSplitDataManagerContextItem, MLTrainTestSplitDataManagerExternalContext } from "./context/providers/MLTrainTestSplitDataManager"; -import MLTrainTestSplitDataManager from "./context/providers/MLTrainTestSplitDataManager"; -import type { NEBFormDataManagerContextItem, NEBFormDataManagerExternalContext } from "./context/providers/NEBFormDataManager"; -import NEBFormDataManager from "./context/providers/NEBFormDataManager"; -import NonCollinearMagnetizationDataManager, { type NonCollinearMagnetizationDataManagerContextItem, type NonCollinearMagnetizationDataManagerExternalContext } from "./context/providers/NonCollinearMagnetizationDataManager"; -import PlanewaveCutoffDataManager, { type PlanewaveCutoffDataManagerContextItem, type PlanewaveCutoffDataManagerExternalContext } from "./context/providers/PlanewaveCutoffDataManager"; -import IGridFormDataManager from "./context/providers/PointsGrid/IGridFormDataManager"; -import KGridFormDataManager from "./context/providers/PointsGrid/KGridFormDataManager"; -import type { PointsGridFormDataManagerContextItem, PointsGridFormDataManagerExternalContext } from "./context/providers/PointsGrid/PointsGridFormDataProvider"; -import QGridFormDataManager from "./context/providers/PointsGrid/QGridFormDataManager"; -import ExplicitKPath2PIBAFormDataManager, { type ExplicitKPath2PIBAFormDataManagerContextItem, type ExplicitKPath2PIBAFormDataManagerExternalContext } from "./context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager"; -import type { ExplicitKPathFormDataManagerContextItem, ExplicitKPathFormDataManagerExternalContext } from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; -import ExplicitKPathFormDataManager from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; -import type { IPathFormDataManagerContextItem, IPathFormDataManagerExternalContext } from "./context/providers/PointsPath/IPathFormDataManager"; -import IPathFormDataManager from "./context/providers/PointsPath/IPathFormDataManager"; -import KPathFormDataManager, { type KPathFormDataManagerContextItem, type KPathFormDataManagerExternalContext } from "./context/providers/PointsPath/KPathFormDataManager"; -import QPathFormDataManager, { type QPathFormDataManagerContextItem, type QPathFormDataManagerExternalContext } from "./context/providers/PointsPath/QPathFormDataManager"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import type { ExecutionUnitInputSchemaMixin } from "./generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; +type JSON = Schema & AnyObject; type Base = typeof InMemoryEntity & Constructor; type ConstructorConfig = Schema | (Omit & { template: Template; }); -type AnyContextItem = PlanewaveCutoffDataManagerContextItem | PointsGridFormDataManagerContextItem | QPathFormDataManagerContextItem | IPathFormDataManagerContextItem | KPathFormDataManagerContextItem | ExplicitKPathFormDataManagerContextItem | ExplicitKPath2PIBAFormDataManagerContextItem | HubbardJContextManagerContextItem | HubbardUContextManagerContextItem | HubbardVContextManagerContextItem | HubbardContextManagerLegacyContextItem | NEBFormDataManagerContextItem | BoundaryConditionsFormDataManagerContextItem | MLSettingsDataManagerContextItem | MLTrainTestSplitDataManagerContextItem | IonDynamicsContextProviderContextItem | CollinearMagnetizationDataManagerContextItem | NonCollinearMagnetizationDataManagerContextItem | QEPWXInputDataManagerContextItem | QENEBInputDataManagerContextItem | VASPInputDataManagerContextItem | VASPNEBInputDataManagerContextItem | NWChemInputDataManagerContextItem; -export type AnyContextExternalContext = PlanewaveCutoffDataManagerExternalContext | PointsGridFormDataManagerExternalContext | QPathFormDataManagerExternalContext | IPathFormDataManagerExternalContext | KPathFormDataManagerExternalContext | ExplicitKPathFormDataManagerExternalContext | ExplicitKPath2PIBAFormDataManagerExternalContext | HubbardExternalContext | NEBFormDataManagerExternalContext | BoundaryConditionsFormDataManagerExternalContext | MLSettingsDataManagerExternalContext | MLTrainTestSplitDataManagerExternalContext | IonDynamicsContextProviderExternalContext | CollinearMagnetizationDataManagerExternalContext | NonCollinearMagnetizationDataManagerExternalContext | QEPWXInputDataManagerExternalContext | QENEBInputDataManagerExternalContext | VASPInputDataManagerExternalContext | VASPNEBInputDataManagerExternalContext | NWChemInputDataManagerExternalContext; -type AnyContextProvider = BoundaryConditionsFormDataManager | MLSettingsDataManager | MLTrainTestSplitDataManager | IonDynamicsContextProvider | CollinearMagnetizationDataManager | NonCollinearMagnetizationDataManager | QEPWXInputDataManager | QENEBInputDataManager | VASPInputDataManager | VASPNEBInputDataManager | NWChemInputDataManager | PlanewaveCutoffDataManager | KGridFormDataManager | QGridFormDataManager | IGridFormDataManager | QPathFormDataManager | IPathFormDataManager | KPathFormDataManager | ExplicitKPathFormDataManager | ExplicitKPath2PIBAFormDataManager | HubbardJContextManager | HubbardUContextManager | HubbardVContextManager | HubbardContextManagerLegacy | NEBFormDataManager; -export type ExecutionUnitInputContext = (AnyContextItem & { - name: ContextProviderNameEnum; -})[]; -type ExternalContext = { - application: Application; - material: OrderedMaterial; - materials: OrderedMaterial[]; - workflow: WorkflowSchema; - job: JobSchema; - isUsingJinjaVariables?: boolean; - materialsSet: { - _id: string; - }; -}; declare const ExecutionUnitInput_base: Base; export default class ExecutionUnitInput extends ExecutionUnitInput_base implements Schema { - _json: Schema & AnyObject; - toJSON: () => Schema & AnyObject; - toJSONQuick: () => Schema & AnyObject; + _json: JSON; + toJSON: () => JSON; + toJSONQuick: () => JSON; static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; - contextProvidersInstances: AnyContextProvider[]; - readonly templateInstance: Template; static createFromTemplate(template: Template | TemplateSchema): ExecutionUnitInput; constructor(config: ConstructorConfig); - setContext(context: ExecutionUnitInputContext, externalContext: ExternalContext): this; - render(): this; - getFullContext(): (import("./context/providers/base/ContextProvider").ExtendedContextItem<"boundaryConditions", import("@mat3ra/esse/dist/js/types").BoundaryConditionsDataProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").QEPwxContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").QENEBContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").NWChemTotalEnergyContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").VASPContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"input", import("@mat3ra/esse/dist/js/types").VASPNEBContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"collinearMagnetization", import("@mat3ra/esse/dist/js/types").CollinearMagnetizationContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"hubbard_u" | "hubbard_j" | "hubbard_v" | "hubbard_legacy", object, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"mlSettings", import("@mat3ra/esse/dist/js/types").MLSettingsContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"mlTrainTestSplit", import("@mat3ra/esse/dist/js/types").MLTrainTestSplitContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"nonCollinearMagnetization", import("@mat3ra/esse/dist/js/types").NonCollinearMagnetizationContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"cutoffs", import("@mat3ra/esse/dist/js/types").PlanewaveCutoffsContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"qgrid" | "kgrid" | "igrid", import("@mat3ra/esse/dist/js/types").PointsGridDataProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem | import("./context/providers/base/ContextProvider").ExtendedContextItem<"dynamics", import("@mat3ra/esse/dist/js/types").IonDynamicsContextProviderSchema, object> | import("./context/providers/base/ContextProvider").ExtendedContextItem<"neb", import("@mat3ra/esse/dist/js/types").NEBDataProviderSchema, object>)[]; + render(renderingContext: Record): this; } export {}; diff --git a/dist/js/ExecutionUnitInput.js b/dist/js/ExecutionUnitInput.js index d1fccace..c61e3998 100644 --- a/dist/js/ExecutionUnitInput.js +++ b/dist/js/ExecutionUnitInput.js @@ -7,31 +7,6 @@ const ade_1 = require("@mat3ra/ade"); const entity_1 = require("@mat3ra/code/dist/js/entity"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const nunjucks_1 = __importDefault(require("nunjucks")); -const BoundaryConditionsFormDataManager_1 = __importDefault(require("./context/providers/BoundaryConditionsFormDataManager")); -const QENEBInputDataManager_1 = __importDefault(require("./context/providers/by_application/espresso/QENEBInputDataManager")); -const QEPWXInputDataManager_1 = __importDefault(require("./context/providers/by_application/espresso/QEPWXInputDataManager")); -const NWChemInputDataManager_1 = __importDefault(require("./context/providers/by_application/nwchem/NWChemInputDataManager")); -const VASPInputDataManager_1 = __importDefault(require("./context/providers/by_application/vasp/VASPInputDataManager")); -const VASPNEBInputDataManager_1 = __importDefault(require("./context/providers/by_application/vasp/VASPNEBInputDataManager")); -const CollinearMagnetizationDataManager_1 = __importDefault(require("./context/providers/CollinearMagnetizationDataManager")); -const HubbardContextManagerLegacy_1 = __importDefault(require("./context/providers/Hubbard/HubbardContextManagerLegacy")); -const HubbardJContextManager_1 = __importDefault(require("./context/providers/Hubbard/HubbardJContextManager")); -const HubbardUContextManager_1 = __importDefault(require("./context/providers/Hubbard/HubbardUContextManager")); -const HubbardVContextManager_1 = __importDefault(require("./context/providers/Hubbard/HubbardVContextManager")); -const IonDynamicsContextProvider_1 = __importDefault(require("./context/providers/IonDynamicsContextProvider")); -const MLSettingsDataManager_1 = __importDefault(require("./context/providers/MLSettingsDataManager")); -const MLTrainTestSplitDataManager_1 = __importDefault(require("./context/providers/MLTrainTestSplitDataManager")); -const NEBFormDataManager_1 = __importDefault(require("./context/providers/NEBFormDataManager")); -const NonCollinearMagnetizationDataManager_1 = __importDefault(require("./context/providers/NonCollinearMagnetizationDataManager")); -const PlanewaveCutoffDataManager_1 = __importDefault(require("./context/providers/PlanewaveCutoffDataManager")); -const IGridFormDataManager_1 = __importDefault(require("./context/providers/PointsGrid/IGridFormDataManager")); -const KGridFormDataManager_1 = __importDefault(require("./context/providers/PointsGrid/KGridFormDataManager")); -const QGridFormDataManager_1 = __importDefault(require("./context/providers/PointsGrid/QGridFormDataManager")); -const ExplicitKPath2PIBAFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager")); -const ExplicitKPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/ExplicitKPathFormDataManager")); -const IPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/IPathFormDataManager")); -const KPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/KPathFormDataManager")); -const QPathFormDataManager_1 = __importDefault(require("./context/providers/PointsPath/QPathFormDataManager")); class ExecutionUnitInput extends entity_1.InMemoryEntity { static get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("workflow/unit/input/-inputItem"); @@ -47,104 +22,14 @@ class ExecutionUnitInput extends entity_1.InMemoryEntity { const { template } = config; const templateInstance = template instanceof ade_1.Template ? template : new ade_1.Template(template); super({ ...config, template: templateInstance.toJSON() }); - this.contextProvidersInstances = []; - this.templateInstance = templateInstance; } - setContext(context, externalContext) { - this.contextProvidersInstances = this.template.contextProviders.map(({ name }) => { - const contextItem = context.find((c) => c.name === name); - if (name === "PlanewaveCutoffDataManager") { - return new PlanewaveCutoffDataManager_1.default(contextItem, externalContext); - } - if (name === "KGridFormDataManager") { - return new KGridFormDataManager_1.default(contextItem, externalContext); - } - if (name === "QGridFormDataManager") { - return new QGridFormDataManager_1.default(contextItem, externalContext); - } - if (name === "IGridFormDataManager") { - return new IGridFormDataManager_1.default(contextItem, externalContext); - } - if (name === "QPathFormDataManager") { - return new QPathFormDataManager_1.default(contextItem, externalContext); - } - if (name === "IPathFormDataManager") { - return new IPathFormDataManager_1.default(contextItem, externalContext); - } - if (name === "KPathFormDataManager") { - return new KPathFormDataManager_1.default(contextItem, externalContext); - } - if (name === "ExplicitKPathFormDataManager") { - return new ExplicitKPathFormDataManager_1.default(contextItem, externalContext); - } - if (name === "ExplicitKPath2PIBAFormDataManager") { - return new ExplicitKPath2PIBAFormDataManager_1.default(contextItem, externalContext); - } - if (name === "HubbardJContextManager") { - return new HubbardJContextManager_1.default(contextItem, externalContext); - } - if (name === "HubbardUContextManager") { - return new HubbardUContextManager_1.default(contextItem, externalContext); - } - if (name === "HubbardVContextManager") { - return new HubbardVContextManager_1.default(contextItem, externalContext); - } - if (name === "HubbardContextManagerLegacy") { - return new HubbardContextManagerLegacy_1.default(contextItem, externalContext); - } - if (name === "NEBFormDataManager") { - return new NEBFormDataManager_1.default(contextItem, externalContext); - } - if (name === "BoundaryConditionsFormDataManager") { - return new BoundaryConditionsFormDataManager_1.default(contextItem, externalContext); - } - if (name === "MLSettingsDataManager") { - return new MLSettingsDataManager_1.default(contextItem, externalContext); - } - if (name === "MLTrainTestSplitDataManager") { - return new MLTrainTestSplitDataManager_1.default(contextItem, externalContext); - } - if (name === "IonDynamicsContextProvider") { - return new IonDynamicsContextProvider_1.default(contextItem, externalContext); - } - if (name === "CollinearMagnetizationDataManager") { - return new CollinearMagnetizationDataManager_1.default(contextItem, externalContext); - } - if (name === "NonCollinearMagnetizationDataManager") { - return new NonCollinearMagnetizationDataManager_1.default(contextItem, externalContext); - } - if (name === "QEPWXInputDataManager") { - return new QEPWXInputDataManager_1.default(contextItem, externalContext); - } - if (name === "QENEBInputDataManager") { - return new QENEBInputDataManager_1.default(contextItem, externalContext); - } - if (name === "VASPInputDataManager") { - return new VASPInputDataManager_1.default(contextItem, externalContext); - } - if (name === "VASPNEBInputDataManager") { - return new VASPNEBInputDataManager_1.default(contextItem, externalContext); - } - if (name === "NWChemInputDataManager") { - return new NWChemInputDataManager_1.default(contextItem, externalContext); - } - throw new Error(`Unknown provider: ${name}`); - }); - return this; - } - render() { + render(renderingContext) { if (this.isManuallyChanged) { return this; } - const fullContext = this.getFullContext(); - const rendered = nunjucks_1.default.compile(this.template.content).render(fullContext); + const rendered = nunjucks_1.default.compile(this.template.content).render(renderingContext); this.rendered = rendered || this.template.content; return this; } - getFullContext() { - return this.contextProvidersInstances.map((contextProvider) => { - return contextProvider.getContextItemData(); - }); - } } exports.default = ExecutionUnitInput; diff --git a/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts b/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts index 67d25578..58acb9ca 100644 --- a/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts +++ b/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts @@ -6,4 +6,4 @@ export type ImportantSettingsProvider = { isImportantEdited: boolean | undefined; }; export type ImportantSettingsProviderInMemoryEntityConstructor = Constructor; -export declare function importantSettingsProviderMixin(item: T): asserts item is T & ImportantSettingsProvider; +export declare function importantSettingsProviderMixin(item: T): asserts item is T & ImportantSettingsProvider; diff --git a/dist/js/context/mixins/MaterialContextMixin.d.ts b/dist/js/context/mixins/MaterialContextMixin.d.ts index d22f2b79..373768f6 100644 --- a/dist/js/context/mixins/MaterialContextMixin.d.ts +++ b/dist/js/context/mixins/MaterialContextMixin.d.ts @@ -6,7 +6,7 @@ export type MaterialContextMixin = { readonly isMaterialCreatedDefault: boolean; readonly isMaterialUpdated: boolean; material: OrderedMaterial; - extraData?: { + extraData: { materialHash: string; }; initMaterialContextMixin(externalContext: MaterialExternalContext): void; diff --git a/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts b/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts index 74afceaf..7f72941e 100644 --- a/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts +++ b/dist/js/context/providers/BoundaryConditionsFormDataManager.d.ts @@ -1,31 +1,30 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { BoundaryConditionsDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { BoundaryConditionsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "boundaryConditions"; -type Data = BoundaryConditionsDataProviderSchema; -export type BoundaryConditionsFormDataManagerContextItem = ContextItem; -export type BoundaryConditionsFormDataManagerExternalContext = JinjaExternalContext & MaterialExternalContext; -type ExternalContext = BoundaryConditionsFormDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = BoundaryConditionsContextItemSchema; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const BoundaryConditionsFormDataManager_base: Base; export default class BoundaryConditionsFormDataManager extends BoundaryConditionsFormDataManager_base { readonly name: "boundaryConditions"; readonly domain: "important"; - readonly humanName = "Boundary Conditions"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): BoundaryConditionsFormDataManager; + readonly humanName: "Boundary Conditions"; readonly uiSchema: { - type: { - "ui:disabled": boolean; + readonly type: { + readonly "ui:disabled": true; }; - offset: { - "ui:disabled": boolean; + readonly offset: { + readonly "ui:disabled": true; }; - electricField: {}; - targetFermiEnergy: {}; + readonly electricField: {}; + readonly targetFermiEnergy: {}; }; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): Data; + constructor(contextItem: Partial, externalContext: ExternalContext); + getDefaultData(): Schema["data"]; get jsonSchema(): import("json-schema").JSONSchema7 | undefined; } export {}; diff --git a/dist/js/context/providers/BoundaryConditionsFormDataManager.js b/dist/js/context/providers/BoundaryConditionsFormDataManager.js index 2953e506..bc686bfd 100644 --- a/dist/js/context/providers/BoundaryConditionsFormDataManager.js +++ b/dist/js/context/providers/BoundaryConditionsFormDataManager.js @@ -8,10 +8,15 @@ const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContex const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/boundary-conditions-data-provider"; class BoundaryConditionsFormDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "boundaryConditions"); + return new BoundaryConditionsFormDataManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "boundaryConditions"; this.domain = "important"; + this.entityName = "unit"; this.humanName = "Boundary Conditions"; this.uiSchema = { type: { "ui:disabled": true }, diff --git a/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts b/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts index 37f76a76..064bf74a 100644 --- a/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts +++ b/dist/js/context/providers/CollinearMagnetizationDataManager.d.ts @@ -1,24 +1,24 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { CollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { CollinearMagnetizationContextItemSchema, CollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "collinearMagnetization"; type Data = CollinearMagnetizationContextProviderSchema; -export type CollinearMagnetizationDataManagerContextItem = ContextItem; -export type CollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & MaterialExternalContext; -type ExternalContext = CollinearMagnetizationDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = CollinearMagnetizationContextItemSchema; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const CollinearMagnetizationDataManager_base: Base; export default class CollinearMagnetizationDataManager extends CollinearMagnetizationDataManager_base { readonly name: "collinearMagnetization"; readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): CollinearMagnetizationDataManager; readonly jsonSchema: JSONSchema7 | undefined; private readonly isTotalMagnetization; private readonly firstElement; private readonly uniqueElementsWithLabels; - constructor(contextItem: ContextItem, externalContext: ExternalContext); + constructor(contextItem: Partial, externalContext: ExternalContext); getDefaultData(): Data; setData(data: Data): void; get uiSchemaStyled(): { diff --git a/dist/js/context/providers/CollinearMagnetizationDataManager.js b/dist/js/context/providers/CollinearMagnetizationDataManager.js index fe85fb7f..98b95fcb 100644 --- a/dist/js/context/providers/CollinearMagnetizationDataManager.js +++ b/dist/js/context/providers/CollinearMagnetizationDataManager.js @@ -6,13 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const defaultData = { + value: 0.0, + isTotalMagnetization: false, + totalMagnetization: 0.0, +}; const jsonSchemaId = "context-providers-directory/collinear-magnetization-context-provider"; class CollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "collinearMagnetization"); + return new CollinearMagnetizationDataManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { var _a, _b, _c, _d; super(contextItem, externalContext); this.name = "collinearMagnetization"; this.domain = "important"; + this.entityName = "unit"; this.initMaterialContextMixin(externalContext); this.uniqueElementsWithLabels = [ ...new Set(((_b = (_a = this.material) === null || _a === void 0 ? void 0 : _a.Basis) === null || _b === void 0 ? void 0 : _b.elementsWithLabelsArray) || []), @@ -29,13 +39,13 @@ class CollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.default default: this.firstElement, }, "properties.startingMagnetization.items.properties.value": { - default: 0.0, + default: defaultData.value, }, "properties.isTotalMagnetization": { - default: false, + default: defaultData.isTotalMagnetization, }, "properties.totalMagnetization": { - default: 0.0, + default: defaultData.totalMagnetization, }, }); } @@ -45,11 +55,11 @@ class CollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.default { index: 1, atomicSpecies: this.firstElement, - value: 0.0, + value: defaultData.value, }, ], - isTotalMagnetization: false, - totalMagnetization: 0.0, + isTotalMagnetization: defaultData.isTotalMagnetization, + totalMagnetization: defaultData.totalMagnetization, }; } setData(data) { diff --git a/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts index 32803c7f..a061cea6 100644 --- a/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts +++ b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.d.ts @@ -1,13 +1,14 @@ -import type { HubbardLegacyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { HubbardLegacyContextItemSchema, HubbardLegacyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_legacy"; +type Schema = HubbardLegacyContextItemSchema; type Data = HubbardLegacyContextProviderSchema; -export type HubbardContextManagerLegacyContextItem = ContextItem; -export default class HubbardContextManagerLegacy extends HubbardContextProvider { +export default class HubbardContextManagerLegacy extends HubbardContextProvider { readonly name: "hubbard_legacy"; readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: HubbardExternalContext): HubbardContextManagerLegacy; readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchemaStyled: { readonly "ui:options": { @@ -21,7 +22,7 @@ export default class HubbardContextManagerLegacy extends HubbardContextProvider< }; }; }; - constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); + constructor(contextItem: Partial, externalContext: HubbardExternalContext); getDefaultData(): Data; setData(data: Data): void; } diff --git a/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js index 7f59a6a8..8aef72e2 100644 --- a/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js +++ b/dist/js/context/providers/Hubbard/HubbardContextManagerLegacy.js @@ -10,10 +10,15 @@ const defaultHubbardConfig = { }; const jsonSchemaId = "context-providers-directory/hubbard-legacy-context-provider"; class HubbardContextManagerLegacy extends HubbardContextProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "hubbard_legacy"); + return new HubbardContextManagerLegacy(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "hubbard_legacy"; this.domain = "important"; + this.entityName = "unit"; this.uiSchemaStyled = { "ui:options": { addable: true, diff --git a/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts b/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts index 013b4ce1..ac5e876f 100644 --- a/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts +++ b/dist/js/context/providers/Hubbard/HubbardContextProvider.d.ts @@ -1,19 +1,20 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { HubbardJContextItemSchema, HubbardLegacyContextItemSchema, HubbardUContextItemSchema, HubbardVContextItemSchema } from "@mat3ra/esse/dist/js/types"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; -type HubbardName = "hubbard_u" | "hubbard_j" | "hubbard_v" | "hubbard_legacy"; +type Schema = HubbardJContextItemSchema | HubbardUContextItemSchema | HubbardVContextItemSchema | HubbardLegacyContextItemSchema; export type HubbardExternalContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const HubbardContextProvider_base: Base; -export default abstract class HubbardContextProvider extends HubbardContextProvider_base { - abstract readonly name: N; - abstract getDefaultData(): D; +export default abstract class HubbardContextProvider extends HubbardContextProvider_base { + abstract readonly name: S["name"]; + abstract getDefaultData(): S["data"]; readonly domain: "important"; + readonly entityName: "unit"; protected readonly uniqueElementsWithLabels: string[]; protected readonly firstElement: string; protected readonly secondSpecies: string; protected readonly orbitalList: string[]; - constructor(contextItem: ContextItem, externalContext: EC); + constructor(contextItem: Partial, externalContext: EC); } export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardContextProvider.js b/dist/js/context/providers/Hubbard/HubbardContextProvider.js index 2cfd1a4a..ec806d05 100644 --- a/dist/js/context/providers/Hubbard/HubbardContextProvider.js +++ b/dist/js/context/providers/Hubbard/HubbardContextProvider.js @@ -10,6 +10,7 @@ class HubbardContextProvider extends JSONSchemaDataProvider_1.default { var _a, _b, _c; super(contextItem, externalContext); this.domain = "important"; + this.entityName = "unit"; this.orbitalList = [ "2p", "3s", diff --git a/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts b/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts index 12cf12f1..b5c0313a 100644 --- a/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts +++ b/dist/js/context/providers/Hubbard/HubbardJContextManager.d.ts @@ -1,12 +1,13 @@ -import type { HubbardJContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { HubbardJContextItemSchema, HubbardJContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_j"; +type Schema = HubbardJContextItemSchema; type Data = HubbardJContextProviderSchema; -export type HubbardJContextManagerContextItem = ContextItem; -export default class HubbardJContextManager extends HubbardContextProvider { +export default class HubbardJContextManager extends HubbardContextProvider { readonly name: "hubbard_j"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: HubbardExternalContext): HubbardJContextManager; readonly uiSchemaStyled: { readonly "ui:options": { readonly addable: true; @@ -15,7 +16,7 @@ export default class HubbardJContextManager extends HubbardContextProvider, externalContext: HubbardExternalContext); + constructor(contextItem: Partial, externalContext: HubbardExternalContext); getDefaultData(): Data; } export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardJContextManager.js b/dist/js/context/providers/Hubbard/HubbardJContextManager.js index 974634eb..cb3be3a8 100644 --- a/dist/js/context/providers/Hubbard/HubbardJContextManager.js +++ b/dist/js/context/providers/Hubbard/HubbardJContextManager.js @@ -13,9 +13,14 @@ const defaultHubbardConfig = { }; const jsonSchemaId = "context-providers-directory/hubbard-j-context-provider"; class HubbardJContextManager extends HubbardContextProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "hubbard_j"); + return new HubbardJContextManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "hubbard_j"; + this.entityName = "unit"; this.uiSchemaStyled = { "ui:options": { addable: true, diff --git a/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts b/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts index cc4224f8..214a8011 100644 --- a/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts +++ b/dist/js/context/providers/Hubbard/HubbardUContextManager.d.ts @@ -1,12 +1,13 @@ -import type { HubbardUContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { HubbardUContextItemSchema, HubbardUContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_u"; +type Schema = HubbardUContextItemSchema; type Data = HubbardUContextProviderSchema; -export type HubbardUContextManagerContextItem = ContextItem; -export default class HubbardUContextManager extends HubbardContextProvider { +export default class HubbardUContextManager extends HubbardContextProvider { readonly name: "hubbard_u"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: HubbardExternalContext): HubbardUContextManager; readonly uiSchemaStyled: { readonly "ui:options": { readonly addable: true; @@ -15,7 +16,7 @@ export default class HubbardUContextManager extends HubbardContextProvider, externalContext: HubbardExternalContext); + constructor(contextItem: Partial, externalContext: HubbardExternalContext); getDefaultData(): Data; } export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardUContextManager.js b/dist/js/context/providers/Hubbard/HubbardUContextManager.js index ef555ad9..b9fe3d73 100644 --- a/dist/js/context/providers/Hubbard/HubbardUContextManager.js +++ b/dist/js/context/providers/Hubbard/HubbardUContextManager.js @@ -13,9 +13,14 @@ const defaultHubbardConfig = { }; const jsonSchemaId = "context-providers-directory/hubbard-u-context-provider"; class HubbardUContextManager extends HubbardContextProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "hubbard_u"); + return new HubbardUContextManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "hubbard_u"; + this.entityName = "unit"; this.uiSchemaStyled = { "ui:options": { addable: true, diff --git a/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts b/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts index 9a0a0317..0dda1f9f 100644 --- a/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts +++ b/dist/js/context/providers/Hubbard/HubbardVContextManager.d.ts @@ -1,12 +1,13 @@ -import type { HubbardVContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { HubbardVContextItemSchema, HubbardVContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_v"; +type Schema = HubbardVContextItemSchema; type Data = HubbardVContextProviderSchema; -export type HubbardVContextManagerContextItem = ContextItem; -export default class HubbardVContextManager extends HubbardContextProvider { +export default class HubbardVContextManager extends HubbardContextProvider { readonly name: "hubbard_v"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: HubbardExternalContext): HubbardVContextManager; readonly uiSchemaStyled: { readonly "ui:options": { readonly addable: true; @@ -15,7 +16,7 @@ export default class HubbardVContextManager extends HubbardContextProvider, externalContext: HubbardExternalContext); + constructor(contextItem: Partial, externalContext: HubbardExternalContext); getDefaultData(): Data; } export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardVContextManager.js b/dist/js/context/providers/Hubbard/HubbardVContextManager.js index 197c9b8f..d62354a9 100644 --- a/dist/js/context/providers/Hubbard/HubbardVContextManager.js +++ b/dist/js/context/providers/Hubbard/HubbardVContextManager.js @@ -16,10 +16,15 @@ const defaultHubbardConfig = { }; const jsonSchemaId = "context-providers-directory/hubbard-v-context-provider"; class HubbardVContextManager extends HubbardContextProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "hubbard_v"); + return new HubbardVContextManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { var _a; super(contextItem, externalContext); this.name = "hubbard_v"; + this.entityName = "unit"; this.uiSchemaStyled = { "ui:options": { addable: true, diff --git a/dist/js/context/providers/IonDynamicsContextProvider.d.ts b/dist/js/context/providers/IonDynamicsContextProvider.d.ts index 7d145531..fa835f27 100644 --- a/dist/js/context/providers/IonDynamicsContextProvider.d.ts +++ b/dist/js/context/providers/IonDynamicsContextProvider.d.ts @@ -10,10 +10,10 @@ export default class IonDynamicsContextProvider extends JSONSchemaFormDataProvid readonly name: "dynamics"; readonly domain: "important"; readonly uiSchema: { - numberOfSteps: {}; - timeStep: {}; - electronMass: {}; - temperature: {}; + readonly numberOfSteps: {}; + readonly timeStep: {}; + readonly electronMass: {}; + readonly temperature: {}; }; readonly jsonSchema: JSONSchema7 | undefined; constructor(contextItem: ContextItem, externalContext: ExternalContext); diff --git a/dist/js/context/providers/IonDynamicsDataManager.d.ts b/dist/js/context/providers/IonDynamicsDataManager.d.ts new file mode 100644 index 00000000..dd5da15d --- /dev/null +++ b/dist/js/context/providers/IonDynamicsDataManager.d.ts @@ -0,0 +1,27 @@ +import type { DynamicsContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; +import type { ExternalContext, UnitContext } from "./base/ContextProvider"; +import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; +type Schema = DynamicsContextItemSchema; +export default class IonDynamicsDataManager extends JSONSchemaFormDataProvider { + readonly name: "dynamics"; + readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): IonDynamicsDataManager; + readonly uiSchema: { + readonly numberOfSteps: {}; + readonly timeStep: {}; + readonly electronMass: {}; + readonly temperature: {}; + }; + readonly extraData: {}; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: Partial, externalContext: ExternalContext); + getDefaultData(): { + numberOfSteps: number; + timeStep: number; + electronMass: number; + temperature: number; + }; +} +export {}; diff --git a/dist/js/context/providers/IonDynamicsDataManager.js b/dist/js/context/providers/IonDynamicsDataManager.js new file mode 100644 index 00000000..fed1a3cf --- /dev/null +++ b/dist/js/context/providers/IonDynamicsDataManager.js @@ -0,0 +1,44 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const JSONSchemaFormDataProvider_1 = __importDefault(require("./base/JSONSchemaFormDataProvider")); +const jsonSchemaId = "context-providers-directory/ion-dynamics-context-provider"; +const defaultData = { + numberOfSteps: 100, + timeStep: 5.0, + electronMass: 100.0, + temperature: 300.0, +}; +class IonDynamicsDataManager extends JSONSchemaFormDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "dynamics"); + return new IonDynamicsDataManager(contextItem, externalContext); + } + constructor(contextItem, externalContext) { + super(contextItem, externalContext); + this.name = "dynamics"; + this.domain = "important"; + this.entityName = "unit"; + this.uiSchema = { + numberOfSteps: {}, + timeStep: {}, + electronMass: {}, + temperature: {}, + }; + this.extraData = {}; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { + numberOfSteps: { default: defaultData.numberOfSteps }, + timeStep: { default: defaultData.timeStep }, + electronMass: { default: defaultData.electronMass }, + temperature: { default: defaultData.temperature }, + }); + } + // eslint-disable-next-line class-methods-use-this + getDefaultData() { + return defaultData; + } +} +exports.default = IonDynamicsDataManager; diff --git a/dist/js/context/providers/MLSettingsDataManager.d.ts b/dist/js/context/providers/MLSettingsDataManager.d.ts index c24d883a..9dd981ef 100644 --- a/dist/js/context/providers/MLSettingsDataManager.d.ts +++ b/dist/js/context/providers/MLSettingsDataManager.d.ts @@ -1,25 +1,25 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { MLSettingsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { MlSettingsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; -import { type ContextItem } from "./base/ContextProvider"; +import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "mlSettings"; -type Data = MLSettingsContextProviderSchema; -export type MLSettingsDataManagerContextItem = ContextItem; -export type MLSettingsDataManagerExternalContext = JinjaExternalContext & ApplicationExternalContext; -type ExternalContext = MLSettingsDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = MlSettingsContextItemSchema; +type ExternalContext = JinjaExternalContext & ApplicationExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const MLSettingsDataManager_base: Base; export default class MLSettingsDataManager extends MLSettingsDataManager_base { readonly name: "mlSettings"; readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): MLSettingsDataManager; readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchema: { - target_column_name: {}; - problem_category: {}; + readonly target_column_name: {}; + readonly problem_category: {}; }; - constructor(contextItem: ContextItem, externalContext: ExternalContext); + readonly extraData: {}; + constructor(contextItem: Partial, externalContext: ExternalContext); getDefaultData(): { target_column_name: string; problem_category: "regression"; diff --git a/dist/js/context/providers/MLSettingsDataManager.js b/dist/js/context/providers/MLSettingsDataManager.js index 60d77e16..65ad11ae 100644 --- a/dist/js/context/providers/MLSettingsDataManager.js +++ b/dist/js/context/providers/MLSettingsDataManager.js @@ -12,14 +12,20 @@ const defaultData = { problem_category: "regression", }; class MLSettingsDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "mlSettings"); + return new MLSettingsDataManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "mlSettings"; this.domain = "important"; + this.entityName = "unit"; this.uiSchema = { target_column_name: {}, problem_category: {}, }; + this.extraData = {}; this.initApplicationContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { target_column_name: { default: defaultData.target_column_name }, diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts b/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts index 8b7b78bb..7ad593ea 100644 --- a/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts @@ -1,25 +1,25 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { MLTrainTestSplitContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { MlTrainTestSplitContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; -import { type ContextItem } from "./base/ContextProvider"; +import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "mlTrainTestSplit"; -type Data = MLTrainTestSplitContextProviderSchema; -export type MLTrainTestSplitDataManagerContextItem = ContextItem; -export type MLTrainTestSplitDataManagerExternalContext = JinjaExternalContext & ApplicationExternalContext; -type ExternalContext = MLTrainTestSplitDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = MlTrainTestSplitContextItemSchema; +type ExternalContext = JinjaExternalContext & ApplicationExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const MLTrainTestSplitDataManager_base: Base; export default class MLTrainTestSplitDataManager extends MLTrainTestSplitDataManager_base { readonly name: "mlTrainTestSplit"; readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): MLTrainTestSplitDataManager; readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchema: { - target_column_name: {}; - problem_category: {}; + readonly target_column_name: {}; + readonly problem_category: {}; }; - constructor(contextItem: ContextItem, externalContext: ExternalContext); + readonly extraData: {}; + constructor(contextItem: Partial, externalContext: ExternalContext); getDefaultData(): { fraction_held_as_test_set: number; }; diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.js b/dist/js/context/providers/MLTrainTestSplitDataManager.js index 0154e371..f8d61e31 100644 --- a/dist/js/context/providers/MLTrainTestSplitDataManager.js +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.js @@ -11,14 +11,20 @@ const defaultData = { fraction_held_as_test_set: 0.2, }; class MLTrainTestSplitDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "mlTrainTestSplit"); + return new MLTrainTestSplitDataManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "mlTrainTestSplit"; this.domain = "important"; + this.entityName = "unit"; this.uiSchema = { target_column_name: {}, problem_category: {}, }; + this.extraData = {}; this.initApplicationContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { fraction_held_as_test_set: { default: defaultData.fraction_held_as_test_set }, diff --git a/dist/js/context/providers/NEBFormDataManager.d.ts b/dist/js/context/providers/NEBFormDataManager.d.ts index d96de373..6b6ebb0a 100644 --- a/dist/js/context/providers/NEBFormDataManager.d.ts +++ b/dist/js/context/providers/NEBFormDataManager.d.ts @@ -1,21 +1,21 @@ -import type { NEBDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { NebContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; -type Name = "neb"; -type Data = NEBDataProviderSchema; -export type NEBFormDataManagerContextItem = ContextItem; -export type NEBFormDataManagerExternalContext = JinjaExternalContext; -type ExternalContext = NEBFormDataManagerExternalContext; -export default class NEBFormDataManager extends JSONSchemaFormDataProvider { +type Schema = NebContextItemSchema; +type ExternalContext = JinjaExternalContext; +export default class NEBFormDataManager extends JSONSchemaFormDataProvider { readonly name: "neb"; readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): NEBFormDataManager; readonly uiSchema: { - nImages: {}; + readonly nImages: {}; }; readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: ExternalContext); + readonly extraData: {}; + constructor(contextItem: Partial, externalContext: ExternalContext); getDefaultData(): { nImages: number; }; diff --git a/dist/js/context/providers/NEBFormDataManager.js b/dist/js/context/providers/NEBFormDataManager.js index 27be2759..60d6f010 100644 --- a/dist/js/context/providers/NEBFormDataManager.js +++ b/dist/js/context/providers/NEBFormDataManager.js @@ -10,13 +10,19 @@ const defaultData = { nImages: 1, }; class NEBFormDataManager extends JSONSchemaFormDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "neb"); + return new NEBFormDataManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "neb"; this.domain = "important"; + this.entityName = "unit"; this.uiSchema = { nImages: {}, }; + this.extraData = {}; this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { nImages: { default: defaultData.nImages }, }); diff --git a/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts b/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts index bce174f8..cc7d2927 100644 --- a/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts +++ b/dist/js/context/providers/NonCollinearMagnetizationDataManager.d.ts @@ -1,19 +1,19 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { NonCollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { NonCollinearMagnetizationContextItemSchema, NonCollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "nonCollinearMagnetization"; type Data = NonCollinearMagnetizationContextProviderSchema; -export type NonCollinearMagnetizationDataManagerContextItem = ContextItem; -export type NonCollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & MaterialExternalContext; -type ExternalContext = NonCollinearMagnetizationDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = NonCollinearMagnetizationContextItemSchema; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const NonCollinearMagnetizationDataManager_base: Base; export default class NonCollinearMagnetizationDataManager extends NonCollinearMagnetizationDataManager_base { readonly name: "nonCollinearMagnetization"; readonly domain: "important"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): NonCollinearMagnetizationDataManager; readonly isStartingMagnetization: boolean; readonly isConstrainedMagnetization: boolean; readonly isExistingChargeDensity: boolean; @@ -22,7 +22,7 @@ export default class NonCollinearMagnetizationDataManager extends NonCollinearMa readonly constrainedMagnetization: Data["constrainedMagnetization"]; readonly jsonSchema: JSONSchema7 | undefined; private readonly uniqueElementsWithLabels; - constructor(contextItem: ContextItem, externalContext: ExternalContext); + constructor(contextItem: Partial, externalContext: ExternalContext); getDefaultData(): Data; get uiSchemaStyled(): { isExistingChargeDensity: {}; diff --git a/dist/js/context/providers/NonCollinearMagnetizationDataManager.js b/dist/js/context/providers/NonCollinearMagnetizationDataManager.js index 12ee2e24..5cb68c1b 100644 --- a/dist/js/context/providers/NonCollinearMagnetizationDataManager.js +++ b/dist/js/context/providers/NonCollinearMagnetizationDataManager.js @@ -6,13 +6,35 @@ Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); +const defaultData = { + isExistingChargeDensity: false, + isStartingMagnetization: true, + isConstrainedMagnetization: false, + isArbitrarySpinAngle: false, + isArbitrarySpinDirection: false, + isFixedMagnetization: false, + lforcet: true, + value: 0.0, + angle1: 0.0, + angle2: 0.0, + constrainType: "atomic direction", + lambda: 0.0, + fixedMagnetizationX: 0.0, + fixedMagnetizationY: 0.0, + fixedMagnetizationZ: 0.0, +}; const jsonSchemaId = "context-providers-directory/non-collinear-magnetization-context-provider"; class NonCollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "nonCollinearMagnetization"); + return new NonCollinearMagnetizationDataManager(contextItem, externalContext); + } constructor(contextItem, externalContext) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; super(contextItem, externalContext); this.name = "nonCollinearMagnetization"; this.domain = "important"; + this.entityName = "unit"; this.initMaterialContextMixin(externalContext); this.isStartingMagnetization = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.isStartingMagnetization) !== null && _b !== void 0 ? _b : true; this.isConstrainedMagnetization = (_d = (_c = this.data) === null || _c === void 0 ? void 0 : _c.isConstrainedMagnetization) !== null && _d !== void 0 ? _d : false; @@ -27,17 +49,17 @@ class NonCollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.defa ...new Set(((_p = (_o = this.material) === null || _o === void 0 ? void 0 : _o.Basis) === null || _p === void 0 ? void 0 : _p.elementsWithLabelsArray) || []), ]; this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - isExistingChargeDensity: { default: false }, - isStartingMagnetization: { default: true }, - isArbitrarySpinAngle: { default: false }, - isConstrainedMagnetization: { default: false }, - isFixedMagnetization: { default: true }, + isExistingChargeDensity: { default: defaultData.isExistingChargeDensity }, + isStartingMagnetization: { default: defaultData.isStartingMagnetization }, + isArbitrarySpinAngle: { default: defaultData.isArbitrarySpinAngle }, + isConstrainedMagnetization: { default: defaultData.isConstrainedMagnetization }, + isFixedMagnetization: { default: defaultData.isFixedMagnetization }, startingMagnetization: { minItems: this.uniqueElementsWithLabels.length, maxItems: this.uniqueElementsWithLabels.length, }, "startingMagnetization.items.properties.value": { - default: 0.0, + default: defaultData.value, minimum: -1.0, maximum: 1.0, }, @@ -45,15 +67,15 @@ class NonCollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.defa minItems: this.uniqueElementsWithLabels.length, maxItems: this.uniqueElementsWithLabels.length, }, - "spinAngles.items.properties.angle1": { default: 0.0 }, - "spinAngles.items.properties.angle2": { default: 0.0 }, + "spinAngles.items.properties.angle1": { default: defaultData.angle1 }, + "spinAngles.items.properties.angle2": { default: defaultData.angle2 }, "constrainedMagnetization.properties.constrainType": { - default: "atomic direction", + default: defaultData.constrainType, }, - "constrainedMagnetization.properties.lambda": { default: 0.0 }, - "fixedMagnetization.properties.x": { default: 0.0 }, - "fixedMagnetization.properties.y": { default: 0.0 }, - "fixedMagnetization.properties.z": { default: 0.0 }, + "constrainedMagnetization.properties.lambda": { default: defaultData.lambda }, + "fixedMagnetization.properties.x": { default: defaultData.fixedMagnetizationX }, + "fixedMagnetization.properties.y": { default: defaultData.fixedMagnetizationY }, + "fixedMagnetization.properties.z": { default: defaultData.fixedMagnetizationZ }, }); } getDefaultData() { @@ -61,35 +83,35 @@ class NonCollinearMagnetizationDataManager extends JSONSchemaDataProvider_1.defa return { index: index + 1, atomicSpecies: element, - value: 0.0, + value: defaultData.value, }; }); const spinAngles = this.uniqueElementsWithLabels.map((element, index) => { return { index: index + 1, atomicSpecies: element, - angle1: 0.0, - angle2: 0.0, + angle1: defaultData.angle1, + angle2: defaultData.angle2, }; }); return { - isExistingChargeDensity: false, - isStartingMagnetization: true, - isConstrainedMagnetization: false, - isArbitrarySpinAngle: false, - isArbitrarySpinDirection: false, - isFixedMagnetization: false, - lforcet: true, + isExistingChargeDensity: defaultData.isExistingChargeDensity, + isStartingMagnetization: defaultData.isStartingMagnetization, + isConstrainedMagnetization: defaultData.isConstrainedMagnetization, + isArbitrarySpinAngle: defaultData.isArbitrarySpinAngle, + isArbitrarySpinDirection: defaultData.isArbitrarySpinDirection, + isFixedMagnetization: defaultData.isFixedMagnetization, + lforcet: defaultData.lforcet, spinAngles, startingMagnetization, constrainedMagnetization: { - lambda: 0.0, - constrainType: "atomic direction", + lambda: defaultData.lambda, + constrainType: defaultData.constrainType, }, fixedMagnetization: { - x: 0.0, - y: 0.0, - z: 0.0, + x: defaultData.fixedMagnetizationX, + y: defaultData.fixedMagnetizationY, + z: defaultData.fixedMagnetizationZ, }, }; } diff --git a/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts b/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts index 36a24336..fd5cd903 100644 --- a/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts +++ b/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts @@ -1,14 +1,11 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { PlanewaveCutoffsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { CutoffsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; -import ContextProvider, { type ContextItem, type ExternalContext } from "./base/ContextProvider"; -type Name = "cutoffs"; -type Data = PlanewaveCutoffsContextProviderSchema; +import ContextProvider, { type ExternalContext, type UnitContext } from "./base/ContextProvider"; +type Schema = CutoffsContextItemSchema; type PlanewaveExternalContext = ExternalContext & ApplicationExternalContext; -type Base = typeof ContextProvider & Constructor; -export type PlanewaveCutoffDataManagerContextItem = ContextItem; -export type PlanewaveCutoffDataManagerExternalContext = PlanewaveExternalContext; +type Base = typeof ContextProvider & Constructor; declare const PlanewaveCutoffDataManager_base: Base; export default class PlanewaveCutoffDataManager extends PlanewaveCutoffDataManager_base { readonly name: "cutoffs"; @@ -16,10 +13,12 @@ export default class PlanewaveCutoffDataManager extends PlanewaveCutoffDataManag readonly entityName: "subworkflow"; readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchema: { - wavefunction: {}; - density: {}; + readonly wavefunction: {}; + readonly density: {}; }; - constructor(contextItem: ContextItem, externalContext: PlanewaveExternalContext); + readonly extraData: {}; + static createFromUnitContext(unitContext: UnitContext, externalContext: PlanewaveExternalContext): PlanewaveCutoffDataManager; + constructor(contextItem?: Partial, externalContext?: PlanewaveExternalContext); getDefaultData(): { wavefunction: number | undefined; density: number | undefined; diff --git a/dist/js/context/providers/PlanewaveCutoffDataManager.js b/dist/js/context/providers/PlanewaveCutoffDataManager.js index cf9f8048..a4910268 100644 --- a/dist/js/context/providers/PlanewaveCutoffDataManager.js +++ b/dist/js/context/providers/PlanewaveCutoffDataManager.js @@ -6,14 +6,26 @@ Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); const ContextProvider_1 = __importDefault(require("./base/ContextProvider")); +// Type guard to check if a string is a valid ApplicationName +function isApplicationName(name) { + return name === "vasp" || name === "espresso"; +} // TODO: create a task to move this handling to standata const cutoffConfig = { vasp: { wavefunction: undefined, density: undefined }, espresso: { wavefunction: 40, density: 200 }, }; +const defaultData = { + wavefunction: undefined, + density: undefined, +}; const jsonSchemaId = "context-providers-directory/planewave-cutoffs-context-provider"; class PlanewaveCutoffDataManager extends ContextProvider_1.default { - constructor(contextItem, externalContext) { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "cutoffs"); + return new PlanewaveCutoffDataManager(contextItem, externalContext); + } + constructor(contextItem = {}, externalContext = {}) { super(contextItem, externalContext); this.name = "cutoffs"; this.domain = "important"; @@ -22,6 +34,7 @@ class PlanewaveCutoffDataManager extends ContextProvider_1.default { wavefunction: {}, density: {}, }; + this.extraData = {}; this.initApplicationContextMixin(externalContext); const { wavefunction, density } = this.getDefaultData(); this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { @@ -30,11 +43,21 @@ class PlanewaveCutoffDataManager extends ContextProvider_1.default { }); } getDefaultData() { - // TODO-QUESTION: what if the application is not in the cutoffConfig? - const { wavefunction, density } = cutoffConfig[this.application.name] || {}; + const applicationName = this.application.name; + // Type-safe check: ensure application name is valid and exists in config + if (!isApplicationName(applicationName)) { + // Fallback to default values if application is not supported + return defaultData; + } + const config = cutoffConfig[applicationName]; + if (!config) { + // Fallback to default values if application is not in cutoffConfig + return defaultData; + } + const { wavefunction, density } = config; return { - wavefunction, - density, + wavefunction: wavefunction !== null && wavefunction !== void 0 ? wavefunction : defaultData.wavefunction, + density: density !== null && density !== void 0 ? density : defaultData.density, }; } } diff --git a/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts index ac468e22..5f9eb184 100644 --- a/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts @@ -1,7 +1,9 @@ -import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "igrid"; export default class IGridFormDataManager extends PointsGridFormDataProvider { readonly name: "igrid"; readonly divisor: 0.2; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): IGridFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsGrid/IGridFormDataManager.js b/dist/js/context/providers/PointsGrid/IGridFormDataManager.js index 3d13f9aa..8597bff2 100644 --- a/dist/js/context/providers/PointsGrid/IGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/IGridFormDataManager.js @@ -10,5 +10,9 @@ class IGridFormDataManager extends PointsGridFormDataProvider_1.default { this.name = "igrid"; this.divisor = 0.2; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "igrid"); + return new IGridFormDataManager(contextItem, externalContext); + } } exports.default = IGridFormDataManager; diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts index de14ca54..6c7ffe5e 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts @@ -1,7 +1,11 @@ -import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; +import ConvergenceParameter from "../../../subworkflows/convergence/ConvergenceParameter"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "kgrid"; export default class KGridFormDataManager extends PointsGridFormDataProvider { readonly name: "kgrid"; readonly divisor: 1; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): KGridFormDataManager; + applyCovergenceParameter(parameter: ConvergenceParameter): void; } export {}; diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.js b/dist/js/context/providers/PointsGrid/KGridFormDataManager.js index 5c7f9355..d50fe5a1 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.js @@ -10,5 +10,18 @@ class KGridFormDataManager extends PointsGridFormDataProvider_1.default { this.name = "kgrid"; this.divisor = 1; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "kgrid"); + return new KGridFormDataManager(contextItem, externalContext); + } + applyCovergenceParameter(parameter) { + const unitContext = parameter.unitContext.data; + const data = this.getData(); + this.setData({ + ...data, + ...unitContext, + }); + this.setIsEdited(true); + } } exports.default = KGridFormDataManager; diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts index 0f1806de..075355a0 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts @@ -1,22 +1,20 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { PointsGridDataProviderSchema, Vector3DSchema } from "@mat3ra/esse/dist/js/types"; +import type { GridContextItemSchema, PointsGridDataProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; import type { JinjaExternalContext } from "../base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "../base/JSONSchemaFormDataProvider"; -type Name = "qgrid" | "kgrid" | "igrid"; +type Schema = GridContextItemSchema; type Data = PointsGridDataProviderSchema; -type EContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaFormDataProvider & Constructor; -export type PointsGridFormDataManagerContextItem = ContextItem; -export type PointsGridFormDataManagerExternalContext = EContext; +export type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaFormDataProvider & Constructor; declare const PointsGridFormDataProvider_base: Base; -export default abstract class PointsGridFormDataProvider extends PointsGridFormDataProvider_base { +export default abstract class PointsGridFormDataProvider extends PointsGridFormDataProvider_base { abstract readonly name: N; readonly domain: "important"; - dimensions: Vector3DSchema; - shifts: Vector3DSchema; + readonly entityName: "unit"; + dimensions: Data["dimensions"]; + shifts: Data["shifts"]; private reciprocalLattice; private gridMetricType; private gridMetricValue; @@ -26,36 +24,36 @@ export default abstract class PointsGridFormDataProvider extends abstract readonly divisor: number; private defaultMetric; readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: EContext); + constructor(contextItem: Partial, externalContext: ExternalContext); private initInstanceFields; private getDefaultGridMetricValue; getDefaultData(): PointsGridDataProviderSchema; private get jsonSchemaPatchConfig(); get uiSchema(): { dimensions: { - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; + readonly "ui:options": { + readonly addable: false; + readonly orderable: false; + readonly removable: false; }; - items: { - "ui:disabled": boolean; - "ui:placeholder": string; - "ui:emptyValue": number; - "ui:label": boolean; + readonly items: { + readonly "ui:disabled": boolean; + readonly "ui:placeholder": "1"; + readonly "ui:emptyValue": number; + readonly "ui:label": false; }; }; shifts: { - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; + readonly "ui:options": { + readonly addable: false; + readonly orderable: false; + readonly removable: false; }; - items: { - "ui:disabled": boolean; - "ui:placeholder": string; - "ui:emptyValue": number; - "ui:label": boolean; + readonly items: { + readonly "ui:disabled": boolean; + readonly "ui:placeholder": "1"; + readonly "ui:emptyValue": number; + readonly "ui:label": false; }; }; gridMetricType: { diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js index e93f35f8..7cbf1f45 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.js @@ -11,7 +11,6 @@ const lodash_1 = __importDefault(require("lodash")); const MaterialContextMixin_1 = __importDefault(require("../../mixins/MaterialContextMixin")); const JSONSchemaFormDataProvider_1 = __importDefault(require("../base/JSONSchemaFormDataProvider")); const settings_1 = require("../settings"); -// Helper function to create vector schema with defaults const vector = (defaultValue, isStringType = false) => { const isArray = Array.isArray(defaultValue); return { @@ -32,13 +31,14 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { constructor(contextItem, externalContext) { super(contextItem, externalContext); this.domain = "important"; + this.entityName = "unit"; this.initMaterialContextMixin(externalContext); this.initInstanceFields(); const { jsonSchemaPatchConfig } = this; this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, jsonSchemaPatchConfig); } initInstanceFields() { - var _a, _b, _c, _d, _e, _f; + var _a, _b, _c, _d, _e; this.defaultMetric = { type: "KPPRA", value: this.getDefaultGridMetricValue("KPPRA"), @@ -47,12 +47,9 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { this.gridMetricType = ((_b = this.data) === null || _b === void 0 ? void 0 : _b.gridMetricType) || this.defaultMetric.type; this.gridMetricValue = ((_c = this.data) === null || _c === void 0 ? void 0 : _c.gridMetricValue) || this.defaultMetric.value; this.preferGridMetric = ((_d = this.data) === null || _d === void 0 ? void 0 : _d.preferGridMetric) || false; - this.reciprocalLattice = new made_1.Made.ReciprocalLattice((_e = this.material) === null || _e === void 0 ? void 0 : _e.lattice); - this.defaultDimensions = this.calculateDimensions({ - gridMetricType: this.defaultMetric.type, - gridMetricValue: this.defaultMetric.value, - }); - this.dimensions = ((_f = this.data) === null || _f === void 0 ? void 0 : _f.dimensions) || this.defaultDimensions; + this.reciprocalLattice = new made_1.Made.ReciprocalLattice(this.material.lattice); + this.defaultDimensions = this.calculateDimensions(this.defaultMetric.type, this.defaultMetric.value); + this.dimensions = ((_e = this.data) === null || _e === void 0 ? void 0 : _e.dimensions) || this.defaultDimensions; this.reciprocalVectorRatios = this.reciprocalLattice.reciprocalVectorRatios.map((r) => Number(math_1.math.numberToPrecision(r, 3))); } getDefaultGridMetricValue(metric) { @@ -80,7 +77,7 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { // if `data` is present and material is updated, prioritize `data` when `preferGridMetric` is not set return this.preferGridMetric ? { - dimensions: this.calculateDimensions({ gridMetricType, gridMetricValue }), + dimensions: this.calculateDimensions(gridMetricType, gridMetricValue), shifts: defaultShifts, gridMetricType, gridMetricValue, @@ -186,7 +183,7 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { }, }; } - calculateDimensions({ gridMetricType, gridMetricValue, }) { + calculateDimensions(gridMetricType, gridMetricValue) { switch (gridMetricType) { case "KPPRA": { const nAtoms = this.material ? this.material.Basis.nAtoms : 1; @@ -198,7 +195,7 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { return [1, 1, 1]; } } - calculateGridMetric({ gridMetricType, dimensions, }) { + calculateGridMetric(gridMetricType, dimensions) { switch (gridMetricType) { case "KPPRA": { const nAtoms = this.material ? this.material.Basis.nAtoms : 1; @@ -211,23 +208,23 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { } } setData(data) { - var _a; - const canTransform = ((data === null || data === void 0 ? void 0 : data.preferGridMetric) && (data === null || data === void 0 ? void 0 : data.gridMetricType) && (data === null || data === void 0 ? void 0 : data.gridMetricValue)) || - (!(data === null || data === void 0 ? void 0 : data.preferGridMetric) && ((_a = data === null || data === void 0 ? void 0 : data.dimensions) === null || _a === void 0 ? void 0 : _a.every((d) => typeof d === "number"))); - if (!data || !canTransform) { - return super.setData(data); + if (!data) { + return; } - // dimensions are calculated from grid metric or vice versa - if (data.preferGridMetric) { + const { dimensions, gridMetricType, preferGridMetric, gridMetricValue } = data; + if (preferGridMetric && gridMetricType && gridMetricValue) { return super.setData({ ...data, - dimensions: this.calculateDimensions(data), + dimensions: this.calculateDimensions(gridMetricType, gridMetricValue), + }); + } + if (!preferGridMetric && dimensions.every((d) => typeof d === "number")) { + super.setData({ + ...data, + gridMetricValue: this.calculateGridMetric(gridMetricType, dimensions), }); } - super.setData({ - ...data, - gridMetricValue: this.calculateGridMetric(data), - }); + return super.setData(data); } } exports.default = PointsGridFormDataProvider; diff --git a/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts index 32096bb8..b71eb59f 100644 --- a/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts @@ -1,7 +1,9 @@ -import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "qgrid"; export default class QGridFormDataManager extends PointsGridFormDataProvider { readonly name: "qgrid"; readonly divisor: 5; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QGridFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsGrid/QGridFormDataManager.js b/dist/js/context/providers/PointsGrid/QGridFormDataManager.js index 6d38fe7d..7536e920 100644 --- a/dist/js/context/providers/PointsGrid/QGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/QGridFormDataManager.js @@ -10,5 +10,9 @@ class QGridFormDataManager extends PointsGridFormDataProvider_1.default { this.name = "qgrid"; this.divisor = 5; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "qgrid"); + return new QGridFormDataManager(contextItem, externalContext); + } } exports.default = QGridFormDataManager; diff --git a/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts b/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts index 138d1388..000b83d1 100644 --- a/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.d.ts @@ -1,11 +1,10 @@ -import type { ContextItem } from "../base/ContextProvider"; -import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "explicitKPath2PIBA"; -export type ExplicitKPath2PIBAFormDataManagerContextItem = ContextItem; -export type ExplicitKPath2PIBAFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDataProvider { readonly name: "explicitKPath2PIBA"; readonly is2PIBA = true; readonly useExplicitPath = true; + static createFromUnitContext(unitContext: UnitContext, externalContext: PointsPathFormDataProviderExternalContext): ExplicitKPath2PIBAFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.js b/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.js index 1c6653b3..4f478b11 100644 --- a/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.js +++ b/dist/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.js @@ -11,5 +11,9 @@ class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDataProvider_1.def this.is2PIBA = true; this.useExplicitPath = true; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "explicitKPath2PIBA"); + return new ExplicitKPath2PIBAFormDataManager(contextItem, externalContext); + } } exports.default = ExplicitKPath2PIBAFormDataManager; diff --git a/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts index 7bd35473..493eac26 100644 --- a/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.d.ts @@ -1,10 +1,9 @@ -import type { ContextItem } from "../base/ContextProvider"; -import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "explicitKPath"; -export type ExplicitKPathFormDataManagerContextItem = ContextItem; -export type ExplicitKPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class ExplicitKPathFormDataManager extends PointsPathFormDataProvider { readonly name: "explicitKPath"; readonly useExplicitPath = true; + static createFromUnitContext(unitContext: UnitContext, externalContext: PointsPathFormDataProviderExternalContext): ExplicitKPathFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.js b/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.js index 76c930bd..eaaff96e 100644 --- a/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.js +++ b/dist/js/context/providers/PointsPath/ExplicitKPathFormDataManager.js @@ -10,5 +10,9 @@ class ExplicitKPathFormDataManager extends PointsPathFormDataProvider_1.default this.name = "explicitKPath"; this.useExplicitPath = true; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "explicitKPath"); + return new ExplicitKPathFormDataManager(contextItem, externalContext); + } } exports.default = ExplicitKPathFormDataManager; diff --git a/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts index 45fa829f..44cfa2ca 100644 --- a/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/IPathFormDataManager.d.ts @@ -1,9 +1,8 @@ -import type { ContextItem } from "../base/ContextProvider"; -import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "ipath"; -export type IPathFormDataManagerContextItem = ContextItem; -export type IPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class IPathFormDataManager extends PointsPathFormDataProvider { readonly name: "ipath"; + static createFromUnitContext(unitContext: UnitContext, externalContext: PointsPathFormDataProviderExternalContext): IPathFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsPath/IPathFormDataManager.js b/dist/js/context/providers/PointsPath/IPathFormDataManager.js index a1011782..0c2bcd1c 100644 --- a/dist/js/context/providers/PointsPath/IPathFormDataManager.js +++ b/dist/js/context/providers/PointsPath/IPathFormDataManager.js @@ -9,5 +9,9 @@ class IPathFormDataManager extends PointsPathFormDataProvider_1.default { super(...arguments); this.name = "ipath"; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "ipath"); + return new IPathFormDataManager(contextItem, externalContext); + } } exports.default = IPathFormDataManager; diff --git a/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts index 6a9a202d..1d8a59bd 100644 --- a/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/KPathFormDataManager.d.ts @@ -1,9 +1,8 @@ -import type { ContextItem } from "../base/ContextProvider"; -import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "kpath"; -export type KPathFormDataManagerContextItem = ContextItem; -export type KPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class KPathFormDataManager extends PointsPathFormDataProvider { readonly name: "kpath"; + static createFromUnitContext(unitContext: UnitContext, externalContext: PointsPathFormDataProviderExternalContext): KPathFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsPath/KPathFormDataManager.js b/dist/js/context/providers/PointsPath/KPathFormDataManager.js index fe70575f..30119999 100644 --- a/dist/js/context/providers/PointsPath/KPathFormDataManager.js +++ b/dist/js/context/providers/PointsPath/KPathFormDataManager.js @@ -9,5 +9,9 @@ class KPathFormDataManager extends PointsPathFormDataProvider_1.default { super(...arguments); this.name = "kpath"; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "kpath"); + return new KPathFormDataManager(contextItem, externalContext); + } } exports.default = KPathFormDataManager; diff --git a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts index d81da7f3..70f43261 100644 --- a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.d.ts @@ -1,25 +1,26 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { PointsPathDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { PathContextItemSchema, PointsPathDataProviderSchema } from "@mat3ra/esse/dist/js/types"; import { type ApplicationContextMixin, type ApplicationExternalContext } from "../../mixins/ApplicationContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; export type PointsPathFormDataProviderData = PointsPathDataProviderSchema; export type PointsPathFormDataProviderExternalContext = JinjaExternalContext & MaterialExternalContext & ApplicationExternalContext; type Data = PointsPathFormDataProviderData; +type Schema = PathContextItemSchema; type ExternalContext = PointsPathFormDataProviderExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; declare const MixinsContextProvider_base: Base; declare abstract class MixinsContextProvider extends MixinsContextProvider_base { - constructor(contextItem: ContextItem, externalContext: ExternalContext); + constructor(contextItem: Partial, externalContext: ExternalContext); } -declare abstract class PointsPathFormDataProvider extends MixinsContextProvider { +declare abstract class PointsPathFormDataProvider extends MixinsContextProvider { abstract name: N; readonly domain: "important"; + readonly entityName: "unit"; private reciprocalLattice; readonly useExplicitPath: boolean; readonly is2PIBA: boolean; - constructor(config: ContextItem, externalContext: ExternalContext); + constructor(config: Partial, externalContext: ExternalContext); getDefaultData(): Data; updateMaterialHash(): void; get jsonSchema(): import("json-schema").JSONSchema7 | undefined; diff --git a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js index 2a834df6..be107cb7 100644 --- a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js +++ b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js @@ -26,6 +26,7 @@ class PointsPathFormDataProvider extends MixinsContextProvider { constructor(config, externalContext) { super(config, externalContext); this.domain = "important"; + this.entityName = "unit"; this.is2PIBA = false; this.reciprocalLattice = new made_1.Made.ReciprocalLattice(this.material.lattice); this.useExplicitPath = this.application.name === "vasp"; diff --git a/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts b/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts index a46ae4ad..3aca765a 100644 --- a/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts +++ b/dist/js/context/providers/PointsPath/QPathFormDataManager.d.ts @@ -1,9 +1,8 @@ -import type { ContextItem } from "../base/ContextProvider"; -import PointsPathFormDataProvider, { type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsPathFormDataProvider, { type PointsPathFormDataProviderExternalContext } from "./PointsPathFormDataProvider"; type Name = "qpath"; -export type QPathFormDataManagerContextItem = ContextItem; -export type QPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; export default class QPathFormDataManager extends PointsPathFormDataProvider { readonly name: "qpath"; + static createFromUnitContext(unitContext: UnitContext, externalContext: PointsPathFormDataProviderExternalContext): QPathFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsPath/QPathFormDataManager.js b/dist/js/context/providers/PointsPath/QPathFormDataManager.js index bf0acf10..9c664359 100644 --- a/dist/js/context/providers/PointsPath/QPathFormDataManager.js +++ b/dist/js/context/providers/PointsPath/QPathFormDataManager.js @@ -9,5 +9,9 @@ class QPathFormDataManager extends PointsPathFormDataProvider_1.default { super(...arguments); this.name = "qpath"; } + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "qpath"); + return new QPathFormDataManager(contextItem, externalContext); + } } exports.default = QPathFormDataManager; diff --git a/dist/js/context/providers/base/ContextProvider.d.ts b/dist/js/context/providers/base/ContextProvider.d.ts index 936c759f..ed594002 100644 --- a/dist/js/context/providers/base/ContextProvider.d.ts +++ b/dist/js/context/providers/base/ContextProvider.d.ts @@ -1,41 +1,34 @@ -import { ContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -export interface ContextProviderInstance { - constructor: typeof ContextProvider; - config: ContextProviderSchema; -} -export type ContextProviderConfig = { - name: N; - data?: D; - extraData?: ED; - domain?: string; - entityName?: EntityName; - isEdited?: boolean; -}; -export type ContextItem = { +import { type ContextItemSchema } from "@mat3ra/esse/dist/js/types"; +export type UnitContext = ContextItemSchema[]; +export type ContextName = ContextItemSchema["name"]; +export type ContextExtraData = ContextItemSchema["extraData"]; +export type ContextData = ContextItemSchema["data"]; +export type ContextItem = { data?: D; extraData?: ED; isEdited?: boolean; }; -export type ExtendedContextItem = ContextItem & { - name: N; - isEdited: boolean; -}; export type Domain = "executable" | "important"; export type EntityName = "unit" | "subworkflow"; export type ExternalContext = object; -declare abstract class ContextProvider implements ContextProviderConfig { - abstract name: N; +declare abstract class ContextProvider { + abstract name: S["name"]; abstract readonly domain: Domain; abstract readonly entityName: EntityName; - protected abstract getDefaultData(): D; - data?: D; - readonly extraData?: ED; + protected abstract getDefaultData(): S["data"]; + protected data?: S["data"]; + abstract extraData: S["extraData"]; readonly externalContext: EC; isEdited: boolean; - constructor(contextItem: ContextItem, externalContext: EC); + constructor(contextItem: Partial, externalContext: EC); setIsEdited(isEdited: boolean): void; - getData(): D; - setData(data?: D): void; - getContextItemData(): ExtendedContextItem; + getData(): S["data"]; + setData(data?: S["data"]): void; + getContextItemData(): S; + /** + * Helper method to find a context item from a unit context array by name. + * Returns a partial schema object that can be safely passed to constructors. + */ + protected static findContextItem(unitContext: UnitContext, contextName: ContextName): Partial; } export default ContextProvider; diff --git a/dist/js/context/providers/base/ContextProvider.js b/dist/js/context/providers/base/ContextProvider.js index 974d566f..4cf83424 100644 --- a/dist/js/context/providers/base/ContextProvider.js +++ b/dist/js/context/providers/base/ContextProvider.js @@ -4,7 +4,6 @@ const utils_1 = require("@mat3ra/utils"); class ContextProvider { constructor(contextItem, externalContext) { this.externalContext = externalContext; - this.extraData = contextItem.extraData; this.isEdited = contextItem.isEdited || false; this.setData(contextItem.data); } @@ -25,5 +24,13 @@ class ContextProvider { extraData: this.extraData, }; } + /** + * Helper method to find a context item from a unit context array by name. + * Returns a partial schema object that can be safely passed to constructors. + */ + static findContextItem(unitContext, contextName) { + const item = unitContext.find((item) => item.name === contextName); + return item || {}; + } } exports.default = ContextProvider; diff --git a/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts b/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts index 26680870..e02a90d2 100644 --- a/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts +++ b/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts @@ -1,5 +1,6 @@ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; -import type { ContextItem, ExternalContext } from "./ContextProvider"; +import type { ContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { ExternalContext } from "./ContextProvider"; import ContextProvider from "./ContextProvider"; export interface JinjaExternalContext extends ExternalContext { isUsingJinjaVariables?: boolean; @@ -7,10 +8,10 @@ export interface JinjaExternalContext extends ExternalContext { /** * @summary Provides jsonSchema only. */ -declare abstract class JSONSchemaDataProvider extends ContextProvider { +declare abstract class JSONSchemaDataProvider extends ContextProvider { abstract readonly jsonSchema: JSONSchema | undefined; readonly entityName: "unit"; isUsingJinjaVariables: boolean; - constructor(contextItem: ContextItem, externalContext: EC); + constructor(contextItem: Partial, externalContext: EC); } export default JSONSchemaDataProvider; diff --git a/dist/js/context/providers/base/JSONSchemaFormDataProvider.d.ts b/dist/js/context/providers/base/JSONSchemaFormDataProvider.d.ts index ab44f43a..533aaea6 100644 --- a/dist/js/context/providers/base/JSONSchemaFormDataProvider.d.ts +++ b/dist/js/context/providers/base/JSONSchemaFormDataProvider.d.ts @@ -1,3 +1,4 @@ +import type { ContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { UiSchema } from "react-jsonschema-form"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./JSONSchemaDataProvider"; /** @@ -10,7 +11,7 @@ import JSONSchemaDataProvider, { type JinjaExternalContext } from "./JSONSchemaD * formData={provider.getData(unit.important)} /> * ``` */ -declare abstract class JSONSchemaFormDataProvider extends JSONSchemaDataProvider { +declare abstract class JSONSchemaFormDataProvider extends JSONSchemaDataProvider { fields: object; protected abstract uiSchema: UiSchema; get uiSchemaStyled(): UiSchema; diff --git a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts index a6ca8d0f..c998aedc 100644 --- a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts @@ -1,5 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { QENEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { InputContextItemSchema, QENEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; @@ -7,20 +7,22 @@ import { type MaterialsContextMixin, type MaterialsExternalContext } from "../.. import { type MaterialsSetContextMixin, type MaterialsSetExternalContext } from "../../../mixins/MaterialsSetContextMixin"; import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = QENEBContextProviderSchema; -export type QENEBInputDataManagerContextItem = ContextItem; -export type QENEBInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; -type ExternalContext = QENEBInputDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +type Schema = InputContextItemSchema & { + data: Data; +}; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; declare const QENEBInputDataManager_base: Base; export default class QENEBInputDataManager extends QENEBInputDataManager_base { readonly name: "input"; readonly domain: "executable"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QENEBInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); + constructor(config: Partial, externalContext: ExternalContext); getDefaultData(): Data; } export {}; diff --git a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js index b0e4bc45..20c33fee 100644 --- a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js +++ b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js @@ -14,10 +14,15 @@ const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaD const QEPWXInputDataManager_1 = __importDefault(require("./QEPWXInputDataManager")); const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; class QENEBInputDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + return new QENEBInputDataManager(contextItem, externalContext); + } constructor(config, externalContext) { super(config, externalContext); this.name = "input"; this.domain = "executable"; + this.entityName = "unit"; this.initJobContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); this.initMethodDataContextMixin(externalContext); @@ -40,6 +45,7 @@ class QENEBInputDataManager extends JSONSchemaDataProvider_1.default { INTERMEDIATE_IMAGES: PWXContexts.slice(1, PWXContexts.length - 1).map((data) => { return data.ATOMIC_POSITIONS; }), + contextProviderName: "qe-neb", }; } } diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts index 4fba4f7b..7c547200 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts @@ -1,25 +1,27 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { QEPwxContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { InputContextItemSchema, QEPwxContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = QEPwxContextProviderSchema; -export type QEPWXInputDataManagerContextItem = ContextItem; -export type QEPWXInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; -type ExternalContext = QEPWXInputDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; +type Schema = InputContextItemSchema & { + data: Data; +}; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; declare const QEPWXInputDataManager_base: Base; export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { readonly name: "input"; readonly domain: "executable"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QEPWXInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); + constructor(config: Partial, externalContext: ExternalContext); private buildQEPWXContext; private getDataPerMaterial; getDefaultData(): { @@ -54,6 +56,7 @@ export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { v2?: [number, number, number]; v3?: [number, number, number]; }; + contextProviderName: "qe-pwx"; } | { perMaterial: QEPwxContextProviderSchema[]; IBRAV: number; @@ -86,6 +89,7 @@ export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { v2?: [number, number, number]; v3?: [number, number, number]; }; + contextProviderName: "qe-pwx"; }; } export {}; diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js index 4df5e620..402812ba 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js @@ -14,10 +14,15 @@ const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/Workflow const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/by-application/qe-pwx-context-provider"; class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + return new QEPWXInputDataManager(contextItem, externalContext); + } constructor(config, externalContext) { super(config, externalContext); this.name = "input"; this.domain = "executable"; + this.entityName = "unit"; this.initMaterialsContextMixin(externalContext); this.initMethodDataContextMixin(externalContext); this.initWorkflowContextMixin(externalContext); @@ -36,8 +41,7 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { Mass_X: periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass, PseudoPot_X: (pseudo === null || pseudo === void 0 ? void 0 : pseudo.filename) || path_1.default.basename((pseudo === null || pseudo === void 0 ? void 0 : pseudo.path) || ""), }; - // return s.sprintf("%s %f %s", symbol, el.atomic_mass, filename) || ""; - }); // .join("\n"); + }); const uniqueElementsWithLabels = [...new Set(basis.elementsWithLabelsArray)]; const ATOMIC_SPECIES_WITH_LABELS = uniqueElementsWithLabels.map((symbol) => { var _a, _b; @@ -77,6 +81,7 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { ATOMIC_POSITIONS, ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: basis.atomicPositions.join("\n"), CELL_PARAMETERS, + contextProviderName: "qe-pwx", }; } getDataPerMaterial() { diff --git a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts index 07b2818e..b71c6314 100644 --- a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts @@ -1,24 +1,27 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { NWChemTotalEnergyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { InputContextItemSchema, NWChemTotalEnergyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = NWChemTotalEnergyContextProviderSchema; -export type NWChemInputDataManagerContextItem = ContextItem; -export type NWChemInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; -type ExternalContext = NWChemInputDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor; +type Schema = InputContextItemSchema & { + data: Data; +}; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor; declare const NWChemInputDataManager_base: Base; export default class NWChemInputDataManager extends NWChemInputDataManager_base { readonly name: "input"; readonly domain: "executable"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): NWChemInputDataManager; + readonly contextProviderName: "nwchem-total-energy"; readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); + constructor(config: Partial, externalContext: ExternalContext); getDefaultData(): { CHARGE: number; MULT: number; @@ -30,6 +33,7 @@ export default class NWChemInputDataManager extends NWChemInputDataManager_base ATOMIC_SPECIES: string; FUNCTIONAL: string; CARTESIAN: boolean; + contextProviderName: "nwchem-total-energy"; }; } export {}; diff --git a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js index 0b8c989a..13e657f7 100644 --- a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js +++ b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js @@ -12,10 +12,16 @@ const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/Workflow const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/by-application/nwchem-total-energy-context-provider"; class NWChemInputDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + return new NWChemInputDataManager(contextItem, externalContext); + } constructor(config, externalContext) { super(config, externalContext); this.name = "input"; this.domain = "executable"; + this.entityName = "unit"; + this.contextProviderName = "nwchem-total-energy"; this.initMethodDataContextMixin(externalContext); this.initWorkflowContextMixin(externalContext); this.initJobContextMixin(externalContext); @@ -45,6 +51,7 @@ class NWChemInputDataManager extends JSONSchemaDataProvider_1.default { ATOMIC_SPECIES, FUNCTIONAL: "B3LYP", CARTESIAN: basis.toCartesian !== undefined, + contextProviderName: this.contextProviderName, }; } } diff --git a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts index 700c44e2..23ec3a73 100644 --- a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts @@ -1,35 +1,39 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { InputContextItemSchema, VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = VASPContextProviderSchema; -export type VASPInputDataManagerContextItem = ContextItem; -export type VASPInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext; -type ExternalContext = VASPInputDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; +type Schema = InputContextItemSchema & { + data: Data; +}; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; declare const VASPInputDataManager_base: Base; export default class VASPInputDataManager extends VASPInputDataManager_base { readonly name: "input"; readonly domain: "executable"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): VASPInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); + constructor(config: Partial, externalContext: ExternalContext); private buildVASPContext; private getDataPerMaterial; getDefaultData(): { perMaterial?: undefined; POSCAR: string; POSCAR_WITH_CONSTRAINTS: string; + contextProviderName: "vasp"; } | { perMaterial: VASPContextProviderSchema[]; POSCAR: string; POSCAR_WITH_CONSTRAINTS: string; + contextProviderName: "vasp"; }; } export {}; diff --git a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js index 5689d6b0..b98a19a0 100644 --- a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js +++ b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js @@ -12,10 +12,15 @@ const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/Workflow const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/by-application/vasp-context-provider"; class VASPInputDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + return new VASPInputDataManager(contextItem, externalContext); + } constructor(config, externalContext) { super(config, externalContext); this.name = "input"; this.domain = "executable"; + this.entityName = "unit"; this.initJobContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); this.initMethodDataContextMixin(externalContext); @@ -29,6 +34,7 @@ class VASPInputDataManager extends JSONSchemaDataProvider_1.default { // TODO: figure out whether we need two separate POSCARS, maybe one is enough POSCAR: material.getAsPOSCAR(true, true), POSCAR_WITH_CONSTRAINTS: material.getAsPOSCAR(true), + contextProviderName: "vasp", }; } getDataPerMaterial() { diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts index 8e6baee4..a04ad454 100644 --- a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts @@ -1,5 +1,5 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { VASPNEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { InputContextItemSchema, VASPNEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; @@ -7,24 +7,27 @@ import { type MaterialsContextMixin, type MaterialsExternalContext } from "../.. import { type MaterialsSetContextMixin, type MaterialsSetExternalContext } from "../../../mixins/MaterialsSetContextMixin"; import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = VASPNEBContextProviderSchema; -export type VASPNEBInputDataManagerContextItem = ContextItem; -export type VASPNEBInputDataManagerExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; -type ExternalContext = VASPNEBInputDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +type Schema = InputContextItemSchema & { + data: Data; +}; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; declare const VASPNEBInputDataManager_base: Base; export default class VASPNEBInputDataManager extends VASPNEBInputDataManager_base { readonly name: "input"; readonly domain: "executable"; + readonly entityName: "unit"; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): VASPNEBInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); + constructor(config: Partial, externalContext: ExternalContext); getDefaultData(): { FIRST_IMAGE: string; LAST_IMAGE: string; INTERMEDIATE_IMAGES: string[]; + contextProviderName: "vasp-neb"; }; } export {}; diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js index af718f44..6f2dd62f 100644 --- a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js +++ b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js @@ -14,10 +14,15 @@ const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaD const VASPInputDataManager_1 = __importDefault(require("./VASPInputDataManager")); const jsonSchemaId = "context-providers-directory/by-application/vasp-neb-context-provider"; class VASPNEBInputDataManager extends JSONSchemaDataProvider_1.default { + static createFromUnitContext(unitContext, externalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + return new VASPNEBInputDataManager(contextItem, externalContext); + } constructor(config, externalContext) { super(config, externalContext); this.name = "input"; this.domain = "executable"; + this.entityName = "unit"; this.initMaterialContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); this.initMaterialsSetContextMixin(externalContext); @@ -36,6 +41,7 @@ class VASPNEBInputDataManager extends JSONSchemaDataProvider_1.default { INTERMEDIATE_IMAGES: VASPContexts.slice(1, VASPContexts.length - 1).map((data) => { return data.POSCAR_WITH_CONSTRAINTS; }), + contextProviderName: "vasp-neb", }; } } diff --git a/dist/js/context/providers/index.d.ts b/dist/js/context/providers/index.d.ts new file mode 100644 index 00000000..b27a9855 --- /dev/null +++ b/dist/js/context/providers/index.d.ts @@ -0,0 +1,95 @@ +import { type Application } from "@mat3ra/ade"; +import type { JobSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import type { OrderedMaterial } from "../mixins/MaterialContextMixin"; +import type { UnitContext } from "./base/ContextProvider"; +import BoundaryConditionsFormDataManager from "./BoundaryConditionsFormDataManager"; +import QENEBInputDataManager from "./by_application/espresso/QENEBInputDataManager"; +import QEPWXInputDataManager from "./by_application/espresso/QEPWXInputDataManager"; +import NWChemInputDataManager from "./by_application/nwchem/NWChemInputDataManager"; +import VASPInputDataManager from "./by_application/vasp/VASPInputDataManager"; +import VASPNEBInputDataManager from "./by_application/vasp/VASPNEBInputDataManager"; +import CollinearMagnetizationDataManager from "./CollinearMagnetizationDataManager"; +import HubbardContextManagerLegacy from "./Hubbard/HubbardContextManagerLegacy"; +import HubbardJContextManager from "./Hubbard/HubbardJContextManager"; +import HubbardUContextManager from "./Hubbard/HubbardUContextManager"; +import HubbardVContextManager from "./Hubbard/HubbardVContextManager"; +import IonDynamicsDataManager from "./IonDynamicsDataManager"; +import MLSettingsDataManager from "./MLSettingsDataManager"; +import MLTrainTestSplitDataManager from "./MLTrainTestSplitDataManager"; +import NEBFormDataManager from "./NEBFormDataManager"; +import NonCollinearMagnetizationDataManager from "./NonCollinearMagnetizationDataManager"; +import PlanewaveCutoffDataManager from "./PlanewaveCutoffDataManager"; +import IGridFormDataManager from "./PointsGrid/IGridFormDataManager"; +import KGridFormDataManager from "./PointsGrid/KGridFormDataManager"; +import QGridFormDataManager from "./PointsGrid/QGridFormDataManager"; +import ExplicitKPath2PIBAFormDataManager from "./PointsPath/ExplicitKPath2PIBAFormDataManager"; +import ExplicitKPathFormDataManager from "./PointsPath/ExplicitKPathFormDataManager"; +import IPathFormDataManager from "./PointsPath/IPathFormDataManager"; +import KPathFormDataManager from "./PointsPath/KPathFormDataManager"; +import QPathFormDataManager from "./PointsPath/QPathFormDataManager"; +/** + * Registry mapping provider names (as they appear in templates) to their classes. + * This is the single source of truth for provider mappings. + */ +export declare const PROVIDER_REGISTRY: { + readonly PlanewaveCutoffDataManager: typeof PlanewaveCutoffDataManager; + readonly KGridFormDataManager: typeof KGridFormDataManager; + readonly QGridFormDataManager: typeof QGridFormDataManager; + readonly IGridFormDataManager: typeof IGridFormDataManager; + readonly QPathFormDataManager: typeof QPathFormDataManager; + readonly IPathFormDataManager: typeof IPathFormDataManager; + readonly KPathFormDataManager: typeof KPathFormDataManager; + readonly ExplicitKPathFormDataManager: typeof ExplicitKPathFormDataManager; + readonly ExplicitKPath2PIBAFormDataManager: typeof ExplicitKPath2PIBAFormDataManager; + readonly HubbardJContextManager: typeof HubbardJContextManager; + readonly HubbardUContextManager: typeof HubbardUContextManager; + readonly HubbardVContextManager: typeof HubbardVContextManager; + readonly HubbardContextManagerLegacy: typeof HubbardContextManagerLegacy; + readonly NEBFormDataManager: typeof NEBFormDataManager; + readonly BoundaryConditionsFormDataManager: typeof BoundaryConditionsFormDataManager; + readonly MLSettingsDataManager: typeof MLSettingsDataManager; + readonly MLTrainTestSplitDataManager: typeof MLTrainTestSplitDataManager; + readonly IonDynamicsContextProvider: typeof IonDynamicsDataManager; + readonly CollinearMagnetizationDataManager: typeof CollinearMagnetizationDataManager; + readonly NonCollinearMagnetizationDataManager: typeof NonCollinearMagnetizationDataManager; + readonly QEPWXInputDataManager: typeof QEPWXInputDataManager; + readonly QENEBInputDataManager: typeof QENEBInputDataManager; + readonly VASPInputDataManager: typeof VASPInputDataManager; + readonly VASPNEBInputDataManager: typeof VASPNEBInputDataManager; + readonly NWChemInputDataManager: typeof NWChemInputDataManager; +}; +/** + * External context type used by ExecutionUnitInput when creating providers. + * This type is always expected to be present when providers are instantiated. + */ +export type ExternalContext = { + application: Application; + material: OrderedMaterial; + materials: OrderedMaterial[]; + workflow: WorkflowSchema; + job: JobSchema; + isUsingJinjaVariables?: boolean; + materialsSet: { + _id: string; + }; +}; +/** + * Type for provider names as they appear in templates. + */ +export type ProviderName = keyof typeof PROVIDER_REGISTRY; +/** + * Union type of all context provider instances. + * Derived from the registry for type safety. + */ +export type AnyContextProvider = InstanceType<(typeof PROVIDER_REGISTRY)[ProviderName]>; +/** + * Factory function to create a context provider instance from its name. + * + * @param name - The provider name as it appears in templates + * @param context - The unit context + * @param externalContext - The external context (must match the ExternalContext type defined in this file) + * @returns An instance of the requested context provider + * @throws Error if the provider name is unknown + */ +export declare function createProvider(name: ProviderName, context: UnitContext, externalContext: ExternalContext): AnyContextProvider; +export { BoundaryConditionsFormDataManager, QENEBInputDataManager, QEPWXInputDataManager, NWChemInputDataManager, VASPInputDataManager, VASPNEBInputDataManager, CollinearMagnetizationDataManager, HubbardContextManagerLegacy, HubbardJContextManager, HubbardUContextManager, HubbardVContextManager, IonDynamicsDataManager, MLSettingsDataManager, MLTrainTestSplitDataManager, NEBFormDataManager, NonCollinearMagnetizationDataManager, PlanewaveCutoffDataManager, IGridFormDataManager, KGridFormDataManager, QGridFormDataManager, ExplicitKPath2PIBAFormDataManager, ExplicitKPathFormDataManager, IPathFormDataManager, KPathFormDataManager, QPathFormDataManager, }; diff --git a/dist/js/context/providers/index.js b/dist/js/context/providers/index.js new file mode 100644 index 00000000..0d1d3af8 --- /dev/null +++ b/dist/js/context/providers/index.js @@ -0,0 +1,111 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.QPathFormDataManager = exports.KPathFormDataManager = exports.IPathFormDataManager = exports.ExplicitKPathFormDataManager = exports.ExplicitKPath2PIBAFormDataManager = exports.QGridFormDataManager = exports.KGridFormDataManager = exports.IGridFormDataManager = exports.PlanewaveCutoffDataManager = exports.NonCollinearMagnetizationDataManager = exports.NEBFormDataManager = exports.MLTrainTestSplitDataManager = exports.MLSettingsDataManager = exports.IonDynamicsDataManager = exports.HubbardVContextManager = exports.HubbardUContextManager = exports.HubbardJContextManager = exports.HubbardContextManagerLegacy = exports.CollinearMagnetizationDataManager = exports.VASPNEBInputDataManager = exports.VASPInputDataManager = exports.NWChemInputDataManager = exports.QEPWXInputDataManager = exports.QENEBInputDataManager = exports.BoundaryConditionsFormDataManager = exports.PROVIDER_REGISTRY = void 0; +exports.createProvider = createProvider; +const BoundaryConditionsFormDataManager_1 = __importDefault(require("./BoundaryConditionsFormDataManager")); +exports.BoundaryConditionsFormDataManager = BoundaryConditionsFormDataManager_1.default; +const QENEBInputDataManager_1 = __importDefault(require("./by_application/espresso/QENEBInputDataManager")); +exports.QENEBInputDataManager = QENEBInputDataManager_1.default; +const QEPWXInputDataManager_1 = __importDefault(require("./by_application/espresso/QEPWXInputDataManager")); +exports.QEPWXInputDataManager = QEPWXInputDataManager_1.default; +const NWChemInputDataManager_1 = __importDefault(require("./by_application/nwchem/NWChemInputDataManager")); +exports.NWChemInputDataManager = NWChemInputDataManager_1.default; +const VASPInputDataManager_1 = __importDefault(require("./by_application/vasp/VASPInputDataManager")); +exports.VASPInputDataManager = VASPInputDataManager_1.default; +const VASPNEBInputDataManager_1 = __importDefault(require("./by_application/vasp/VASPNEBInputDataManager")); +exports.VASPNEBInputDataManager = VASPNEBInputDataManager_1.default; +const CollinearMagnetizationDataManager_1 = __importDefault(require("./CollinearMagnetizationDataManager")); +exports.CollinearMagnetizationDataManager = CollinearMagnetizationDataManager_1.default; +const HubbardContextManagerLegacy_1 = __importDefault(require("./Hubbard/HubbardContextManagerLegacy")); +exports.HubbardContextManagerLegacy = HubbardContextManagerLegacy_1.default; +const HubbardJContextManager_1 = __importDefault(require("./Hubbard/HubbardJContextManager")); +exports.HubbardJContextManager = HubbardJContextManager_1.default; +const HubbardUContextManager_1 = __importDefault(require("./Hubbard/HubbardUContextManager")); +exports.HubbardUContextManager = HubbardUContextManager_1.default; +const HubbardVContextManager_1 = __importDefault(require("./Hubbard/HubbardVContextManager")); +exports.HubbardVContextManager = HubbardVContextManager_1.default; +const IonDynamicsDataManager_1 = __importDefault(require("./IonDynamicsDataManager")); +exports.IonDynamicsDataManager = IonDynamicsDataManager_1.default; +const MLSettingsDataManager_1 = __importDefault(require("./MLSettingsDataManager")); +exports.MLSettingsDataManager = MLSettingsDataManager_1.default; +const MLTrainTestSplitDataManager_1 = __importDefault(require("./MLTrainTestSplitDataManager")); +exports.MLTrainTestSplitDataManager = MLTrainTestSplitDataManager_1.default; +const NEBFormDataManager_1 = __importDefault(require("./NEBFormDataManager")); +exports.NEBFormDataManager = NEBFormDataManager_1.default; +const NonCollinearMagnetizationDataManager_1 = __importDefault(require("./NonCollinearMagnetizationDataManager")); +exports.NonCollinearMagnetizationDataManager = NonCollinearMagnetizationDataManager_1.default; +const PlanewaveCutoffDataManager_1 = __importDefault(require("./PlanewaveCutoffDataManager")); +exports.PlanewaveCutoffDataManager = PlanewaveCutoffDataManager_1.default; +const IGridFormDataManager_1 = __importDefault(require("./PointsGrid/IGridFormDataManager")); +exports.IGridFormDataManager = IGridFormDataManager_1.default; +const KGridFormDataManager_1 = __importDefault(require("./PointsGrid/KGridFormDataManager")); +exports.KGridFormDataManager = KGridFormDataManager_1.default; +const QGridFormDataManager_1 = __importDefault(require("./PointsGrid/QGridFormDataManager")); +exports.QGridFormDataManager = QGridFormDataManager_1.default; +const ExplicitKPath2PIBAFormDataManager_1 = __importDefault(require("./PointsPath/ExplicitKPath2PIBAFormDataManager")); +exports.ExplicitKPath2PIBAFormDataManager = ExplicitKPath2PIBAFormDataManager_1.default; +const ExplicitKPathFormDataManager_1 = __importDefault(require("./PointsPath/ExplicitKPathFormDataManager")); +exports.ExplicitKPathFormDataManager = ExplicitKPathFormDataManager_1.default; +const IPathFormDataManager_1 = __importDefault(require("./PointsPath/IPathFormDataManager")); +exports.IPathFormDataManager = IPathFormDataManager_1.default; +const KPathFormDataManager_1 = __importDefault(require("./PointsPath/KPathFormDataManager")); +exports.KPathFormDataManager = KPathFormDataManager_1.default; +const QPathFormDataManager_1 = __importDefault(require("./PointsPath/QPathFormDataManager")); +exports.QPathFormDataManager = QPathFormDataManager_1.default; +/** + * Registry mapping provider names (as they appear in templates) to their classes. + * This is the single source of truth for provider mappings. + */ +exports.PROVIDER_REGISTRY = { + PlanewaveCutoffDataManager: PlanewaveCutoffDataManager_1.default, + KGridFormDataManager: KGridFormDataManager_1.default, + QGridFormDataManager: QGridFormDataManager_1.default, + IGridFormDataManager: IGridFormDataManager_1.default, + QPathFormDataManager: QPathFormDataManager_1.default, + IPathFormDataManager: IPathFormDataManager_1.default, + KPathFormDataManager: KPathFormDataManager_1.default, + ExplicitKPathFormDataManager: ExplicitKPathFormDataManager_1.default, + ExplicitKPath2PIBAFormDataManager: ExplicitKPath2PIBAFormDataManager_1.default, + HubbardJContextManager: HubbardJContextManager_1.default, + HubbardUContextManager: HubbardUContextManager_1.default, + HubbardVContextManager: HubbardVContextManager_1.default, + HubbardContextManagerLegacy: HubbardContextManagerLegacy_1.default, + NEBFormDataManager: NEBFormDataManager_1.default, + BoundaryConditionsFormDataManager: BoundaryConditionsFormDataManager_1.default, + MLSettingsDataManager: MLSettingsDataManager_1.default, + MLTrainTestSplitDataManager: MLTrainTestSplitDataManager_1.default, + IonDynamicsContextProvider: IonDynamicsDataManager_1.default, // Note: name mismatch preserved from original + CollinearMagnetizationDataManager: // Note: name mismatch preserved from original + CollinearMagnetizationDataManager_1.default, + NonCollinearMagnetizationDataManager: NonCollinearMagnetizationDataManager_1.default, + QEPWXInputDataManager: QEPWXInputDataManager_1.default, + QENEBInputDataManager: QENEBInputDataManager_1.default, + VASPInputDataManager: VASPInputDataManager_1.default, + VASPNEBInputDataManager: VASPNEBInputDataManager_1.default, + NWChemInputDataManager: NWChemInputDataManager_1.default, +}; +/** + * Factory function to create a context provider instance from its name. + * + * @param name - The provider name as it appears in templates + * @param context - The unit context + * @param externalContext - The external context (must match the ExternalContext type defined in this file) + * @returns An instance of the requested context provider + * @throws Error if the provider name is unknown + */ +function createProvider(name, context, externalContext) { + const ProviderClass = exports.PROVIDER_REGISTRY[name]; + if (!ProviderClass) { + throw new Error(`Unknown provider: ${name}`); + } + // Type assertion is safe here because ExecutionUnitInput's ExternalContext + // extends the base ExternalContext and includes all properties needed by providers. + // Each provider may expect a more specific ExternalContext type, but at runtime + // the ExecutionUnitInput's ExternalContext will have all required properties. + // This is a legitimate use of `any` for dynamic dispatch where TypeScript + // cannot statically verify the types, but runtime behavior is guaranteed. + return ProviderClass.createFromUnitContext(context, externalContext); +} diff --git a/dist/js/enums.d.ts b/dist/js/enums.d.ts index e0fc4983..ff1a6b54 100644 --- a/dist/js/enums.d.ts +++ b/dist/js/enums.d.ts @@ -25,7 +25,6 @@ export declare enum UnitType { assignment = "assignment", condition = "condition", subworkflow = "subworkflow", - processing = "processing", io = "io", assertion = "assertion" } diff --git a/dist/js/enums.js b/dist/js/enums.js index dc693a7b..b5317213 100644 --- a/dist/js/enums.js +++ b/dist/js/enums.js @@ -31,7 +31,6 @@ var UnitType; UnitType["assignment"] = "assignment"; UnitType["condition"] = "condition"; UnitType["subworkflow"] = "subworkflow"; - UnitType["processing"] = "processing"; UnitType["io"] = "io"; UnitType["assertion"] = "assertion"; })(UnitType || (exports.UnitType = UnitType = {})); diff --git a/dist/js/generated/ExecutionUnitSchemaMixin.js b/dist/js/generated/ExecutionUnitSchemaMixin.js index 89de9ce7..1a109d0f 100644 --- a/dist/js/generated/ExecutionUnitSchemaMixin.js +++ b/dist/js/generated/ExecutionUnitSchemaMixin.js @@ -5,7 +5,7 @@ function executionUnitSchemaMixin(item) { // @ts-expect-error const properties = { get type() { - return this.prop("type"); + return this.requiredProp("type"); }, set type(value) { this.setProp("type", value); @@ -17,13 +17,13 @@ function executionUnitSchemaMixin(item) { this.setProp("application", value); }, get executable() { - return this.prop("executable"); + return this.requiredProp("executable"); }, set executable(value) { this.setProp("executable", value); }, get flavor() { - return this.prop("flavor"); + return this.requiredProp("flavor"); }, set flavor(value) { this.setProp("flavor", value); @@ -35,7 +35,7 @@ function executionUnitSchemaMixin(item) { this.setProp("input", value); }, get context() { - return this.prop("context"); + return this.requiredProp("context"); }, set context(value) { this.setProp("context", value); diff --git a/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts b/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts index 5ca3cdce..fbdab43c 100644 --- a/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts +++ b/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts @@ -9,8 +9,6 @@ export type UnitContext = { dimensions: [string, string, string]; shifts: [0, 0, 0]; }; - name: "kgrid"; - isEdited: true; isUsingJinjaVariables: true; }; export default abstract class ConvergenceParameter { diff --git a/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js b/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js index ca2fac3c..b2503dd0 100644 --- a/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js +++ b/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js @@ -14,8 +14,6 @@ class NonUniformKGridConvergence extends ConvergenceParameter_1.default { dimensions: [`{{${this.name}[0]}}`, `{{${this.name}[1]}}`, `{{${this.name}[2]}}`], shifts: [0, 0, 0], }, - name: "kgrid", - isEdited: true, isUsingJinjaVariables: true, }; this.increment = `[${this.initialValue}[i] + math.floor(iteration * ${increment || ""} * float(context['kgrid']['reciprocalVectorRatios'][i])) for i in range(3)]`; diff --git a/dist/js/subworkflows/convergence/UniformKGridConvergence.js b/dist/js/subworkflows/convergence/UniformKGridConvergence.js index 8e886a45..4ce590ec 100644 --- a/dist/js/subworkflows/convergence/UniformKGridConvergence.js +++ b/dist/js/subworkflows/convergence/UniformKGridConvergence.js @@ -10,12 +10,10 @@ class UniformKGridConvergence extends ConvergenceParameter_1.default { this.name = "N_k"; this.finalValue = `${this.name} + 0`; this.unitContext = { - name: "kgrid", data: { dimensions: [`{{${this.name}}}`, `{{${this.name}}}`, `{{${this.name}}}`], shifts: [0, 0, 0], }, - isEdited: true, isUsingJinjaVariables: true, }; this.increment = `${this.name} + ${increment || ""}`; diff --git a/dist/js/subworkflows/subworkflow.d.ts b/dist/js/subworkflows/subworkflow.d.ts index d71d5041..01ae52de 100644 --- a/dist/js/subworkflows/subworkflow.d.ts +++ b/dist/js/subworkflows/subworkflow.d.ts @@ -52,13 +52,12 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow setModel(model: Model): void; setUnits(units: AnySubworkflowUnit[]): void; toJSON(exclude?: string[]): SubworkflowSchema & AnyObject; - get contextProviders(): import("../context/providers/PlanewaveCutoffDataManager").default[]; private getContextFromAssignmentUnits; - render(context?: {}): void; + render(context: Record): void; /** * TODO: reuse workflow function instead */ - addUnit(unit: AnySubworkflowUnit, index?: number): void; + private addUnit; removeUnit(flowchartId: string): void; get properties(): string[]; getUnit(flowchartId: string): AnySubworkflowUnit | undefined; @@ -286,7 +285,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow hasAdvancedComputeOptions?: boolean; isLicensed?: boolean; }; - executable?: { + executable: { _id?: string; slug?: string; systemName?: string; @@ -308,7 +307,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow applicationId: string[]; hasAdvancedComputeOptions?: boolean; }; - flavor?: { + flavor: { _id?: string; slug?: string; systemName?: string; @@ -355,9 +354,10 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow rendered: string; isManuallyChanged: boolean; }[]; - context?: ({ + context: ({ name: "input"; data: { + contextProviderName: "nwchem-total-energy"; CHARGE: number; MULT: number; BASIS: string; @@ -426,6 +426,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow "if_pos(2)"?: number; "if_pos(3)"?: number; }[][]; + contextProviderName: "qe-neb"; } | { IBRAV: number; RESTART_MODE: "from_scratch" | "restart"; @@ -457,16 +458,19 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow v2?: [number, number, number]; v3?: [number, number, number]; }; + contextProviderName: "qe-pwx"; } | { POSCAR: string; POSCAR_WITH_CONSTRAINTS: string; + contextProviderName: "vasp"; } | { FIRST_IMAGE: string; LAST_IMAGE: string; INTERMEDIATE_IMAGES: string[]; + contextProviderName: "vasp-neb"; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -476,10 +480,11 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow density?: number; }; isEdited: boolean; + extraData: {}; } | { name: "kgrid" | "qgrid" | "igrid"; data: { - dimensions: [number, number, number]; + dimensions: [number, number, number] | [string, string, string]; shifts?: [number, number, number]; reciprocalVectorRatios?: [number, number, number]; gridMetricType: "KPPRA" | "spacing"; @@ -487,7 +492,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow preferGridMetric?: boolean; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -502,7 +507,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow coordinates: number[]; }[]]; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -519,6 +524,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow value?: number; }[]]; isEdited: boolean; + extraData: {}; } | { name: "hubbard_u"; data: { @@ -527,7 +533,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow hubbardUValue?: number; }[]; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -550,6 +556,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow hubbardVValue?: number; }[]]; isEdited: boolean; + extraData: {}; } | { name: "hubbard_legacy"; data: [{ @@ -562,12 +569,14 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow hubbardUValue?: number; }[]]; isEdited: boolean; + extraData: {}; } | { name: "neb"; data: { nImages?: number; }; isEdited: boolean; + extraData: {}; } | { name: "boundaryConditions"; data: { @@ -577,7 +586,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow targetFermiEnergy?: number; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -587,12 +596,14 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow problem_category?: "regression" | "classification" | "clustering"; }; isEdited: boolean; + extraData: {}; } | { name: "mlTrainTestSplit"; data: { fraction_held_as_test_set?: number; }; isEdited: boolean; + extraData: {}; } | { name: "dynamics"; data: { @@ -602,6 +613,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow temperature?: number; }; isEdited: boolean; + extraData: {}; } | { name: "collinearMagnetization"; data: { @@ -614,7 +626,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow totalMagnetization: number; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -649,7 +661,7 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow }; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; })[]; diff --git a/dist/js/subworkflows/subworkflow.js b/dist/js/subworkflows/subworkflow.js index 41525c45..d783a7b0 100644 --- a/dist/js/subworkflows/subworkflow.js +++ b/dist/js/subworkflows/subworkflow.js @@ -125,15 +125,6 @@ class Subworkflow extends entity_1.InMemoryEntity { ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation }; } - get contextProviders() { - const subworkflowContextProviders = this.unitsInstances - .filter((u) => u.type === enums_1.UnitType.execution) - .filter((u) => u.allContextProviders.length) - .map((u) => u.allContextProviders) - .flat() - .filter((p) => p.entityName === "subworkflow"); - return underscore_1.default.uniq(subworkflowContextProviders, (p) => p.name); - } getContextFromAssignmentUnits() { return this.unitsInstances .filter((u) => u.type === enums_1.UnitType.assignment) @@ -144,7 +135,7 @@ class Subworkflow extends entity_1.InMemoryEntity { }; }, {}); } - render(context = {}) { + render(context) { const ctx = { ...context, application: this.applicationInstance, @@ -156,7 +147,7 @@ class Subworkflow extends entity_1.InMemoryEntity { }; this.unitsInstances.forEach((u) => { if (u.type === enums_1.UnitType.execution) { - u.render({}, ctx); + u.render(ctx); } }); } @@ -296,24 +287,12 @@ class Subworkflow extends entity_1.InMemoryEntity { throw new Error(`Subworkflow does not contain unit with '${result}' as extracted property.`); } // initialize parameter - const param = (0, factory_1.createConvergenceParameter)({ + const convergenceParameter = (0, factory_1.createConvergenceParameter)({ name: parameter, initialValue: parameterInitial, increment: parameterIncrement, }); - // Replace kgrid to be ready for convergence - // TODO: kgrid should be abstracted and selected by user - const gridProvider = unitForConvergence.importantSettingsProviders.find((p) => { - return ["kgrid", "qgrid"].includes(p.name); - }); - let mergedContext = param.unitContext; - if (gridProvider) { - const providerContext = gridProvider.getContextItemData(); - mergedContext = merge(providerContext, param.unitContext); - gridProvider.setData(mergedContext); - gridProvider.setIsEdited(true); - } - unitForConvergence.updateContext(mergedContext); + unitForConvergence.addConvergenceContext(convergenceParameter, {}); const prevResult = "prev_result"; const iteration = "iteration"; // Assignment with result's initial value @@ -326,8 +305,8 @@ class Subworkflow extends entity_1.InMemoryEntity { // Assignment with initial value of convergence parameter const paramInit = new units_1.AssignmentUnit({ name: "init parameter", - operand: param.name, - value: param.initialValue, + operand: convergenceParameter.name, + value: convergenceParameter.initialValue, tags: [enums_1.UnitTag.hasConvergenceParam], }); // Assignment with initial value of iteration counter @@ -351,17 +330,17 @@ class Subworkflow extends entity_1.InMemoryEntity { // Assignment for convergence param increase const nextStep = new units_1.AssignmentUnit({ name: "update parameter", - input: param.useVariablesFromUnitContext(unitForConvergence.flowchartId), - operand: param.name, - value: param.increment, + input: convergenceParameter.useVariablesFromUnitContext(unitForConvergence.flowchartId), + operand: convergenceParameter.name, + value: convergenceParameter.increment, next: unitForConvergence.flowchartId, }); // Final step of convergence const exit = new units_1.AssignmentUnit({ name: "exit", input: [], - operand: param.name, - value: param.finalValue, + operand: convergenceParameter.name, + value: convergenceParameter.finalValue, }); // Final step of convergence const storeResult = new units_1.AssignmentUnit({ diff --git a/dist/js/units/ExecutionUnit.d.ts b/dist/js/units/ExecutionUnit.d.ts index 86a0245c..79d98746 100644 --- a/dist/js/units/ExecutionUnit.d.ts +++ b/dist/js/units/ExecutionUnit.d.ts @@ -1,13 +1,14 @@ import { Application, Executable, Flavor } from "@mat3ra/ade"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ExecutableSchema, ExecutionUnitSchemaBase, FlavorSchema } from "@mat3ra/esse/dist/js/types"; +import type { ExecutableSchema, ExecutionUnitSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type ImportantSettingsProvider } from "../context/mixins/ImportantSettingsProviderMixin"; -import type { ContextItem } from "../context/providers/base/ContextProvider"; +import { type ExternalContext } from "../context/providers"; import ExecutionUnitInput from "../ExecutionUnitInput"; import { type ExecutionUnitSchemaMixin } from "../generated/ExecutionUnitSchemaMixin"; +import type ConvergenceParameter from "../subworkflows/convergence/ConvergenceParameter"; import { BaseUnit } from "./BaseUnit"; -type Schema = ExecutionUnitSchemaBase; +type Schema = ExecutionUnitSchema; type Base = typeof BaseUnit & Constructor & Constructor; interface SetApplicationProps { application: Application; @@ -18,24 +19,23 @@ interface SetExecutableProps { executable?: Executable | ExecutableSchema; flavor?: Flavor | FlavorSchema; } -export type ExecutionUnitSchema = Schema; declare const ExecutionUnit_base: Base; export declare class ExecutionUnit extends ExecutionUnit_base implements Schema { applicationInstance: Application; executableInstance: Executable; flavorInstance: Flavor; inputInstances: ExecutionUnitInput[]; - renderingContext: ContextItem[]; + renderingContext: Record; toJSON: () => Schema & AnyObject; constructor(config: Schema); setApplication({ application, executable, flavor }: SetApplicationProps): void; setExecutable({ executable, flavor }: SetExecutableProps): void; setFlavor(flavor?: Flavor | FlavorSchema): void; setDefaultInput(): void; - get allContextProviders(): (import("../context/providers/BoundaryConditionsFormDataManager").default | import("../context/providers/by_application/espresso/QEPWXInputDataManager").default | import("../context/providers/by_application/espresso/QENEBInputDataManager").default | import("../context/providers/by_application/nwchem/NWChemInputDataManager").default | import("../context/providers/by_application/vasp/VASPInputDataManager").default | import("../context/providers/by_application/vasp/VASPNEBInputDataManager").default | import("../context/providers/CollinearMagnetizationDataManager").default | import("../context/providers/Hubbard/HubbardContextManagerLegacy").default | import("../context/providers/Hubbard/HubbardJContextManager").default | import("../context/providers/Hubbard/HubbardUContextManager").default | import("../context/providers/Hubbard/HubbardVContextManager").default | import("../context/providers/IonDynamicsContextProvider").default | import("../context/providers/MLSettingsDataManager").default | import("../context/providers/MLTrainTestSplitDataManager").default | import("../context/providers/NEBFormDataManager").default | import("../context/providers/NonCollinearMagnetizationDataManager").default | import("../context/providers/PlanewaveCutoffDataManager").default | import("../context/providers/PointsGrid/IGridFormDataManager").default | import("../context/providers/PointsGrid/KGridFormDataManager").default | import("../context/providers/PointsGrid/QGridFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPathFormDataManager").default | import("../context/providers/PointsPath/IPathFormDataManager").default | import("../context/providers/PointsPath/KPathFormDataManager").default | import("../context/providers/PointsPath/QPathFormDataManager").default)[]; - get contextProviders(): (import("../context/providers/BoundaryConditionsFormDataManager").default | import("../context/providers/by_application/espresso/QEPWXInputDataManager").default | import("../context/providers/by_application/espresso/QENEBInputDataManager").default | import("../context/providers/by_application/nwchem/NWChemInputDataManager").default | import("../context/providers/by_application/vasp/VASPInputDataManager").default | import("../context/providers/by_application/vasp/VASPNEBInputDataManager").default | import("../context/providers/CollinearMagnetizationDataManager").default | import("../context/providers/Hubbard/HubbardContextManagerLegacy").default | import("../context/providers/Hubbard/HubbardJContextManager").default | import("../context/providers/Hubbard/HubbardUContextManager").default | import("../context/providers/Hubbard/HubbardVContextManager").default | import("../context/providers/IonDynamicsContextProvider").default | import("../context/providers/MLSettingsDataManager").default | import("../context/providers/MLTrainTestSplitDataManager").default | import("../context/providers/NEBFormDataManager").default | import("../context/providers/NonCollinearMagnetizationDataManager").default | import("../context/providers/PointsGrid/IGridFormDataManager").default | import("../context/providers/PointsGrid/KGridFormDataManager").default | import("../context/providers/PointsGrid/QGridFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPathFormDataManager").default | import("../context/providers/PointsPath/IPathFormDataManager").default | import("../context/providers/PointsPath/KPathFormDataManager").default | import("../context/providers/PointsPath/QPathFormDataManager").default)[]; - get importantSettingsProviders(): (import("../context/providers/BoundaryConditionsFormDataManager").default | import("../context/providers/CollinearMagnetizationDataManager").default | import("../context/providers/Hubbard/HubbardContextManagerLegacy").default | import("../context/providers/Hubbard/HubbardJContextManager").default | import("../context/providers/Hubbard/HubbardUContextManager").default | import("../context/providers/Hubbard/HubbardVContextManager").default | import("../context/providers/IonDynamicsContextProvider").default | import("../context/providers/MLSettingsDataManager").default | import("../context/providers/MLTrainTestSplitDataManager").default | import("../context/providers/NEBFormDataManager").default | import("../context/providers/NonCollinearMagnetizationDataManager").default | import("../context/providers/PointsGrid/IGridFormDataManager").default | import("../context/providers/PointsGrid/KGridFormDataManager").default | import("../context/providers/PointsGrid/QGridFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager").default | import("../context/providers/PointsPath/ExplicitKPathFormDataManager").default | import("../context/providers/PointsPath/IPathFormDataManager").default | import("../context/providers/PointsPath/KPathFormDataManager").default | import("../context/providers/PointsPath/QPathFormDataManager").default)[]; - render(externalContext?: AnyObject): void; + getContextProvidersInstances(externalContext: ExternalContext): import("../context/providers").AnyContextProvider[]; + addConvergenceContext(parameter: ConvergenceParameter, externalContext: ExternalContext): void; + render(externalContext: ExternalContext): void; + private saveContext; /** * @summary Calculates hash on unit-specific fields. * The meaningful fields of processing unit are operation, flavor and input at the moment. diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index 0717ebde..faf82af9 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -8,6 +8,7 @@ const ade_1 = require("@mat3ra/ade"); const utils_1 = require("@mat3ra/utils"); const ContextAndRenderFieldsMixin_1 = require("../context/mixins/ContextAndRenderFieldsMixin"); const ImportantSettingsProviderMixin_1 = require("../context/mixins/ImportantSettingsProviderMixin"); +const providers_1 = require("../context/providers"); const ExecutionUnitInput_1 = __importDefault(require("../ExecutionUnitInput")); const ExecutionUnitSchemaMixin_1 = require("../generated/ExecutionUnitSchemaMixin"); const BaseUnit_1 = require("./BaseUnit"); @@ -16,7 +17,7 @@ class ExecutionUnit extends BaseUnit_1.BaseUnit { var _a; super(config); this.inputInstances = []; - this.renderingContext = []; + this.renderingContext = {}; const { application, executable, flavor } = config; const applicationInstance = ade_1.ApplicationRegistry.createApplication(application); const executableInstance = ade_1.ApplicationRegistry.getExecutableByConfig(application.name, executable); @@ -65,32 +66,51 @@ class ExecutionUnit extends BaseUnit_1.BaseUnit { const inputs = ade_1.ApplicationRegistry.getInput(this.flavorInstance); this.inputInstances = inputs.map(ExecutionUnitInput_1.default.createFromTemplate); } - get allContextProviders() { - return this.inputInstances.map((input) => input.contextProvidersInstances).flat(); - } - get contextProviders() { - return this.allContextProviders.filter((p) => p.entityName === "unit"); + getContextProvidersInstances(externalContext) { + const uniqueContextProviderNames = [ + ...new Set(this.inputInstances + .map((input) => { + return input.template.contextProviders.map((provider) => { + return provider.name; + }); + }) + .flat()), + ]; + return uniqueContextProviderNames.map((name) => { + return (0, providers_1.createProvider)(name, this.context, externalContext); + }); } - get importantSettingsProviders() { - return this.contextProviders.filter((p) => p.domain === "important"); + addConvergenceContext(parameter, externalContext) { + // TODO: kgrid should be abstracted and selected by user + const parameterToContextProviderMap = { + N_k: "kgrid", + N_k_nonuniform: "kgrid", + }; + const contextName = parameterToContextProviderMap[parameter.name]; + const fullContext = this.getContextProvidersInstances(externalContext).map((contextProvider) => { + if (contextProvider.name === contextName) { + contextProvider.applyCovergenceParameter(parameter); + return contextProvider.getContextItemData(); + } + return contextProvider.getContextItemData(); + }); + this.saveContext(fullContext); } - render(externalContext = {}) { - this.renderingContext = this.context; - const newInput = []; - const newPersistentContext = []; - const newRenderingContext = []; - this.inputInstances.forEach((input) => { - input.setContext(context, externalContext); - input.render(); - const inputJSON = input.toJSON(); - const fullContext = input.getFullContext(); - newInput.push(inputJSON); - newRenderingContext.push(...fullContext); - newPersistentContext.push(...fullContext.filter((c) => c.isEdited)); + render(externalContext) { + const fullContext = this.getContextProvidersInstances(externalContext).map((contextProvider) => { + return contextProvider.getContextItemData(); + }); + this.saveContext(fullContext); + this.input = this.inputInstances.map((input) => { + return input.render(this.renderingContext).toJSON(); }); - this.input = newInput; - this.renderingContext = newRenderingContext; - this.context = newPersistentContext; + } + saveContext(fullContext) { + // persistent context + this.context = fullContext.filter((c) => c.isEdited); + this.renderingContext = Object.fromEntries(fullContext.map((context) => { + return [context.name, context.data]; + })); } /** * @summary Calculates hash on unit-specific fields. diff --git a/dist/js/units/factory.d.ts b/dist/js/units/factory.d.ts index d3540a4e..a34aea9a 100644 --- a/dist/js/units/factory.d.ts +++ b/dist/js/units/factory.d.ts @@ -1,15 +1,14 @@ -import type { AssertionUnitSchema, AssignmentUnitSchema, ConditionUnitSchema, DataIOUnitSchema, MapUnitSchema, ProcessingUnitSchema, ReduceUnitSchema, SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; +import type { AssertionUnitSchema, AssignmentUnitSchema, ConditionUnitSchema, DataIOUnitSchema, ExecutionUnitSchema, MapUnitSchema, ProcessingUnitSchema, ReduceUnitSchema, SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; import { AssertionUnit } from "./AssertionUnit"; import { AssignmentUnit } from "./AssignmentUnit"; import { ConditionUnit } from "./ConditionUnit"; -import { type ExecutionUnitSchema, ExecutionUnit } from "./ExecutionUnit"; +import { ExecutionUnit } from "./ExecutionUnit"; import { IOUnit } from "./IOUnit"; import { MapUnit } from "./MapUnit"; -import { ProcessingUnit } from "./ProcessingUnit"; import { SubworkflowUnit } from "./SubworkflowUnit"; export type UnitConfig = ExecutionUnitSchema | AssignmentUnitSchema | ConditionUnitSchema | DataIOUnitSchema | ProcessingUnitSchema | MapUnitSchema | SubworkflowUnitSchema | AssertionUnitSchema | ReduceUnitSchema; export type AnyUnit = MapUnit | SubworkflowUnit; -export type AnySubworkflowUnit = ExecutionUnit | AssignmentUnit | ConditionUnit | IOUnit | ProcessingUnit | AssertionUnit; +export type AnySubworkflowUnit = ExecutionUnit | AssignmentUnit | ConditionUnit | IOUnit | AssertionUnit; export declare class UnitFactory { static createInWorkflow(config: UnitConfig): AnyUnit; static createInSubworkflow(config: UnitConfig): AnySubworkflowUnit; diff --git a/dist/js/units/factory.js b/dist/js/units/factory.js index 9f4bf0b6..61f76384 100644 --- a/dist/js/units/factory.js +++ b/dist/js/units/factory.js @@ -8,7 +8,6 @@ const ConditionUnit_1 = require("./ConditionUnit"); const ExecutionUnit_1 = require("./ExecutionUnit"); const IOUnit_1 = require("./IOUnit"); const MapUnit_1 = require("./MapUnit"); -const ProcessingUnit_1 = require("./ProcessingUnit"); const SubworkflowUnit_1 = require("./SubworkflowUnit"); class UnitFactory { static createInWorkflow(config) { @@ -46,8 +45,6 @@ class UnitFactory { return new ConditionUnit_1.ConditionUnit(config); case enums_1.UnitType.io: return new IOUnit_1.IOUnit(config); - case enums_1.UnitType.processing: - return new ProcessingUnit_1.ProcessingUnit(config); case enums_1.UnitType.assertion: return new AssertionUnit_1.AssertionUnit(config); // // TODO-question: why there was no reduce unit in the factory? diff --git a/dist/js/utils.d.ts b/dist/js/utils.d.ts index e86a8eb0..2ff341f5 100644 --- a/dist/js/utils.d.ts +++ b/dist/js/utils.d.ts @@ -243,7 +243,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { hasAdvancedComputeOptions?: boolean; isLicensed?: boolean; }; - executable?: { + executable: { _id?: string; slug?: string; systemName?: string; @@ -265,7 +265,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { applicationId: string[]; hasAdvancedComputeOptions?: boolean; }; - flavor?: { + flavor: { _id?: string; slug?: string; systemName?: string; @@ -312,9 +312,10 @@ export declare function findUnit({ subworkflowData, index, type, }: { rendered: string; isManuallyChanged: boolean; }[]; - context?: ({ + context: ({ name: "input"; data: { + contextProviderName: "nwchem-total-energy"; CHARGE: number; MULT: number; BASIS: string; @@ -383,6 +384,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { "if_pos(2)"?: number; "if_pos(3)"?: number; }[][]; + contextProviderName: "qe-neb"; } | { IBRAV: number; RESTART_MODE: "from_scratch" | "restart"; @@ -414,16 +416,19 @@ export declare function findUnit({ subworkflowData, index, type, }: { v2?: [number, number, number]; v3?: [number, number, number]; }; + contextProviderName: "qe-pwx"; } | { POSCAR: string; POSCAR_WITH_CONSTRAINTS: string; + contextProviderName: "vasp"; } | { FIRST_IMAGE: string; LAST_IMAGE: string; INTERMEDIATE_IMAGES: string[]; + contextProviderName: "vasp-neb"; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -433,10 +438,11 @@ export declare function findUnit({ subworkflowData, index, type, }: { density?: number; }; isEdited: boolean; + extraData: {}; } | { name: "kgrid" | "qgrid" | "igrid"; data: { - dimensions: [number, number, number]; + dimensions: [number, number, number] | [string, string, string]; shifts?: [number, number, number]; reciprocalVectorRatios?: [number, number, number]; gridMetricType: "KPPRA" | "spacing"; @@ -444,7 +450,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { preferGridMetric?: boolean; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -459,7 +465,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { coordinates: number[]; }[]]; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -476,6 +482,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { value?: number; }[]]; isEdited: boolean; + extraData: {}; } | { name: "hubbard_u"; data: { @@ -484,7 +491,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { hubbardUValue?: number; }[]; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -507,6 +514,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { hubbardVValue?: number; }[]]; isEdited: boolean; + extraData: {}; } | { name: "hubbard_legacy"; data: [{ @@ -519,12 +527,14 @@ export declare function findUnit({ subworkflowData, index, type, }: { hubbardUValue?: number; }[]]; isEdited: boolean; + extraData: {}; } | { name: "neb"; data: { nImages?: number; }; isEdited: boolean; + extraData: {}; } | { name: "boundaryConditions"; data: { @@ -534,7 +544,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { targetFermiEnergy?: number; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -544,12 +554,14 @@ export declare function findUnit({ subworkflowData, index, type, }: { problem_category?: "regression" | "classification" | "clustering"; }; isEdited: boolean; + extraData: {}; } | { name: "mlTrainTestSplit"; data: { fraction_held_as_test_set?: number; }; isEdited: boolean; + extraData: {}; } | { name: "dynamics"; data: { @@ -559,6 +571,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { temperature?: number; }; isEdited: boolean; + extraData: {}; } | { name: "collinearMagnetization"; data: { @@ -571,7 +584,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { totalMagnetization: number; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; } | { @@ -606,7 +619,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { }; }; extraData: { - materialHash?: string; + materialHash: string; }; isEdited: boolean; })[]; diff --git a/package-lock.json b/package-lock.json index 4505ff44..6fd5c072 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1bad6cb6b0761a411cc431b681119d1d47081831", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#16b279cef97ff17056bba180d6338c2c1721ff0c", "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", @@ -2862,8 +2862,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#1bad6cb6b0761a411cc431b681119d1d47081831", - "integrity": "sha512-b+r/ApKPq2HPCDjf1Xf3IGR/QrMhvYQcGbMj/K6fjCLuKODEC2lJ3lOLhBnDAqwiNVzmVKuQX9k9An8ipxlCFg==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#16b279cef97ff17056bba180d6338c2c1721ff0c", + "integrity": "sha512-7zTp0CMboWNKdGoqYBSm/DNq4n+KFmKIn9gi7yITWVBPDHZsX0mOzSCxuAXbQpjFEFKYmqTJLkVZTN0QIHoZag==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index ae36aecc..63eec9a5 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1bad6cb6b0761a411cc431b681119d1d47081831", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#16b279cef97ff17056bba180d6338c2c1721ff0c", "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts index d1efb030..9e80395e 100644 --- a/scripts/generate-mixins.ts +++ b/scripts/generate-mixins.ts @@ -26,7 +26,6 @@ const OUTPUT_PATHS = { "workflow/unit/mixins/execution": "src/js/generated/ExecutionUnitSchemaMixin.ts", "workflow/unit/mixins/io": "src/js/generated/IOUnitSchemaMixin.ts", "workflow/unit/mixins/map": "src/js/generated/MapUnitSchemaMixin.ts", - "workflow/unit/mixins/processing": "src/js/generated/ProcessingUnitSchemaMixin.ts", "workflow/unit/mixins/reduce": "src/js/generated/ReduceUnitSchemaMixin.ts", "workflow/unit/mixins/subworkflow": "src/js/generated/SubworkflowUnitSchemaMixin.ts", "workflow/unit/input/-inputItem": "src/js/generated/ExecutionUnitInputSchemaMixin.ts", diff --git a/src/js/ExecutionUnitInput.ts b/src/js/ExecutionUnitInput.ts index a3353c49..e06a8df7 100644 --- a/src/js/ExecutionUnitInput.ts +++ b/src/js/ExecutionUnitInput.ts @@ -1,225 +1,29 @@ -import { type Application, Template } from "@mat3ra/ade"; +import { Template } from "@mat3ra/ade"; import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { - ContextProviderNameEnum, - JobSchema, - TemplateSchema, - WorkflowSchema, -} from "@mat3ra/esse/dist/js/types"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import nunjucks from "nunjucks"; -import type { OrderedMaterial } from "./context/mixins/MaterialContextMixin"; -import BoundaryConditionsFormDataManager, { - type BoundaryConditionsFormDataManagerContextItem, - type BoundaryConditionsFormDataManagerExternalContext, -} from "./context/providers/BoundaryConditionsFormDataManager"; -import QENEBInputDataManager, { - type QENEBInputDataManagerContextItem, - type QENEBInputDataManagerExternalContext, -} from "./context/providers/by_application/espresso/QENEBInputDataManager"; -import type { - QEPWXInputDataManagerContextItem, - QEPWXInputDataManagerExternalContext, -} from "./context/providers/by_application/espresso/QEPWXInputDataManager"; -import QEPWXInputDataManager from "./context/providers/by_application/espresso/QEPWXInputDataManager"; -import NWChemInputDataManager, { - type NWChemInputDataManagerContextItem, - type NWChemInputDataManagerExternalContext, -} from "./context/providers/by_application/nwchem/NWChemInputDataManager"; -import VASPInputDataManager, { - type VASPInputDataManagerContextItem, - type VASPInputDataManagerExternalContext, -} from "./context/providers/by_application/vasp/VASPInputDataManager"; -import VASPNEBInputDataManager, { - type VASPNEBInputDataManagerContextItem, - type VASPNEBInputDataManagerExternalContext, -} from "./context/providers/by_application/vasp/VASPNEBInputDataManager"; -import type { - CollinearMagnetizationDataManagerContextItem, - CollinearMagnetizationDataManagerExternalContext, -} from "./context/providers/CollinearMagnetizationDataManager"; -import CollinearMagnetizationDataManager from "./context/providers/CollinearMagnetizationDataManager"; -import type { HubbardContextManagerLegacyContextItem } from "./context/providers/Hubbard/HubbardContextManagerLegacy"; -import HubbardContextManagerLegacy from "./context/providers/Hubbard/HubbardContextManagerLegacy"; -import type { HubbardExternalContext } from "./context/providers/Hubbard/HubbardContextProvider"; -import HubbardJContextManager, { - type HubbardJContextManagerContextItem, -} from "./context/providers/Hubbard/HubbardJContextManager"; -import HubbardUContextManager, { - type HubbardUContextManagerContextItem, -} from "./context/providers/Hubbard/HubbardUContextManager"; -import HubbardVContextManager, { - type HubbardVContextManagerContextItem, -} from "./context/providers/Hubbard/HubbardVContextManager"; -import type { - IonDynamicsContextProviderContextItem, - IonDynamicsContextProviderExternalContext, -} from "./context/providers/IonDynamicsContextProvider"; -import IonDynamicsContextProvider from "./context/providers/IonDynamicsContextProvider"; -import type { - MLSettingsDataManagerContextItem, - MLSettingsDataManagerExternalContext, -} from "./context/providers/MLSettingsDataManager"; -import MLSettingsDataManager from "./context/providers/MLSettingsDataManager"; -import type { - MLTrainTestSplitDataManagerContextItem, - MLTrainTestSplitDataManagerExternalContext, -} from "./context/providers/MLTrainTestSplitDataManager"; -import MLTrainTestSplitDataManager from "./context/providers/MLTrainTestSplitDataManager"; -import type { - NEBFormDataManagerContextItem, - NEBFormDataManagerExternalContext, -} from "./context/providers/NEBFormDataManager"; -import NEBFormDataManager from "./context/providers/NEBFormDataManager"; -import NonCollinearMagnetizationDataManager, { - type NonCollinearMagnetizationDataManagerContextItem, - type NonCollinearMagnetizationDataManagerExternalContext, -} from "./context/providers/NonCollinearMagnetizationDataManager"; -import PlanewaveCutoffDataManager, { - type PlanewaveCutoffDataManagerContextItem, - type PlanewaveCutoffDataManagerExternalContext, -} from "./context/providers/PlanewaveCutoffDataManager"; -import IGridFormDataManager from "./context/providers/PointsGrid/IGridFormDataManager"; -import KGridFormDataManager from "./context/providers/PointsGrid/KGridFormDataManager"; -import type { - PointsGridFormDataManagerContextItem, - PointsGridFormDataManagerExternalContext, -} from "./context/providers/PointsGrid/PointsGridFormDataProvider"; -import QGridFormDataManager from "./context/providers/PointsGrid/QGridFormDataManager"; -import ExplicitKPath2PIBAFormDataManager, { - type ExplicitKPath2PIBAFormDataManagerContextItem, - type ExplicitKPath2PIBAFormDataManagerExternalContext, -} from "./context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager"; -import type { - ExplicitKPathFormDataManagerContextItem, - ExplicitKPathFormDataManagerExternalContext, -} from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; -import ExplicitKPathFormDataManager from "./context/providers/PointsPath/ExplicitKPathFormDataManager"; -import type { - IPathFormDataManagerContextItem, - IPathFormDataManagerExternalContext, -} from "./context/providers/PointsPath/IPathFormDataManager"; -import IPathFormDataManager from "./context/providers/PointsPath/IPathFormDataManager"; -import KPathFormDataManager, { - type KPathFormDataManagerContextItem, - type KPathFormDataManagerExternalContext, -} from "./context/providers/PointsPath/KPathFormDataManager"; -import QPathFormDataManager, { - type QPathFormDataManagerContextItem, - type QPathFormDataManagerExternalContext, -} from "./context/providers/PointsPath/QPathFormDataManager"; import type { ExecutionUnitInputSchemaMixin } from "./generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; - +type JSON = Schema & AnyObject; type Base = typeof InMemoryEntity & Constructor; - type ConstructorConfig = Schema | (Omit & { template: Template }); -type AnyContextItem = - | PlanewaveCutoffDataManagerContextItem - | PointsGridFormDataManagerContextItem - | QPathFormDataManagerContextItem - | IPathFormDataManagerContextItem - | KPathFormDataManagerContextItem - | ExplicitKPathFormDataManagerContextItem - | ExplicitKPath2PIBAFormDataManagerContextItem - | HubbardJContextManagerContextItem - | HubbardUContextManagerContextItem - | HubbardVContextManagerContextItem - | HubbardContextManagerLegacyContextItem - | NEBFormDataManagerContextItem - | BoundaryConditionsFormDataManagerContextItem - | MLSettingsDataManagerContextItem - | MLTrainTestSplitDataManagerContextItem - | IonDynamicsContextProviderContextItem - | CollinearMagnetizationDataManagerContextItem - | NonCollinearMagnetizationDataManagerContextItem - | QEPWXInputDataManagerContextItem - | QENEBInputDataManagerContextItem - | VASPInputDataManagerContextItem - | VASPNEBInputDataManagerContextItem - | NWChemInputDataManagerContextItem; - -export type AnyContextExternalContext = - | PlanewaveCutoffDataManagerExternalContext - | PointsGridFormDataManagerExternalContext - | QPathFormDataManagerExternalContext - | IPathFormDataManagerExternalContext - | KPathFormDataManagerExternalContext - | ExplicitKPathFormDataManagerExternalContext - | ExplicitKPath2PIBAFormDataManagerExternalContext - | HubbardExternalContext - | NEBFormDataManagerExternalContext - | BoundaryConditionsFormDataManagerExternalContext - | MLSettingsDataManagerExternalContext - | MLTrainTestSplitDataManagerExternalContext - | IonDynamicsContextProviderExternalContext - | CollinearMagnetizationDataManagerExternalContext - | NonCollinearMagnetizationDataManagerExternalContext - | QEPWXInputDataManagerExternalContext - | QENEBInputDataManagerExternalContext - | VASPInputDataManagerExternalContext - | VASPNEBInputDataManagerExternalContext - | NWChemInputDataManagerExternalContext; - -type AnyContextProvider = - | BoundaryConditionsFormDataManager - | MLSettingsDataManager - | MLTrainTestSplitDataManager - | IonDynamicsContextProvider - | CollinearMagnetizationDataManager - | NonCollinearMagnetizationDataManager - | QEPWXInputDataManager - | QENEBInputDataManager - | VASPInputDataManager - | VASPNEBInputDataManager - | NWChemInputDataManager - | PlanewaveCutoffDataManager - | KGridFormDataManager - | QGridFormDataManager - | IGridFormDataManager - | QPathFormDataManager - | IPathFormDataManager - | KPathFormDataManager - | ExplicitKPathFormDataManager - | ExplicitKPath2PIBAFormDataManager - | HubbardJContextManager - | HubbardUContextManager - | HubbardVContextManager - | HubbardContextManagerLegacy - | NEBFormDataManager; - -export type ExecutionUnitInputContext = (AnyContextItem & { name: ContextProviderNameEnum })[]; - -type ExternalContext = { - application: Application; - material: OrderedMaterial; - materials: OrderedMaterial[]; - workflow: WorkflowSchema; - job: JobSchema; - isUsingJinjaVariables?: boolean; - materialsSet: { _id: string }; -}; - export default class ExecutionUnitInput extends (InMemoryEntity as Base) implements Schema { - declare _json: Schema & AnyObject; + declare _json: JSON; - declare toJSON: () => Schema & AnyObject; + declare toJSON: () => JSON; - declare toJSONQuick: () => Schema & AnyObject; + declare toJSONQuick: () => JSON; static get jsonSchema() { return JSONSchemasInterface.getSchemaById("workflow/unit/input/-inputItem"); } - contextProvidersInstances: AnyContextProvider[] = []; - - readonly templateInstance: Template; - static createFromTemplate(template: Template | TemplateSchema) { return new ExecutionUnitInput({ template, @@ -233,186 +37,17 @@ export default class ExecutionUnitInput extends (InMemoryEntity as Base) impleme const templateInstance = template instanceof Template ? template : new Template(template); super({ ...config, template: templateInstance.toJSON() }); - - this.templateInstance = templateInstance; } - setContext(context: ExecutionUnitInputContext, externalContext: ExternalContext) { - this.contextProvidersInstances = this.template.contextProviders.map(({ name }) => { - const contextItem = context.find((c) => c.name === name); - - if (name === "PlanewaveCutoffDataManager") { - return new PlanewaveCutoffDataManager( - contextItem as PlanewaveCutoffDataManagerContextItem, - externalContext, - ); - } - if (name === "KGridFormDataManager") { - return new KGridFormDataManager( - contextItem as PointsGridFormDataManagerContextItem, - externalContext, - ); - } - if (name === "QGridFormDataManager") { - return new QGridFormDataManager( - contextItem as PointsGridFormDataManagerContextItem, - externalContext, - ); - } - if (name === "IGridFormDataManager") { - return new IGridFormDataManager( - contextItem as PointsGridFormDataManagerContextItem, - externalContext, - ); - } - if (name === "QPathFormDataManager") { - return new QPathFormDataManager( - contextItem as QPathFormDataManagerContextItem, - externalContext, - ); - } - if (name === "IPathFormDataManager") { - return new IPathFormDataManager( - contextItem as IPathFormDataManagerContextItem, - externalContext, - ); - } - if (name === "KPathFormDataManager") { - return new KPathFormDataManager( - contextItem as KPathFormDataManagerContextItem, - externalContext, - ); - } - if (name === "ExplicitKPathFormDataManager") { - return new ExplicitKPathFormDataManager( - contextItem as ExplicitKPathFormDataManagerContextItem, - externalContext, - ); - } - if (name === "ExplicitKPath2PIBAFormDataManager") { - return new ExplicitKPath2PIBAFormDataManager( - contextItem as ExplicitKPath2PIBAFormDataManagerContextItem, - externalContext, - ); - } - if (name === "HubbardJContextManager") { - return new HubbardJContextManager( - contextItem as HubbardJContextManagerContextItem, - externalContext, - ); - } - if (name === "HubbardUContextManager") { - return new HubbardUContextManager( - contextItem as HubbardUContextManagerContextItem, - externalContext, - ); - } - if (name === "HubbardVContextManager") { - return new HubbardVContextManager( - contextItem as HubbardVContextManagerContextItem, - externalContext, - ); - } - if (name === "HubbardContextManagerLegacy") { - return new HubbardContextManagerLegacy( - contextItem as HubbardContextManagerLegacyContextItem, - externalContext, - ); - } - if (name === "NEBFormDataManager") { - return new NEBFormDataManager( - contextItem as NEBFormDataManagerContextItem, - externalContext, - ); - } - if (name === "BoundaryConditionsFormDataManager") { - return new BoundaryConditionsFormDataManager( - contextItem as BoundaryConditionsFormDataManagerContextItem, - externalContext, - ); - } - if (name === "MLSettingsDataManager") { - return new MLSettingsDataManager( - contextItem as MLSettingsDataManagerContextItem, - externalContext, - ); - } - if (name === "MLTrainTestSplitDataManager") { - return new MLTrainTestSplitDataManager( - contextItem as MLTrainTestSplitDataManagerContextItem, - externalContext, - ); - } - if (name === "IonDynamicsContextProvider") { - return new IonDynamicsContextProvider( - contextItem as IonDynamicsContextProviderContextItem, - externalContext, - ); - } - if (name === "CollinearMagnetizationDataManager") { - return new CollinearMagnetizationDataManager( - contextItem as CollinearMagnetizationDataManagerContextItem, - externalContext, - ); - } - if (name === "NonCollinearMagnetizationDataManager") { - return new NonCollinearMagnetizationDataManager( - contextItem as NonCollinearMagnetizationDataManagerContextItem, - externalContext, - ); - } - if (name === "QEPWXInputDataManager") { - return new QEPWXInputDataManager( - contextItem as QEPWXInputDataManagerContextItem, - externalContext, - ); - } - if (name === "QENEBInputDataManager") { - return new QENEBInputDataManager( - contextItem as QENEBInputDataManagerContextItem, - externalContext, - ); - } - if (name === "VASPInputDataManager") { - return new VASPInputDataManager( - contextItem as VASPInputDataManagerContextItem, - externalContext, - ); - } - if (name === "VASPNEBInputDataManager") { - return new VASPNEBInputDataManager( - contextItem as VASPNEBInputDataManagerContextItem, - externalContext, - ); - } - if (name === "NWChemInputDataManager") { - return new NWChemInputDataManager( - contextItem as NWChemInputDataManagerContextItem, - externalContext, - ); - } - throw new Error(`Unknown provider: ${name}`); - }); - - return this; - } - - render() { + render(renderingContext: Record) { if (this.isManuallyChanged) { return this; } - const fullContext = this.getFullContext(); - const rendered = nunjucks.compile(this.template.content).render(fullContext); + const rendered = nunjucks.compile(this.template.content).render(renderingContext); this.rendered = rendered || this.template.content; return this; } - - getFullContext() { - return this.contextProvidersInstances.map((contextProvider) => { - return contextProvider.getContextItemData(); - }); - } } diff --git a/src/js/context/mixins/MaterialContextMixin.ts b/src/js/context/mixins/MaterialContextMixin.ts index 6346e1db..d0930bd6 100644 --- a/src/js/context/mixins/MaterialContextMixin.ts +++ b/src/js/context/mixins/MaterialContextMixin.ts @@ -9,7 +9,7 @@ export type MaterialContextMixin = { readonly isMaterialCreatedDefault: boolean; readonly isMaterialUpdated: boolean; material: OrderedMaterial; - extraData?: { materialHash: string }; + extraData: { materialHash: string }; initMaterialContextMixin(externalContext: MaterialExternalContext): void; updateMaterialHash(): void; }; diff --git a/src/js/context/providers/BoundaryConditionsFormDataManager.ts b/src/js/context/providers/BoundaryConditionsFormDataManager.ts index c69149af..192e20a8 100644 --- a/src/js/context/providers/BoundaryConditionsFormDataManager.ts +++ b/src/js/context/providers/BoundaryConditionsFormDataManager.ts @@ -1,21 +1,18 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { BoundaryConditionsDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { BoundaryConditionsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../mixins/MaterialContextMixin"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "boundaryConditions"; -type Data = BoundaryConditionsDataProviderSchema; -export type BoundaryConditionsFormDataManagerContextItem = ContextItem; -export type BoundaryConditionsFormDataManagerExternalContext = JinjaExternalContext & - MaterialExternalContext; -type ExternalContext = BoundaryConditionsFormDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & +type Schema = BoundaryConditionsContextItemSchema; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; + +type Base = typeof JSONSchemaDataProvider & Constructor; const jsonSchemaId = "context-providers-directory/boundary-conditions-data-provider"; @@ -25,21 +22,29 @@ export default class BoundaryConditionsFormDataManager extends (JSONSchemaDataPr readonly domain = "important" as const; - readonly humanName = "Boundary Conditions"; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "boundaryConditions"); + + return new BoundaryConditionsFormDataManager(contextItem, externalContext); + } + + readonly humanName = "Boundary Conditions" as const; readonly uiSchema = { type: { "ui:disabled": true }, offset: { "ui:disabled": true }, electricField: {}, targetFermiEnergy: {}, - }; + } as const; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); } - getDefaultData(): Data { + getDefaultData(): Schema["data"] { return { type: this.material?.metadata?.boundaryConditions?.type || "pbc", offset: this.material?.metadata?.boundaryConditions?.offset || 0, diff --git a/src/js/context/providers/CollinearMagnetizationDataManager.ts b/src/js/context/providers/CollinearMagnetizationDataManager.ts index d49c1ca4..4ad40127 100644 --- a/src/js/context/providers/CollinearMagnetizationDataManager.ts +++ b/src/js/context/providers/CollinearMagnetizationDataManager.ts @@ -1,24 +1,30 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { CollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + CollinearMagnetizationContextItemSchema, + CollinearMagnetizationContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../mixins/MaterialContextMixin"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "collinearMagnetization"; type Data = CollinearMagnetizationContextProviderSchema; -export type CollinearMagnetizationDataManagerContextItem = ContextItem; -export type CollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & - MaterialExternalContext; -type ExternalContext = CollinearMagnetizationDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & +type Schema = CollinearMagnetizationContextItemSchema; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; +const defaultData = { + value: 0.0, + isTotalMagnetization: false, + totalMagnetization: 0.0, +}; + const jsonSchemaId = "context-providers-directory/collinear-magnetization-context-provider"; export default class CollinearMagnetizationDataManager extends (JSONSchemaDataProvider as Base) { @@ -26,6 +32,14 @@ export default class CollinearMagnetizationDataManager extends (JSONSchemaDataPr readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "collinearMagnetization"); + + return new CollinearMagnetizationDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; private readonly isTotalMagnetization: boolean; @@ -34,7 +48,7 @@ export default class CollinearMagnetizationDataManager extends (JSONSchemaDataPr private readonly uniqueElementsWithLabels: string[]; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); @@ -56,13 +70,13 @@ export default class CollinearMagnetizationDataManager extends (JSONSchemaDataPr default: this.firstElement, }, "properties.startingMagnetization.items.properties.value": { - default: 0.0, + default: defaultData.value, }, "properties.isTotalMagnetization": { - default: false, + default: defaultData.isTotalMagnetization, }, "properties.totalMagnetization": { - default: 0.0, + default: defaultData.totalMagnetization, }, }); } @@ -73,11 +87,11 @@ export default class CollinearMagnetizationDataManager extends (JSONSchemaDataPr { index: 1, atomicSpecies: this.firstElement, - value: 0.0, + value: defaultData.value, }, ], - isTotalMagnetization: false, - totalMagnetization: 0.0, + isTotalMagnetization: defaultData.isTotalMagnetization, + totalMagnetization: defaultData.totalMagnetization, }; } diff --git a/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts b/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts index eaf996a1..df2ed707 100644 --- a/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts +++ b/src/js/context/providers/Hubbard/HubbardContextManagerLegacy.ts @@ -1,13 +1,15 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { HubbardLegacyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + HubbardLegacyContextItemSchema, + HubbardLegacyContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_legacy"; +type Schema = HubbardLegacyContextItemSchema; type Data = HubbardLegacyContextProviderSchema; -export type HubbardContextManagerLegacyContextItem = ContextItem; const defaultHubbardConfig = { hubbardUValue: 1.0, @@ -15,11 +17,22 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-legacy-context-provider"; -export default class HubbardContextManagerLegacy extends HubbardContextProvider { +export default class HubbardContextManagerLegacy extends HubbardContextProvider { readonly name = "hubbard_legacy" as const; readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: HubbardExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "hubbard_legacy"); + + return new HubbardContextManagerLegacy(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchemaStyled = { @@ -33,7 +46,7 @@ export default class HubbardContextManagerLegacy extends HubbardContextProvider< }, } as const; - constructor(contextItem: ContextItem, externalContext: HubbardExternalContext) { + constructor(contextItem: Partial, externalContext: HubbardExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/Hubbard/HubbardContextProvider.ts b/src/js/context/providers/Hubbard/HubbardContextProvider.ts index 0ade044d..70ac8ea8 100644 --- a/src/js/context/providers/Hubbard/HubbardContextProvider.ts +++ b/src/js/context/providers/Hubbard/HubbardContextProvider.ts @@ -1,30 +1,40 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { + HubbardJContextItemSchema, + HubbardLegacyContextItemSchema, + HubbardUContextItemSchema, + HubbardVContextItemSchema, +} from "@mat3ra/esse/dist/js/types"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; -type HubbardName = "hubbard_u" | "hubbard_j" | "hubbard_v" | "hubbard_legacy"; +type Schema = + | HubbardJContextItemSchema + | HubbardUContextItemSchema + | HubbardVContextItemSchema + | HubbardLegacyContextItemSchema; export type HubbardExternalContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor; export default abstract class HubbardContextProvider< - N extends HubbardName, - D extends object, + S extends Schema, EC extends HubbardExternalContext = HubbardExternalContext, > extends (JSONSchemaDataProvider as Base) { - abstract readonly name: N; + abstract readonly name: S["name"]; - abstract getDefaultData(): D; + abstract getDefaultData(): S["data"]; readonly domain = "important" as const; + readonly entityName = "unit" as const; + protected readonly uniqueElementsWithLabels: string[]; protected readonly firstElement: string; @@ -52,7 +62,7 @@ export default abstract class HubbardContextProvider< "7d", ]; - constructor(contextItem: ContextItem, externalContext: EC) { + constructor(contextItem: Partial, externalContext: EC) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); diff --git a/src/js/context/providers/Hubbard/HubbardJContextManager.ts b/src/js/context/providers/Hubbard/HubbardJContextManager.ts index 6c07f843..91b74fb6 100644 --- a/src/js/context/providers/Hubbard/HubbardJContextManager.ts +++ b/src/js/context/providers/Hubbard/HubbardJContextManager.ts @@ -1,15 +1,16 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { HubbardJContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + HubbardJContextItemSchema, + HubbardJContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_j"; +type Schema = HubbardJContextItemSchema; type Data = HubbardJContextProviderSchema; -export type HubbardJContextManagerContextItem = ContextItem; - const defaultHubbardConfig = { paramType: "J" as const, atomicSpecies: "", @@ -19,9 +20,20 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-j-context-provider"; -export default class HubbardJContextManager extends HubbardContextProvider { +export default class HubbardJContextManager extends HubbardContextProvider { readonly name = "hubbard_j" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: HubbardExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "hubbard_j"); + + return new HubbardJContextManager(contextItem, externalContext); + } + readonly uiSchemaStyled = { "ui:options": { addable: true, @@ -32,7 +44,7 @@ export default class HubbardJContextManager extends HubbardContextProvider, externalContext: HubbardExternalContext) { + constructor(contextItem: Partial, externalContext: HubbardExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/Hubbard/HubbardUContextManager.ts b/src/js/context/providers/Hubbard/HubbardUContextManager.ts index 7457b74b..8a7099f9 100644 --- a/src/js/context/providers/Hubbard/HubbardUContextManager.ts +++ b/src/js/context/providers/Hubbard/HubbardUContextManager.ts @@ -1,14 +1,16 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { HubbardUContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + HubbardUContextItemSchema, + HubbardUContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import materialContextMixin from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_u"; +type Schema = HubbardUContextItemSchema; type Data = HubbardUContextProviderSchema; -export type HubbardUContextManagerContextItem = ContextItem; const defaultHubbardConfig = { atomicSpecies: "", @@ -18,9 +20,20 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-u-context-provider"; -export default class HubbardUContextManager extends HubbardContextProvider { +export default class HubbardUContextManager extends HubbardContextProvider { readonly name = "hubbard_u" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: HubbardExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "hubbard_u"); + + return new HubbardUContextManager(contextItem, externalContext); + } + readonly uiSchemaStyled = { "ui:options": { addable: true, @@ -31,7 +44,7 @@ export default class HubbardUContextManager extends HubbardContextProvider, externalContext: HubbardExternalContext) { + constructor(contextItem: Partial, externalContext: HubbardExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/Hubbard/HubbardVContextManager.ts b/src/js/context/providers/Hubbard/HubbardVContextManager.ts index bd904335..b7e9a39e 100644 --- a/src/js/context/providers/Hubbard/HubbardVContextManager.ts +++ b/src/js/context/providers/Hubbard/HubbardVContextManager.ts @@ -1,13 +1,15 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { HubbardVContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + HubbardVContextItemSchema, + HubbardVContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; +import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_v"; +type Schema = HubbardVContextItemSchema; type Data = HubbardVContextProviderSchema; -export type HubbardVContextManagerContextItem = ContextItem; const defaultHubbardConfig = { atomicSpecies: "", @@ -21,9 +23,20 @@ const defaultHubbardConfig = { const jsonSchemaId = "context-providers-directory/hubbard-v-context-provider"; -export default class HubbardVContextManager extends HubbardContextProvider { +export default class HubbardVContextManager extends HubbardContextProvider { readonly name = "hubbard_v" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: HubbardExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "hubbard_v"); + + return new HubbardVContextManager(contextItem, externalContext); + } + readonly uiSchemaStyled = { "ui:options": { addable: true, @@ -34,7 +47,7 @@ export default class HubbardVContextManager extends HubbardContextProvider, externalContext: HubbardExternalContext) { + constructor(contextItem: Partial, externalContext: HubbardExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/IonDynamicsContextProvider.ts b/src/js/context/providers/IonDynamicsDataManager.ts similarity index 63% rename from src/js/context/providers/IonDynamicsContextProvider.ts rename to src/js/context/providers/IonDynamicsDataManager.ts index d075dc98..e9231ae7 100644 --- a/src/js/context/providers/IonDynamicsContextProvider.ts +++ b/src/js/context/providers/IonDynamicsDataManager.ts @@ -1,14 +1,11 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { IonDynamicsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { DynamicsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, ExternalContext } from "./base/ContextProvider"; +import type { ExternalContext, UnitContext } from "./base/ContextProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; -type Data = IonDynamicsContextProviderSchema; -type Name = "dynamics"; -export type IonDynamicsContextProviderContextItem = ContextItem; -export type IonDynamicsContextProviderExternalContext = ExternalContext; +type Schema = DynamicsContextItemSchema; const jsonSchemaId = "context-providers-directory/ion-dynamics-context-provider"; @@ -19,21 +16,31 @@ const defaultData = { temperature: 300.0, }; -export default class IonDynamicsContextProvider extends JSONSchemaFormDataProvider { +export default class IonDynamicsDataManager extends JSONSchemaFormDataProvider { readonly name = "dynamics" as const; readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "dynamics"); + + return new IonDynamicsDataManager(contextItem, externalContext); + } + readonly uiSchema = { numberOfSteps: {}, timeStep: {}, electronMass: {}, temperature: {}, - }; + } as const; + + readonly extraData = {}; readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/MLSettingsDataManager.ts b/src/js/context/providers/MLSettingsDataManager.ts index 8fc9d927..ca83397b 100644 --- a/src/js/context/providers/MLSettingsDataManager.ts +++ b/src/js/context/providers/MLSettingsDataManager.ts @@ -1,6 +1,6 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { MLSettingsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { MlSettingsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { @@ -8,18 +8,12 @@ import { type ApplicationExternalContext, applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import { type ContextItem } from "./base/ContextProvider"; +import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "mlSettings"; -type Data = MLSettingsContextProviderSchema; - -export type MLSettingsDataManagerContextItem = ContextItem; -export type MLSettingsDataManagerExternalContext = JinjaExternalContext & - ApplicationExternalContext; - -type ExternalContext = MLSettingsDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & +type Schema = MlSettingsContextItemSchema; +type ExternalContext = JinjaExternalContext & ApplicationExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; const jsonSchemaId = "context-providers-directory/ml-settings-context-provider"; @@ -34,14 +28,24 @@ export default class MLSettingsDataManager extends (JSONSchemaDataProvider as Ba readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "mlSettings"); + + return new MLSettingsDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchema = { target_column_name: {}, problem_category: {}, - }; + } as const; + + readonly extraData = {}; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initApplicationContextMixin(externalContext); diff --git a/src/js/context/providers/MLTrainTestSplitDataManager.ts b/src/js/context/providers/MLTrainTestSplitDataManager.ts index 6339f710..06252afd 100644 --- a/src/js/context/providers/MLTrainTestSplitDataManager.ts +++ b/src/js/context/providers/MLTrainTestSplitDataManager.ts @@ -1,6 +1,6 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { MLTrainTestSplitContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { MlTrainTestSplitContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { @@ -8,18 +8,13 @@ import { type ApplicationExternalContext, applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import { type ContextItem } from "./base/ContextProvider"; +import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "mlTrainTestSplit"; -type Data = MLTrainTestSplitContextProviderSchema; - -export type MLTrainTestSplitDataManagerContextItem = ContextItem; -export type MLTrainTestSplitDataManagerExternalContext = JinjaExternalContext & - ApplicationExternalContext; - -type ExternalContext = MLTrainTestSplitDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = MlTrainTestSplitContextItemSchema; +type ExternalContext = JinjaExternalContext & ApplicationExternalContext; +type Base = typeof JSONSchemaDataProvider & + Constructor; const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; @@ -32,14 +27,24 @@ export default class MLTrainTestSplitDataManager extends (JSONSchemaDataProvider readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "mlTrainTestSplit"); + + return new MLTrainTestSplitDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; readonly uiSchema = { target_column_name: {}, problem_category: {}, - }; + } as const; + + readonly extraData = {}; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initApplicationContextMixin(externalContext); diff --git a/src/js/context/providers/NEBFormDataManager.ts b/src/js/context/providers/NEBFormDataManager.ts index b1f13d46..5403215c 100644 --- a/src/js/context/providers/NEBFormDataManager.ts +++ b/src/js/context/providers/NEBFormDataManager.ts @@ -1,16 +1,13 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { NEBDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { NebContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; -type Name = "neb"; -type Data = NEBDataProviderSchema; -export type NEBFormDataManagerContextItem = ContextItem; -export type NEBFormDataManagerExternalContext = JinjaExternalContext; -type ExternalContext = NEBFormDataManagerExternalContext; +type Schema = NebContextItemSchema; +type ExternalContext = JinjaExternalContext; const jsonSchemaId = "context-providers-directory/neb-data-provider"; @@ -18,18 +15,28 @@ const defaultData = { nImages: 1, }; -export default class NEBFormDataManager extends JSONSchemaFormDataProvider { +export default class NEBFormDataManager extends JSONSchemaFormDataProvider { readonly name = "neb" as const; readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "neb"); + + return new NEBFormDataManager(contextItem, externalContext); + } + readonly uiSchema = { nImages: {}, - }; + } as const; readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + readonly extraData = {}; + + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/NonCollinearMagnetizationDataManager.ts b/src/js/context/providers/NonCollinearMagnetizationDataManager.ts index 60de8f22..0e7c7a94 100644 --- a/src/js/context/providers/NonCollinearMagnetizationDataManager.ts +++ b/src/js/context/providers/NonCollinearMagnetizationDataManager.ts @@ -1,22 +1,41 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { NonCollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + NonCollinearMagnetizationContextItemSchema, + NonCollinearMagnetizationContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../mixins/MaterialContextMixin"; -import type { ContextItem } from "./base/ContextProvider"; +import type { UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "nonCollinearMagnetization"; type Data = NonCollinearMagnetizationContextProviderSchema; -export type NonCollinearMagnetizationDataManagerContextItem = ContextItem; -export type NonCollinearMagnetizationDataManagerExternalContext = JinjaExternalContext & - MaterialExternalContext; -type ExternalContext = NonCollinearMagnetizationDataManagerExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type Schema = NonCollinearMagnetizationContextItemSchema; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & + Constructor; + +const defaultData = { + isExistingChargeDensity: false, + isStartingMagnetization: true, + isConstrainedMagnetization: false, + isArbitrarySpinAngle: false, + isArbitrarySpinDirection: false, + isFixedMagnetization: false, + lforcet: true, + value: 0.0, + angle1: 0.0, + angle2: 0.0, + constrainType: "atomic direction" as const, + lambda: 0.0, + fixedMagnetizationX: 0.0, + fixedMagnetizationY: 0.0, + fixedMagnetizationZ: 0.0, +}; const jsonSchemaId = "context-providers-directory/non-collinear-magnetization-context-provider"; @@ -25,6 +44,14 @@ export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDat readonly domain = "important" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "nonCollinearMagnetization"); + + return new NonCollinearMagnetizationDataManager(contextItem, externalContext); + } + readonly isStartingMagnetization: boolean; readonly isConstrainedMagnetization: boolean; @@ -41,7 +68,7 @@ export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDat private readonly uniqueElementsWithLabels: string[]; - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); @@ -59,17 +86,17 @@ export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDat ]; this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { - isExistingChargeDensity: { default: false }, - isStartingMagnetization: { default: true }, - isArbitrarySpinAngle: { default: false }, - isConstrainedMagnetization: { default: false }, - isFixedMagnetization: { default: true }, + isExistingChargeDensity: { default: defaultData.isExistingChargeDensity }, + isStartingMagnetization: { default: defaultData.isStartingMagnetization }, + isArbitrarySpinAngle: { default: defaultData.isArbitrarySpinAngle }, + isConstrainedMagnetization: { default: defaultData.isConstrainedMagnetization }, + isFixedMagnetization: { default: defaultData.isFixedMagnetization }, startingMagnetization: { minItems: this.uniqueElementsWithLabels.length, maxItems: this.uniqueElementsWithLabels.length, }, "startingMagnetization.items.properties.value": { - default: 0.0, + default: defaultData.value, minimum: -1.0, maximum: 1.0, }, @@ -77,15 +104,15 @@ export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDat minItems: this.uniqueElementsWithLabels.length, maxItems: this.uniqueElementsWithLabels.length, }, - "spinAngles.items.properties.angle1": { default: 0.0 }, - "spinAngles.items.properties.angle2": { default: 0.0 }, + "spinAngles.items.properties.angle1": { default: defaultData.angle1 }, + "spinAngles.items.properties.angle2": { default: defaultData.angle2 }, "constrainedMagnetization.properties.constrainType": { - default: "atomic direction", + default: defaultData.constrainType, }, - "constrainedMagnetization.properties.lambda": { default: 0.0 }, - "fixedMagnetization.properties.x": { default: 0.0 }, - "fixedMagnetization.properties.y": { default: 0.0 }, - "fixedMagnetization.properties.z": { default: 0.0 }, + "constrainedMagnetization.properties.lambda": { default: defaultData.lambda }, + "fixedMagnetization.properties.x": { default: defaultData.fixedMagnetizationX }, + "fixedMagnetization.properties.y": { default: defaultData.fixedMagnetizationY }, + "fixedMagnetization.properties.z": { default: defaultData.fixedMagnetizationZ }, }); } @@ -94,7 +121,7 @@ export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDat return { index: index + 1, atomicSpecies: element, - value: 0.0, + value: defaultData.value, }; }); @@ -102,29 +129,29 @@ export default class NonCollinearMagnetizationDataManager extends (JSONSchemaDat return { index: index + 1, atomicSpecies: element, - angle1: 0.0, - angle2: 0.0, + angle1: defaultData.angle1, + angle2: defaultData.angle2, }; }); return { - isExistingChargeDensity: false, - isStartingMagnetization: true, - isConstrainedMagnetization: false, - isArbitrarySpinAngle: false, - isArbitrarySpinDirection: false, - isFixedMagnetization: false, - lforcet: true, + isExistingChargeDensity: defaultData.isExistingChargeDensity, + isStartingMagnetization: defaultData.isStartingMagnetization, + isConstrainedMagnetization: defaultData.isConstrainedMagnetization, + isArbitrarySpinAngle: defaultData.isArbitrarySpinAngle, + isArbitrarySpinDirection: defaultData.isArbitrarySpinDirection, + isFixedMagnetization: defaultData.isFixedMagnetization, + lforcet: defaultData.lforcet, spinAngles, startingMagnetization, constrainedMagnetization: { - lambda: 0.0, - constrainType: "atomic direction", + lambda: defaultData.lambda, + constrainType: defaultData.constrainType, }, fixedMagnetization: { - x: 0.0, - y: 0.0, - z: 0.0, + x: defaultData.fixedMagnetizationX, + y: defaultData.fixedMagnetizationY, + z: defaultData.fixedMagnetizationZ, }, }; } diff --git a/src/js/context/providers/PlanewaveCutoffDataManager.ts b/src/js/context/providers/PlanewaveCutoffDataManager.ts index 0069788d..6dc12c75 100644 --- a/src/js/context/providers/PlanewaveCutoffDataManager.ts +++ b/src/js/context/providers/PlanewaveCutoffDataManager.ts @@ -1,6 +1,6 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { PlanewaveCutoffsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { CutoffsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { @@ -8,17 +8,18 @@ import { type ApplicationExternalContext, applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import ContextProvider, { type ContextItem, type ExternalContext } from "./base/ContextProvider"; +import ContextProvider, { type ExternalContext, type UnitContext } from "./base/ContextProvider"; type ApplicationName = "vasp" | "espresso"; -type Name = "cutoffs"; -type Data = PlanewaveCutoffsContextProviderSchema; +type Schema = CutoffsContextItemSchema; type PlanewaveExternalContext = ExternalContext & ApplicationExternalContext; -type Base = typeof ContextProvider & Constructor; +type Base = typeof ContextProvider & Constructor; -export type PlanewaveCutoffDataManagerContextItem = ContextItem; -export type PlanewaveCutoffDataManagerExternalContext = PlanewaveExternalContext; +// Type guard to check if a string is a valid ApplicationName +function isApplicationName(name: string): name is ApplicationName { + return name === "vasp" || name === "espresso"; +} // TODO: create a task to move this handling to standata const cutoffConfig: Record = { @@ -26,6 +27,11 @@ const cutoffConfig: Record, externalContext: PlanewaveExternalContext) { + readonly extraData = {}; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: PlanewaveExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "cutoffs"); + + return new PlanewaveCutoffDataManager(contextItem, externalContext); + } + + constructor(contextItem: Partial = {}, externalContext: PlanewaveExternalContext = {}) { super(contextItem, externalContext); this.initApplicationContextMixin(externalContext); @@ -55,13 +72,26 @@ export default class PlanewaveCutoffDataManager extends (ContextProvider as Base } getDefaultData() { - // TODO-QUESTION: what if the application is not in the cutoffConfig? - const { wavefunction, density } = - cutoffConfig[this.application.name as ApplicationName] || {}; + const applicationName = this.application.name; + + // Type-safe check: ensure application name is valid and exists in config + if (!isApplicationName(applicationName)) { + // Fallback to default values if application is not supported + return defaultData; + } + + const config = cutoffConfig[applicationName]; + + if (!config) { + // Fallback to default values if application is not in cutoffConfig + return defaultData; + } + + const { wavefunction, density } = config; return { - wavefunction, - density, + wavefunction: wavefunction ?? defaultData.wavefunction, + density: density ?? defaultData.density, }; } } diff --git a/src/js/context/providers/PointsGrid/IGridFormDataManager.ts b/src/js/context/providers/PointsGrid/IGridFormDataManager.ts index 8d395c44..73b15403 100644 --- a/src/js/context/providers/PointsGrid/IGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/IGridFormDataManager.ts @@ -1,9 +1,19 @@ -import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; +import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; +import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "igrid"; +type Schema = GridContextItemSchema; export default class IGridFormDataManager extends PointsGridFormDataProvider { readonly name = "igrid" as const; readonly divisor = 0.2 as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "igrid"); + + return new IGridFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts index 3af3f0d6..2dbf25e0 100644 --- a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts @@ -1,9 +1,32 @@ -import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; +import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import ConvergenceParameter from "../../../subworkflows/convergence/ConvergenceParameter"; +import type { UnitContext } from "../base/ContextProvider"; +import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "kgrid"; +type Schema = GridContextItemSchema; export default class KGridFormDataManager extends PointsGridFormDataProvider { readonly name = "kgrid" as const; readonly divisor = 1 as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "kgrid"); + + return new KGridFormDataManager(contextItem, externalContext); + } + + applyCovergenceParameter(parameter: ConvergenceParameter) { + const unitContext = parameter.unitContext.data; + const data = this.getData(); + + this.setData({ + ...data, + ...unitContext, + }); + + this.setIsEdited(true); + } } diff --git a/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts b/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts index d59cc1a5..4f5f0b49 100644 --- a/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts +++ b/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts @@ -2,7 +2,11 @@ import { Units } from "@mat3ra/code/dist/js/constants"; import { math as codeJSMath } from "@mat3ra/code/dist/js/math"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { PointsGridDataProviderSchema, Vector3DSchema } from "@mat3ra/esse/dist/js/types"; +import type { + GridContextItemSchema, + PointsGridDataProviderSchema, + Vector3DSchema, +} from "@mat3ra/esse/dist/js/types"; import { type ReciprocalLattice, Made } from "@mat3ra/made"; import type { JSONSchema7 } from "json-schema"; import lodash from "lodash"; @@ -11,23 +15,18 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; import type { JinjaExternalContext } from "../base/JSONSchemaDataProvider"; import JSONSchemaFormDataProvider from "../base/JSONSchemaFormDataProvider"; import { globalSettings } from "../settings"; -type Name = "qgrid" | "kgrid" | "igrid"; +type Schema = GridContextItemSchema; type Data = PointsGridDataProviderSchema; -type EContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaFormDataProvider & +export type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaFormDataProvider & Constructor; type GridMetricType = Data["gridMetricType"]; -export type PointsGridFormDataManagerContextItem = ContextItem; -export type PointsGridFormDataManagerExternalContext = EContext; - -// Helper function to create vector schema with defaults const vector = ( defaultValue: string | number | readonly number[] | readonly string[], isStringType = false, @@ -51,19 +50,21 @@ const defaultShift = 0; const defaultShifts: Vector3DSchema = [defaultShift, defaultShift, defaultShift]; export default abstract class PointsGridFormDataProvider< - N extends Name, + N extends Schema["name"], > extends (JSONSchemaFormDataProvider as Base) { abstract readonly name: N; readonly domain = "important" as const; - public dimensions!: Vector3DSchema; + readonly entityName = "unit" as const; + + public dimensions!: Data["dimensions"]; - public shifts!: Vector3DSchema; + public shifts!: Data["shifts"]; private reciprocalLattice!: ReciprocalLattice; - private gridMetricType!: GridMetricType; + private gridMetricType!: Data["gridMetricType"]; private gridMetricValue!: number; @@ -82,7 +83,7 @@ export default abstract class PointsGridFormDataProvider< readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: EContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); this.initInstanceFields(); @@ -106,11 +107,11 @@ export default abstract class PointsGridFormDataProvider< this.gridMetricValue = this.data?.gridMetricValue || this.defaultMetric.value; this.preferGridMetric = this.data?.preferGridMetric || false; - this.reciprocalLattice = new Made.ReciprocalLattice(this.material?.lattice); - this.defaultDimensions = this.calculateDimensions({ - gridMetricType: this.defaultMetric.type, - gridMetricValue: this.defaultMetric.value, - }); + this.reciprocalLattice = new Made.ReciprocalLattice(this.material.lattice); + this.defaultDimensions = this.calculateDimensions( + this.defaultMetric.type, + this.defaultMetric.value, + ); this.dimensions = this.data?.dimensions || this.defaultDimensions; this.reciprocalVectorRatios = this.reciprocalLattice.reciprocalVectorRatios.map((r) => Number(codeJSMath.numberToPrecision(r, 3)), @@ -144,7 +145,7 @@ export default abstract class PointsGridFormDataProvider< // if `data` is present and material is updated, prioritize `data` when `preferGridMetric` is not set return this.preferGridMetric ? { - dimensions: this.calculateDimensions({ gridMetricType, gridMetricValue }), + dimensions: this.calculateDimensions(gridMetricType, gridMetricValue), shifts: defaultShifts, gridMetricType, gridMetricValue, @@ -228,7 +229,7 @@ export default abstract class PointsGridFormDataProvider< "ui:emptyValue": emptyValue, "ui:label": false, }, - }; + } as const; }; return { @@ -258,11 +259,11 @@ export default abstract class PointsGridFormDataProvider< }; } - private calculateDimensions({ - gridMetricType, - gridMetricValue, - }: // units = Units.angstrom, - Pick): Vector3DSchema { + private calculateDimensions( + gridMetricType: GridMetricType, + gridMetricValue: number, + // units = Units.angstrom, + ): Vector3DSchema { switch (gridMetricType) { case "KPPRA": { const nAtoms = this.material ? this.material.Basis.nAtoms : 1; @@ -280,11 +281,11 @@ export default abstract class PointsGridFormDataProvider< } } - private calculateGridMetric({ - gridMetricType, - dimensions, - }: // units = Units.angstrom, - Pick) { + private calculateGridMetric( + gridMetricType: GridMetricType, + dimensions: Vector3DSchema, + // units = Units.angstrom, + ) { switch (gridMetricType) { case "KPPRA": { const nAtoms = this.material ? this.material.Basis.nAtoms : 1; @@ -301,26 +302,27 @@ export default abstract class PointsGridFormDataProvider< } setData(data?: Data) { - const canTransform = - (data?.preferGridMetric && data?.gridMetricType && data?.gridMetricValue) || - (!data?.preferGridMetric && data?.dimensions?.every((d) => typeof d === "number")); - - if (!data || !canTransform) { - return super.setData(data); + if (!data) { + return; } - // dimensions are calculated from grid metric or vice versa - if (data.preferGridMetric) { + const { dimensions, gridMetricType, preferGridMetric, gridMetricValue } = data; + + if (preferGridMetric && gridMetricType && gridMetricValue) { return super.setData({ ...data, - dimensions: this.calculateDimensions(data), + dimensions: this.calculateDimensions(gridMetricType, gridMetricValue), + }); + } + + if (!preferGridMetric && dimensions.every((d) => typeof d === "number")) { + super.setData({ + ...data, + gridMetricValue: this.calculateGridMetric(gridMetricType, dimensions), }); } - super.setData({ - ...data, - gridMetricValue: this.calculateGridMetric(data), - }); + return super.setData(data); } } diff --git a/src/js/context/providers/PointsGrid/QGridFormDataManager.ts b/src/js/context/providers/PointsGrid/QGridFormDataManager.ts index 365eda50..bb224a0b 100644 --- a/src/js/context/providers/PointsGrid/QGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/QGridFormDataManager.ts @@ -1,9 +1,19 @@ -import PointsGridFormDataProvider from "./PointsGridFormDataProvider"; +import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; +import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "qgrid"; +type Schema = GridContextItemSchema; export default class QGridFormDataManager extends PointsGridFormDataProvider { readonly name = "qgrid" as const; readonly divisor = 5 as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "qgrid"); + + return new QGridFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts b/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts index 1d8257aa..dfb8cf9e 100644 --- a/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts +++ b/src/js/context/providers/PointsPath/ExplicitKPath2PIBAFormDataManager.ts @@ -1,15 +1,12 @@ -import type { ContextItem } from "../base/ContextProvider"; +import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; import PointsPathFormDataProvider, { - type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext, } from "./PointsPathFormDataProvider"; type Name = "explicitKPath2PIBA"; - -export type ExplicitKPath2PIBAFormDataManagerContextItem = - ContextItem; -export type ExplicitKPath2PIBAFormDataManagerExternalContext = - PointsPathFormDataProviderExternalContext; +type Schema = PathContextItemSchema; export default class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDataProvider { readonly name = "explicitKPath2PIBA" as const; @@ -17,4 +14,13 @@ export default class ExplicitKPath2PIBAFormDataManager extends PointsPathFormDat readonly is2PIBA = true; readonly useExplicitPath = true; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: PointsPathFormDataProviderExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "explicitKPath2PIBA"); + + return new ExplicitKPath2PIBAFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts b/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts index e7194557..1a037e50 100644 --- a/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/ExplicitKPathFormDataManager.ts @@ -1,16 +1,24 @@ -import type { ContextItem } from "../base/ContextProvider"; +import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; import PointsPathFormDataProvider, { - type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext, } from "./PointsPathFormDataProvider"; type Name = "explicitKPath"; - -export type ExplicitKPathFormDataManagerContextItem = ContextItem; -export type ExplicitKPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; +type Schema = PathContextItemSchema; export default class ExplicitKPathFormDataManager extends PointsPathFormDataProvider { readonly name = "explicitKPath" as const; readonly useExplicitPath = true; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: PointsPathFormDataProviderExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "explicitKPath"); + + return new ExplicitKPathFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/PointsPath/IPathFormDataManager.ts b/src/js/context/providers/PointsPath/IPathFormDataManager.ts index cc743020..cabdff33 100644 --- a/src/js/context/providers/PointsPath/IPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/IPathFormDataManager.ts @@ -1,14 +1,22 @@ -import type { ContextItem } from "../base/ContextProvider"; +import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; import PointsPathFormDataProvider, { - type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext, } from "./PointsPathFormDataProvider"; type Name = "ipath"; - -export type IPathFormDataManagerContextItem = ContextItem; -export type IPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; +type Schema = PathContextItemSchema; export default class IPathFormDataManager extends PointsPathFormDataProvider { readonly name = "ipath" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: PointsPathFormDataProviderExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "ipath"); + + return new IPathFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/PointsPath/KPathFormDataManager.ts b/src/js/context/providers/PointsPath/KPathFormDataManager.ts index f64048f0..108a953d 100644 --- a/src/js/context/providers/PointsPath/KPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/KPathFormDataManager.ts @@ -1,14 +1,22 @@ -import type { ContextItem } from "../base/ContextProvider"; +import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; import PointsPathFormDataProvider, { - type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext, } from "./PointsPathFormDataProvider"; type Name = "kpath"; - -export type KPathFormDataManagerContextItem = ContextItem; -export type KPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; +type Schema = PathContextItemSchema; export default class KPathFormDataManager extends PointsPathFormDataProvider { readonly name = "kpath" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: PointsPathFormDataProviderExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "kpath"); + + return new KPathFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts b/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts index a00accd0..e1bc0efe 100644 --- a/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts +++ b/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts @@ -1,7 +1,10 @@ import { math as codeJSMath } from "@mat3ra/code/dist/js/math"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { PointsPathDataProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + PathContextItemSchema, + PointsPathDataProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import { type ReciprocalLattice, Made } from "@mat3ra/made"; import s from "underscore.string"; @@ -14,7 +17,6 @@ import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../mixins/MaterialContextMixin"; -import type { ContextItem } from "../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../base/JSONSchemaDataProvider"; const defaultPoint = "Г" as const; @@ -27,15 +29,16 @@ export type PointsPathFormDataProviderExternalContext = JinjaExternalContext & type Data = PointsPathFormDataProviderData; type DataItem = Data[0]; +type Schema = PathContextItemSchema; type ExternalContext = PointsPathFormDataProviderExternalContext; -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; const jsonSchemaId = "context-providers-directory/points-path-data-provider"; abstract class MixinsContextProvider extends (JSONSchemaDataProvider as Base) { - constructor(contextItem: ContextItem, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); this.initApplicationContextMixin(externalContext); @@ -45,18 +48,20 @@ abstract class MixinsContextProvider extends (JSONSchemaDataProvider as Base) { materialContextMixin(MixinsContextProvider.prototype); applicationContextMixin(MixinsContextProvider.prototype); -abstract class PointsPathFormDataProvider extends MixinsContextProvider { +abstract class PointsPathFormDataProvider extends MixinsContextProvider { abstract name: N; readonly domain = "important" as const; + readonly entityName = "unit" as const; + private reciprocalLattice: ReciprocalLattice; readonly useExplicitPath: boolean; readonly is2PIBA: boolean = false; - constructor(config: ContextItem, externalContext: ExternalContext) { + constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.reciprocalLattice = new Made.ReciprocalLattice(this.material.lattice); this.useExplicitPath = this.application.name === "vasp"; diff --git a/src/js/context/providers/PointsPath/QPathFormDataManager.ts b/src/js/context/providers/PointsPath/QPathFormDataManager.ts index e5b04ce8..830834c7 100644 --- a/src/js/context/providers/PointsPath/QPathFormDataManager.ts +++ b/src/js/context/providers/PointsPath/QPathFormDataManager.ts @@ -1,14 +1,22 @@ -import type { ContextItem } from "../base/ContextProvider"; +import type { PathContextItemSchema } from "@mat3ra/esse/dist/js/types"; + +import type { UnitContext } from "../base/ContextProvider"; import PointsPathFormDataProvider, { - type PointsPathFormDataProviderData, type PointsPathFormDataProviderExternalContext, } from "./PointsPathFormDataProvider"; type Name = "qpath"; - -export type QPathFormDataManagerContextItem = ContextItem; -export type QPathFormDataManagerExternalContext = PointsPathFormDataProviderExternalContext; +type Schema = PathContextItemSchema; export default class QPathFormDataManager extends PointsPathFormDataProvider { readonly name = "qpath" as const; + + static createFromUnitContext( + unitContext: UnitContext, + externalContext: PointsPathFormDataProviderExternalContext, + ) { + const contextItem = this.findContextItem(unitContext, "qpath"); + + return new QPathFormDataManager(contextItem, externalContext); + } } diff --git a/src/js/context/providers/base/ContextProvider.ts b/src/js/context/providers/base/ContextProvider.ts index 30f27449..b92aa8c9 100644 --- a/src/js/context/providers/base/ContextProvider.ts +++ b/src/js/context/providers/base/ContextProvider.ts @@ -1,50 +1,20 @@ -/* - * @summary This is a standalone class that contains "data" for a property with "name". Helps facilitate UI logic. - * Can be initialized from context when user edits are present: - * - user edits the corresponding property, eg. "kpath" - * - isKpathEdited is set to `true` - * - context property is updated for the parent entity (eg. Unit) in a way that persists in Redux state - * - new entity inherits the "data" through "context" field in config - * - `extraData` field is used to store any other data that should be passed from one instance of provider - * to next one, for example data about material to track when it is changed. - * @notes Should hold static data only (see `setData` method), no classes or functions - */ -import { ContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import { type ContextItemSchema } from "@mat3ra/esse/dist/js/types"; import { Utils } from "@mat3ra/utils"; -export interface ContextProviderInstance { - constructor: typeof ContextProvider; - config: ContextProviderSchema; -} +export type UnitContext = ContextItemSchema[]; +export type ContextName = ContextItemSchema["name"]; +export type ContextExtraData = ContextItemSchema["extraData"]; +export type ContextData = ContextItemSchema["data"]; -export type ContextProviderConfig< - N extends string = string, - D extends object = object, - ED extends object = object, +export type ContextItem< + D extends ContextData = ContextData, + ED extends ContextExtraData = ContextExtraData, > = { - name: N; - data?: D; - extraData?: ED; - domain?: string; - entityName?: EntityName; - isEdited?: boolean; -}; - -export type ContextItem = { data?: D; extraData?: ED; isEdited?: boolean; }; -export type ExtendedContextItem< - N extends string = string, - D extends object = object, - ED extends object = object, -> = ContextItem & { - name: N; - isEdited: boolean; -}; - export type Domain = "executable" | "important"; export type EntityName = "unit" | "subworkflow"; @@ -52,31 +22,27 @@ export type EntityName = "unit" | "subworkflow"; export type ExternalContext = object; abstract class ContextProvider< - N extends string = string, - D extends object = object, - ED extends object = object, + S extends ContextItemSchema = ContextItemSchema, EC extends ExternalContext = ExternalContext, - // eslint-disable-next-line prettier/prettier -> implements ContextProviderConfig { - abstract name: N; +> { + abstract name: S["name"]; abstract readonly domain: Domain; abstract readonly entityName: EntityName; - protected abstract getDefaultData(): D; + protected abstract getDefaultData(): S["data"]; - data?: D; + protected data?: S["data"]; - readonly extraData?: ED; + abstract extraData: S["extraData"]; readonly externalContext: EC; isEdited: boolean; - constructor(contextItem: ContextItem, externalContext: EC) { + constructor(contextItem: Partial, externalContext: EC) { this.externalContext = externalContext; - this.extraData = contextItem.extraData; this.isEdited = contextItem.isEdited || false; this.setData(contextItem.data); @@ -90,17 +56,29 @@ abstract class ContextProvider< return this.isEdited && this.data ? this.data : this.getDefaultData(); } - setData(data?: D) { + setData(data?: S["data"]) { this.data = data ? Utils.clone.deepClone(data) : undefined; } - getContextItemData(): ExtendedContextItem { + getContextItemData(): S { return { name: this.name, isEdited: this.isEdited, data: this.getData(), extraData: this.extraData, - }; + } as S; + } + + /** + * Helper method to find a context item from a unit context array by name. + * Returns a partial schema object that can be safely passed to constructors. + */ + protected static findContextItem( + unitContext: UnitContext, + contextName: ContextName, + ): Partial { + const item = unitContext.find((item): item is S => item.name === contextName); + return item || {}; } } diff --git a/src/js/context/providers/base/JSONSchemaDataProvider.ts b/src/js/context/providers/base/JSONSchemaDataProvider.ts index 06da83c1..7eb48b72 100644 --- a/src/js/context/providers/base/JSONSchemaDataProvider.ts +++ b/src/js/context/providers/base/JSONSchemaDataProvider.ts @@ -1,7 +1,7 @@ -/* eslint-disable class-methods-use-this */ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; +import type { ContextItemSchema } from "@mat3ra/esse/dist/js/types"; -import type { ContextItem, ExternalContext } from "./ContextProvider"; +import type { ExternalContext } from "./ContextProvider"; import ContextProvider from "./ContextProvider"; export interface JinjaExternalContext extends ExternalContext { @@ -12,19 +12,17 @@ export interface JinjaExternalContext extends ExternalContext { * @summary Provides jsonSchema only. */ abstract class JSONSchemaDataProvider< - N extends string = string, - D extends object = object, - ED extends object = object, + S extends ContextItemSchema = ContextItemSchema, EC extends JinjaExternalContext = JinjaExternalContext, // eslint-disable-next-line prettier/prettier -> extends ContextProvider { +> extends ContextProvider { abstract readonly jsonSchema: JSONSchema | undefined; readonly entityName = "unit" as const; isUsingJinjaVariables: boolean; - constructor(contextItem: ContextItem, externalContext: EC) { + constructor(contextItem: Partial, externalContext: EC) { super(contextItem, externalContext); this.isUsingJinjaVariables = Boolean(externalContext?.isUsingJinjaVariables); } diff --git a/src/js/context/providers/base/JSONSchemaFormDataProvider.ts b/src/js/context/providers/base/JSONSchemaFormDataProvider.ts index 8661ac51..a1159417 100644 --- a/src/js/context/providers/base/JSONSchemaFormDataProvider.ts +++ b/src/js/context/providers/base/JSONSchemaFormDataProvider.ts @@ -1,5 +1,4 @@ -/* eslint-disable class-methods-use-this */ -// import { JSONSchemaDataProvider } from "@mat3ra/ade"; +import type { ContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { UiSchema } from "react-jsonschema-form"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./JSONSchemaDataProvider"; @@ -15,11 +14,9 @@ import JSONSchemaDataProvider, { type JinjaExternalContext } from "./JSONSchemaD * ``` */ abstract class JSONSchemaFormDataProvider< - N extends string = string, - D extends object = object, - ED extends object = object, + S extends ContextItemSchema = ContextItemSchema, EC extends JinjaExternalContext = JinjaExternalContext, -> extends JSONSchemaDataProvider { +> extends JSONSchemaDataProvider { fields: object = {}; protected abstract uiSchema: UiSchema; diff --git a/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts index 4e7e4c9e..54ae4fe9 100644 --- a/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts @@ -1,6 +1,9 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { QENEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + InputContextItemSchema, + QENEBContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import jobContextMixin, { @@ -27,7 +30,7 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; @@ -35,20 +38,16 @@ import QEPWXInputDataManager from "./QEPWXInputDataManager"; const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; -type Name = "input"; type Data = QENEBContextProviderSchema; -export type QENEBInputDataManagerContextItem = ContextItem; -export type QENEBInputDataManagerExternalContext = JinjaExternalContext & +type Schema = InputContextItemSchema & { data: Data }; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; - -type ExternalContext = QENEBInputDataManagerExternalContext; - -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & @@ -61,9 +60,17 @@ export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Ba readonly domain = "executable" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + + return new QENEBInputDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext) { + constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.initJobContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); @@ -94,6 +101,7 @@ export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Ba INTERMEDIATE_IMAGES: PWXContexts.slice(1, PWXContexts.length - 1).map((data) => { return data.ATOMIC_POSITIONS; }), + contextProviderName: "qe-neb" as const, }; } } diff --git a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts index ec2b5705..8652ad67 100644 --- a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts @@ -1,7 +1,10 @@ import { PERIODIC_TABLE } from "@exabyte-io/periodic-table.js"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { QEPwxContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + InputContextItemSchema, + QEPwxContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { Material } from "@mat3ra/made"; import type { AtomicElementValue } from "@mat3ra/made/dist/js/basis/elements"; import type { JSONSchema7 } from "json-schema"; @@ -27,25 +30,20 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = QEPwxContextProviderSchema; - -export type QEPWXInputDataManagerContextItem = ContextItem; -export type QEPWXInputDataManagerExternalContext = JinjaExternalContext & +type Schema = InputContextItemSchema & { data: Data }; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; - -type ExternalContext = QEPWXInputDataManagerExternalContext; - -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & @@ -59,9 +57,17 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba readonly domain = "executable" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + + return new QEPWXInputDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext) { + constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.initMaterialsContextMixin(externalContext); this.initMethodDataContextMixin(externalContext); @@ -83,8 +89,7 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba Mass_X: PERIODIC_TABLE[symbol].atomic_mass, PseudoPot_X: pseudo?.filename || path.basename(pseudo?.path || ""), }; - // return s.sprintf("%s %f %s", symbol, el.atomic_mass, filename) || ""; - }); // .join("\n"); + }); const uniqueElementsWithLabels = [...new Set(basis.elementsWithLabelsArray)]; @@ -132,6 +137,7 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba ATOMIC_POSITIONS, ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: basis.atomicPositions.join("\n"), CELL_PARAMETERS, + contextProviderName: "qe-pwx" as const, }; } diff --git a/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts b/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts index 85ec4e7b..aff9b3bf 100644 --- a/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts +++ b/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts @@ -1,7 +1,10 @@ import { PERIODIC_TABLE } from "@exabyte-io/periodic-table.js"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { NWChemTotalEnergyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + InputContextItemSchema, + NWChemTotalEnergyContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import jobContextMixin, { @@ -20,22 +23,19 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = NWChemTotalEnergyContextProviderSchema; -export type NWChemInputDataManagerContextItem = ContextItem; -export type NWChemInputDataManagerExternalContext = JinjaExternalContext & +type Schema = InputContextItemSchema & { data: Data }; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; -type ExternalContext = NWChemInputDataManagerExternalContext; - -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & @@ -49,9 +49,19 @@ export default class NWChemInputDataManager extends (JSONSchemaDataProvider as B readonly domain = "executable" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + + return new NWChemInputDataManager(contextItem, externalContext); + } + + readonly contextProviderName = "nwchem-total-energy" as const; + readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext) { + constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.initMethodDataContextMixin(externalContext); this.initWorkflowContextMixin(externalContext); @@ -87,6 +97,7 @@ export default class NWChemInputDataManager extends (JSONSchemaDataProvider as B ATOMIC_SPECIES, FUNCTIONAL: "B3LYP", CARTESIAN: basis.toCartesian !== undefined, + contextProviderName: this.contextProviderName, }; } } diff --git a/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts b/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts index 1fee20ae..28097f35 100644 --- a/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts +++ b/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts @@ -1,6 +1,6 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { InputContextItemSchema, VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { Material } from "@mat3ra/made"; import type { JSONSchema7 } from "json-schema"; @@ -24,24 +24,20 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; type Data = VASPContextProviderSchema; -export type VASPInputDataManagerContextItem = ContextItem; -export type VASPInputDataManagerExternalContext = JinjaExternalContext & +type Schema = InputContextItemSchema & { data: Data }; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext; - -type ExternalContext = VASPInputDataManagerExternalContext; - -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & @@ -55,9 +51,17 @@ export default class VASPInputDataManager extends (JSONSchemaDataProvider as Bas readonly domain = "executable" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + + return new VASPInputDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext) { + constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.initJobContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); @@ -74,6 +78,7 @@ export default class VASPInputDataManager extends (JSONSchemaDataProvider as Bas // TODO: figure out whether we need two separate POSCARS, maybe one is enough POSCAR: material.getAsPOSCAR(true, true), POSCAR_WITH_CONSTRAINTS: material.getAsPOSCAR(true), + contextProviderName: "vasp" as const, }; } diff --git a/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts b/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts index 08928cd7..b1a3056d 100644 --- a/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts +++ b/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts @@ -1,6 +1,9 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { VASPNEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; +import type { + InputContextItemSchema, + VASPNEBContextProviderSchema, +} from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import jobContextMixin, { @@ -27,27 +30,22 @@ import workflowContextMixin, { type WorkflowContextMixin, type WorkflowExternalContext, } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem } from "../../base/ContextProvider"; +import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; import VASPInputDataManager from "./VASPInputDataManager"; -type Name = "input"; type Data = VASPNEBContextProviderSchema; - -export type VASPNEBInputDataManagerContextItem = ContextItem; -export type VASPNEBInputDataManagerExternalContext = JinjaExternalContext & +type Schema = InputContextItemSchema & { data: Data }; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; - -type ExternalContext = VASPNEBInputDataManagerExternalContext; - -type Base = typeof JSONSchemaDataProvider & +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & @@ -62,9 +60,17 @@ export default class VASPNEBInputDataManager extends (JSONSchemaDataProvider as readonly domain = "executable" as const; + readonly entityName = "unit" as const; + + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { + const contextItem = this.findContextItem(unitContext, "input"); + + return new VASPNEBInputDataManager(contextItem, externalContext); + } + readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext) { + constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.initMaterialContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); @@ -87,6 +93,7 @@ export default class VASPNEBInputDataManager extends (JSONSchemaDataProvider as INTERMEDIATE_IMAGES: VASPContexts.slice(1, VASPContexts.length - 1).map((data) => { return data.POSCAR_WITH_CONSTRAINTS; }), + contextProviderName: "vasp-neb" as const, }; } } diff --git a/src/js/context/providers/index.ts b/src/js/context/providers/index.ts new file mode 100644 index 00000000..2048cac1 --- /dev/null +++ b/src/js/context/providers/index.ts @@ -0,0 +1,143 @@ +import { type Application } from "@mat3ra/ade"; +import type { JobSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; + +import type { OrderedMaterial } from "../mixins/MaterialContextMixin"; +import type { UnitContext } from "./base/ContextProvider"; +import BoundaryConditionsFormDataManager from "./BoundaryConditionsFormDataManager"; +import QENEBInputDataManager from "./by_application/espresso/QENEBInputDataManager"; +import QEPWXInputDataManager from "./by_application/espresso/QEPWXInputDataManager"; +import NWChemInputDataManager from "./by_application/nwchem/NWChemInputDataManager"; +import VASPInputDataManager from "./by_application/vasp/VASPInputDataManager"; +import VASPNEBInputDataManager from "./by_application/vasp/VASPNEBInputDataManager"; +import CollinearMagnetizationDataManager from "./CollinearMagnetizationDataManager"; +import HubbardContextManagerLegacy from "./Hubbard/HubbardContextManagerLegacy"; +import HubbardJContextManager from "./Hubbard/HubbardJContextManager"; +import HubbardUContextManager from "./Hubbard/HubbardUContextManager"; +import HubbardVContextManager from "./Hubbard/HubbardVContextManager"; +import IonDynamicsDataManager from "./IonDynamicsDataManager"; +import MLSettingsDataManager from "./MLSettingsDataManager"; +import MLTrainTestSplitDataManager from "./MLTrainTestSplitDataManager"; +import NEBFormDataManager from "./NEBFormDataManager"; +import NonCollinearMagnetizationDataManager from "./NonCollinearMagnetizationDataManager"; +import PlanewaveCutoffDataManager from "./PlanewaveCutoffDataManager"; +import IGridFormDataManager from "./PointsGrid/IGridFormDataManager"; +import KGridFormDataManager from "./PointsGrid/KGridFormDataManager"; +import QGridFormDataManager from "./PointsGrid/QGridFormDataManager"; +import ExplicitKPath2PIBAFormDataManager from "./PointsPath/ExplicitKPath2PIBAFormDataManager"; +import ExplicitKPathFormDataManager from "./PointsPath/ExplicitKPathFormDataManager"; +import IPathFormDataManager from "./PointsPath/IPathFormDataManager"; +import KPathFormDataManager from "./PointsPath/KPathFormDataManager"; +import QPathFormDataManager from "./PointsPath/QPathFormDataManager"; + +/** + * Registry mapping provider names (as they appear in templates) to their classes. + * This is the single source of truth for provider mappings. + */ +export const PROVIDER_REGISTRY = { + PlanewaveCutoffDataManager, + KGridFormDataManager, + QGridFormDataManager, + IGridFormDataManager, + QPathFormDataManager, + IPathFormDataManager, + KPathFormDataManager, + ExplicitKPathFormDataManager, + ExplicitKPath2PIBAFormDataManager, + HubbardJContextManager, + HubbardUContextManager, + HubbardVContextManager, + HubbardContextManagerLegacy, + NEBFormDataManager, + BoundaryConditionsFormDataManager, + MLSettingsDataManager, + MLTrainTestSplitDataManager, + IonDynamicsContextProvider: IonDynamicsDataManager, // Note: name mismatch preserved from original + CollinearMagnetizationDataManager, + NonCollinearMagnetizationDataManager, + QEPWXInputDataManager, + QENEBInputDataManager, + VASPInputDataManager, + VASPNEBInputDataManager, + NWChemInputDataManager, +} as const; + +/** + * External context type used by ExecutionUnitInput when creating providers. + * This type is always expected to be present when providers are instantiated. + */ +export type ExternalContext = { + application: Application; + material: OrderedMaterial; + materials: OrderedMaterial[]; + workflow: WorkflowSchema; + job: JobSchema; + isUsingJinjaVariables?: boolean; + materialsSet: { _id: string }; +}; + +/** + * Type for provider names as they appear in templates. + */ +export type ProviderName = keyof typeof PROVIDER_REGISTRY; + +/** + * Union type of all context provider instances. + * Derived from the registry for type safety. + */ +export type AnyContextProvider = InstanceType<(typeof PROVIDER_REGISTRY)[ProviderName]>; + +/** + * Factory function to create a context provider instance from its name. + * + * @param name - The provider name as it appears in templates + * @param context - The unit context + * @param externalContext - The external context (must match the ExternalContext type defined in this file) + * @returns An instance of the requested context provider + * @throws Error if the provider name is unknown + */ +export function createProvider( + name: ProviderName, + context: UnitContext, + externalContext: ExternalContext, +): AnyContextProvider { + const ProviderClass = PROVIDER_REGISTRY[name]; + if (!ProviderClass) { + throw new Error(`Unknown provider: ${name}`); + } + // Type assertion is safe here because ExecutionUnitInput's ExternalContext + // extends the base ExternalContext and includes all properties needed by providers. + // Each provider may expect a more specific ExternalContext type, but at runtime + // the ExecutionUnitInput's ExternalContext will have all required properties. + // This is a legitimate use of `any` for dynamic dispatch where TypeScript + // cannot statically verify the types, but runtime behavior is guaranteed. + return ProviderClass.createFromUnitContext(context, externalContext); +} + +// Re-export all provider classes for convenience +export { + BoundaryConditionsFormDataManager, + QENEBInputDataManager, + QEPWXInputDataManager, + NWChemInputDataManager, + VASPInputDataManager, + VASPNEBInputDataManager, + CollinearMagnetizationDataManager, + HubbardContextManagerLegacy, + HubbardJContextManager, + HubbardUContextManager, + HubbardVContextManager, + IonDynamicsDataManager, + MLSettingsDataManager, + MLTrainTestSplitDataManager, + NEBFormDataManager, + NonCollinearMagnetizationDataManager, + PlanewaveCutoffDataManager, + IGridFormDataManager, + KGridFormDataManager, + QGridFormDataManager, + ExplicitKPath2PIBAFormDataManager, + ExplicitKPathFormDataManager, + IPathFormDataManager, + KPathFormDataManager, + QPathFormDataManager, +}; diff --git a/src/js/enums.ts b/src/js/enums.ts index a9c6a720..e6529c04 100644 --- a/src/js/enums.ts +++ b/src/js/enums.ts @@ -30,7 +30,6 @@ export enum UnitType { assignment = "assignment", condition = "condition", subworkflow = "subworkflow", - processing = "processing", io = "io", assertion = "assertion", } diff --git a/src/js/generated/ExecutionUnitSchemaMixin.ts b/src/js/generated/ExecutionUnitSchemaMixin.ts index e2d77e43..07c32eda 100644 --- a/src/js/generated/ExecutionUnitSchemaMixin.ts +++ b/src/js/generated/ExecutionUnitSchemaMixin.ts @@ -11,7 +11,7 @@ export function executionUnitSchemaMixin( // @ts-expect-error const properties: InMemoryEntity & ExecutionUnitSchemaMixin = { get type() { - return this.prop("type"); + return this.requiredProp("type"); }, set type(value: ExecutionUnitMixinSchema["type"]) { this.setProp("type", value); @@ -23,13 +23,13 @@ export function executionUnitSchemaMixin( this.setProp("application", value); }, get executable() { - return this.prop("executable"); + return this.requiredProp("executable"); }, set executable(value: ExecutionUnitMixinSchema["executable"]) { this.setProp("executable", value); }, get flavor() { - return this.prop("flavor"); + return this.requiredProp("flavor"); }, set flavor(value: ExecutionUnitMixinSchema["flavor"]) { this.setProp("flavor", value); @@ -41,7 +41,7 @@ export function executionUnitSchemaMixin( this.setProp("input", value); }, get context() { - return this.prop("context"); + return this.requiredProp("context"); }, set context(value: ExecutionUnitMixinSchema["context"]) { this.setProp("context", value); diff --git a/src/js/generated/ProcessingUnitSchemaMixin.ts b/src/js/generated/ProcessingUnitSchemaMixin.ts deleted file mode 100644 index 963c2c82..00000000 --- a/src/js/generated/ProcessingUnitSchemaMixin.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { ProcessingUnitMixinSchema } from "@mat3ra/esse/dist/js/types"; - -export type ProcessingUnitSchemaMixin = ProcessingUnitMixinSchema; - -export type ProcessingUnitInMemoryEntity = InMemoryEntity & ProcessingUnitSchemaMixin; - -export function processingUnitSchemaMixin( - item: InMemoryEntity, -): asserts item is T & ProcessingUnitSchemaMixin { - // @ts-expect-error - const properties: InMemoryEntity & ProcessingUnitSchemaMixin = { - get type() { - return this.prop("type"); - }, - set type(value: ProcessingUnitMixinSchema["type"]) { - this.setProp("type", value); - }, - get operation() { - return this.requiredProp("operation"); - }, - set operation(value: ProcessingUnitMixinSchema["operation"]) { - this.setProp("operation", value); - }, - get operationType() { - return this.requiredProp("operationType"); - }, - set operationType(value: ProcessingUnitMixinSchema["operationType"]) { - this.setProp("operationType", value); - }, - get inputData() { - return this.requiredProp("inputData"); - }, - set inputData(value: ProcessingUnitMixinSchema["inputData"]) { - this.setProp("inputData", value); - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/src/js/subworkflows/convergence/ConvergenceParameter.ts b/src/js/subworkflows/convergence/ConvergenceParameter.ts index a28a59e1..5d5d47c1 100644 --- a/src/js/subworkflows/convergence/ConvergenceParameter.ts +++ b/src/js/subworkflows/convergence/ConvergenceParameter.ts @@ -11,8 +11,6 @@ export type UnitContext = { dimensions: [string, string, string]; shifts: [0, 0, 0]; }; - name: "kgrid"; - isEdited: true; isUsingJinjaVariables: true; }; diff --git a/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts b/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts index be490be6..28cded4c 100644 --- a/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts +++ b/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts @@ -15,8 +15,6 @@ export default class NonUniformKGridConvergence extends ConvergenceParameter { dimensions: [`{{${this.name}[0]}}`, `{{${this.name}[1]}}`, `{{${this.name}[2]}}`], shifts: [0, 0, 0], }, - name: "kgrid", - isEdited: true, isUsingJinjaVariables: true, }; diff --git a/src/js/subworkflows/convergence/UniformKGridConvergence.ts b/src/js/subworkflows/convergence/UniformKGridConvergence.ts index 853b4f80..3ac7ea04 100644 --- a/src/js/subworkflows/convergence/UniformKGridConvergence.ts +++ b/src/js/subworkflows/convergence/UniformKGridConvergence.ts @@ -11,12 +11,10 @@ export default class UniformKGridConvergence extends ConvergenceParameter { readonly finalValue = `${this.name} + 0` as const; readonly unitContext: UnitContext = { - name: "kgrid", data: { dimensions: [`{{${this.name}}}`, `{{${this.name}}}`, `{{${this.name}}}`], shifts: [0, 0, 0], }, - isEdited: true, isUsingJinjaVariables: true, }; diff --git a/src/js/subworkflows/subworkflow.ts b/src/js/subworkflows/subworkflow.ts index 9d54503f..fba5d5b2 100644 --- a/src/js/subworkflows/subworkflow.ts +++ b/src/js/subworkflows/subworkflow.ts @@ -1,5 +1,5 @@ import { Application } from "@mat3ra/ade"; -import { ContextAndRenderFieldsMixin, InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { type DefaultableInMemoryEntityConstructor, defaultableEntityMixin, @@ -31,11 +31,6 @@ import type { AnySubworkflowUnit } from "../units/factory"; import { setNextLinks, setUnitsHead } from "../utils"; import { createConvergenceParameter } from "./convergence/factory"; -// class BaseSubworkflow extends mix(NamedDefaultableRepetitionImportantSettingsInMemoryEntity).with( -// ConvergenceMixin, -// ContextAndRenderFieldsMixin, -// ) {} - type ConvergenceConfig = { parameter: "N_k" | "N_k_nonuniform"; parameterInitial: number | [number, number, number]; @@ -207,17 +202,6 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow }; } - get contextProviders() { - const subworkflowContextProviders = this.unitsInstances - .filter((u) => u.type === UnitType.execution) - .filter((u) => u.allContextProviders.length) - .map((u) => u.allContextProviders) - .flat() - .filter((p) => p.entityName === "subworkflow"); - - return _.uniq(subworkflowContextProviders, (p) => p.name); - } - private getContextFromAssignmentUnits() { return this.unitsInstances .filter((u) => u.type === UnitType.assignment) @@ -229,7 +213,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow }, {} as Record); } - render(context = {}) { + render(context: Record) { const ctx = { ...context, application: this.applicationInstance, @@ -242,7 +226,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow this.unitsInstances.forEach((u) => { if (u.type === UnitType.execution) { - u.render({}, ctx); + u.render(ctx); } }); } @@ -250,7 +234,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow /** * TODO: reuse workflow function instead */ - addUnit(unit: AnySubworkflowUnit, index = -1) { + private addUnit(unit: AnySubworkflowUnit, index = -1) { const { unitsInstances } = this; if (unitsInstances.length === 0) { @@ -420,29 +404,13 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow } // initialize parameter - const param = createConvergenceParameter({ + const convergenceParameter = createConvergenceParameter({ name: parameter, initialValue: parameterInitial, increment: parameterIncrement, }); - // Replace kgrid to be ready for convergence - // TODO: kgrid should be abstracted and selected by user - const gridProvider = unitForConvergence.importantSettingsProviders.find((p) => { - return ["kgrid", "qgrid"].includes(p.name); - }); - - let mergedContext = param.unitContext; - - if (gridProvider) { - const providerContext = gridProvider.getContextItemData(); - - mergedContext = merge(providerContext, param.unitContext); - gridProvider.setData(mergedContext); - gridProvider.setIsEdited(true); - } - - unitForConvergence.updateContext(mergedContext); + unitForConvergence.addConvergenceContext(convergenceParameter, {}); const prevResult = "prev_result"; const iteration = "iteration"; @@ -458,8 +426,8 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow // Assignment with initial value of convergence parameter const paramInit = new AssignmentUnit({ name: "init parameter", - operand: param.name, - value: param.initialValue, + operand: convergenceParameter.name, + value: convergenceParameter.initialValue, tags: [UnitTag.hasConvergenceParam], }); @@ -486,9 +454,9 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow // Assignment for convergence param increase const nextStep = new AssignmentUnit({ name: "update parameter", - input: param.useVariablesFromUnitContext(unitForConvergence.flowchartId), - operand: param.name, - value: param.increment, + input: convergenceParameter.useVariablesFromUnitContext(unitForConvergence.flowchartId), + operand: convergenceParameter.name, + value: convergenceParameter.increment, next: unitForConvergence.flowchartId, }); @@ -496,8 +464,8 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow const exit = new AssignmentUnit({ name: "exit", input: [], - operand: param.name, - value: param.finalValue, + operand: convergenceParameter.name, + value: convergenceParameter.finalValue, }); // Final step of convergence diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index a8e3c9ce..4fdfb0c1 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -2,9 +2,9 @@ import { Application, ApplicationRegistry as AdeRegistry, Executable, Flavor } f import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { + ContextItemSchema, ExecutableSchema, - ExecutionUnitInputItemSchema, - ExecutionUnitSchemaBase, + ExecutionUnitSchema, FlavorSchema, } from "@mat3ra/esse/dist/js/types"; import { Utils } from "@mat3ra/utils"; @@ -14,15 +14,16 @@ import { type ImportantSettingsProvider, importantSettingsProviderMixin, } from "../context/mixins/ImportantSettingsProviderMixin"; -import type { ContextItem } from "../context/providers/base/ContextProvider"; -import ExecutionUnitInput, { type ExecutionUnitInputContext } from "../ExecutionUnitInput"; +import { type ExternalContext, createProvider } from "../context/providers"; +import ExecutionUnitInput from "../ExecutionUnitInput"; import { type ExecutionUnitSchemaMixin, executionUnitSchemaMixin, } from "../generated/ExecutionUnitSchemaMixin"; +import type ConvergenceParameter from "../subworkflows/convergence/ConvergenceParameter"; import { BaseUnit } from "./BaseUnit"; -type Schema = ExecutionUnitSchemaBase; +type Schema = ExecutionUnitSchema; type Base = typeof BaseUnit & Constructor & Constructor; @@ -38,8 +39,6 @@ interface SetExecutableProps { flavor?: Flavor | FlavorSchema; } -export type ExecutionUnitSchema = Schema; - export class ExecutionUnit extends (BaseUnit as Base) implements Schema { applicationInstance!: Application; @@ -49,7 +48,7 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { inputInstances: ExecutionUnitInput[] = []; - renderingContext: ContextItem[] = []; + renderingContext: Record = {}; declare toJSON: () => Schema & AnyObject; @@ -119,40 +118,69 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { this.inputInstances = inputs.map(ExecutionUnitInput.createFromTemplate); } - get allContextProviders() { - return this.inputInstances.map((input) => input.contextProvidersInstances).flat(); - } + getContextProvidersInstances(externalContext: ExternalContext) { + const uniqueContextProviderNames = [ + ...new Set( + this.inputInstances + .map((input) => { + return input.template.contextProviders.map((provider) => { + return provider.name; + }); + }) + .flat(), + ), + ]; - get contextProviders() { - return this.allContextProviders.filter((p) => p.entityName === "unit"); + return uniqueContextProviderNames.map((name) => { + return createProvider(name, this.context, externalContext); + }); } - get importantSettingsProviders() { - return this.contextProviders.filter((p) => p.domain === "important"); + addConvergenceContext(parameter: ConvergenceParameter, externalContext: ExternalContext) { + // TODO: kgrid should be abstracted and selected by user + const parameterToContextProviderMap = { + N_k: "kgrid", + N_k_nonuniform: "kgrid", + } as const; + + const contextName = parameterToContextProviderMap[parameter.name]; + + const fullContext = this.getContextProvidersInstances(externalContext).map( + (contextProvider) => { + if (contextProvider.name === contextName) { + contextProvider.applyCovergenceParameter(parameter); + return contextProvider.getContextItemData(); + } + return contextProvider.getContextItemData(); + }, + ); + + this.saveContext(fullContext); } - render(externalContext: AnyObject = {}) { - this.renderingContext = this.context; + render(externalContext: ExternalContext) { + const fullContext = this.getContextProvidersInstances(externalContext).map( + (contextProvider) => { + return contextProvider.getContextItemData(); + }, + ); - const newInput: ExecutionUnitInputItemSchema[] = []; - const newPersistentContext: ContextItem[] = []; - const newRenderingContext: ContextItem[] = []; + this.saveContext(fullContext); - this.inputInstances.forEach((input) => { - input.setContext(context, externalContext); - input.render(); - - const inputJSON = input.toJSON(); - const fullContext = input.getFullContext(); - - newInput.push(inputJSON); - newRenderingContext.push(...fullContext); - newPersistentContext.push(...fullContext.filter((c) => c.isEdited)); + this.input = this.inputInstances.map((input) => { + return input.render(this.renderingContext).toJSON(); }); + } + + private saveContext(fullContext: ContextItemSchema[]) { + // persistent context + this.context = fullContext.filter((c) => c.isEdited); - this.input = newInput; - this.renderingContext = newRenderingContext; - this.context = newPersistentContext; + this.renderingContext = Object.fromEntries( + fullContext.map((context) => { + return [context.name, context.data]; + }), + ); } /** diff --git a/src/js/units/ProcessingUnit.ts b/src/js/units/ProcessingUnit.ts deleted file mode 100644 index fb296af8..00000000 --- a/src/js/units/ProcessingUnit.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ProcessingUnitSchema } from "@mat3ra/esse/dist/js/types"; - -import { UnitType } from "../enums"; -import { - type ProcessingUnitSchemaMixin, - processingUnitSchemaMixin, -} from "../generated/ProcessingUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; - -type Schema = ProcessingUnitSchema; -type Base = typeof BaseUnit & Constructor; - -export class ProcessingUnit extends (BaseUnit as Base) implements Schema { - constructor(config: Partial) { - super({ - name: UnitType.processing, - type: UnitType.processing, - ...config, - }); - } - - declare toJSON: () => Schema & AnyObject; - - setOperation(op: ProcessingUnitSchema["operation"]) { - this.setProp("operation", op); - } - - setOperationType(type: ProcessingUnitSchema["operationType"]) { - this.setProp("operationType", type); - } - - setInput(input: ProcessingUnitSchema["inputData"]) { - this.setProp("inputData", input); - } -} - -processingUnitSchemaMixin(ProcessingUnit.prototype); diff --git a/src/js/units/factory.ts b/src/js/units/factory.ts index 19de448e..0d6116e1 100644 --- a/src/js/units/factory.ts +++ b/src/js/units/factory.ts @@ -3,6 +3,7 @@ import type { AssignmentUnitSchema, ConditionUnitSchema, DataIOUnitSchema, + ExecutionUnitSchema, MapUnitSchema, ProcessingUnitSchema, ReduceUnitSchema, @@ -13,11 +14,10 @@ import { UnitType } from "../enums"; import { AssertionUnit } from "./AssertionUnit"; import { AssignmentUnit } from "./AssignmentUnit"; import { ConditionUnit } from "./ConditionUnit"; -import { type ExecutionUnitSchema, ExecutionUnit } from "./ExecutionUnit"; +import { ExecutionUnit } from "./ExecutionUnit"; import { IOUnit } from "./IOUnit"; import { MapUnit } from "./MapUnit"; import { ProcessingUnit } from "./ProcessingUnit"; -import { ReduceUnit } from "./ReduceUnit"; import { SubworkflowUnit } from "./SubworkflowUnit"; export type UnitConfig = @@ -46,7 +46,6 @@ export type AnySubworkflowUnit = | AssignmentUnit | ConditionUnit | IOUnit - | ProcessingUnit | AssertionUnit; export class UnitFactory { @@ -86,8 +85,6 @@ export class UnitFactory { return new ConditionUnit(config); case UnitType.io: return new IOUnit(config); - case UnitType.processing: - return new ProcessingUnit(config); case UnitType.assertion: return new AssertionUnit(config); // // TODO-question: why there was no reduce unit in the factory? From 93c45149844c37ce6ac9849b19dc73a97a7c1b7f Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 9 Feb 2026 16:12:46 +0200 Subject: [PATCH 03/30] chore: types cleanups Co-authored-by: Cursor --- .babelrc | 2 +- .eslintrc.json | 3 +- .gitignore | 1 - .nycrc | 26 ++- build_workflows.js | 65 ------ .../subworkflow.d.ts => Subworkflow.d.ts} | 105 ++------- .../subworkflow.js => Subworkflow.js} | 105 ++++----- .../workflow.d.ts => Workflow.d.ts} | 20 +- .../js/{workflows/workflow.js => Workflow.js} | 63 +++--- .../mixins/ApplicationContextMixin.d.ts | 6 +- .../context/mixins/ApplicationContextMixin.js | 7 +- .../mixins/ContextAndRenderFieldsMixin.d.ts | 13 -- .../mixins/ContextAndRenderFieldsMixin.js | 34 --- .../ImportantSettingsProviderMixin.d.ts | 9 - .../mixins/ImportantSettingsProviderMixin.js | 22 -- .../mixins/MaterialsSetContextMixin.d.ts | 4 +- .../mixins/MaterialsSetContextMixin.js | 8 +- .../context/mixins/WorkflowContextMixin.d.ts | 6 +- dist/js/context/providers.d.ts | 55 ----- dist/js/context/providers.js | 179 --------------- .../BoundaryConditionsFormDataProvider.d.ts | 29 --- .../BoundaryConditionsFormDataProvider.js | 51 ----- ...CollinearMagnetizationContextProvider.d.ts | 41 ---- .../CollinearMagnetizationContextProvider.js | 87 -------- .../Hubbard/HubbardContextProviderLegacy.d.ts | 27 --- .../Hubbard/HubbardContextProviderLegacy.js | 60 ------ .../Hubbard/HubbardJContextProvider.d.ts | 20 -- .../Hubbard/HubbardJContextProvider.js | 52 ----- .../Hubbard/HubbardUContextProvider.d.ts | 20 -- .../Hubbard/HubbardUContextProvider.js | 50 ----- .../Hubbard/HubbardVContextProvider.d.ts | 20 -- .../Hubbard/HubbardVContextProvider.js | 70 ------ .../providers/IonDynamicsContextProvider.d.ts | 27 --- .../providers/IonDynamicsContextProvider.js | 38 ---- .../providers/IonDynamicsDataManager.d.ts | 6 +- .../providers/MLSettingsContextProvider.d.ts | 26 --- .../providers/MLSettingsContextProvider.js | 35 --- .../providers/MLSettingsDataManager.js | 4 +- .../MLTrainTestSplitContextProvider.d.ts | 25 --- .../MLTrainTestSplitContextProvider.js | 33 --- .../providers/MLTrainTestSplitDataManager.js | 4 +- .../providers/NEBFormDataProvider.d.ts | 21 -- .../context/providers/NEBFormDataProvider.js | 29 --- ...CollinearMagnetizationContextProvider.d.ts | 77 ------- ...onCollinearMagnetizationContextProvider.js | 155 ------------- .../providers/PlanewaveCutoffDataManager.d.ts | 8 +- .../providers/PlanewaveCutoffDataManager.js | 6 +- .../PlanewaveCutoffsContextProvider.d.ts | 26 --- .../PlanewaveCutoffsContextProvider.js | 41 ---- .../PointsGrid/KGridFormDataManager.d.ts | 4 +- .../PointsGrid/KGridFormDataManager.js | 2 +- .../PointsGrid/PointsGridFormDataProvider.js | 5 +- .../PointsPath/PointsPathFormDataProvider.js | 7 +- .../providers/base/ContextProvider.d.ts | 5 +- .../base/JSONSchemaDataProvider.d.ts | 3 +- .../espresso/QENEBContextProvider.d.ts | 24 --- .../espresso/QENEBContextProvider.js | 52 ----- .../espresso/QEPWXContextProvider.d.ts | 89 -------- .../espresso/QEPWXContextProvider.js | 108 ---------- .../NWChemTotalEnergyContextProvider.d.ts | 33 --- .../NWChemTotalEnergyContextProvider.js | 55 ----- .../vasp/VASPContextProvider.d.ts | 33 --- .../vasp/VASPContextProvider.js | 55 ----- .../vasp/VASPNEBContextProvider.d.ts | 28 --- .../vasp/VASPNEBContextProvider.js | 48 ----- dist/js/context/providers/index.d.ts | 26 ++- dist/js/context/providers/index.js | 8 +- .../convergence/ConvergenceParameter.d.ts | 0 .../convergence/ConvergenceParameter.js | 0 .../NonUniformKGridConvergence.d.ts | 0 .../convergence/NonUniformKGridConvergence.js | 0 .../convergence/UniformKGridConvergence.d.ts | 0 .../convergence/UniformKGridConvergence.js | 0 .../convergence/factory.d.ts | 0 .../{subworkflows => }/convergence/factory.js | 0 dist/js/enums.d.ts | 81 ++++--- dist/js/enums.js | 26 +-- .../generated/ProcessingUnitSchemaMixin.d.ts | 5 - .../js/generated/ProcessingUnitSchemaMixin.js | 33 --- dist/js/index.d.ts | 31 +-- dist/js/index.js | 26 +-- .../{ => standata}/subworkflows/create.d.ts | 7 +- dist/js/{ => standata}/subworkflows/create.js | 9 +- .../dynamic/espresso/getQpointIrrep.d.ts | 0 .../dynamic/espresso/getQpointIrrep.js | 2 +- .../subworkflows/dynamic/index.d.ts | 0 .../subworkflows/dynamic/index.js | 0 .../subworkflows/dynamic/surfaceEnergy.d.ts | 0 .../subworkflows/dynamic/surfaceEnergy.js | 0 .../builders/AssertionUnitConfigBuilder.d.ts | 0 .../builders/AssertionUnitConfigBuilder.js | 2 +- .../builders/AssignmentUnitConfigBuilder.d.ts | 0 .../builders/AssignmentUnitConfigBuilder.js | 2 +- .../builders/ExecutionUnitConfigBuilder.d.ts | 0 .../builders/ExecutionUnitConfigBuilder.js | 2 +- .../units/builders/IOUnitConfigBuilder.d.ts | 0 .../units/builders/IOUnitConfigBuilder.js | 2 +- .../units/builders/UnitConfigBuilder.d.ts | 0 .../units/builders/UnitConfigBuilder.js | 1 + .../{ => standata}/units/builders/index.d.ts | 0 .../js/{ => standata}/units/builders/index.js | 0 dist/js/{ => standata}/utils.d.ts | 84 +------- dist/js/{ => standata}/utils.js | 37 ---- dist/js/{ => standata}/workflows/create.d.ts | 2 +- dist/js/{ => standata}/workflows/create.js | 119 +++++----- dist/js/subworkflows/convergence.d.ts | 20 -- dist/js/subworkflows/convergence.js | 173 --------------- .../convergence/non_uniform_kgrid.d.ts | 15 -- .../convergence/non_uniform_kgrid.js | 29 --- .../subworkflows/convergence/parameter.d.ts | 42 ---- dist/js/subworkflows/convergence/parameter.js | 59 ----- .../convergence/uniform_kgrid.d.ts | 11 - .../subworkflows/convergence/uniform_kgrid.js | 23 -- dist/js/subworkflows/index.d.ts | 2 - dist/js/subworkflows/index.js | 7 - dist/js/units/AssertionUnit.d.ts | 9 +- dist/js/units/AssertionUnit.js | 10 +- dist/js/units/AssignmentUnit.d.ts | 9 +- dist/js/units/AssignmentUnit.js | 10 +- dist/js/units/BaseUnit.d.ts | 6 +- dist/js/units/BaseUnit.js | 9 +- dist/js/units/ConditionUnit.d.ts | 9 +- dist/js/units/ConditionUnit.js | 10 +- dist/js/units/ExecutionUnit.d.ts | 14 +- dist/js/units/ExecutionUnit.js | 42 ++-- dist/js/{ => units}/ExecutionUnitInput.d.ts | 2 +- dist/js/{ => units}/ExecutionUnitInput.js | 0 dist/js/units/IOUnit.d.ts | 9 +- dist/js/units/IOUnit.js | 10 +- dist/js/units/MapUnit.d.ts | 9 +- dist/js/units/MapUnit.js | 11 +- dist/js/units/ProcessingUnit.d.ts | 16 -- dist/js/units/ProcessingUnit.js | 26 --- dist/js/units/ReduceUnit.d.ts | 9 +- dist/js/units/ReduceUnit.js | 14 +- dist/js/units/SubworkflowUnit.d.ts | 9 +- dist/js/units/SubworkflowUnit.js | 10 +- dist/js/units/factory.d.ts | 24 +-- dist/js/units/factory.js | 52 ++--- dist/js/units/index.d.ts | 21 +- dist/js/units/index.js | 43 ++-- .../mixins}/RuntimeItemsUILogicMixin.d.ts | 0 .../mixins}/RuntimeItemsUILogicMixin.js | 4 +- dist/js/workflows/default.js | 1 + dist/js/workflows/index.d.ts | 18 -- dist/js/workflows/index.js | 86 -------- dist/js/workflows/relaxation.d.ts | 10 - dist/js/workflows/relaxation.js | 38 ---- dist/js/workflows/utils.d.ts | 9 + dist/js/workflows/utils.js | 37 ++++ package-lock.json | 36 ++-- package.json | 39 ++-- .../subworkflow.ts => Subworkflow.ts} | 138 ++++++------ src/js/{workflows/workflow.ts => Workflow.ts} | 86 ++++---- .../context/mixins/ApplicationContextMixin.ts | 12 +- .../mixins/ContextAndRenderFieldsMixin.ts | 47 ---- .../mixins/ImportantSettingsProviderMixin.ts | 37 ---- .../mixins/MaterialsSetContextMixin.ts | 16 +- src/js/context/mixins/WorkflowContextMixin.ts | 7 +- .../providers/IonDynamicsDataManager.ts | 6 +- .../providers/MLSettingsDataManager.ts | 3 +- .../providers/MLTrainTestSplitDataManager.ts | 3 +- .../providers/PlanewaveCutoffDataManager.ts | 15 +- .../PointsGrid/KGridFormDataManager.ts | 4 +- .../PointsGrid/PointsGridFormDataProvider.ts | 8 +- .../PointsPath/PointsPathFormDataProvider.ts | 6 +- .../context/providers/base/ContextProvider.ts | 5 +- .../providers/base/JSONSchemaDataProvider.ts | 3 +- src/js/context/providers/index.ts | 42 ++-- .../convergence/ConvergenceParameter.ts | 0 .../convergence/NonUniformKGridConvergence.ts | 0 .../convergence/UniformKGridConvergence.ts | 0 .../{subworkflows => }/convergence/factory.ts | 0 src/js/enums.ts | 34 +-- src/js/{index.js => index.ts} | 24 +-- src/js/standata/README.md | 1 + src/js/{ => standata}/subworkflows/create.js | 7 +- .../dynamic/espresso/getQpointIrrep.js | 2 +- .../subworkflows/dynamic/index.js | 0 .../subworkflows/dynamic/surfaceEnergy.js | 0 .../builders/AssertionUnitConfigBuilder.js | 2 +- .../builders/AssignmentUnitConfigBuilder.js | 2 +- .../builders/ExecutionUnitConfigBuilder.js | 2 +- .../units/builders/IOUnitConfigBuilder.js | 2 +- .../units/builders/UnitConfigBuilder.js | 1 + src/js/{ => standata}/units/builders/index.js | 0 src/js/{ => standata}/utils.ts | 33 +-- src/js/{ => standata}/workflows/create.js | 122 ++++++----- src/js/subworkflows/convergence.js | 196 ----------------- src/js/subworkflows/index.js | 2 - src/js/units/AssertionUnit.ts | 12 +- src/js/units/AssignmentUnit.ts | 12 +- src/js/units/BaseUnit.ts | 15 +- src/js/units/ConditionUnit.ts | 12 +- src/js/units/ExecutionUnit.ts | 83 +++---- src/js/{ => units}/ExecutionUnitInput.ts | 2 +- src/js/units/IOUnit.ts | 12 +- src/js/units/MapUnit.ts | 12 +- src/js/units/ReduceUnit.ts | 16 +- src/js/units/SubworkflowUnit.ts | 12 +- src/js/units/factory.ts | 73 ++----- src/js/units/index.ts | 20 +- .../mixins}/RuntimeItemsUILogicMixin.ts | 4 +- src/js/workflows/default.ts | 1 + src/js/workflows/index.js | 98 --------- src/js/workflows/relaxation.js | 42 ---- src/js/workflows/utils.ts | 33 +++ tests/js/Workflow.test.ts | 166 ++++++++++++++ tests/js/context.test.js | 69 ------ tests/js/espresso.test.js | 21 -- tests/js/subworkflow.test.js | 128 ----------- tests/js/unit.test.js | 120 ----------- tests/js/workflow.test.js | 203 ------------------ tsconfig-transpile.json | 7 + tsconfig.json | 7 +- 215 files changed, 1212 insertions(+), 4765 deletions(-) delete mode 100644 build_workflows.js rename dist/js/{subworkflows/subworkflow.d.ts => Subworkflow.d.ts} (89%) rename dist/js/{subworkflows/subworkflow.js => Subworkflow.js} (83%) rename dist/js/{workflows/workflow.d.ts => Workflow.d.ts} (72%) rename dist/js/{workflows/workflow.js => Workflow.js} (84%) delete mode 100644 dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts delete mode 100644 dist/js/context/mixins/ContextAndRenderFieldsMixin.js delete mode 100644 dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts delete mode 100644 dist/js/context/mixins/ImportantSettingsProviderMixin.js delete mode 100644 dist/js/context/providers.d.ts delete mode 100644 dist/js/context/providers.js delete mode 100644 dist/js/context/providers/BoundaryConditionsFormDataProvider.d.ts delete mode 100644 dist/js/context/providers/BoundaryConditionsFormDataProvider.js delete mode 100644 dist/js/context/providers/CollinearMagnetizationContextProvider.d.ts delete mode 100644 dist/js/context/providers/CollinearMagnetizationContextProvider.js delete mode 100644 dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.d.ts delete mode 100644 dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.js delete mode 100644 dist/js/context/providers/Hubbard/HubbardJContextProvider.d.ts delete mode 100644 dist/js/context/providers/Hubbard/HubbardJContextProvider.js delete mode 100644 dist/js/context/providers/Hubbard/HubbardUContextProvider.d.ts delete mode 100644 dist/js/context/providers/Hubbard/HubbardUContextProvider.js delete mode 100644 dist/js/context/providers/Hubbard/HubbardVContextProvider.d.ts delete mode 100644 dist/js/context/providers/Hubbard/HubbardVContextProvider.js delete mode 100644 dist/js/context/providers/IonDynamicsContextProvider.d.ts delete mode 100644 dist/js/context/providers/IonDynamicsContextProvider.js delete mode 100644 dist/js/context/providers/MLSettingsContextProvider.d.ts delete mode 100644 dist/js/context/providers/MLSettingsContextProvider.js delete mode 100644 dist/js/context/providers/MLTrainTestSplitContextProvider.d.ts delete mode 100644 dist/js/context/providers/MLTrainTestSplitContextProvider.js delete mode 100644 dist/js/context/providers/NEBFormDataProvider.d.ts delete mode 100644 dist/js/context/providers/NEBFormDataProvider.js delete mode 100644 dist/js/context/providers/NonCollinearMagnetizationContextProvider.d.ts delete mode 100644 dist/js/context/providers/NonCollinearMagnetizationContextProvider.js delete mode 100644 dist/js/context/providers/PlanewaveCutoffsContextProvider.d.ts delete mode 100644 dist/js/context/providers/PlanewaveCutoffsContextProvider.js delete mode 100644 dist/js/context/providers/by_application/espresso/QENEBContextProvider.d.ts delete mode 100644 dist/js/context/providers/by_application/espresso/QENEBContextProvider.js delete mode 100644 dist/js/context/providers/by_application/espresso/QEPWXContextProvider.d.ts delete mode 100644 dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js delete mode 100644 dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.d.ts delete mode 100644 dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js delete mode 100644 dist/js/context/providers/by_application/vasp/VASPContextProvider.d.ts delete mode 100644 dist/js/context/providers/by_application/vasp/VASPContextProvider.js delete mode 100644 dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.d.ts delete mode 100644 dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.js rename dist/js/{subworkflows => }/convergence/ConvergenceParameter.d.ts (100%) rename dist/js/{subworkflows => }/convergence/ConvergenceParameter.js (100%) rename dist/js/{subworkflows => }/convergence/NonUniformKGridConvergence.d.ts (100%) rename dist/js/{subworkflows => }/convergence/NonUniformKGridConvergence.js (100%) rename dist/js/{subworkflows => }/convergence/UniformKGridConvergence.d.ts (100%) rename dist/js/{subworkflows => }/convergence/UniformKGridConvergence.js (100%) rename dist/js/{subworkflows => }/convergence/factory.d.ts (100%) rename dist/js/{subworkflows => }/convergence/factory.js (100%) delete mode 100644 dist/js/generated/ProcessingUnitSchemaMixin.d.ts delete mode 100644 dist/js/generated/ProcessingUnitSchemaMixin.js rename dist/js/{ => standata}/subworkflows/create.d.ts (94%) rename dist/js/{ => standata}/subworkflows/create.js (96%) rename dist/js/{ => standata}/subworkflows/dynamic/espresso/getQpointIrrep.d.ts (100%) rename dist/js/{ => standata}/subworkflows/dynamic/espresso/getQpointIrrep.js (95%) rename dist/js/{ => standata}/subworkflows/dynamic/index.d.ts (100%) rename dist/js/{ => standata}/subworkflows/dynamic/index.js (100%) rename dist/js/{ => standata}/subworkflows/dynamic/surfaceEnergy.d.ts (100%) rename dist/js/{ => standata}/subworkflows/dynamic/surfaceEnergy.js (100%) rename dist/js/{ => standata}/units/builders/AssertionUnitConfigBuilder.d.ts (100%) rename dist/js/{ => standata}/units/builders/AssertionUnitConfigBuilder.js (95%) rename dist/js/{ => standata}/units/builders/AssignmentUnitConfigBuilder.d.ts (100%) rename dist/js/{ => standata}/units/builders/AssignmentUnitConfigBuilder.js (96%) rename dist/js/{ => standata}/units/builders/ExecutionUnitConfigBuilder.d.ts (100%) rename dist/js/{ => standata}/units/builders/ExecutionUnitConfigBuilder.js (98%) rename dist/js/{ => standata}/units/builders/IOUnitConfigBuilder.d.ts (100%) rename dist/js/{ => standata}/units/builders/IOUnitConfigBuilder.js (97%) rename dist/js/{ => standata}/units/builders/UnitConfigBuilder.d.ts (100%) rename dist/js/{ => standata}/units/builders/UnitConfigBuilder.js (97%) rename dist/js/{ => standata}/units/builders/index.d.ts (100%) rename dist/js/{ => standata}/units/builders/index.js (100%) rename dist/js/{ => standata}/utils.d.ts (89%) rename dist/js/{ => standata}/utils.js (52%) rename dist/js/{ => standata}/workflows/create.d.ts (87%) rename dist/js/{ => standata}/workflows/create.js (88%) delete mode 100644 dist/js/subworkflows/convergence.d.ts delete mode 100644 dist/js/subworkflows/convergence.js delete mode 100644 dist/js/subworkflows/convergence/non_uniform_kgrid.d.ts delete mode 100644 dist/js/subworkflows/convergence/non_uniform_kgrid.js delete mode 100644 dist/js/subworkflows/convergence/parameter.d.ts delete mode 100644 dist/js/subworkflows/convergence/parameter.js delete mode 100644 dist/js/subworkflows/convergence/uniform_kgrid.d.ts delete mode 100644 dist/js/subworkflows/convergence/uniform_kgrid.js delete mode 100644 dist/js/subworkflows/index.d.ts delete mode 100644 dist/js/subworkflows/index.js rename dist/js/{ => units}/ExecutionUnitInput.d.ts (91%) rename dist/js/{ => units}/ExecutionUnitInput.js (100%) delete mode 100644 dist/js/units/ProcessingUnit.d.ts delete mode 100644 dist/js/units/ProcessingUnit.js rename dist/js/{ => units/mixins}/RuntimeItemsUILogicMixin.d.ts (100%) rename dist/js/{ => units/mixins}/RuntimeItemsUILogicMixin.js (97%) delete mode 100644 dist/js/workflows/index.d.ts delete mode 100644 dist/js/workflows/index.js delete mode 100644 dist/js/workflows/relaxation.d.ts delete mode 100644 dist/js/workflows/relaxation.js create mode 100644 dist/js/workflows/utils.d.ts create mode 100644 dist/js/workflows/utils.js rename src/js/{subworkflows/subworkflow.ts => Subworkflow.ts} (82%) rename src/js/{workflows/workflow.ts => Workflow.ts} (81%) delete mode 100644 src/js/context/mixins/ContextAndRenderFieldsMixin.ts delete mode 100644 src/js/context/mixins/ImportantSettingsProviderMixin.ts rename src/js/{subworkflows => }/convergence/ConvergenceParameter.ts (100%) rename src/js/{subworkflows => }/convergence/NonUniformKGridConvergence.ts (100%) rename src/js/{subworkflows => }/convergence/UniformKGridConvergence.ts (100%) rename src/js/{subworkflows => }/convergence/factory.ts (100%) rename src/js/{index.js => index.ts} (52%) create mode 100644 src/js/standata/README.md rename src/js/{ => standata}/subworkflows/create.js (97%) rename src/js/{ => standata}/subworkflows/dynamic/espresso/getQpointIrrep.js (95%) rename src/js/{ => standata}/subworkflows/dynamic/index.js (100%) rename src/js/{ => standata}/subworkflows/dynamic/surfaceEnergy.js (100%) rename src/js/{ => standata}/units/builders/AssertionUnitConfigBuilder.js (93%) rename src/js/{ => standata}/units/builders/AssignmentUnitConfigBuilder.js (95%) rename src/js/{ => standata}/units/builders/ExecutionUnitConfigBuilder.js (97%) rename src/js/{ => standata}/units/builders/IOUnitConfigBuilder.js (96%) rename src/js/{ => standata}/units/builders/UnitConfigBuilder.js (97%) rename src/js/{ => standata}/units/builders/index.js (100%) rename src/js/{ => standata}/utils.ts (57%) rename src/js/{ => standata}/workflows/create.js (93%) delete mode 100644 src/js/subworkflows/convergence.js delete mode 100644 src/js/subworkflows/index.js rename src/js/{ => units}/ExecutionUnitInput.ts (94%) rename src/js/{ => units/mixins}/RuntimeItemsUILogicMixin.ts (97%) delete mode 100644 src/js/workflows/index.js delete mode 100644 src/js/workflows/relaxation.js create mode 100644 src/js/workflows/utils.ts create mode 100644 tests/js/Workflow.test.ts delete mode 100644 tests/js/context.test.js delete mode 100644 tests/js/espresso.test.js delete mode 100644 tests/js/subworkflow.test.js delete mode 100644 tests/js/unit.test.js delete mode 100644 tests/js/workflow.test.js create mode 100644 tsconfig-transpile.json diff --git a/.babelrc b/.babelrc index 29815062..a7bf19af 100644 --- a/.babelrc +++ b/.babelrc @@ -8,7 +8,7 @@ } } ], - "@babel/preset-react", + "@babel/preset-react" ], "plugins": [ "@babel/plugin-proposal-class-properties" diff --git a/.eslintrc.json b/.eslintrc.json index e740de07..6d7a28ec 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,8 +3,7 @@ "@exabyte-io/eslint-config" ], "ignorePatterns": [ - "dist/", - "src/workflows/workflows.js" + "dist/" ], "settings": { "import/resolver": { diff --git a/.gitignore b/.gitignore index d8216a15..5c022456 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ node_modules/ .eslintcache .nyc_output/ .idea/ -src/workflows/workflows.js .DS_Store # Python diff --git a/.nycrc b/.nycrc index e1ffae4d..c8908b69 100644 --- a/.nycrc +++ b/.nycrc @@ -2,6 +2,30 @@ "all": true, "include": [ "src/**/*.js", - "src/**/*.jsx" + "src/**/*.jsx", + "src/**/*.ts" + ], + "exclude": [ + "src/js/generated/**/*", + "tests/**/*", + "**/*.test.ts", + "**/*.spec.ts", + "**/*.d.ts" + ], + "reporter": [ + "text", + "html", + "lcov" + ], + "check-coverage": true, + "branches": 80, + "lines": 85, + "functions": 80, + "statements": 85, + "sourceMap": true, + "instrument": true, + "require": [ + "ts-node/register" ] } + diff --git a/build_workflows.js b/build_workflows.js deleted file mode 100644 index 90fdf024..00000000 --- a/build_workflows.js +++ /dev/null @@ -1,65 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const yaml = require("js-yaml"); - -const allApplications = [ - "espresso", - "jupyterLab", - "nwchem", - "python", - "python/ml", - "shell", - "vasp", - "deepmd", -]; - -const allWorkflows = { workflows: {}, subworkflows: {} }; - -const JSONstringifyOrder = (obj, space) => { - const allKeys = new Set(); - // eslint-disable-next-line no-sequences - JSON.stringify(obj, (key, value) => (allKeys.add(key), value)); - return JSON.stringify(obj, Array.from(allKeys).sort(), space); -}; - -const loadFile = (name, dir, file, type) => { - const entryPath = path.resolve(dir, file); - if (!fs.statSync(entryPath).isFile()) { - console.log(`Skipping ${entryPath} as it is not a file.`); - return; - } - const obj = fs.readFileSync(path.resolve(dir, file), "utf8"); - const key = file.split(".")[0]; - allWorkflows[type][name][key] = yaml.load(obj); -}; - -allApplications.forEach((name) => { - allWorkflows.workflows[name] = {}; - allWorkflows.subworkflows[name] = {}; - const wfDir = path.resolve(__dirname, "assets", "workflows", name); - const swDir = path.resolve(__dirname, "assets", "subworkflows", name); - try { - const wfFiles = fs.readdirSync(wfDir); - const swFiles = fs.readdirSync(swDir); - console.log( - `Building ${name}: ${wfFiles.length} workflow(s) and ${swFiles.length} subworkflow(s)`, - ); - wfFiles.forEach((file) => loadFile(name, wfDir, file, "workflows")); - swFiles.forEach((file) => loadFile(name, swDir, file, "subworkflows")); - } catch (e) { - console.log(e); - } -}); - -const write_path = "workflows.js"; -// write to src for unit test coverage simplicity -fs.writeFileSync( - `./src/workflows/${write_path}`, - "module.exports = {workflowData: " + JSONstringifyOrder(allWorkflows) + "}", - "utf8", -); -fs.writeFileSync( - `./dist/workflows/${write_path}`, - "module.exports = {workflowData: " + JSONstringifyOrder(allWorkflows) + "}", - "utf8", -); diff --git a/dist/js/subworkflows/subworkflow.d.ts b/dist/js/Subworkflow.d.ts similarity index 89% rename from dist/js/subworkflows/subworkflow.d.ts rename to dist/js/Subworkflow.d.ts index 01ae52de..bebd2a9c 100644 --- a/dist/js/subworkflows/subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -6,9 +6,14 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ApplicationSchema, BaseMethod, BaseModel, JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; import { type Method, Model, ModelFactory } from "@mat3ra/mode"; -import { type SubworkflowSchemaMixin } from "../generated/SubworkflowSchemaMixin"; -import { SubworkflowUnit } from "../units"; -import type { AnySubworkflowUnit } from "../units/factory"; +import type { JobExternalContext } from "./context/mixins/JobContextMixin"; +import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; +import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; +import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; +import type { WorkflowExternalContext } from "./context/mixins/WorkflowContextMixin"; +import { type SubworkflowSchemaMixin } from "./generated/SubworkflowSchemaMixin"; +import { SubworkflowUnit } from "./units"; +import type { AnySubworkflowUnit } from "./units/factory"; type ConvergenceConfig = { parameter: "N_k" | "N_k_nonuniform"; parameterInitial: number | [number, number, number]; @@ -19,16 +24,20 @@ type ConvergenceConfig = { operator: string; tolerance: number; maxOccurrences: number; + externalContext: SubworkflowExternalContext; }; type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; +type SubworkflowExternalContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & WorkflowExternalContext & JobExternalContext; declare const Subworkflow_base: Base; -export declare class Subworkflow extends Subworkflow_base implements SubworkflowSchema { +export default class Subworkflow extends Subworkflow_base implements SubworkflowSchema { static usePredefinedIds: boolean; private ModelFactory; private applicationInstance; - modelInstance: Model; private unitsInstances; + modelInstance: Model; + properties: string[]; static createDefault: () => Subworkflow; + toJSON: () => SubworkflowSchema & AnyObject; constructor(config: SubworkflowSchema, _ModelFactory?: typeof ModelFactory); static generateSubworkflowId(name: string, application?: ApplicationSchema, model?: BaseModel, method?: BaseMethod): any; static get defaultConfig(): { @@ -47,19 +56,17 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow units: never[]; }; getAsUnit(): SubworkflowUnit; - static fromArguments(application: Application, model: Model, method: Method, name: string, units?: AnySubworkflowUnit[], config?: {}): Subworkflow; + static fromArguments(application: ApplicationSchema, model: Model, method: Method, name: string, units?: SubworkflowSchema["units"], config?: {}): Subworkflow; setApplication(application: Application): void; setModel(model: Model): void; - setUnits(units: AnySubworkflowUnit[]): void; - toJSON(exclude?: string[]): SubworkflowSchema & AnyObject; - private getContextFromAssignmentUnits; - render(context: Record): void; + private buildExternalContext; + render(context: SubworkflowExternalContext): void; /** * TODO: reuse workflow function instead */ private addUnit; + private setUnits; removeUnit(flowchartId: string): void; - get properties(): string[]; getUnit(flowchartId: string): AnySubworkflowUnit | undefined; unitIndex(flowchartId: string): number; replaceUnit(index: number, unit: AnySubworkflowUnit): void; @@ -127,43 +134,6 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow basename?: string; filetype?: string; })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "reduce"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - mapFlowchartId: string; - input: { - operation: string; - arguments: string[]; - }[]; } | { _id?: string; slug?: string; @@ -704,43 +674,6 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow }[]; operand: string; value: string | boolean | number; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "processing"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - operation: string; - operationType: string; - inputData: { - [k: string]: unknown; - }; } | undefined; findUnitKeyById(id: string): string; private findUnitWithTag; @@ -752,6 +685,6 @@ export declare class Subworkflow extends Subworkflow_base implements Subworkflow param: any; y: any; }[]; - addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, }: ConvergenceConfig): void; + addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, externalContext, }: ConvergenceConfig): void; } export {}; diff --git a/dist/js/subworkflows/subworkflow.js b/dist/js/Subworkflow.js similarity index 83% rename from dist/js/subworkflows/subworkflow.js rename to dist/js/Subworkflow.js index d783a7b0..4f558548 100644 --- a/dist/js/subworkflows/subworkflow.js +++ b/dist/js/Subworkflow.js @@ -1,31 +1,27 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Subworkflow = void 0; const ade_1 = require("@mat3ra/ade"); const entity_1 = require("@mat3ra/code/dist/js/entity"); const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const mode_1 = require("@mat3ra/mode"); const utils_1 = require("@mat3ra/utils"); -const underscore_1 = __importDefault(require("underscore")); -const enums_1 = require("../enums"); -const SubworkflowSchemaMixin_1 = require("../generated/SubworkflowSchemaMixin"); -const units_1 = require("../units"); -const utils_2 = require("../utils"); const factory_1 = require("./convergence/factory"); +const enums_1 = require("./enums"); +const SubworkflowSchemaMixin_1 = require("./generated/SubworkflowSchemaMixin"); +const units_1 = require("./units"); +const utils_2 = require("./workflows/utils"); class Subworkflow extends entity_1.InMemoryEntity { constructor(config, _ModelFactory = mode_1.ModelFactory) { super(config); + this.properties = []; this.ModelFactory = _ModelFactory; this.applicationInstance = new ade_1.Application(this.application); this.modelInstance = this.ModelFactory.create({ ...this.model, application: this.application, }); - this.unitsInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.units).map((cfg) => units_1.UnitFactory.createInSubworkflow(cfg))); + this.setUnits(this.units.map((cfg) => units_1.UnitFactory.createInSubworkflow(cfg))); } static generateSubworkflowId(name, application, model, method) { const appName = (application === null || application === void 0 ? void 0 : application.name) || ""; @@ -64,25 +60,28 @@ class Subworkflow extends entity_1.InMemoryEntity { */ static fromArguments(application, model, method, name, units = [], config = {}) { var _a; + // TODO: move to standata and fix types + // @ts-ignore const nameForIdGeneration = ((_a = config.attributes) === null || _a === void 0 ? void 0 : _a.name) || name; - const { functions, attributes, ...cleanConfig } = config; + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { functions: _functions, attributes: _attributes, ...cleanConfig } = config; // Set the method on the model so it can be properly serialized model.setMethod(method); return new Subworkflow({ ...cleanConfig, _id: Subworkflow.generateSubworkflowId(nameForIdGeneration, application, model, method), name, - application: application.toJSON(), + application, properties: Array.from(new Set(units - .filter((x) => x.resultNames) - .map((x) => x.resultNames) + .map((x) => { var _a; return ((_a = x.results) === null || _a === void 0 ? void 0 : _a.map((r) => r.name)) || []; }) .flat() .sort())), model: { ...model.toJSON(), method: method.toJSON(), }, - units: units.map((unit) => unit.toJSON()), + units, }); } setApplication(application) { @@ -110,23 +109,10 @@ class Subworkflow extends entity_1.InMemoryEntity { } setModel(model) { this.modelInstance = model; + this.model = model.toJSON(); } - setUnits(units) { - this.unitsInstances = units; - } - toJSON(exclude = []) { - return { - ...super.toJSON(exclude), - name: this.name, - properties: this.properties, - application: this.application, - model: this.modelInstance.toJSON(), - units: this.unitsInstances.map((x) => x.toJSON()), - ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation - }; - } - getContextFromAssignmentUnits() { - return this.unitsInstances + buildExternalContext(context) { + const subworkflowContext = this.units .filter((u) => u.type === enums_1.UnitType.assignment) .reduce((acc, u) => { return { @@ -134,17 +120,15 @@ class Subworkflow extends entity_1.InMemoryEntity { [u.operand]: u.value, }; }, {}); - } - render(context) { - const ctx = { + return { ...context, application: this.applicationInstance, - methodData: this.modelInstance.Method.data, - model: this.modelInstance.toJSON(), - // context below is assembled from context providers and passed to units to override theirs - // ...this.context, - subworkflowContext: this.getContextFromAssignmentUnits(), + methodData: this.model.method.data, + subworkflowContext, }; + } + render(context) { + const ctx = this.buildExternalContext(context); this.unitsInstances.forEach((u) => { if (u.type === enums_1.UnitType.execution) { u.render(ctx); @@ -157,7 +141,6 @@ class Subworkflow extends entity_1.InMemoryEntity { addUnit(unit, index = -1) { const { unitsInstances } = this; if (unitsInstances.length === 0) { - unit.head = true; this.setUnits([unit]); } else { @@ -167,31 +150,33 @@ class Subworkflow extends entity_1.InMemoryEntity { else { unitsInstances.push(unit); } - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(unitsInstances))); + this.setUnits(unitsInstances); } } + setUnits(units) { + // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer + this.unitsInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(units)); + this.units = units.map((x) => x.toJSON()); + this.properties = units.map((x) => x.resultNames).flat(); + } removeUnit(flowchartId) { const previousUnit = this.unitsInstances.find((x) => x.next === flowchartId); if (previousUnit) { previousUnit.unsetProp("next"); } - // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId)))); - } - get properties() { - return this.unitsInstances.map((x) => x.resultNames).flat(); + this.setUnits(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId)); } getUnit(flowchartId) { return this.unitsInstances.find((x) => x.flowchartId === flowchartId); } unitIndex(flowchartId) { - return this.unitsInstances.findIndex((unit) => { + return this.units.findIndex((unit) => { return unit.flowchartId === flowchartId; }); } replaceUnit(index, unit) { this.unitsInstances[index] = unit; - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.unitsInstances))); + this.setUnits(this.unitsInstances); } setIsDraft(bool) { this.isDraft = bool; @@ -208,7 +193,7 @@ class Subworkflow extends entity_1.InMemoryEntity { const meaningfulFields = { application: utils_1.Utils.specific.removeTimestampableKeysFromConfig(config.application), model: this.calculateModelHash(), - units: underscore_1.default.map(this.unitsInstances, (u) => u.calculateHash()).join(), + units: this.unitsInstances.map((u) => u.calculateHash()).join(), }; return utils_1.Utils.hash.calculateHashFromObject(meaningfulFields); } @@ -248,21 +233,23 @@ class Subworkflow extends entity_1.InMemoryEntity { if (!this.hasConvergence || !(scopeTrack === null || scopeTrack === void 0 ? void 0 : scopeTrack.length)) { return []; } - let lastResult; + let prevResult; return scopeTrack .map((scopeItem, i) => { var _a, _b; return { x: i, - // TODO-question: what is the type of scopeItem.scope?.global? + // TODO: fix types + // @ts-ignore param: (_a = scopeItem.scope) === null || _a === void 0 ? void 0 : _a.global[this.convergenceParam], + // @ts-ignore y: (_b = scopeItem.scope) === null || _b === void 0 ? void 0 : _b.global[this.convergenceResult], }; }) .filter(({ y }) => { - lastResult = y; - const isNewResult = y !== undefined && y !== lastResult; - return isNewResult; + const changed = prevResult !== y; + prevResult = y; + return changed; }) .map((item, i) => { return { @@ -272,7 +259,7 @@ class Subworkflow extends entity_1.InMemoryEntity { }; }); } - addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, }) { + addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, externalContext, }) { // Find unit to converge: should contain passed result in its results list // TODO: make user to select unit for convergence explicitly const unitForConvergence = this.unitsInstances @@ -281,9 +268,6 @@ class Subworkflow extends entity_1.InMemoryEntity { return x.resultNames.find((name) => name === result); }); if (!unitForConvergence) { - // sAlert.error( - // `Subworkflow does not contain unit with '${result}' as extracted property.`, - // ); throw new Error(`Subworkflow does not contain unit with '${result}' as extracted property.`); } // initialize parameter @@ -292,7 +276,8 @@ class Subworkflow extends entity_1.InMemoryEntity { initialValue: parameterInitial, increment: parameterIncrement, }); - unitForConvergence.addConvergenceContext(convergenceParameter, {}); + const context = this.buildExternalContext(externalContext); + unitForConvergence.addConvergenceContext(convergenceParameter, context); const prevResult = "prev_result"; const iteration = "iteration"; // Assignment with result's initial value @@ -384,8 +369,8 @@ class Subworkflow extends entity_1.InMemoryEntity { nextStep.next = unitForConvergence.flowchartId; } } -exports.Subworkflow = Subworkflow; Subworkflow.usePredefinedIds = false; +exports.default = Subworkflow; (0, NamedEntityMixin_1.namedEntityMixin)(Subworkflow.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Subworkflow); (0, SubworkflowSchemaMixin_1.subworkflowSchemaMixin)(Subworkflow.prototype); diff --git a/dist/js/workflows/workflow.d.ts b/dist/js/Workflow.d.ts similarity index 72% rename from dist/js/workflows/workflow.d.ts rename to dist/js/Workflow.d.ts index 6ae6280a..dbad18f3 100644 --- a/dist/js/workflows/workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -4,12 +4,18 @@ import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; -import { UnitType } from "../enums"; -import { type WorkflowSchemaMixin } from "../generated/WorkflowSchemaMixin"; -import { Subworkflow } from "../subworkflows/subworkflow"; -import { MapUnit } from "../units"; -import { type AnyUnit } from "../units/factory"; +import type { JobExternalContext } from "./context/mixins/JobContextMixin"; +import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; +import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; +import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; +import { UnitType } from "./enums"; +import { type WorkflowSchemaMixin } from "./generated/WorkflowSchemaMixin"; +import Subworkflow from "./Subworkflow"; +import { MapUnit } from "./units"; +import { type AnyWorkflowUnit } from "./units/factory"; type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; +/** Context passed to Workflow.render() before workflow reference is injected for subworkflows. */ +type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & JobExternalContext; declare const Workflow_base: Base; export declare class Workflow extends Workflow_base { static usePredefinedIds: boolean; @@ -28,8 +34,10 @@ export declare class Workflow extends Workflow_base { set workflows(value: WorkflowSchema[] | undefined); addSubworkflow(subworkflow: Subworkflow, head?: boolean, index?: number): void; removeSubworkflow(id: string): void; - setUnits(arr: AnyUnit[]): void; + setUnits(arr: AnyWorkflowUnit[]): void; + render(context: WorkflowRenderContext): void; get usedApplications(): ApplicationSchema[]; + get usedApplicationNames(): string[]; get usedApplicationVersions(): string[]; get usedApplicationNamesWithVersions(): string[]; get usedModels(): ("dft" | "ml" | "unknown")[]; diff --git a/dist/js/workflows/workflow.js b/dist/js/Workflow.js similarity index 84% rename from dist/js/workflows/workflow.js rename to dist/js/Workflow.js index e1aca5bf..cf6493e3 100644 --- a/dist/js/workflows/workflow.js +++ b/dist/js/Workflow.js @@ -11,16 +11,14 @@ const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/ess const mode_1 = require("@mat3ra/mode"); const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); -// import { mix } from "mixwith"; -const underscore_1 = __importDefault(require("underscore")); -const underscore_string_1 = __importDefault(require("underscore.string")); -const enums_1 = require("../enums"); -const WorkflowSchemaMixin_1 = require("../generated/WorkflowSchemaMixin"); -const subworkflow_1 = require("../subworkflows/subworkflow"); -const units_1 = require("../units"); -const factory_1 = require("../units/factory"); -const utils_2 = require("../utils"); -const default_1 = __importDefault(require("./default")); +const slugify_1 = __importDefault(require("slugify")); +const enums_1 = require("./enums"); +const WorkflowSchemaMixin_1 = require("./generated/WorkflowSchemaMixin"); +const Subworkflow_1 = __importDefault(require("./Subworkflow")); +const units_1 = require("./units"); +const factory_1 = require("./units/factory"); +const default_1 = __importDefault(require("./workflows/default")); +const utils_2 = require("./workflows/utils"); const { MODEL_NAMES } = mode_1.tree; class Workflow extends entity_1.InMemoryEntity { static get jsonSchema() { @@ -43,7 +41,7 @@ class Workflow extends entity_1.InMemoryEntity { const config = { name: subworkflow.name, subworkflows: [subworkflow.toJSON()], - units: (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)([subworkflow.getAsUnit().toJSON()])), + units: [subworkflow.getAsUnit().toJSON()], properties: subworkflow.properties, applicationName: subworkflow.application.name, workflows: [], @@ -64,9 +62,9 @@ class Workflow extends entity_1.InMemoryEntity { } } super(config); - this.subworkflowInstances = this.subworkflows.map((x) => new subworkflow_1.Subworkflow(x)); - this.unitInstances = this.units.map((unit) => factory_1.UnitFactory.createInWorkflow(unit)); + this.subworkflowInstances = this.subworkflows.map((x) => new Subworkflow_1.default(x)); this.workflowInstances = ((_a = this.workflows) === null || _a === void 0 ? void 0 : _a.map((x) => new Workflow(x))) || []; + this.setUnits(this.units.map((unit) => factory_1.UnitFactory.createInWorkflow(unit))); } get workflows() { return this.prop("workflows"); @@ -92,7 +90,15 @@ class Workflow extends entity_1.InMemoryEntity { } } setUnits(arr) { - this.unitInstances = arr; + this.unitInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(arr)); + } + render(context) { + this.subworkflowInstances.forEach((sw) => { + sw.render({ + ...context, + workflow: this, + }); + }); } get usedApplications() { const swApplications = this.subworkflows.map((sw) => sw.application); @@ -106,9 +112,9 @@ class Workflow extends entity_1.InMemoryEntity { return usedApplications; } // return application names - // get usedApplicationNames() { - // return this.usedApplications.map((a) => a.name); - // } + get usedApplicationNames() { + return this.usedApplications.map((a) => a.name); + } get usedApplicationVersions() { return this.usedApplications.map((a) => a.version); } @@ -135,22 +141,23 @@ class Workflow extends entity_1.InMemoryEntity { return [...new Set(this.subworkflows.map((x) => x.properties || []).flat())]; } get humanReadableProperties() { - return this.properties.map((name) => underscore_string_1.default.humanize(name)); + return this.properties.map((name) => name + .split("_") + .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) + .join(" ")); } get systemName() { const applicationNames = this.usedApplications.map((a) => a.name); - return underscore_string_1.default.slugify(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); + return (0, slugify_1.default)(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); } get defaultDescription() { return `${this.usedModels.join(", ").toUpperCase()} workflow using ${this.usedApplications .map((a) => a.name) .join(", ")}.`; } - // TODO-question: clarify head logic addUnit(unit, head = false, index = -1) { const [...unitInstances] = this.unitInstances; if (unitInstances.length === 0) { - unit.head = true; this.setUnits([unit]); } else { @@ -163,7 +170,7 @@ class Workflow extends entity_1.InMemoryEntity { else { unitInstances.push(unit); } - this.setUnits((0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(unitInstances))); + this.setUnits(unitInstances); } } removeUnit(flowchartId) { @@ -179,7 +186,7 @@ class Workflow extends entity_1.InMemoryEntity { delete previousUnit.next; } this.subworkflowInstances = this.subworkflowInstances.filter((x) => x.id !== unit.id); - this.unitInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(this.unitInstances.filter((x) => x.flowchartId !== flowchartId))); + this.setUnits(this.unitInstances.filter((x) => x.flowchartId !== flowchartId)); } /* * @param type {String|Object} Unit type, map or subworkflow @@ -202,7 +209,7 @@ class Workflow extends entity_1.InMemoryEntity { break; } case enums_1.UnitType.subworkflow: - this.addSubworkflow(subworkflow_1.Subworkflow.createDefault(), head, index); + this.addSubworkflow(Subworkflow_1.default.createDefault(), head, index); break; default: console.log(`unit_type=${type} unrecognized, skipping.`); @@ -232,9 +239,9 @@ class Workflow extends entity_1.InMemoryEntity { */ calculateHash() { const meaningfulFields = { - units: underscore_1.default.map(this.unitInstances, (u) => u.calculateHash()).join(), - subworkflows: underscore_1.default.map(this.subworkflowInstances, (sw) => sw.calculateHash()).join(), - workflows: underscore_1.default.map(this.workflowInstances, (w) => w.calculateHash()).join(), + units: this.unitInstances.map((u) => u.calculateHash()).join(), + subworkflows: this.subworkflowInstances.map((sw) => sw.calculateHash()).join(), + workflows: this.workflowInstances.map((w) => w.calculateHash()).join(), }; return utils_1.Utils.hash.calculateHashFromObject(meaningfulFields); } @@ -249,7 +256,7 @@ class Workflow extends entity_1.InMemoryEntity { else { const vcRelax = this.getStandataRelaxationSubworkflow(); if (vcRelax) { - this.addSubworkflow(new subworkflow_1.Subworkflow(vcRelax), true); + this.addSubworkflow(new Subworkflow_1.default(vcRelax), true); } } } diff --git a/dist/js/context/mixins/ApplicationContextMixin.d.ts b/dist/js/context/mixins/ApplicationContextMixin.d.ts index cb6fba53..0b51f031 100644 --- a/dist/js/context/mixins/ApplicationContextMixin.d.ts +++ b/dist/js/context/mixins/ApplicationContextMixin.d.ts @@ -1,10 +1,10 @@ import type { Application } from "@mat3ra/ade"; import type ContextProvider from "../providers/base/ContextProvider"; export type ApplicationContextMixin = { - readonly application: Application; + application: Application; initApplicationContextMixin(externalContext: ApplicationExternalContext): void; }; export type ApplicationExternalContext = { - application?: Application; + application: Application; }; -export declare function applicationContextMixin(item: ContextProvider): void; +export default function applicationContextMixin(item: ContextProvider): void; diff --git a/dist/js/context/mixins/ApplicationContextMixin.js b/dist/js/context/mixins/ApplicationContextMixin.js index b93cbee6..2da5900b 100644 --- a/dist/js/context/mixins/ApplicationContextMixin.js +++ b/dist/js/context/mixins/ApplicationContextMixin.js @@ -1,14 +1,11 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.applicationContextMixin = applicationContextMixin; -const settings_1 = require("../providers/settings"); +exports.default = applicationContextMixin; function applicationContextMixin(item) { // @ts-expect-error const properties = { initApplicationContextMixin(externalContext) { - var _a; - this.application = - (_a = externalContext.application) !== null && _a !== void 0 ? _a : settings_1.globalSettings.Application.createDefault(); + this.application = externalContext.application; }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); diff --git a/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts b/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts deleted file mode 100644 index fdf4e8c9..00000000 --- a/dist/js/context/mixins/ContextAndRenderFieldsMixin.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -export type Context = AnyObject; -export type ContextMixin = { - context: Context; - renderingContext: Context; - getRenderingContext(): Context; - updateRenderingContext(ctx: Context): void; - getPersistentContext(): Context; - updatePersistentContext(ctx: Context): void; - getCombinedContext(): Context; -}; -export declare function contextMixin(item: T): asserts item is T & ContextMixin; diff --git a/dist/js/context/mixins/ContextAndRenderFieldsMixin.js b/dist/js/context/mixins/ContextAndRenderFieldsMixin.js deleted file mode 100644 index 7f0b0a7f..00000000 --- a/dist/js/context/mixins/ContextAndRenderFieldsMixin.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.contextMixin = contextMixin; -function contextMixin(item) { - // @ts-expect-error - const properties = { - get context() { - return this.requiredProp("context"); - }, - set context(ctx) { - this.setProp("context", ctx); - }, - renderingContext: {}, - updateRenderingContext(ctx) { - this.context = { ...this.renderingContext, ...ctx }; - }, - getRenderingContext() { - return this.renderingContext; - }, - getPersistentContext() { - return this.context; - }, - updatePersistentContext(ctx) { - this.context = { ...ctx }; - }, - getCombinedContext() { - return { - ...this.getPersistentContext(), - ...this.getRenderingContext(), - }; - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts b/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts deleted file mode 100644 index 58acb9ca..00000000 --- a/dist/js/context/mixins/ImportantSettingsProviderMixin.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -export type ImportantSettingsProvider = { - important: object; - setImportant(key: string, value: unknown): void; - isImportantEdited: boolean | undefined; -}; -export type ImportantSettingsProviderInMemoryEntityConstructor = Constructor; -export declare function importantSettingsProviderMixin(item: T): asserts item is T & ImportantSettingsProvider; diff --git a/dist/js/context/mixins/ImportantSettingsProviderMixin.js b/dist/js/context/mixins/ImportantSettingsProviderMixin.js deleted file mode 100644 index c179f193..00000000 --- a/dist/js/context/mixins/ImportantSettingsProviderMixin.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.importantSettingsProviderMixin = importantSettingsProviderMixin; -const clone_1 = require("@mat3ra/code/dist/js/utils/clone"); -function importantSettingsProviderMixin(item) { - // @ts-expect-error - const properties = { - get important() { - return (0, clone_1.deepClone)(this._json.important || {}); - }, - setImportant(key, value) { - this.setProp("important", { [key]: value }); - }, - get isImportantEdited() { - return this.prop("important.isEdited"); - }, - set isImportantEdited(bool) { - this.setProp("important", Object.assign(this.important, { isEdited: bool })); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/dist/js/context/mixins/MaterialsSetContextMixin.d.ts b/dist/js/context/mixins/MaterialsSetContextMixin.d.ts index 6fc96c31..4913657a 100644 --- a/dist/js/context/mixins/MaterialsSetContextMixin.d.ts +++ b/dist/js/context/mixins/MaterialsSetContextMixin.d.ts @@ -4,10 +4,10 @@ type MaterialsSet = { _id: string; }; export type MaterialsSetExternalContext = { - materialsSet: MaterialsSet; + materialsSet?: MaterialsSet; }; export type MaterialsSetContextMixin = { - materialsSet: MaterialsSet; + materialsSet?: MaterialsSet; initMaterialsSetContextMixin(externalContext: MaterialsSetExternalContext): void; sortMaterialsByIndexInSet(materials?: OrderedMaterial[]): OrderedMaterial[]; }; diff --git a/dist/js/context/mixins/MaterialsSetContextMixin.js b/dist/js/context/mixins/MaterialsSetContextMixin.js index c9ce29f5..a88c53a0 100644 --- a/dist/js/context/mixins/MaterialsSetContextMixin.js +++ b/dist/js/context/mixins/MaterialsSetContextMixin.js @@ -9,9 +9,13 @@ function materialsSetContextMixin(item) { this.materialsSet = externalContext.materialsSet; }, sortMaterialsByIndexInSet(materials = []) { + const { materialsSet } = this; + if (!materialsSet) { + return materials; + } // DO NOT SORT IN PLACE AS IT CHANGES THE ORDER IN `this.materials` AND HAS SIDE EFFECTS (MaterialViewer). - return materials.concat().sort((a, b) => { - return (0, utils_1.compareEntitiesInOrderedSetForSorting)(a, b, this.materialsSet._id, false); + return [...materials].sort((a, b) => { + return (0, utils_1.compareEntitiesInOrderedSetForSorting)(a, b, materialsSet._id, false); }); }, }; diff --git a/dist/js/context/mixins/WorkflowContextMixin.d.ts b/dist/js/context/mixins/WorkflowContextMixin.d.ts index 196a4f24..52abb53e 100644 --- a/dist/js/context/mixins/WorkflowContextMixin.d.ts +++ b/dist/js/context/mixins/WorkflowContextMixin.d.ts @@ -1,8 +1,5 @@ -import type { WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import type { Workflow } from "../../Workflow"; import type ContextProvider from "../providers/base/ContextProvider"; -type Workflow = WorkflowSchema & { - hasRelaxation?: boolean; -}; export type WorkflowContextMixin = { isEdited: boolean; workflow: Workflow; @@ -12,4 +9,3 @@ export type WorkflowExternalContext = { workflow: Workflow; }; export default function workflowContextMixin(item: ContextProvider): void; -export {}; diff --git a/dist/js/context/providers.d.ts b/dist/js/context/providers.d.ts deleted file mode 100644 index 82ea9df5..00000000 --- a/dist/js/context/providers.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import BoundaryConditionsFormDataProvider from "./providers/BoundaryConditionsFormDataProvider"; -import QENEBContextProvider from "./providers/by_application/espresso/QENEBContextProvider"; -import QEPWXContextProvider from "./providers/by_application/espresso/QEPWXContextProvider"; -import NWChemTotalEnergyContextProvider from "./providers/by_application/nwchem/NWChemTotalEnergyContextProvider"; -import VASPContextProvider from "./providers/by_application/vasp/VASPContextProvider"; -import VASPNEBContextProvider from "./providers/by_application/vasp/VASPNEBContextProvider"; -import CollinearMagnetizationContextProvider from "./providers/CollinearMagnetizationContextProvider"; -import HubbardContextProviderLegacy from "./providers/Hubbard/HubbardContextProviderLegacy"; -import HubbardJContextProvider from "./providers/Hubbard/HubbardJContextProvider"; -import HubbardUContextProvider from "./providers/Hubbard/HubbardUContextProvider"; -import HubbardVContextProvider from "./providers/Hubbard/HubbardVContextProvider"; -import IonDynamicsContextProvider from "./providers/IonDynamicsContextProvider"; -import MLSettingsContextProvider from "./providers/MLSettingsContextProvider"; -import MLTrainTestSplitContextProvider from "./providers/MLTrainTestSplitContextProvider"; -import NEBFormDataProvider from "./providers/NEBFormDataProvider"; -import NonCollinearMagnetizationContextProvider from "./providers/NonCollinearMagnetizationContextProvider"; -import PlanewaveCutoffsContextProvider from "./providers/PlanewaveCutoffsContextProvider"; -import IGridFormDataManager from "./providers/PointsGrid/IGridFormDataManager"; -import KGridFormDataManager from "./providers/PointsGrid/KGridFormDataManager"; -import QGridFormDataManager from "./providers/PointsGrid/QGridFormDataManager"; -import ExplicitKPath2PIBAFormDataManager from "./providers/PointsPath/ExplicitKPath2PIBAFormDataManager"; -import ExplicitKPathFormDataManager from "./providers/PointsPath/ExplicitKPathFormDataManager"; -import IPathFormDataManager from "./providers/PointsPath/IPathFormDataManager"; -import KPathFormDataManager from "./providers/PointsPath/KPathFormDataManager"; -import QPathFormDataManager from "./providers/PointsPath/QPathFormDataManager"; -/** ******************************** - * Method-based context providers * - ********************************* */ -export declare const newWodeProviders: { - PlanewaveCutoffDataManager: typeof PlanewaveCutoffsContextProvider; - KGridFormDataManager: typeof KGridFormDataManager; - QGridFormDataManager: typeof QGridFormDataManager; - IGridFormDataManager: typeof IGridFormDataManager; - QPathFormDataManager: typeof QPathFormDataManager; - IPathFormDataManager: typeof IPathFormDataManager; - KPathFormDataManager: typeof KPathFormDataManager; - ExplicitKPathFormDataManager: typeof ExplicitKPathFormDataManager; - ExplicitKPath2PIBAFormDataManager: typeof ExplicitKPath2PIBAFormDataManager; - HubbardJContextManager: typeof HubbardJContextProvider; - HubbardUContextManager: typeof HubbardUContextProvider; - HubbardVContextManager: typeof HubbardVContextProvider; - HubbardContextManagerLegacy: typeof HubbardContextProviderLegacy; - NEBFormDataManager: typeof NEBFormDataProvider; - BoundaryConditionsFormDataManager: typeof BoundaryConditionsFormDataProvider; - MLSettingsDataManager: typeof MLSettingsContextProvider; - MLTrainTestSplitDataManager: typeof MLTrainTestSplitContextProvider; - IonDynamicsContextProvider: typeof IonDynamicsContextProvider; - CollinearMagnetizationDataManager: typeof CollinearMagnetizationContextProvider; - NonCollinearMagnetizationDataManager: typeof NonCollinearMagnetizationContextProvider; - QEPWXInputDataManager: typeof QEPWXContextProvider; - QENEBInputDataManager: typeof QENEBContextProvider; - VASPInputDataManager: typeof VASPContextProvider; - VASPNEBInputDataManager: typeof VASPNEBContextProvider; - NWChemInputDataManager: typeof NWChemTotalEnergyContextProvider; -}; diff --git a/dist/js/context/providers.js b/dist/js/context/providers.js deleted file mode 100644 index 21b20dea..00000000 --- a/dist/js/context/providers.js +++ /dev/null @@ -1,179 +0,0 @@ -"use strict"; -// import type { ContextProviderNameEnum as ProviderName } from "@mat3ra/esse/dist/js/types"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.newWodeProviders = void 0; -// import type ContextProvider from "./providers/base/ContextProvider"; -// import type { ContextItem } from "./providers/base/ContextProvider"; -const BoundaryConditionsFormDataProvider_1 = __importDefault(require("./providers/BoundaryConditionsFormDataProvider")); -const QENEBContextProvider_1 = __importDefault(require("./providers/by_application/espresso/QENEBContextProvider")); -const QEPWXContextProvider_1 = __importDefault(require("./providers/by_application/espresso/QEPWXContextProvider")); -const NWChemTotalEnergyContextProvider_1 = __importDefault(require("./providers/by_application/nwchem/NWChemTotalEnergyContextProvider")); -const VASPContextProvider_1 = __importDefault(require("./providers/by_application/vasp/VASPContextProvider")); -const VASPNEBContextProvider_1 = __importDefault(require("./providers/by_application/vasp/VASPNEBContextProvider")); -const CollinearMagnetizationContextProvider_1 = __importDefault(require("./providers/CollinearMagnetizationContextProvider")); -const HubbardContextProviderLegacy_1 = __importDefault(require("./providers/Hubbard/HubbardContextProviderLegacy")); -const HubbardJContextProvider_1 = __importDefault(require("./providers/Hubbard/HubbardJContextProvider")); -const HubbardUContextProvider_1 = __importDefault(require("./providers/Hubbard/HubbardUContextProvider")); -const HubbardVContextProvider_1 = __importDefault(require("./providers/Hubbard/HubbardVContextProvider")); -const IonDynamicsContextProvider_1 = __importDefault(require("./providers/IonDynamicsContextProvider")); -const MLSettingsContextProvider_1 = __importDefault(require("./providers/MLSettingsContextProvider")); -const MLTrainTestSplitContextProvider_1 = __importDefault(require("./providers/MLTrainTestSplitContextProvider")); -const NEBFormDataProvider_1 = __importDefault(require("./providers/NEBFormDataProvider")); -const NonCollinearMagnetizationContextProvider_1 = __importDefault(require("./providers/NonCollinearMagnetizationContextProvider")); -const PlanewaveCutoffsContextProvider_1 = __importDefault(require("./providers/PlanewaveCutoffsContextProvider")); -const IGridFormDataManager_1 = __importDefault(require("./providers/PointsGrid/IGridFormDataManager")); -const KGridFormDataManager_1 = __importDefault(require("./providers/PointsGrid/KGridFormDataManager")); -const QGridFormDataManager_1 = __importDefault(require("./providers/PointsGrid/QGridFormDataManager")); -const ExplicitKPath2PIBAFormDataManager_1 = __importDefault(require("./providers/PointsPath/ExplicitKPath2PIBAFormDataManager")); -const ExplicitKPathFormDataManager_1 = __importDefault(require("./providers/PointsPath/ExplicitKPathFormDataManager")); -const IPathFormDataManager_1 = __importDefault(require("./providers/PointsPath/IPathFormDataManager")); -const KPathFormDataManager_1 = __importDefault(require("./providers/PointsPath/KPathFormDataManager")); -const QPathFormDataManager_1 = __importDefault(require("./providers/PointsPath/QPathFormDataManager")); -// const CONTEXT_DOMAINS = { -// important: "important", // used to generate `ImportantSettings` form -// }; -// export type ProvidersConfig = Record< -// ProviderName, -// new ( -// config: ContextItem, -// domain?: string, -// entityName?: "unit" | "subworkflow", -// ) => ContextProvider -// >; -/** ******************************** - * Method-based context providers * - ********************************* */ -// export const wodeProviders = { -// // NOTE: subworkflow-level data manager. Will override the unit-level data with the same name via subworkflow context. -// PlanewaveCutoffDataManager: { -// providerCls: PlanewaveCutoffsContextProvider, -// config: _makeImportant({ name: "cutoffs", entityName: "subworkflow" }), -// }, -// KGridFormDataManager: { -// providerCls: PointsGridFormDataProvider, -// config: _makeImportant({ name: "kgrid" }), -// }, -// QGridFormDataManager: { -// providerCls: PointsGridFormDataProvider, -// config: _makeImportant({ name: "qgrid", divisor: 5 }), // Using less points for Qgrid by default -// }, -// IGridFormDataManager: { -// providerCls: PointsGridFormDataProvider, -// config: _makeImportant({ name: "igrid", divisor: 0.2 }), // Using more points for interpolated grid by default -// }, -// QPathFormDataManager: { -// providerCls: PointsPathFormDataProvider, -// config: _makeImportant({ name: "qpath" }), -// }, -// IPathFormDataManager: { -// providerCls: PointsPathFormDataProvider, -// config: _makeImportant({ name: "ipath" }), -// }, -// KPathFormDataManager: { -// providerCls: PointsPathFormDataProvider, -// config: _makeImportant({ name: "kpath" }), -// }, -// ExplicitKPathFormDataManager: { -// providerCls: ExplicitPointsPathFormDataProvider, -// config: _makeImportant({ name: "explicitKPath" }), -// }, -// ExplicitKPath2PIBAFormDataManager: { -// providerCls: ExplicitPointsPath2PIBAFormDataProvider, -// config: _makeImportant({ name: "explicitKPath2PIBA" }), -// }, -// HubbardJContextManager: { -// providerCls: HubbardJContextProvider, -// config: _makeImportant({ name: "hubbard_j" }), -// }, -// HubbardUContextManager: { -// providerCls: HubbardUContextProvider, -// config: _makeImportant({ name: "hubbard_u" }), -// }, -// HubbardVContextManager: { -// providerCls: HubbardVContextProvider, -// config: _makeImportant({ name: "hubbard_v" }), -// }, -// HubbardContextManagerLegacy: { -// providerCls: HubbardContextProviderLegacy, -// config: _makeImportant({ name: "hubbard_legacy" }), -// }, -// // NEBFormDataManager context is stored under the same key (`input`) as InputDataManager contexts. -// NEBFormDataManager: { -// providerCls: NEBFormDataProvider, -// config: _makeImportant({ name: "neb" }), -// }, -// BoundaryConditionsFormDataManager: { -// providerCls: BoundaryConditionsFormDataProvider, -// config: _makeImportant({ name: "boundaryConditions" }), -// }, -// MLSettingsDataManager: { -// providerCls: MLSettingsContextProvider, -// config: _makeImportant({ name: "mlSettings" }), -// }, -// MLTrainTestSplitDataManager: { -// providerCls: MLTrainTestSplitContextProvider, -// config: _makeImportant({ name: "mlTrainTestSplit" }), -// }, -// IonDynamicsContextProvider: { -// providerCls: IonDynamicsContextProvider, -// config: _makeImportant({ name: "dynamics" }), -// }, -// CollinearMagnetizationDataManager: { -// providerCls: CollinearMagnetizationContextProvider, -// config: _makeImportant({ name: "collinearMagnetization" }), -// }, -// NonCollinearMagnetizationDataManager: { -// providerCls: NonCollinearMagnetizationContextProvider, -// config: _makeImportant({ name: "nonCollinearMagnetization" }), -// }, -// QEPWXInputDataManager: { -// providerCls: QEPWXContextProvider, -// config: { name: "input" }, -// }, -// QENEBInputDataManager: { -// providerCls: QENEBContextProvider, -// config: { name: "input" }, -// }, -// VASPInputDataManager: { -// providerCls: VASPContextProvider, -// config: { name: "input" }, -// }, -// VASPNEBInputDataManager: { -// providerCls: VASPNEBContextProvider, -// config: { name: "input" }, -// }, -// NWChemInputDataManager: { -// providerCls: NWChemTotalEnergyContextProvider, -// config: { name: "input" }, -// }, -// }; -exports.newWodeProviders = { - PlanewaveCutoffDataManager: PlanewaveCutoffsContextProvider_1.default, - KGridFormDataManager: KGridFormDataManager_1.default, - QGridFormDataManager: QGridFormDataManager_1.default, - IGridFormDataManager: IGridFormDataManager_1.default, - QPathFormDataManager: QPathFormDataManager_1.default, - IPathFormDataManager: IPathFormDataManager_1.default, - KPathFormDataManager: KPathFormDataManager_1.default, - ExplicitKPathFormDataManager: ExplicitKPathFormDataManager_1.default, - ExplicitKPath2PIBAFormDataManager: ExplicitKPath2PIBAFormDataManager_1.default, - HubbardJContextManager: HubbardJContextProvider_1.default, - HubbardUContextManager: HubbardUContextProvider_1.default, - HubbardVContextManager: HubbardVContextProvider_1.default, - HubbardContextManagerLegacy: HubbardContextProviderLegacy_1.default, - NEBFormDataManager: NEBFormDataProvider_1.default, - BoundaryConditionsFormDataManager: BoundaryConditionsFormDataProvider_1.default, - MLSettingsDataManager: MLSettingsContextProvider_1.default, - MLTrainTestSplitDataManager: MLTrainTestSplitContextProvider_1.default, - IonDynamicsContextProvider: IonDynamicsContextProvider_1.default, - CollinearMagnetizationDataManager: CollinearMagnetizationContextProvider_1.default, - NonCollinearMagnetizationDataManager: NonCollinearMagnetizationContextProvider_1.default, - QEPWXInputDataManager: QEPWXContextProvider_1.default, - QENEBInputDataManager: QENEBContextProvider_1.default, - VASPInputDataManager: VASPContextProvider_1.default, - VASPNEBInputDataManager: VASPNEBContextProvider_1.default, - NWChemInputDataManager: NWChemTotalEnergyContextProvider_1.default, -}; diff --git a/dist/js/context/providers/BoundaryConditionsFormDataProvider.d.ts b/dist/js/context/providers/BoundaryConditionsFormDataProvider.d.ts deleted file mode 100644 index 61f6d123..00000000 --- a/dist/js/context/providers/BoundaryConditionsFormDataProvider.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { BoundaryConditionsDataProviderSchema } from "@mat3ra/esse/dist/js/types"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "./base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "boundaryConditions"; -type Data = BoundaryConditionsDataProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; -declare const BoundaryConditionsFormDataProvider_base: Base; -export default class BoundaryConditionsFormDataProvider extends BoundaryConditionsFormDataProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly humanName = "Boundary Conditions"; - readonly uiSchema: { - type: { - "ui:disabled": boolean; - }; - offset: { - "ui:disabled": boolean; - }; - electricField: {}; - targetFermiEnergy: {}; - }; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): Data; - get jsonSchema(): import("json-schema").JSONSchema7 | undefined; -} -export {}; diff --git a/dist/js/context/providers/BoundaryConditionsFormDataProvider.js b/dist/js/context/providers/BoundaryConditionsFormDataProvider.js deleted file mode 100644 index 3dd1d4ca..00000000 --- a/dist/js/context/providers/BoundaryConditionsFormDataProvider.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/boundary-conditions-data-provider"; -class BoundaryConditionsFormDataProvider extends JSONSchemaDataProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "boundaryConditions"; - this.domain = "important"; - this.humanName = "Boundary Conditions"; - this.uiSchema = { - type: { "ui:disabled": true }, - offset: { "ui:disabled": true }, - electricField: {}, - targetFermiEnergy: {}, - }; - this.initMaterialContextMixin(externalContext); - } - getDefaultData() { - var _a, _b, _c, _d, _e, _f; - return { - type: ((_c = (_b = (_a = this.material) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.boundaryConditions) === null || _c === void 0 ? void 0 : _c.type) || "pbc", - offset: ((_f = (_e = (_d = this.material) === null || _d === void 0 ? void 0 : _d.metadata) === null || _e === void 0 ? void 0 : _e.boundaryConditions) === null || _f === void 0 ? void 0 : _f.offset) || 0, - electricField: 0, - targetFermiEnergy: 0, - }; - } - // yieldDataForRendering() { - // const data = Utils.clone.deepClone(this.getContextItem()); - // data.boundaryConditions.offset *= Made.coefficients.ANGSTROM_TO_BOHR; - // data.boundaryConditions.targetFermiEnergy *= Made.coefficients.EV_TO_RY; - // data.boundaryConditions.electricField *= Made.coefficients.EV_A_TO_RY_BOHR; - // return data; - // } - get jsonSchema() { - const defaults = this.getDefaultData(); - return JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - type: { default: defaults.type }, - offset: { default: defaults.offset }, - electricField: { default: defaults.electricField }, - targetFermiEnergy: { default: defaults.targetFermiEnergy }, - }); - } -} -exports.default = BoundaryConditionsFormDataProvider; -(0, MaterialContextMixin_1.default)(BoundaryConditionsFormDataProvider.prototype); diff --git a/dist/js/context/providers/CollinearMagnetizationContextProvider.d.ts b/dist/js/context/providers/CollinearMagnetizationContextProvider.d.ts deleted file mode 100644 index 8d71423a..00000000 --- a/dist/js/context/providers/CollinearMagnetizationContextProvider.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { CollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "./base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "collinearMagnetization"; -type Data = CollinearMagnetizationContextProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; -declare const CollinearMagnetizationContextProvider_base: Base; -export default class CollinearMagnetizationContextProvider extends CollinearMagnetizationContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - private readonly isTotalMagnetization; - private readonly firstElement; - private readonly uniqueElementsWithLabels; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): Data; - setData(data: Data): void; - get uiSchemaStyled(): { - startingMagnetization: { - items: { - atomicSpecies: { - "ui:classNames": string; - }; - value: { - "ui:classNames": string; - }; - }; - "ui:readonly": boolean; - }; - isTotalMagnetization: {}; - totalMagnetization: { - "ui:classNames": string; - "ui:readonly": boolean; - }; - }; -} -export {}; diff --git a/dist/js/context/providers/CollinearMagnetizationContextProvider.js b/dist/js/context/providers/CollinearMagnetizationContextProvider.js deleted file mode 100644 index ec135ef6..00000000 --- a/dist/js/context/providers/CollinearMagnetizationContextProvider.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/collinear-magnetization-context-provider"; -class CollinearMagnetizationContextProvider extends JSONSchemaDataProvider_1.default { - constructor(contextItem, externalContext) { - var _a, _b, _c, _d; - super(contextItem, externalContext); - this.name = "collinearMagnetization"; - this.domain = "important"; - this.initMaterialContextMixin(externalContext); - this.uniqueElementsWithLabels = [ - ...new Set(((_b = (_a = this.material) === null || _a === void 0 ? void 0 : _a.Basis) === null || _b === void 0 ? void 0 : _b.elementsWithLabelsArray) || []), - ]; - this.firstElement = - ((_c = this.uniqueElementsWithLabels) === null || _c === void 0 ? void 0 : _c.length) > 0 ? this.uniqueElementsWithLabels[0] : ""; - this.isTotalMagnetization = ((_d = this.data) === null || _d === void 0 ? void 0 : _d.isTotalMagnetization) || false; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - "properties.startingMagnetization": { - maxItems: this.uniqueElementsWithLabels.length, - }, - "properties.startingMagnetization.items.properties.atomicSpecies": { - enum: this.uniqueElementsWithLabels, - default: this.firstElement, - }, - "properties.startingMagnetization.items.properties.value": { - default: 0.0, - }, - "properties.isTotalMagnetization": { - default: false, - }, - "properties.totalMagnetization": { - default: 0.0, - }, - }); - } - getDefaultData() { - return { - startingMagnetization: [ - { - index: 1, - atomicSpecies: this.firstElement, - value: 0.0, - }, - ], - isTotalMagnetization: false, - totalMagnetization: 0.0, - }; - } - setData(data) { - const startingMagnetization = data.startingMagnetization.map((row) => ({ - ...row, - index: this.uniqueElementsWithLabels.indexOf(row.atomicSpecies) + 1, - })); - super.setData({ - ...data, - startingMagnetization, - }); - } - get uiSchemaStyled() { - return { - startingMagnetization: { - items: { - atomicSpecies: { - "ui:classNames": "col-xs-3", - }, - value: { - "ui:classNames": "col-xs-6", - }, - }, - "ui:readonly": this.isTotalMagnetization, - }, - isTotalMagnetization: {}, - totalMagnetization: { - "ui:classNames": "col-xs-6", - "ui:readonly": !this.isTotalMagnetization, - }, - }; - } -} -exports.default = CollinearMagnetizationContextProvider; -(0, MaterialContextMixin_1.default)(CollinearMagnetizationContextProvider.prototype); diff --git a/dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.d.ts b/dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.d.ts deleted file mode 100644 index 953b9c77..00000000 --- a/dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { HubbardLegacyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, Domain } from "../base/ContextProvider"; -import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_legacy"; -type Data = HubbardLegacyContextProviderSchema; -export default class HubbardContextProviderLegacy extends HubbardContextProvider { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - readonly uiSchemaStyled: { - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; - }; - items: { - atomicSpeciesIndex: { - "ui:readonly": boolean; - }; - }; - }; - constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); - getDefaultData(): Data; - setData(data: Data): void; -} -export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.js b/dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.js deleted file mode 100644 index cfb6db88..00000000 --- a/dist/js/context/providers/Hubbard/HubbardContextProviderLegacy.js +++ /dev/null @@ -1,60 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); -const defaultHubbardConfig = { - hubbardUValue: 1.0, -}; -const jsonSchemaId = "context-providers-directory/hubbard-legacy-context-provider"; -class HubbardContextProviderLegacy extends HubbardContextProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "hubbard_legacy"; - this.domain = "important"; - this.uiSchemaStyled = { - "ui:options": { - addable: true, - orderable: false, - removable: true, - }, - items: { - atomicSpeciesIndex: { "ui:readonly": true }, - }, - }; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - "items.properties.atomicSpecies": { - enum: this.uniqueElementsWithLabels, - }, - "items.properties.hubbardUValue": { - default: defaultHubbardConfig.hubbardUValue, - }, - }); - } - getDefaultData() { - var _a; - return [ - { - ...defaultHubbardConfig, - atomicSpecies: this.firstElement, - atomicSpeciesIndex: ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 0 ? 1 : undefined, - }, - ]; - } - setData(data) { - const hubbardUValues = data.map((row) => { - var _a; - const atomicSpeciesIndex = ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 0 - ? this.uniqueElementsWithLabels.indexOf(row.atomicSpecies || "") + 1 - : undefined; - return { - ...row, - atomicSpeciesIndex, - }; - }); - super.setData(hubbardUValues); - } -} -exports.default = HubbardContextProviderLegacy; diff --git a/dist/js/context/providers/Hubbard/HubbardJContextProvider.d.ts b/dist/js/context/providers/Hubbard/HubbardJContextProvider.d.ts deleted file mode 100644 index 0334c3d9..00000000 --- a/dist/js/context/providers/Hubbard/HubbardJContextProvider.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { HubbardJContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; -import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_j"; -type Data = HubbardJContextProviderSchema; -export default class HubbardJContextProvider extends HubbardContextProvider { - readonly name: Name; - readonly uiSchemaStyled: { - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; - }; - }; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); - getDefaultData(): Data; -} -export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardJContextProvider.js b/dist/js/context/providers/Hubbard/HubbardJContextProvider.js deleted file mode 100644 index 928936df..00000000 --- a/dist/js/context/providers/Hubbard/HubbardJContextProvider.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); -const defaultHubbardConfig = { - paramType: "J", - atomicSpecies: "", - atomicOrbital: "2p", - value: 1.0, -}; -const jsonSchemaId = "context-providers-directory/hubbard-j-context-provider"; -class HubbardJContextProvider extends HubbardContextProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "hubbard_j"; - this.uiSchemaStyled = { - "ui:options": { - addable: true, - orderable: true, - removable: true, - }, - }; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - "items.properties.paramType": { - default: defaultHubbardConfig.paramType, - }, - "items.properties.atomicSpecies": { - enum: this.uniqueElementsWithLabels, - default: this.firstElement, - }, - "items.properties.atomicOrbital": { - enum: this.orbitalList, - default: defaultHubbardConfig.atomicOrbital, - }, - "items.properties.value": { - default: defaultHubbardConfig.value, - }, - }); - } - getDefaultData() { - return [ - { - ...defaultHubbardConfig, - atomicSpecies: this.firstElement, - }, - ]; - } -} -exports.default = HubbardJContextProvider; diff --git a/dist/js/context/providers/Hubbard/HubbardUContextProvider.d.ts b/dist/js/context/providers/Hubbard/HubbardUContextProvider.d.ts deleted file mode 100644 index de02ea73..00000000 --- a/dist/js/context/providers/Hubbard/HubbardUContextProvider.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { HubbardUContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; -import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_u"; -type Data = HubbardUContextProviderSchema; -export default class HubbardUContextProvider extends HubbardContextProvider { - readonly name: Name; - readonly uiSchemaStyled: { - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; - }; - }; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); - getDefaultData(): Data; -} -export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardUContextProvider.js b/dist/js/context/providers/Hubbard/HubbardUContextProvider.js deleted file mode 100644 index e1ad1be0..00000000 --- a/dist/js/context/providers/Hubbard/HubbardUContextProvider.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const MaterialContextMixin_1 = __importDefault(require("../../mixins/MaterialContextMixin")); -const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); -const defaultHubbardConfig = { - atomicSpecies: "", - atomicOrbital: "2p", - hubbardUValue: 1.0, -}; -const jsonSchemaId = "context-providers-directory/hubbard-u-context-provider"; -class HubbardUContextProvider extends HubbardContextProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "hubbard_u"; - this.uiSchemaStyled = { - "ui:options": { - addable: true, - orderable: false, - removable: true, - }, - }; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - "items.properties.atomicSpecies": { - enum: this.uniqueElementsWithLabels, - default: this.firstElement, - }, - "items.properties.atomicOrbital": { - enum: this.orbitalList, - default: defaultHubbardConfig.atomicOrbital, - }, - "items.properties.hubbardUValue": { - default: defaultHubbardConfig.hubbardUValue, - }, - }); - } - getDefaultData() { - return [ - { - ...defaultHubbardConfig, - atomicSpecies: this.firstElement, - }, - ]; - } -} -exports.default = HubbardUContextProvider; -(0, MaterialContextMixin_1.default)(HubbardUContextProvider.prototype); diff --git a/dist/js/context/providers/Hubbard/HubbardVContextProvider.d.ts b/dist/js/context/providers/Hubbard/HubbardVContextProvider.d.ts deleted file mode 100644 index 0f28da97..00000000 --- a/dist/js/context/providers/Hubbard/HubbardVContextProvider.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { HubbardVContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import type { ContextItem } from "../base/ContextProvider"; -import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; -type Name = "hubbard_v"; -type Data = HubbardVContextProviderSchema; -export default class HubbardVContextProvider extends HubbardContextProvider { - readonly name: Name; - readonly uiSchemaStyled: { - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; - }; - }; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: HubbardExternalContext); - getDefaultData(): Data; -} -export {}; diff --git a/dist/js/context/providers/Hubbard/HubbardVContextProvider.js b/dist/js/context/providers/Hubbard/HubbardVContextProvider.js deleted file mode 100644 index c4adac75..00000000 --- a/dist/js/context/providers/Hubbard/HubbardVContextProvider.js +++ /dev/null @@ -1,70 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); -const defaultHubbardConfig = { - atomicSpecies: "", - atomicOrbital: "2p", - atomicSpecies2: "", - atomicOrbital2: "2p", - siteIndex: 1, - siteIndex2: 1, - hubbardVValue: 1.0, -}; -const jsonSchemaId = "context-providers-directory/hubbard-v-context-provider"; -class HubbardVContextProvider extends HubbardContextProvider_1.default { - constructor(contextItem, externalContext) { - var _a; - super(contextItem, externalContext); - this.name = "hubbard_v"; - this.uiSchemaStyled = { - "ui:options": { - addable: true, - orderable: true, - removable: true, - }, - }; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - "items.properties.atomicSpecies": { - enum: this.uniqueElementsWithLabels, - default: this.firstElement, - }, - "items.properties.siteIndex": { - default: defaultHubbardConfig.siteIndex, - }, - "items.properties.atomicOrbital": { - enum: this.orbitalList, - default: defaultHubbardConfig.atomicOrbital, - }, - "items.properties.atomicSpecies2": { - enum: this.uniqueElementsWithLabels, - default: this.secondSpecies, - }, - "items.properties.siteIndex2": { - default: ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 1 ? 2 : defaultHubbardConfig.siteIndex2, - }, - "items.properties.atomicOrbital2": { - enum: this.orbitalList, - default: defaultHubbardConfig.atomicOrbital, - }, - "items.properties.hubbardVValue": { - default: defaultHubbardConfig.hubbardVValue, - }, - }); - } - getDefaultData() { - var _a; - return [ - { - ...defaultHubbardConfig, - atomicSpecies: this.firstElement, - atomicSpecies2: this.secondSpecies, - siteIndex2: ((_a = this.uniqueElementsWithLabels) === null || _a === void 0 ? void 0 : _a.length) > 1 ? 2 : defaultHubbardConfig.siteIndex2, - }, - ]; - } -} -exports.default = HubbardVContextProvider; diff --git a/dist/js/context/providers/IonDynamicsContextProvider.d.ts b/dist/js/context/providers/IonDynamicsContextProvider.d.ts deleted file mode 100644 index fa835f27..00000000 --- a/dist/js/context/providers/IonDynamicsContextProvider.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { IonDynamicsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, ExternalContext } from "./base/ContextProvider"; -import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; -type Data = IonDynamicsContextProviderSchema; -type Name = "dynamics"; -export type IonDynamicsContextProviderContextItem = ContextItem; -export type IonDynamicsContextProviderExternalContext = ExternalContext; -export default class IonDynamicsContextProvider extends JSONSchemaFormDataProvider { - readonly name: "dynamics"; - readonly domain: "important"; - readonly uiSchema: { - readonly numberOfSteps: {}; - readonly timeStep: {}; - readonly electronMass: {}; - readonly temperature: {}; - }; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): { - numberOfSteps: number; - timeStep: number; - electronMass: number; - temperature: number; - }; -} -export {}; diff --git a/dist/js/context/providers/IonDynamicsContextProvider.js b/dist/js/context/providers/IonDynamicsContextProvider.js deleted file mode 100644 index cf5c4440..00000000 --- a/dist/js/context/providers/IonDynamicsContextProvider.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JSONSchemaFormDataProvider_1 = __importDefault(require("./base/JSONSchemaFormDataProvider")); -const jsonSchemaId = "context-providers-directory/ion-dynamics-context-provider"; -const defaultData = { - numberOfSteps: 100, - timeStep: 5.0, - electronMass: 100.0, - temperature: 300.0, -}; -class IonDynamicsContextProvider extends JSONSchemaFormDataProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "dynamics"; - this.domain = "important"; - this.uiSchema = { - numberOfSteps: {}, - timeStep: {}, - electronMass: {}, - temperature: {}, - }; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - numberOfSteps: { default: defaultData.numberOfSteps }, - timeStep: { default: defaultData.timeStep }, - electronMass: { default: defaultData.electronMass }, - temperature: { default: defaultData.temperature }, - }); - } - // eslint-disable-next-line class-methods-use-this - getDefaultData() { - return defaultData; - } -} -exports.default = IonDynamicsContextProvider; diff --git a/dist/js/context/providers/IonDynamicsDataManager.d.ts b/dist/js/context/providers/IonDynamicsDataManager.d.ts index dd5da15d..dbe897fb 100644 --- a/dist/js/context/providers/IonDynamicsDataManager.d.ts +++ b/dist/js/context/providers/IonDynamicsDataManager.d.ts @@ -1,13 +1,13 @@ import type { DynamicsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ExternalContext, UnitContext } from "./base/ContextProvider"; +import type { BaseExternalContext, UnitContext } from "./base/ContextProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; type Schema = DynamicsContextItemSchema; export default class IonDynamicsDataManager extends JSONSchemaFormDataProvider { readonly name: "dynamics"; readonly domain: "important"; readonly entityName: "unit"; - static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): IonDynamicsDataManager; + static createFromUnitContext(unitContext: UnitContext, externalContext: BaseExternalContext): IonDynamicsDataManager; readonly uiSchema: { readonly numberOfSteps: {}; readonly timeStep: {}; @@ -16,7 +16,7 @@ export default class IonDynamicsDataManager extends JSONSchemaFormDataProvider, externalContext: ExternalContext); + constructor(contextItem: Partial, externalContext: BaseExternalContext); getDefaultData(): { numberOfSteps: number; timeStep: number; diff --git a/dist/js/context/providers/MLSettingsContextProvider.d.ts b/dist/js/context/providers/MLSettingsContextProvider.d.ts deleted file mode 100644 index 73d2512c..00000000 --- a/dist/js/context/providers/MLSettingsContextProvider.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { MLSettingsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type ApplicationContextMixin } from "../mixins/ApplicationContextMixin"; -import { type ContextItem, type Domain } from "./base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "mlSettings"; -type Data = MLSettingsContextProviderSchema; -type ExternalContext = JinjaExternalContext & ApplicationContextMixin; -type Base = typeof JSONSchemaDataProvider & Constructor; -declare const MLSettingsContextProvider_base: Base; -export default class MLSettingsContextProvider extends MLSettingsContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - readonly uiSchema: { - target_column_name: {}; - problem_category: {}; - }; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): { - target_column_name: string; - problem_category: "regression"; - }; -} -export {}; diff --git a/dist/js/context/providers/MLSettingsContextProvider.js b/dist/js/context/providers/MLSettingsContextProvider.js deleted file mode 100644 index e42f7717..00000000 --- a/dist/js/context/providers/MLSettingsContextProvider.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); -const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/ml-settings-context-provider"; -const defaultData = { - target_column_name: "target", - problem_category: "regression", -}; -class MLSettingsContextProvider extends JSONSchemaDataProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "mlSettings"; - this.domain = "important"; - this.uiSchema = { - target_column_name: {}, - problem_category: {}, - }; - this.initApplicationContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - target_column_name: { default: defaultData.target_column_name }, - problem_category: { default: defaultData.problem_category }, - }); - } - // eslint-disable-next-line class-methods-use-this - getDefaultData() { - return defaultData; - } -} -exports.default = MLSettingsContextProvider; -(0, ApplicationContextMixin_1.applicationContextMixin)(MLSettingsContextProvider.prototype); diff --git a/dist/js/context/providers/MLSettingsDataManager.js b/dist/js/context/providers/MLSettingsDataManager.js index 65ad11ae..adb56ca6 100644 --- a/dist/js/context/providers/MLSettingsDataManager.js +++ b/dist/js/context/providers/MLSettingsDataManager.js @@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); +const ApplicationContextMixin_1 = __importDefault(require("../mixins/ApplicationContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/ml-settings-context-provider"; const defaultData = { @@ -38,4 +38,4 @@ class MLSettingsDataManager extends JSONSchemaDataProvider_1.default { } } exports.default = MLSettingsDataManager; -(0, ApplicationContextMixin_1.applicationContextMixin)(MLSettingsDataManager.prototype); +(0, ApplicationContextMixin_1.default)(MLSettingsDataManager.prototype); diff --git a/dist/js/context/providers/MLTrainTestSplitContextProvider.d.ts b/dist/js/context/providers/MLTrainTestSplitContextProvider.d.ts deleted file mode 100644 index 69a3c3e6..00000000 --- a/dist/js/context/providers/MLTrainTestSplitContextProvider.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { MLTrainTestSplitContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type ApplicationContextMixin } from "../mixins/ApplicationContextMixin"; -import { type ContextItem, type Domain } from "./base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "mlTrainTestSplit"; -type Data = MLTrainTestSplitContextProviderSchema; -type ExternalContext = JinjaExternalContext & ApplicationContextMixin; -type Base = typeof JSONSchemaDataProvider & Constructor; -declare const MLTrainTestSplitContextProvider_base: Base; -export default class MLTrainTestSplitContextProvider extends MLTrainTestSplitContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - readonly uiSchema: { - target_column_name: {}; - problem_category: {}; - }; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): { - fraction_held_as_test_set: number; - }; -} -export {}; diff --git a/dist/js/context/providers/MLTrainTestSplitContextProvider.js b/dist/js/context/providers/MLTrainTestSplitContextProvider.js deleted file mode 100644 index 2e216c35..00000000 --- a/dist/js/context/providers/MLTrainTestSplitContextProvider.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); -const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; -const defaultData = { - fraction_held_as_test_set: 0.2, -}; -class MLTrainTestSplitContextProvider extends JSONSchemaDataProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "mlTrainTestSplit"; - this.domain = "important"; - this.uiSchema = { - target_column_name: {}, - problem_category: {}, - }; - this.initApplicationContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - fraction_held_as_test_set: { default: defaultData.fraction_held_as_test_set }, - }); - } - // eslint-disable-next-line class-methods-use-this - getDefaultData() { - return defaultData; - } -} -exports.default = MLTrainTestSplitContextProvider; -(0, ApplicationContextMixin_1.applicationContextMixin)(MLTrainTestSplitContextProvider.prototype); diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.js b/dist/js/context/providers/MLTrainTestSplitDataManager.js index f8d61e31..a6faeb0b 100644 --- a/dist/js/context/providers/MLTrainTestSplitDataManager.js +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.js @@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); +const ApplicationContextMixin_1 = __importDefault(require("../mixins/ApplicationContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; const defaultData = { @@ -36,4 +36,4 @@ class MLTrainTestSplitDataManager extends JSONSchemaDataProvider_1.default { } } exports.default = MLTrainTestSplitDataManager; -(0, ApplicationContextMixin_1.applicationContextMixin)(MLTrainTestSplitDataManager.prototype); +(0, ApplicationContextMixin_1.default)(MLTrainTestSplitDataManager.prototype); diff --git a/dist/js/context/providers/NEBFormDataProvider.d.ts b/dist/js/context/providers/NEBFormDataProvider.d.ts deleted file mode 100644 index 8b45d298..00000000 --- a/dist/js/context/providers/NEBFormDataProvider.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { NEBDataProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import type { ContextItem, Domain } from "./base/ContextProvider"; -import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; -type Name = "neb"; -type Data = NEBDataProviderSchema; -type ExternalContext = JinjaExternalContext; -export default class NEBFormDataProvider extends JSONSchemaFormDataProvider { - readonly name: Name; - readonly domain: Domain; - readonly uiSchema: { - nImages: {}; - }; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): { - nImages: number; - }; -} -export {}; diff --git a/dist/js/context/providers/NEBFormDataProvider.js b/dist/js/context/providers/NEBFormDataProvider.js deleted file mode 100644 index fb0572ae..00000000 --- a/dist/js/context/providers/NEBFormDataProvider.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JSONSchemaFormDataProvider_1 = __importDefault(require("./base/JSONSchemaFormDataProvider")); -const jsonSchemaId = "context-providers-directory/neb-data-provider"; -const defaultData = { - nImages: 1, -}; -class NEBFormDataProvider extends JSONSchemaFormDataProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "neb"; - this.domain = "important"; - this.uiSchema = { - nImages: {}, - }; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - nImages: { default: defaultData.nImages }, - }); - } - // eslint-disable-next-line class-methods-use-this - getDefaultData() { - return defaultData; - } -} -exports.default = NEBFormDataProvider; diff --git a/dist/js/context/providers/NonCollinearMagnetizationContextProvider.d.ts b/dist/js/context/providers/NonCollinearMagnetizationContextProvider.d.ts deleted file mode 100644 index d5df390b..00000000 --- a/dist/js/context/providers/NonCollinearMagnetizationContextProvider.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { NonCollinearMagnetizationContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../mixins/MaterialContextMixin"; -import type { ContextItem, Domain } from "./base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; -type Name = "nonCollinearMagnetization"; -type Data = NonCollinearMagnetizationContextProviderSchema; -type ExternalContext = JinjaExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; -declare const NonCollinearMagnetizationContextProvider_base: Base; -export default class NonCollinearMagnetizationContextProvider extends NonCollinearMagnetizationContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly isStartingMagnetization: boolean; - readonly isConstrainedMagnetization: boolean; - readonly isExistingChargeDensity: boolean; - readonly isArbitrarySpinDirection: boolean; - readonly isFixedMagnetization: boolean; - readonly constrainedMagnetization: Data["constrainedMagnetization"]; - readonly jsonSchema: JSONSchema7 | undefined; - private readonly uniqueElementsWithLabels; - constructor(contextItem: ContextItem, externalContext: ExternalContext); - getDefaultData(): Data; - get uiSchemaStyled(): { - isExistingChargeDensity: {}; - lforcet: { - "ui:readonly": boolean; - "ui:widget": string; - "ui:options": { - inline: boolean; - }; - }; - isArbitrarySpinDirection: {}; - spinAngles: { - items: { - atomicSpecies: { - "ui:readonly": boolean; - }; - }; - "ui:readonly": boolean; - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; - }; - }; - isStartingMagnetization: {}; - startingMagnetization: { - items: { - atomicSpecies: { - "ui:readonly": boolean; - }; - value: { - "ui:classNames": string; - }; - }; - "ui:readonly": boolean; - "ui:options": { - addable: boolean; - orderable: boolean; - removable: boolean; - }; - }; - isConstrainedMagnetization: {}; - constrainedMagnetization: { - "ui:readonly": boolean; - }; - isFixedMagnetization: { - "ui:readonly": boolean; - }; - fixedMagnetization: { - "ui:readonly": boolean; - }; - }; -} -export {}; diff --git a/dist/js/context/providers/NonCollinearMagnetizationContextProvider.js b/dist/js/context/providers/NonCollinearMagnetizationContextProvider.js deleted file mode 100644 index 79c16f9d..00000000 --- a/dist/js/context/providers/NonCollinearMagnetizationContextProvider.js +++ /dev/null @@ -1,155 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const MaterialContextMixin_1 = __importDefault(require("../mixins/MaterialContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/non-collinear-magnetization-context-provider"; -class NonCollinearMagnetizationContextProvider extends JSONSchemaDataProvider_1.default { - constructor(contextItem, externalContext) { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; - super(contextItem, externalContext); - this.name = "nonCollinearMagnetization"; - this.domain = "important"; - this.initMaterialContextMixin(externalContext); - this.isStartingMagnetization = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.isStartingMagnetization) !== null && _b !== void 0 ? _b : true; - this.isConstrainedMagnetization = (_d = (_c = this.data) === null || _c === void 0 ? void 0 : _c.isConstrainedMagnetization) !== null && _d !== void 0 ? _d : false; - this.isExistingChargeDensity = (_f = (_e = this.data) === null || _e === void 0 ? void 0 : _e.isExistingChargeDensity) !== null && _f !== void 0 ? _f : false; - this.isArbitrarySpinDirection = (_h = (_g = this.data) === null || _g === void 0 ? void 0 : _g.isArbitrarySpinDirection) !== null && _h !== void 0 ? _h : false; - this.isFixedMagnetization = (_k = (_j = this.data) === null || _j === void 0 ? void 0 : _j.isFixedMagnetization) !== null && _k !== void 0 ? _k : false; - this.constrainedMagnetization = (_m = (_l = this.data) === null || _l === void 0 ? void 0 : _l.constrainedMagnetization) !== null && _m !== void 0 ? _m : { - lambda: 0.0, - constrainType: "atomic direction", - }; - this.uniqueElementsWithLabels = [ - ...new Set(((_p = (_o = this.material) === null || _o === void 0 ? void 0 : _o.Basis) === null || _p === void 0 ? void 0 : _p.elementsWithLabelsArray) || []), - ]; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - isExistingChargeDensity: { default: false }, - isStartingMagnetization: { default: true }, - isArbitrarySpinAngle: { default: false }, - isConstrainedMagnetization: { default: false }, - isFixedMagnetization: { default: true }, - startingMagnetization: { - minItems: this.uniqueElementsWithLabels.length, - maxItems: this.uniqueElementsWithLabels.length, - }, - "startingMagnetization.items.properties.value": { - default: 0.0, - minimum: -1.0, - maximum: 1.0, - }, - spinAngles: { - minItems: this.uniqueElementsWithLabels.length, - maxItems: this.uniqueElementsWithLabels.length, - }, - "spinAngles.items.properties.angle1": { default: 0.0 }, - "spinAngles.items.properties.angle2": { default: 0.0 }, - "constrainedMagnetization.properties.constrainType": { - default: "atomic direction", - }, - "constrainedMagnetization.properties.lambda": { default: 0.0 }, - "fixedMagnetization.properties.x": { default: 0.0 }, - "fixedMagnetization.properties.y": { default: 0.0 }, - "fixedMagnetization.properties.z": { default: 0.0 }, - }); - } - getDefaultData() { - const startingMagnetization = this.uniqueElementsWithLabels.map((element, index) => { - return { - index: index + 1, - atomicSpecies: element, - value: 0.0, - }; - }); - const spinAngles = this.uniqueElementsWithLabels.map((element, index) => { - return { - index: index + 1, - atomicSpecies: element, - angle1: 0.0, - angle2: 0.0, - }; - }); - return { - isExistingChargeDensity: false, - isStartingMagnetization: true, - isConstrainedMagnetization: false, - isArbitrarySpinAngle: false, - isArbitrarySpinDirection: false, - isFixedMagnetization: false, - lforcet: true, - spinAngles, - startingMagnetization, - constrainedMagnetization: { - lambda: 0.0, - constrainType: "atomic direction", - }, - fixedMagnetization: { - x: 0.0, - y: 0.0, - z: 0.0, - }, - }; - } - get uiSchemaStyled() { - var _a, _b; - return { - isExistingChargeDensity: {}, - lforcet: { - "ui:readonly": !this.isExistingChargeDensity, - "ui:widget": "radio", - "ui:options": { - inline: true, - }, - }, - isArbitrarySpinDirection: {}, - spinAngles: { - items: { - atomicSpecies: { - "ui:readonly": true, - }, - }, - "ui:readonly": !this.isArbitrarySpinDirection, - "ui:options": { - addable: false, - orderable: false, - removable: false, - }, - }, - isStartingMagnetization: {}, - startingMagnetization: { - items: { - atomicSpecies: { - "ui:readonly": true, - }, - value: { - "ui:classNames": "col-xs-6", - }, - }, - "ui:readonly": !this.isStartingMagnetization, - "ui:options": { - addable: false, - orderable: false, - removable: false, - }, - }, - isConstrainedMagnetization: {}, - constrainedMagnetization: { - "ui:readonly": !this.isConstrainedMagnetization, - }, - isFixedMagnetization: { - "ui:readonly": !(this.isConstrainedMagnetization && - ((_a = this.constrainedMagnetization) === null || _a === void 0 ? void 0 : _a.constrainType) === "total"), - }, - fixedMagnetization: { - "ui:readonly": !(this.isFixedMagnetization && - this.isConstrainedMagnetization && - ((_b = this.constrainedMagnetization) === null || _b === void 0 ? void 0 : _b.constrainType) === "total"), - }, - }; - } -} -exports.default = NonCollinearMagnetizationContextProvider; -(0, MaterialContextMixin_1.default)(NonCollinearMagnetizationContextProvider.prototype); diff --git a/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts b/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts index fd5cd903..c8bfdcc5 100644 --- a/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts +++ b/dist/js/context/providers/PlanewaveCutoffDataManager.d.ts @@ -2,10 +2,10 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { CutoffsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; -import ContextProvider, { type ExternalContext, type UnitContext } from "./base/ContextProvider"; +import ContextProvider, { type BaseExternalContext, type UnitContext } from "./base/ContextProvider"; type Schema = CutoffsContextItemSchema; -type PlanewaveExternalContext = ExternalContext & ApplicationExternalContext; -type Base = typeof ContextProvider & Constructor; +type PlanewaveExternalContext = BaseExternalContext & ApplicationExternalContext; +type Base = typeof ContextProvider & Constructor; declare const PlanewaveCutoffDataManager_base: Base; export default class PlanewaveCutoffDataManager extends PlanewaveCutoffDataManager_base { readonly name: "cutoffs"; @@ -18,7 +18,7 @@ export default class PlanewaveCutoffDataManager extends PlanewaveCutoffDataManag }; readonly extraData: {}; static createFromUnitContext(unitContext: UnitContext, externalContext: PlanewaveExternalContext): PlanewaveCutoffDataManager; - constructor(contextItem?: Partial, externalContext?: PlanewaveExternalContext); + constructor(contextItem: Partial, externalContext: PlanewaveExternalContext); getDefaultData(): { wavefunction: number | undefined; density: number | undefined; diff --git a/dist/js/context/providers/PlanewaveCutoffDataManager.js b/dist/js/context/providers/PlanewaveCutoffDataManager.js index a4910268..880a21ca 100644 --- a/dist/js/context/providers/PlanewaveCutoffDataManager.js +++ b/dist/js/context/providers/PlanewaveCutoffDataManager.js @@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); +const ApplicationContextMixin_1 = __importDefault(require("../mixins/ApplicationContextMixin")); const ContextProvider_1 = __importDefault(require("./base/ContextProvider")); // Type guard to check if a string is a valid ApplicationName function isApplicationName(name) { @@ -25,7 +25,7 @@ class PlanewaveCutoffDataManager extends ContextProvider_1.default { const contextItem = this.findContextItem(unitContext, "cutoffs"); return new PlanewaveCutoffDataManager(contextItem, externalContext); } - constructor(contextItem = {}, externalContext = {}) { + constructor(contextItem, externalContext) { super(contextItem, externalContext); this.name = "cutoffs"; this.domain = "important"; @@ -62,4 +62,4 @@ class PlanewaveCutoffDataManager extends ContextProvider_1.default { } } exports.default = PlanewaveCutoffDataManager; -(0, ApplicationContextMixin_1.applicationContextMixin)(PlanewaveCutoffDataManager.prototype); +(0, ApplicationContextMixin_1.default)(PlanewaveCutoffDataManager.prototype); diff --git a/dist/js/context/providers/PlanewaveCutoffsContextProvider.d.ts b/dist/js/context/providers/PlanewaveCutoffsContextProvider.d.ts deleted file mode 100644 index 22b39a64..00000000 --- a/dist/js/context/providers/PlanewaveCutoffsContextProvider.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { PlanewaveCutoffsContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type ApplicationContextMixin } from "../mixins/ApplicationContextMixin"; -import ContextProvider, { type ContextItem, type Domain, type EntityName, type ExternalContext } from "./base/ContextProvider"; -type Name = "cutoffs"; -type Data = PlanewaveCutoffsContextProviderSchema; -type PlanewaveExternalContext = ExternalContext & ApplicationContextMixin; -type Base = typeof ContextProvider & Constructor; -declare const PlanewaveCutoffsContextProvider_base: Base; -export default class PlanewaveCutoffsContextProvider extends PlanewaveCutoffsContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly entityName: EntityName; - readonly jsonSchema: JSONSchema7 | undefined; - readonly uiSchema: { - wavefunction: {}; - density: {}; - }; - constructor(contextItem: ContextItem, externalContext: PlanewaveExternalContext); - getDefaultData(): { - wavefunction: number | undefined; - density: number | undefined; - }; -} -export {}; diff --git a/dist/js/context/providers/PlanewaveCutoffsContextProvider.js b/dist/js/context/providers/PlanewaveCutoffsContextProvider.js deleted file mode 100644 index 643cc145..00000000 --- a/dist/js/context/providers/PlanewaveCutoffsContextProvider.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = require("../mixins/ApplicationContextMixin"); -const ContextProvider_1 = __importDefault(require("./base/ContextProvider")); -const cutoffConfig = { - vasp: { wavefunction: undefined, density: undefined }, - espresso: { wavefunction: 40, density: 200 }, -}; -const jsonSchemaId = "context-providers-directory/planewave-cutoffs-context-provider"; -class PlanewaveCutoffsContextProvider extends ContextProvider_1.default { - constructor(contextItem, externalContext) { - super(contextItem, externalContext); - this.name = "cutoffs"; - this.domain = "important"; - this.entityName = "subworkflow"; - this.uiSchema = { - wavefunction: {}, - density: {}, - }; - this.initApplicationContextMixin(externalContext); - const { wavefunction, density } = this.getDefaultData(); - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { - wavefunction: { default: wavefunction }, - density: { default: density }, - }); - } - getDefaultData() { - // TODO-QUESTION: what if the application is not in the cutoffConfig? - const { wavefunction, density } = cutoffConfig[this.application.name] || {}; - return { - wavefunction, - density, - }; - } -} -exports.default = PlanewaveCutoffsContextProvider; -(0, ApplicationContextMixin_1.applicationContextMixin)(PlanewaveCutoffsContextProvider.prototype); diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts index 6c7ffe5e..64d377f4 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts @@ -1,4 +1,4 @@ -import ConvergenceParameter from "../../../subworkflows/convergence/ConvergenceParameter"; +import ConvergenceParameter from "../../../convergence/ConvergenceParameter"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "kgrid"; @@ -6,6 +6,6 @@ export default class KGridFormDataManager extends PointsGridFormDataProvider a * b) * nAtoms; } case "spacing": - return lodash_1.default.round(this.reciprocalLattice.getSpacingFromDimensions(dimensions, constants_1.Units.angstrom), 3); + return Number(this.reciprocalLattice + .getSpacingFromDimensions(dimensions, constants_1.Units.angstrom) + .toFixed(3)); default: return 1; } diff --git a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js index be107cb7..5acaaa3d 100644 --- a/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js +++ b/dist/js/context/providers/PointsPath/PointsPathFormDataProvider.js @@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const math_1 = require("@mat3ra/code/dist/js/math"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const made_1 = require("@mat3ra/made"); -const underscore_string_1 = __importDefault(require("underscore.string")); -const ApplicationContextMixin_1 = require("../../mixins/ApplicationContextMixin"); +const ApplicationContextMixin_1 = __importDefault(require("../../mixins/ApplicationContextMixin")); const MaterialContextMixin_1 = __importDefault(require("../../mixins/MaterialContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("../base/JSONSchemaDataProvider")); const defaultPoint = "Г"; @@ -21,7 +20,7 @@ class MixinsContextProvider extends JSONSchemaDataProvider_1.default { } } (0, MaterialContextMixin_1.default)(MixinsContextProvider.prototype); -(0, ApplicationContextMixin_1.applicationContextMixin)(MixinsContextProvider.prototype); +(0, ApplicationContextMixin_1.default)(MixinsContextProvider.prototype); class PointsPathFormDataProvider extends MixinsContextProvider { constructor(config, externalContext) { super(config, externalContext); @@ -73,7 +72,7 @@ class PointsPathFormDataProvider extends MixinsContextProvider { : p.coordinates; return { ...p, - coordinates: coordinates.map((c) => +underscore_string_1.default.sprintf("%14.9f", c)), + coordinates: coordinates.map((c) => Number(c.toFixed(9))), }; }); super.setData(newData); diff --git a/dist/js/context/providers/base/ContextProvider.d.ts b/dist/js/context/providers/base/ContextProvider.d.ts index ed594002..e4841df6 100644 --- a/dist/js/context/providers/base/ContextProvider.d.ts +++ b/dist/js/context/providers/base/ContextProvider.d.ts @@ -10,8 +10,9 @@ export type ContextItem { +/** Minimal bound for provider external context; the full contract is ExternalContext in context/providers/index.ts */ +export type BaseExternalContext = object; +declare abstract class ContextProvider { abstract name: S["name"]; abstract readonly domain: Domain; abstract readonly entityName: EntityName; diff --git a/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts b/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts index e02a90d2..a4834134 100644 --- a/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts +++ b/dist/js/context/providers/base/JSONSchemaDataProvider.d.ts @@ -1,8 +1,7 @@ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; import type { ContextItemSchema } from "@mat3ra/esse/dist/js/types"; -import type { ExternalContext } from "./ContextProvider"; import ContextProvider from "./ContextProvider"; -export interface JinjaExternalContext extends ExternalContext { +export interface JinjaExternalContext { isUsingJinjaVariables?: boolean; } /** diff --git a/dist/js/context/providers/by_application/espresso/QENEBContextProvider.d.ts b/dist/js/context/providers/by_application/espresso/QENEBContextProvider.d.ts deleted file mode 100644 index ac0e54a0..00000000 --- a/dist/js/context/providers/by_application/espresso/QENEBContextProvider.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { QENEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; -import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; -import { type MaterialsSetContextMixin } from "../../../mixins/MaterialsSetContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; -type Data = QENEBContextProviderSchema; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetContextMixin & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; -declare const QENEBContextProvider_base: Base; -export default class QENEBContextProvider extends QENEBContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); - getDefaultData(): Data; -} -export {}; diff --git a/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js b/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js deleted file mode 100644 index ffb4d594..00000000 --- a/dist/js/context/providers/by_application/espresso/QENEBContextProvider.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); -const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); -const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); -const MaterialsSetContextMixin_1 = __importDefault(require("../../../mixins/MaterialsSetContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); -const QEPWXContextProvider_1 = __importDefault(require("./QEPWXContextProvider")); -const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; -class QENEBContextProvider extends JSONSchemaDataProvider_1.default { - constructor(config, externalContext) { - super(config, externalContext); - this.name = "input"; - this.domain = "executable"; - this.initJobContextMixin(externalContext); - this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initMaterialContextMixin(externalContext); - this.initMaterialsSetContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); - } - getDefaultData() { - const PWXContexts = this.sortMaterialsByIndexInSet(this.materials).map((material) => { - return new QEPWXContextProvider_1.default({}, { ...this.externalContext, material }).getData(); - }); - const { ATOMIC_POSITIONS, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: _, ...rest } = PWXContexts[0]; - return { - ...rest, - FIRST_IMAGE: ATOMIC_POSITIONS, - LAST_IMAGE: PWXContexts[PWXContexts.length - 1].ATOMIC_POSITIONS, - INTERMEDIATE_IMAGES: PWXContexts.slice(1, PWXContexts.length - 1).map((data) => { - return data.ATOMIC_POSITIONS; - }), - }; - } -} -exports.default = QENEBContextProvider; -(0, MaterialContextMixin_1.default)(QENEBContextProvider.prototype); -(0, MaterialsContextMixin_1.default)(QENEBContextProvider.prototype); -(0, MethodDataContextMixin_1.default)(QENEBContextProvider.prototype); -(0, WorkflowContextMixin_1.default)(QENEBContextProvider.prototype); -(0, JobContextMixin_1.default)(QENEBContextProvider.prototype); -(0, MaterialsSetContextMixin_1.default)(QENEBContextProvider.prototype); diff --git a/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.d.ts b/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.d.ts deleted file mode 100644 index e38caab3..00000000 --- a/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { QEPwxContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; -import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; -type Data = QEPwxContextProviderSchema; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; -declare const QEPWXContextProvider_base: Base; -export default class QEPWXContextProvider extends QEPWXContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); - private buildQEPWXContext; - private getDataPerMaterial; - getDefaultData(): { - perMaterial?: undefined; - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X?: string; - Mass_X?: number; - PseudoPot_X?: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X?: string; - Mass_X?: number; - PseudoPot_X?: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - } | { - perMaterial: QEPwxContextProviderSchema[]; - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X?: string; - Mass_X?: number; - PseudoPot_X?: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X?: string; - Mass_X?: number; - PseudoPot_X?: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - }; -} -export {}; diff --git a/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js b/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js deleted file mode 100644 index f1ac66e2..00000000 --- a/dist/js/context/providers/by_application/espresso/QEPWXContextProvider.js +++ /dev/null @@ -1,108 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const periodic_table_js_1 = require("@exabyte-io/periodic-table.js"); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const path_1 = __importDefault(require("path")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); -const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); -const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/by-application/qe-pwx-context-provider"; -class QEPWXContextProvider extends JSONSchemaDataProvider_1.default { - constructor(config, externalContext) { - super(config, externalContext); - this.name = "input"; - this.domain = "executable"; - this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); - this.initMaterialContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); - } - buildQEPWXContext(material) { - const { Basis: basis, Lattice: lattice } = material; - const { job, workflow } = this; - const ATOMIC_SPECIES = basis.uniqueElements.map((symbol) => { - var _a; - const pseudo = (((_a = this.methodData) === null || _a === void 0 ? void 0 : _a.pseudo) || []).find((p) => p.element === symbol); - return { - X: symbol, - Mass_X: periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass, - PseudoPot_X: (pseudo === null || pseudo === void 0 ? void 0 : pseudo.filename) || path_1.default.basename((pseudo === null || pseudo === void 0 ? void 0 : pseudo.path) || ""), - }; - // return s.sprintf("%s %f %s", symbol, el.atomic_mass, filename) || ""; - }); // .join("\n"); - const uniqueElementsWithLabels = [...new Set(basis.elementsWithLabelsArray)]; - const ATOMIC_SPECIES_WITH_LABELS = uniqueElementsWithLabels.map((symbol) => { - var _a, _b; - const symbolWithoutLabel = symbol.replace(/\d$/, ""); - const label = symbol.match(/\d$/g) ? (_a = symbol.match(/\d$/g)) === null || _a === void 0 ? void 0 : _a[0] : ""; - const pseudo = (((_b = this.methodData) === null || _b === void 0 ? void 0 : _b.pseudo) || []).find((p) => p.element === symbolWithoutLabel); - return { - X: `${symbolWithoutLabel}${label}`, - Mass_X: periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass, - PseudoPot_X: (pseudo === null || pseudo === void 0 ? void 0 : pseudo.filename) || path_1.default.basename((pseudo === null || pseudo === void 0 ? void 0 : pseudo.path) || ""), - }; - // return s.sprintf("%s%s %f %s", symbol, label, el.atomic_mass, filename) || ""; - }); // .join("\n"); - // Format numbers with 14 total width, 9 decimal places (equivalent to %14.9f) - // const formatNumber = (num: number) => { - // return Number(num.toFixed(9).padStart(14).trim()); - // }; - const CELL_PARAMETERS = { - v1: lattice.vectorArrays[0], - v2: lattice.vectorArrays[1], - v3: lattice.vectorArrays[2], - }; - // const ATOMIC_POSITIONS = basis.getAtomicPositionsWithConstraintsAsStrings().join("\n"); - const ATOMIC_POSITIONS = basis.elementsCoordinatesConstraintsArray.map(([element, label, coordinate, constraint]) => { - return { - X: `${element}${label}`, - x: coordinate[0], - y: coordinate[1], - z: coordinate[2], - "if_pos(1)": constraint[0] ? 1 : 0, - "if_pos(2)": constraint[1] ? 1 : 0, - "if_pos(3)": constraint[2] ? 1 : 0, - }; - }); - return { - IBRAV: 0, // use CELL_PARAMETERS to define Bravais lattice - RESTART_MODE: job.parent || workflow.hasRelaxation ? "restart" : "from_scratch", - ATOMIC_SPECIES, - ATOMIC_SPECIES_WITH_LABELS, - NAT: basis.atomicPositions.length, - NTYP: basis.uniqueElements.length, - NTYP_WITH_LABELS: uniqueElementsWithLabels.length, - ATOMIC_POSITIONS, - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: basis.atomicPositions.join("\n"), - CELL_PARAMETERS, - }; - } - getDataPerMaterial() { - if (!this.materials || this.materials.length <= 1) - return {}; - return { perMaterial: this.materials.map((material) => this.buildQEPWXContext(material)) }; - } - getDefaultData() { - // the below values are read from PlanewaveDataManager instead - // ECUTWFC = 40; - // ECUTRHO = 200; - return { - ...this.buildQEPWXContext(this.material), - ...this.getDataPerMaterial(), - }; - } -} -exports.default = QEPWXContextProvider; -(0, MaterialContextMixin_1.default)(QEPWXContextProvider.prototype); -(0, MaterialsContextMixin_1.default)(QEPWXContextProvider.prototype); -(0, MethodDataContextMixin_1.default)(QEPWXContextProvider.prototype); -(0, WorkflowContextMixin_1.default)(QEPWXContextProvider.prototype); -(0, JobContextMixin_1.default)(QEPWXContextProvider.prototype); diff --git a/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.d.ts b/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.d.ts deleted file mode 100644 index 81ffabf4..00000000 --- a/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { NWChemTotalEnergyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; -type Data = NWChemTotalEnergyContextProviderSchema; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor; -declare const NWChemTotalEnergyContextProvider_base: Base; -export default class NWChemTotalEnergyContextProvider extends NWChemTotalEnergyContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); - getDefaultData(): { - CHARGE: number; - MULT: number; - BASIS: string; - NAT: number; - NTYP: number; - ATOMIC_POSITIONS: string; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - ATOMIC_SPECIES: string; - FUNCTIONAL: string; - CARTESIAN: boolean; - }; -} -export {}; diff --git a/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js b/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js deleted file mode 100644 index 02b09dd3..00000000 --- a/dist/js/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const periodic_table_js_1 = require("@exabyte-io/periodic-table.js"); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); -const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/by-application/nwchem-total-energy-context-provider"; -class NWChemTotalEnergyContextProvider extends JSONSchemaDataProvider_1.default { - constructor(config, externalContext) { - super(config, externalContext); - this.name = "input"; - this.domain = "executable"; - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); - this.initMaterialContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); - } - /* - * TODO: Create ability for user to define CHARGE, MULT, BASIS and FUNCTIONAL parameters. - */ - getDefaultData() { - const basis = this.material.Basis; - const NTYP = basis.uniqueElements.length; - const ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS = basis.atomicPositions.join("\n") || ""; - const ATOMIC_SPECIES = basis.uniqueElements - .map((symbol) => `${symbol} ${periodic_table_js_1.PERIODIC_TABLE[symbol].atomic_mass} `) - .join("\n"); - basis.toCartesian(); - const atomicPositions = basis.getAtomicPositionsWithConstraintsAsStrings(); - return { - CHARGE: 0, - MULT: 1, - BASIS: "6-31G", - NAT: atomicPositions.length, - NTYP, - ATOMIC_POSITIONS: atomicPositions.join("\n"), - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS, - ATOMIC_SPECIES, - FUNCTIONAL: "B3LYP", - CARTESIAN: basis.toCartesian !== undefined, - }; - } -} -exports.default = NWChemTotalEnergyContextProvider; -(0, MaterialContextMixin_1.default)(NWChemTotalEnergyContextProvider.prototype); -(0, MethodDataContextMixin_1.default)(NWChemTotalEnergyContextProvider.prototype); -(0, WorkflowContextMixin_1.default)(NWChemTotalEnergyContextProvider.prototype); -(0, JobContextMixin_1.default)(NWChemTotalEnergyContextProvider.prototype); diff --git a/dist/js/context/providers/by_application/vasp/VASPContextProvider.d.ts b/dist/js/context/providers/by_application/vasp/VASPContextProvider.d.ts deleted file mode 100644 index fd149acc..00000000 --- a/dist/js/context/providers/by_application/vasp/VASPContextProvider.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; -import { type MaterialsContextMixin } from "../../../mixins/MaterialsContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; -type Data = VASPContextProviderSchema; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsContextMixin; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; -declare const VASPContextProvider_base: Base; -export default class VASPContextProvider extends VASPContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); - private buildVASPContext; - private getDataPerMaterial; - getDefaultData(): { - perMaterial?: undefined; - POSCAR: string; - POSCAR_WITH_CONSTRAINTS: string; - } | { - perMaterial: VASPContextProviderSchema[]; - POSCAR: string; - POSCAR_WITH_CONSTRAINTS: string; - }; -} -export {}; diff --git a/dist/js/context/providers/by_application/vasp/VASPContextProvider.js b/dist/js/context/providers/by_application/vasp/VASPContextProvider.js deleted file mode 100644 index 3f3eff90..00000000 --- a/dist/js/context/providers/by_application/vasp/VASPContextProvider.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); -const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); -const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); -const jsonSchemaId = "context-providers-directory/by-application/vasp-context-provider"; -class VASPContextProvider extends JSONSchemaDataProvider_1.default { - constructor(config, externalContext) { - super(config, externalContext); - this.name = "input"; - this.domain = "executable"; - this.initJobContextMixin(externalContext); - this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initMaterialContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); - } - // eslint-disable-next-line class-methods-use-this - buildVASPContext(material) { - return { - // TODO: figure out whether we need two separate POSCARS, maybe one is enough - POSCAR: material.getAsPOSCAR(true, true), - POSCAR_WITH_CONSTRAINTS: material.getAsPOSCAR(true), - }; - } - getDataPerMaterial() { - if (!this.materials || this.materials.length <= 1) - return {}; - // TODO-QUESTION: perMaterial is not defined in the schema - return { perMaterial: this.materials.map((material) => this.buildVASPContext(material)) }; - } - getDefaultData() { - // consider adjusting so that below values are read from PlanewaveDataManager - // ECUTWFC; - // ECUTRHO; - return { - ...this.buildVASPContext(this.material), - ...this.getDataPerMaterial(), - }; - } -} -exports.default = VASPContextProvider; -(0, MaterialContextMixin_1.default)(VASPContextProvider.prototype); -(0, MaterialsContextMixin_1.default)(VASPContextProvider.prototype); -(0, MethodDataContextMixin_1.default)(VASPContextProvider.prototype); -(0, WorkflowContextMixin_1.default)(VASPContextProvider.prototype); -(0, JobContextMixin_1.default)(VASPContextProvider.prototype); diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.d.ts b/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.d.ts deleted file mode 100644 index fa42d1e2..00000000 --- a/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { VASPNEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; -import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; -import { type MaterialsContextMixin } from "../../../mixins/MaterialsContextMixin"; -import { type MaterialsSetContextMixin } from "../../../mixins/MaterialsSetContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; -import type { ContextItem, Domain } from "../../base/ContextProvider"; -import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; -type Name = "input"; -type Data = VASPNEBContextProviderSchema; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsContextMixin & MaterialsSetContextMixin; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; -declare const VASPNEBContextProvider_base: Base; -export default class VASPNEBContextProvider extends VASPNEBContextProvider_base { - readonly name: Name; - readonly domain: Domain; - readonly jsonSchema: JSONSchema7 | undefined; - constructor(config: ContextItem, externalContext: ExternalContext); - getDefaultData(): { - FIRST_IMAGE: string; - LAST_IMAGE: string; - INTERMEDIATE_IMAGES: string[]; - }; -} -export {}; diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.js b/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.js deleted file mode 100644 index 23e1e892..00000000 --- a/dist/js/context/providers/by_application/vasp/VASPNEBContextProvider.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); -const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); -const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); -const MaterialsSetContextMixin_1 = __importDefault(require("../../../mixins/MaterialsSetContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); -const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); -const VASPContextProvider_1 = __importDefault(require("./VASPContextProvider")); -const jsonSchemaId = "context-providers-directory/by-application/vasp-neb-context-provider"; -class VASPNEBContextProvider extends JSONSchemaDataProvider_1.default { - constructor(config, externalContext) { - super(config, externalContext); - this.name = "input"; - this.domain = "executable"; - this.initMaterialContextMixin(externalContext); - this.initMaterialsContextMixin(externalContext); - this.initMaterialsSetContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); - this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); - } - getDefaultData() { - const VASPContexts = this.sortMaterialsByIndexInSet(this.materials).map((material) => { - return new VASPContextProvider_1.default({}, { ...this.externalContext, material }).getData(); - }); - return { - FIRST_IMAGE: VASPContexts[0].POSCAR_WITH_CONSTRAINTS, - LAST_IMAGE: VASPContexts[VASPContexts.length - 1].POSCAR_WITH_CONSTRAINTS, - INTERMEDIATE_IMAGES: VASPContexts.slice(1, VASPContexts.length - 1).map((data) => { - return data.POSCAR_WITH_CONSTRAINTS; - }), - }; - } -} -exports.default = VASPNEBContextProvider; -(0, MaterialContextMixin_1.default)(VASPNEBContextProvider.prototype); -(0, MaterialsContextMixin_1.default)(VASPNEBContextProvider.prototype); -(0, MaterialsSetContextMixin_1.default)(VASPNEBContextProvider.prototype); -(0, MethodDataContextMixin_1.default)(VASPNEBContextProvider.prototype); -(0, WorkflowContextMixin_1.default)(VASPNEBContextProvider.prototype); -(0, JobContextMixin_1.default)(VASPNEBContextProvider.prototype); diff --git a/dist/js/context/providers/index.d.ts b/dist/js/context/providers/index.d.ts index b27a9855..a521f3a3 100644 --- a/dist/js/context/providers/index.d.ts +++ b/dist/js/context/providers/index.d.ts @@ -1,7 +1,12 @@ -import { type Application } from "@mat3ra/ade"; -import type { JobSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; -import type { OrderedMaterial } from "../mixins/MaterialContextMixin"; +import type { ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; +import type { JobExternalContext } from "../mixins/JobContextMixin"; +import type { MaterialExternalContext } from "../mixins/MaterialContextMixin"; +import type { MaterialsExternalContext } from "../mixins/MaterialsContextMixin"; +import type { MaterialsSetExternalContext } from "../mixins/MaterialsSetContextMixin"; +import type { MethodDataExternalContext } from "../mixins/MethodDataContextMixin"; +import type { WorkflowExternalContext } from "../mixins/WorkflowContextMixin"; import type { UnitContext } from "./base/ContextProvider"; +import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import BoundaryConditionsFormDataManager from "./BoundaryConditionsFormDataManager"; import QENEBInputDataManager from "./by_application/espresso/QENEBInputDataManager"; import QEPWXInputDataManager from "./by_application/espresso/QEPWXInputDataManager"; @@ -58,21 +63,14 @@ export declare const PROVIDER_REGISTRY: { readonly VASPNEBInputDataManager: typeof VASPNEBInputDataManager; readonly NWChemInputDataManager: typeof NWChemInputDataManager; }; +export type SubworkflowContext = { + subworkflowContext: Record; +}; /** * External context type used by ExecutionUnitInput when creating providers. * This type is always expected to be present when providers are instantiated. */ -export type ExternalContext = { - application: Application; - material: OrderedMaterial; - materials: OrderedMaterial[]; - workflow: WorkflowSchema; - job: JobSchema; - isUsingJinjaVariables?: boolean; - materialsSet: { - _id: string; - }; -}; +export type ExternalContext = ApplicationExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext & JinjaExternalContext & SubworkflowContext; /** * Type for provider names as they appear in templates. */ diff --git a/dist/js/context/providers/index.js b/dist/js/context/providers/index.js index 0d1d3af8..9ec302f6 100644 --- a/dist/js/context/providers/index.js +++ b/dist/js/context/providers/index.js @@ -101,11 +101,7 @@ function createProvider(name, context, externalContext) { if (!ProviderClass) { throw new Error(`Unknown provider: ${name}`); } - // Type assertion is safe here because ExecutionUnitInput's ExternalContext - // extends the base ExternalContext and includes all properties needed by providers. - // Each provider may expect a more specific ExternalContext type, but at runtime - // the ExecutionUnitInput's ExternalContext will have all required properties. - // This is a legitimate use of `any` for dynamic dispatch where TypeScript - // cannot statically verify the types, but runtime behavior is guaranteed. + // The full ExternalContext is a superset of each provider's expected context type, + // so passing it to every provider's createFromUnitContext is type-safe (no assertion). return ProviderClass.createFromUnitContext(context, externalContext); } diff --git a/dist/js/subworkflows/convergence/ConvergenceParameter.d.ts b/dist/js/convergence/ConvergenceParameter.d.ts similarity index 100% rename from dist/js/subworkflows/convergence/ConvergenceParameter.d.ts rename to dist/js/convergence/ConvergenceParameter.d.ts diff --git a/dist/js/subworkflows/convergence/ConvergenceParameter.js b/dist/js/convergence/ConvergenceParameter.js similarity index 100% rename from dist/js/subworkflows/convergence/ConvergenceParameter.js rename to dist/js/convergence/ConvergenceParameter.js diff --git a/dist/js/subworkflows/convergence/NonUniformKGridConvergence.d.ts b/dist/js/convergence/NonUniformKGridConvergence.d.ts similarity index 100% rename from dist/js/subworkflows/convergence/NonUniformKGridConvergence.d.ts rename to dist/js/convergence/NonUniformKGridConvergence.d.ts diff --git a/dist/js/subworkflows/convergence/NonUniformKGridConvergence.js b/dist/js/convergence/NonUniformKGridConvergence.js similarity index 100% rename from dist/js/subworkflows/convergence/NonUniformKGridConvergence.js rename to dist/js/convergence/NonUniformKGridConvergence.js diff --git a/dist/js/subworkflows/convergence/UniformKGridConvergence.d.ts b/dist/js/convergence/UniformKGridConvergence.d.ts similarity index 100% rename from dist/js/subworkflows/convergence/UniformKGridConvergence.d.ts rename to dist/js/convergence/UniformKGridConvergence.d.ts diff --git a/dist/js/subworkflows/convergence/UniformKGridConvergence.js b/dist/js/convergence/UniformKGridConvergence.js similarity index 100% rename from dist/js/subworkflows/convergence/UniformKGridConvergence.js rename to dist/js/convergence/UniformKGridConvergence.js diff --git a/dist/js/subworkflows/convergence/factory.d.ts b/dist/js/convergence/factory.d.ts similarity index 100% rename from dist/js/subworkflows/convergence/factory.d.ts rename to dist/js/convergence/factory.d.ts diff --git a/dist/js/subworkflows/convergence/factory.js b/dist/js/convergence/factory.js similarity index 100% rename from dist/js/subworkflows/convergence/factory.js rename to dist/js/convergence/factory.js diff --git a/dist/js/enums.d.ts b/dist/js/enums.d.ts index ff1a6b54..f2cc5489 100644 --- a/dist/js/enums.d.ts +++ b/dist/js/enums.d.ts @@ -1,20 +1,15 @@ -/** - * THIS ENUMS ARE SHARED WITH TESTS. - * DO NOT IMPORT ANYTHINGS IN THIS MODULE. - */ -export declare const IO_ID_COLUMN = "exabyteId"; export declare const UNIT_TYPES: { - convergence: string; - exit: string; - execution: string; - map: string; - reduce: string; - assignment: string; - condition: string; - subworkflow: string; - processing: string; - io: string; - assertion: string; + readonly convergence: "convergence"; + readonly exit: "exit"; + readonly execution: "execution"; + readonly map: "map"; + readonly reduce: "reduce"; + readonly assignment: "assignment"; + readonly condition: "condition"; + readonly subworkflow: "subworkflow"; + readonly processing: "processing"; + readonly io: "io"; + readonly assertion: "assertion"; }; export declare enum UnitType { convergence = "convergence", @@ -28,45 +23,41 @@ export declare enum UnitType { io = "io", assertion = "assertion" } -export declare const UNIT_STATUSES: { - idle: string; - active: string; - finished: string; - error: string; - warning: string; -}; -export declare const UNIT_TAGS: { - hasConvergenceParam: string; - hasConvergenceResult: string; -}; export declare enum UnitTag { hasConvergenceParam = "hasConvergenceParam", hasConvergenceResult = "hasConvergenceResult" } +export declare enum UnitStatus { + idle = "idle", + active = "active", + finished = "finished", + error = "error", + warning = "warning" +} export declare const WORKFLOW_STATUSES: { - "up-to-date": string; - outdated: string; + readonly "up-to-date": "up-to-date"; + readonly outdated: "outdated"; }; export declare const TAB_NAVIGATION_CONFIG: { - overview: { - itemName: string; - className: string; - href: string; + readonly overview: { + readonly itemName: "Overview"; + readonly className: ""; + readonly href: "sw-overview"; }; - importantSettings: { - itemName: string; - className: string; - href: string; + readonly importantSettings: { + readonly itemName: "Important settings"; + readonly className: ""; + readonly href: "sw-important-settings"; }; - detailedView: { - itemName: string; - className: string; - href: string; + readonly detailedView: { + readonly itemName: "Detailed view"; + readonly className: ""; + readonly href: "sw-detailed-view"; }; - compute: { - itemName: string; - className: string; - href: string; + readonly compute: { + readonly itemName: "Compute"; + readonly className: ""; + readonly href: "sw-compute"; }; }; export declare const UNIT_NAME_INVALID_CHARS = "/"; diff --git a/dist/js/enums.js b/dist/js/enums.js index b5317213..c4a0019c 100644 --- a/dist/js/enums.js +++ b/dist/js/enums.js @@ -1,11 +1,6 @@ "use strict"; -/** - * THIS ENUMS ARE SHARED WITH TESTS. - * DO NOT IMPORT ANYTHINGS IN THIS MODULE. - */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.WORKFLOW_STATUSES = exports.UnitTag = exports.UNIT_TAGS = exports.UNIT_STATUSES = exports.UnitType = exports.UNIT_TYPES = exports.IO_ID_COLUMN = void 0; -exports.IO_ID_COLUMN = "exabyteId"; +exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.WORKFLOW_STATUSES = exports.UnitStatus = exports.UnitTag = exports.UnitType = exports.UNIT_TYPES = void 0; exports.UNIT_TYPES = { // not currently used convergence: "convergence", @@ -34,22 +29,19 @@ var UnitType; UnitType["io"] = "io"; UnitType["assertion"] = "assertion"; })(UnitType || (exports.UnitType = UnitType = {})); -exports.UNIT_STATUSES = { - idle: "idle", - active: "active", - finished: "finished", - error: "error", - warning: "warning", -}; -exports.UNIT_TAGS = { - hasConvergenceParam: "hasConvergenceParam", - hasConvergenceResult: "hasConvergenceResult", -}; var UnitTag; (function (UnitTag) { UnitTag["hasConvergenceParam"] = "hasConvergenceParam"; UnitTag["hasConvergenceResult"] = "hasConvergenceResult"; })(UnitTag || (exports.UnitTag = UnitTag = {})); +var UnitStatus; +(function (UnitStatus) { + UnitStatus["idle"] = "idle"; + UnitStatus["active"] = "active"; + UnitStatus["finished"] = "finished"; + UnitStatus["error"] = "error"; + UnitStatus["warning"] = "warning"; +})(UnitStatus || (exports.UnitStatus = UnitStatus = {})); exports.WORKFLOW_STATUSES = { "up-to-date": "up-to-date", outdated: "outdated", diff --git a/dist/js/generated/ProcessingUnitSchemaMixin.d.ts b/dist/js/generated/ProcessingUnitSchemaMixin.d.ts deleted file mode 100644 index eb59cea2..00000000 --- a/dist/js/generated/ProcessingUnitSchemaMixin.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { ProcessingUnitMixinSchema } from "@mat3ra/esse/dist/js/types"; -export type ProcessingUnitSchemaMixin = ProcessingUnitMixinSchema; -export type ProcessingUnitInMemoryEntity = InMemoryEntity & ProcessingUnitSchemaMixin; -export declare function processingUnitSchemaMixin(item: InMemoryEntity): asserts item is T & ProcessingUnitSchemaMixin; diff --git a/dist/js/generated/ProcessingUnitSchemaMixin.js b/dist/js/generated/ProcessingUnitSchemaMixin.js deleted file mode 100644 index 1d556e93..00000000 --- a/dist/js/generated/ProcessingUnitSchemaMixin.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.processingUnitSchemaMixin = processingUnitSchemaMixin; -function processingUnitSchemaMixin(item) { - // @ts-expect-error - const properties = { - get type() { - return this.prop("type"); - }, - set type(value) { - this.setProp("type", value); - }, - get operation() { - return this.requiredProp("operation"); - }, - set operation(value) { - this.setProp("operation", value); - }, - get operationType() { - return this.requiredProp("operationType"); - }, - set operationType(value) { - this.setProp("operationType", value); - }, - get inputData() { - return this.requiredProp("inputData"); - }, - set inputData(value) { - this.setProp("inputData", value); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index d30033bd..635759d4 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -1,26 +1,9 @@ -import { Subworkflow } from "./subworkflows"; -import { Workflow } from "./workflows"; -import { createWorkflow } from "./workflows"; -import { createWorkflows } from "./workflows"; -import { createWorkflowConfigs } from "./workflows"; -import { createSubworkflowByName } from "./subworkflows"; +import PointsPathFormDataProvider from "./context/providers/PointsPath/PointsPathFormDataProvider"; +import { globalSettings } from "./context/providers/settings"; +import { TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES } from "./enums"; +import Subworkflow from "./Subworkflow"; +import { AssertionUnit, AssignmentUnit, BaseUnit, ConditionUnit, ExecutionUnit, IOUnit, MapUnit, ReduceUnit, SubworkflowUnit } from "./units"; import { UnitFactory } from "./units/factory"; -import { builders } from "./units/builders"; -import { UNIT_TYPES } from "./enums"; -import { UNIT_STATUSES } from "./enums"; -import { TAB_NAVIGATION_CONFIG } from "./enums"; -import { UNIT_NAME_INVALID_CHARS } from "./enums"; -import { WORKFLOW_STATUSES } from "./enums"; -import { BaseUnit } from "./units"; -import { ExecutionUnit } from "./units"; -import { AssertionUnit } from "./units"; -import { AssignmentUnit } from "./units"; -import { ConditionUnit } from "./units"; -import { IOUnit } from "./units"; -import { MapUnit } from "./units"; -import { ProcessingUnit } from "./units"; -import { ReduceUnit } from "./units"; -import { SubworkflowUnit } from "./units"; import { defaultMapConfig } from "./units/MapUnit"; -import { globalSettings } from "./context/providers/settings"; -export { Subworkflow, Workflow, createWorkflow, createWorkflows, createWorkflowConfigs, createSubworkflowByName, UnitFactory, builders, UNIT_TYPES, UNIT_STATUSES, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, BaseUnit, ExecutionUnit, AssertionUnit, AssignmentUnit, ConditionUnit, IOUnit, MapUnit, ProcessingUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, PointsPathFormDataProvider, globalSettings }; +import { Workflow } from "./Workflow"; +export { Subworkflow, Workflow, UnitFactory, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, BaseUnit, ExecutionUnit, AssertionUnit, AssignmentUnit, ConditionUnit, IOUnit, MapUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, PointsPathFormDataProvider, globalSettings, }; diff --git a/dist/js/index.js b/dist/js/index.js index 7dc8baac..822d65e3 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -1,19 +1,19 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.globalSettings = exports.PointsPathFormDataProvider = exports.defaultMapConfig = exports.SubworkflowUnit = exports.ReduceUnit = exports.ProcessingUnit = exports.MapUnit = exports.IOUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.ExecutionUnit = exports.BaseUnit = exports.WORKFLOW_STATUSES = exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.UNIT_STATUSES = exports.UNIT_TYPES = exports.builders = exports.UnitFactory = exports.createSubworkflowByName = exports.createWorkflowConfigs = exports.createWorkflows = exports.createWorkflow = exports.Workflow = exports.Subworkflow = void 0; -const PointsPathFormDataProvider_1 = require("./context/providers/PointsPath/PointsPathFormDataProvider"); -Object.defineProperty(exports, "PointsPathFormDataProvider", { enumerable: true, get: function () { return PointsPathFormDataProvider_1.PointsPathFormDataProvider; } }); +exports.globalSettings = exports.PointsPathFormDataProvider = exports.defaultMapConfig = exports.SubworkflowUnit = exports.ReduceUnit = exports.MapUnit = exports.IOUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.ExecutionUnit = exports.BaseUnit = exports.WORKFLOW_STATUSES = exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.UnitFactory = exports.Workflow = exports.Subworkflow = void 0; +const PointsPathFormDataProvider_1 = __importDefault(require("./context/providers/PointsPath/PointsPathFormDataProvider")); +exports.PointsPathFormDataProvider = PointsPathFormDataProvider_1.default; const settings_1 = require("./context/providers/settings"); Object.defineProperty(exports, "globalSettings", { enumerable: true, get: function () { return settings_1.globalSettings; } }); const enums_1 = require("./enums"); Object.defineProperty(exports, "TAB_NAVIGATION_CONFIG", { enumerable: true, get: function () { return enums_1.TAB_NAVIGATION_CONFIG; } }); Object.defineProperty(exports, "UNIT_NAME_INVALID_CHARS", { enumerable: true, get: function () { return enums_1.UNIT_NAME_INVALID_CHARS; } }); -Object.defineProperty(exports, "UNIT_STATUSES", { enumerable: true, get: function () { return enums_1.UNIT_STATUSES; } }); -Object.defineProperty(exports, "UNIT_TYPES", { enumerable: true, get: function () { return enums_1.UNIT_TYPES; } }); Object.defineProperty(exports, "WORKFLOW_STATUSES", { enumerable: true, get: function () { return enums_1.WORKFLOW_STATUSES; } }); -const subworkflows_1 = require("./subworkflows"); -Object.defineProperty(exports, "createSubworkflowByName", { enumerable: true, get: function () { return subworkflows_1.createSubworkflowByName; } }); -Object.defineProperty(exports, "Subworkflow", { enumerable: true, get: function () { return subworkflows_1.Subworkflow; } }); +const Subworkflow_1 = __importDefault(require("./Subworkflow")); +exports.Subworkflow = Subworkflow_1.default; const units_1 = require("./units"); Object.defineProperty(exports, "AssertionUnit", { enumerable: true, get: function () { return units_1.AssertionUnit; } }); Object.defineProperty(exports, "AssignmentUnit", { enumerable: true, get: function () { return units_1.AssignmentUnit; } }); @@ -22,17 +22,11 @@ Object.defineProperty(exports, "ConditionUnit", { enumerable: true, get: functio Object.defineProperty(exports, "ExecutionUnit", { enumerable: true, get: function () { return units_1.ExecutionUnit; } }); Object.defineProperty(exports, "IOUnit", { enumerable: true, get: function () { return units_1.IOUnit; } }); Object.defineProperty(exports, "MapUnit", { enumerable: true, get: function () { return units_1.MapUnit; } }); -Object.defineProperty(exports, "ProcessingUnit", { enumerable: true, get: function () { return units_1.ProcessingUnit; } }); Object.defineProperty(exports, "ReduceUnit", { enumerable: true, get: function () { return units_1.ReduceUnit; } }); Object.defineProperty(exports, "SubworkflowUnit", { enumerable: true, get: function () { return units_1.SubworkflowUnit; } }); -const builders_1 = require("./units/builders"); -Object.defineProperty(exports, "builders", { enumerable: true, get: function () { return builders_1.builders; } }); const factory_1 = require("./units/factory"); Object.defineProperty(exports, "UnitFactory", { enumerable: true, get: function () { return factory_1.UnitFactory; } }); const MapUnit_1 = require("./units/MapUnit"); Object.defineProperty(exports, "defaultMapConfig", { enumerable: true, get: function () { return MapUnit_1.defaultMapConfig; } }); -const workflows_1 = require("./workflows"); -Object.defineProperty(exports, "createWorkflow", { enumerable: true, get: function () { return workflows_1.createWorkflow; } }); -Object.defineProperty(exports, "createWorkflowConfigs", { enumerable: true, get: function () { return workflows_1.createWorkflowConfigs; } }); -Object.defineProperty(exports, "createWorkflows", { enumerable: true, get: function () { return workflows_1.createWorkflows; } }); -Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return workflows_1.Workflow; } }); +const Workflow_1 = require("./Workflow"); +Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return Workflow_1.Workflow; } }); diff --git a/dist/js/subworkflows/create.d.ts b/dist/js/standata/subworkflows/create.d.ts similarity index 94% rename from dist/js/subworkflows/create.d.ts rename to dist/js/standata/subworkflows/create.d.ts index 5d8a6901..0be5d37e 100644 --- a/dist/js/subworkflows/create.d.ts +++ b/dist/js/standata/subworkflows/create.d.ts @@ -23,7 +23,7 @@ export function createSubworkflow({ subworkflowData, AppRegistry, modelFactoryCl AppRegistry?: typeof ApplicationRegistry | undefined; modelFactoryCls?: typeof ModelFactory | undefined; methodFactoryCls?: typeof MethodFactory | undefined; - subworkflowCls?: typeof Subworkflow | undefined; + subworkflowCls?: any; unitFactoryCls?: typeof UnitFactory | undefined; unitBuilders?: { UnitConfigBuilder: typeof import("../units/builders/UnitConfigBuilder").UnitConfigBuilder; @@ -32,7 +32,7 @@ export function createSubworkflow({ subworkflowData, AppRegistry, modelFactoryCl ExecutionUnitConfigBuilder: typeof import("../units/builders/ExecutionUnitConfigBuilder").ExecutionUnitConfigBuilder; IOUnitConfigBuilder: typeof import("../units/builders/IOUnitConfigBuilder").IOUnitConfigBuilder; } | undefined; -}): Subworkflow; +}): any; /** * @summary Convenience wrapper around createSubworkflow to create by app name and swf name * @param appName {String} application name @@ -45,5 +45,4 @@ export function createSubworkflowByName({ appName, swfName, workflowSubworkflowM import { ApplicationRegistry } from "@mat3ra/ade"; import { ModelFactory } from "@mat3ra/mode"; import { MethodFactory } from "@mat3ra/mode"; -import { Subworkflow } from "./subworkflow"; -import { UnitFactory } from "../units"; +import { UnitFactory } from "../../units"; diff --git a/dist/js/subworkflows/create.js b/dist/js/standata/subworkflows/create.js similarity index 96% rename from dist/js/subworkflows/create.js rename to dist/js/standata/subworkflows/create.js index 9ee915f1..b1ddedc4 100644 --- a/dist/js/subworkflows/create.js +++ b/dist/js/standata/subworkflows/create.js @@ -9,12 +9,13 @@ exports.createSubworkflowByName = createSubworkflowByName; const ade_1 = require("@mat3ra/ade"); const mode_1 = require("@mat3ra/mode"); const standata_1 = require("@mat3ra/standata"); +// eslint-disable-next-line import/no-extraneous-dependencies const lodash_1 = __importDefault(require("lodash")); -const units_1 = require("../units"); +const Subworkflow_1 = require("../../Subworkflow"); +const units_1 = require("../../units"); +const utils_1 = require("../../workflows/utils"); const builders_1 = require("../units/builders"); -const utils_1 = require("../utils"); const dynamic_1 = require("./dynamic"); -const subworkflow_1 = require("./subworkflow"); // NOTE: DFTModel => DFTModelConfig, configs should have the same name as the model/method class + "Config" at the end function _getConfigFromModelOrMethodName(name, kind) { const configs = kind === "Model" ? mode_1.default_models : mode_1.default_methods; @@ -124,7 +125,7 @@ function createDynamicUnits({ dynamicSubworkflow, units, unitBuilders, unitFacto throw new Error(`dynamicSubworkflow=${name} not recognized`); } } -function createSubworkflow({ subworkflowData, AppRegistry = ade_1.ApplicationRegistry, modelFactoryCls = mode_1.ModelFactory, methodFactoryCls = mode_1.MethodFactory, subworkflowCls = subworkflow_1.Subworkflow, unitFactoryCls = units_1.UnitFactory, unitBuilders = builders_1.builders, }) { +function createSubworkflow({ subworkflowData, AppRegistry = ade_1.ApplicationRegistry, modelFactoryCls = mode_1.ModelFactory, methodFactoryCls = mode_1.MethodFactory, subworkflowCls = Subworkflow_1.Subworkflow, unitFactoryCls = units_1.UnitFactory, unitBuilders = builders_1.builders, }) { const { application, model, method, setSearchText } = createTopLevel({ subworkflowData, AppRegistry, diff --git a/dist/js/subworkflows/dynamic/espresso/getQpointIrrep.d.ts b/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.d.ts similarity index 100% rename from dist/js/subworkflows/dynamic/espresso/getQpointIrrep.d.ts rename to dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.d.ts diff --git a/dist/js/subworkflows/dynamic/espresso/getQpointIrrep.js b/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js similarity index 95% rename from dist/js/subworkflows/dynamic/espresso/getQpointIrrep.js rename to dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js index fba0720b..c6488393 100644 --- a/dist/js/subworkflows/dynamic/espresso/getQpointIrrep.js +++ b/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getQpointIrrep = getQpointIrrep; -const enums_1 = require("../../../enums"); +const enums_1 = require("../../../../enums"); /** * @summary Get QptIrr units used in phonon map calculations * @param unitBuilders {Object} unit builders diff --git a/dist/js/subworkflows/dynamic/index.d.ts b/dist/js/standata/subworkflows/dynamic/index.d.ts similarity index 100% rename from dist/js/subworkflows/dynamic/index.d.ts rename to dist/js/standata/subworkflows/dynamic/index.d.ts diff --git a/dist/js/subworkflows/dynamic/index.js b/dist/js/standata/subworkflows/dynamic/index.js similarity index 100% rename from dist/js/subworkflows/dynamic/index.js rename to dist/js/standata/subworkflows/dynamic/index.js diff --git a/dist/js/subworkflows/dynamic/surfaceEnergy.d.ts b/dist/js/standata/subworkflows/dynamic/surfaceEnergy.d.ts similarity index 100% rename from dist/js/subworkflows/dynamic/surfaceEnergy.d.ts rename to dist/js/standata/subworkflows/dynamic/surfaceEnergy.d.ts diff --git a/dist/js/subworkflows/dynamic/surfaceEnergy.js b/dist/js/standata/subworkflows/dynamic/surfaceEnergy.js similarity index 100% rename from dist/js/subworkflows/dynamic/surfaceEnergy.js rename to dist/js/standata/subworkflows/dynamic/surfaceEnergy.js diff --git a/dist/js/units/builders/AssertionUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/AssertionUnitConfigBuilder.d.ts similarity index 100% rename from dist/js/units/builders/AssertionUnitConfigBuilder.d.ts rename to dist/js/standata/units/builders/AssertionUnitConfigBuilder.d.ts diff --git a/dist/js/units/builders/AssertionUnitConfigBuilder.js b/dist/js/standata/units/builders/AssertionUnitConfigBuilder.js similarity index 95% rename from dist/js/units/builders/AssertionUnitConfigBuilder.js rename to dist/js/standata/units/builders/AssertionUnitConfigBuilder.js index 3bf740fd..ea44d426 100644 --- a/dist/js/units/builders/AssertionUnitConfigBuilder.js +++ b/dist/js/standata/units/builders/AssertionUnitConfigBuilder.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AssertionUnitConfigBuilder = void 0; -const enums_1 = require("../../enums"); +const enums_1 = require("../../../enums"); const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); class AssertionUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { constructor(name, statement, errorMessage) { diff --git a/dist/js/units/builders/AssignmentUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.d.ts similarity index 100% rename from dist/js/units/builders/AssignmentUnitConfigBuilder.d.ts rename to dist/js/standata/units/builders/AssignmentUnitConfigBuilder.d.ts diff --git a/dist/js/units/builders/AssignmentUnitConfigBuilder.js b/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js similarity index 96% rename from dist/js/units/builders/AssignmentUnitConfigBuilder.js rename to dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js index e7991665..ac23a6f3 100644 --- a/dist/js/units/builders/AssignmentUnitConfigBuilder.js +++ b/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AssignmentUnitConfigBuilder = void 0; -const enums_1 = require("../../enums"); +const enums_1 = require("../../../enums"); const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); class AssignmentUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { constructor(name, variableName, variableValue, input = [], results = []) { diff --git a/dist/js/units/builders/ExecutionUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.d.ts similarity index 100% rename from dist/js/units/builders/ExecutionUnitConfigBuilder.d.ts rename to dist/js/standata/units/builders/ExecutionUnitConfigBuilder.d.ts diff --git a/dist/js/units/builders/ExecutionUnitConfigBuilder.js b/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js similarity index 98% rename from dist/js/units/builders/ExecutionUnitConfigBuilder.js rename to dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js index 44915b5e..8274c388 100644 --- a/dist/js/units/builders/ExecutionUnitConfigBuilder.js +++ b/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.ExecutionUnitConfigBuilder = void 0; /* eslint-disable class-methods-use-this */ const ade_1 = require("@mat3ra/ade"); -const enums_1 = require("../../enums"); +const enums_1 = require("../../../enums"); const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); class ExecutionUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { constructor(name, application, execName, flavorName, flowchartId) { diff --git a/dist/js/units/builders/IOUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/IOUnitConfigBuilder.d.ts similarity index 100% rename from dist/js/units/builders/IOUnitConfigBuilder.d.ts rename to dist/js/standata/units/builders/IOUnitConfigBuilder.d.ts diff --git a/dist/js/units/builders/IOUnitConfigBuilder.js b/dist/js/standata/units/builders/IOUnitConfigBuilder.js similarity index 97% rename from dist/js/units/builders/IOUnitConfigBuilder.js rename to dist/js/standata/units/builders/IOUnitConfigBuilder.js index 53990f63..5a568bd6 100644 --- a/dist/js/units/builders/IOUnitConfigBuilder.js +++ b/dist/js/standata/units/builders/IOUnitConfigBuilder.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IOUnitConfigBuilder = void 0; -const enums_1 = require("../../enums"); +const enums_1 = require("../../../enums"); const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); class IOUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { constructor(name, endpointName, endpointOptions) { diff --git a/dist/js/units/builders/UnitConfigBuilder.d.ts b/dist/js/standata/units/builders/UnitConfigBuilder.d.ts similarity index 100% rename from dist/js/units/builders/UnitConfigBuilder.d.ts rename to dist/js/standata/units/builders/UnitConfigBuilder.d.ts diff --git a/dist/js/units/builders/UnitConfigBuilder.js b/dist/js/standata/units/builders/UnitConfigBuilder.js similarity index 97% rename from dist/js/units/builders/UnitConfigBuilder.js rename to dist/js/standata/units/builders/UnitConfigBuilder.js index bbe2a9a0..f049f348 100644 --- a/dist/js/units/builders/UnitConfigBuilder.js +++ b/dist/js/standata/units/builders/UnitConfigBuilder.js @@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.UnitConfigBuilder = void 0; const utils_1 = require("@mat3ra/utils"); +// eslint-disable-next-line import/no-extraneous-dependencies const underscore_1 = __importDefault(require("underscore")); class UnitConfigBuilder { constructor({ name, type, flowchartId }) { diff --git a/dist/js/units/builders/index.d.ts b/dist/js/standata/units/builders/index.d.ts similarity index 100% rename from dist/js/units/builders/index.d.ts rename to dist/js/standata/units/builders/index.d.ts diff --git a/dist/js/units/builders/index.js b/dist/js/standata/units/builders/index.js similarity index 100% rename from dist/js/units/builders/index.js rename to dist/js/standata/units/builders/index.js diff --git a/dist/js/utils.d.ts b/dist/js/standata/utils.d.ts similarity index 89% rename from dist/js/utils.d.ts rename to dist/js/standata/utils.d.ts index 2ff341f5..21cc78bd 100644 --- a/dist/js/utils.d.ts +++ b/dist/js/standata/utils.d.ts @@ -1,12 +1,4 @@ -import type { SubworkflowSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; -/** - * @summary set the head of an array of units - */ -export declare function setUnitsHead(units: T[]): T[]; -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -export declare function setNextLinks(units: T[]): T[]; +import type { SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; /** * @summary Apply configuration data to an object * @param obj {*} object / class containing methods or attributes to be set @@ -85,43 +77,6 @@ export declare function findUnit({ subworkflowData, index, type, }: { basename?: string; filetype?: string; })[]; -} | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "reduce"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - mapFlowchartId: string; - input: { - operation: string; - arguments: string[]; - }[]; } | { _id?: string; slug?: string; @@ -662,41 +617,4 @@ export declare function findUnit({ subworkflowData, index, type, }: { }[]; operand: string; value: string | boolean | number; -} | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "processing"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - operation: string; - operationType: string; - inputData: { - [k: string]: unknown; - }; }; diff --git a/dist/js/utils.js b/dist/js/standata/utils.js similarity index 52% rename from dist/js/utils.js rename to dist/js/standata/utils.js index 3c631cdf..3ab06135 100644 --- a/dist/js/utils.js +++ b/dist/js/standata/utils.js @@ -1,44 +1,7 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.setUnitsHead = setUnitsHead; -exports.setNextLinks = setNextLinks; exports.applyConfig = applyConfig; exports.findUnit = findUnit; -const lodash_1 = __importDefault(require("lodash")); -/** - * @summary set the head of an array of units - */ -function setUnitsHead(units) { - if (units.length > 0) { - units[0].head = true; - lodash_1.default.tail(units).map((x) => (x.head = false)); - } - return units; -} -// TODO: fix setNextLinks on unit removal and convergence logic. -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -function setNextLinks(units) { - var _a; - const flowchartIds = units.map((u) => u.flowchartId); - for (let i = 0; i < units.length - 1; i++) { - if (!units[i].next) { - // newly added units don't have next set yet => set it - units[i].next = units[i + 1].flowchartId; - if (i > 0) - units[i - 1].next = units[i].flowchartId; - } - else if (!flowchartIds.includes((_a = units[i].next) !== null && _a !== void 0 ? _a : "")) { - // newly removed units may create broken next links => fix it - units[i].next = units[i + 1].flowchartId; - } - } - return units; -} /** * @summary Apply configuration data to an object * @param obj {*} object / class containing methods or attributes to be set diff --git a/dist/js/workflows/create.d.ts b/dist/js/standata/workflows/create.d.ts similarity index 87% rename from dist/js/workflows/create.d.ts rename to dist/js/standata/workflows/create.d.ts index 546e92ce..6d0af67b 100644 --- a/dist/js/workflows/create.d.ts +++ b/dist/js/standata/workflows/create.d.ts @@ -5,4 +5,4 @@ export function createWorkflow({ appName, workflowData, workflowSubworkflowMapBy workflowSubworkflowMapByApplication: any; workflowCls?: typeof Workflow | undefined; }): any[]; -import { Workflow } from "./workflow"; +import { Workflow } from "../../Workflow"; diff --git a/dist/js/workflows/create.js b/dist/js/standata/workflows/create.js similarity index 88% rename from dist/js/workflows/create.js rename to dist/js/standata/workflows/create.js index 25224744..466808b3 100644 --- a/dist/js/workflows/create.js +++ b/dist/js/standata/workflows/create.js @@ -1,62 +1,18 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWorkflow = createWorkflow; +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const schemas_json_1 = __importDefault(require("@mat3ra/esse/dist/js/schemas.json")); +const units_1 = require("../../units"); +const MapUnit_1 = require("../../units/MapUnit"); +const Workflow_1 = require("../../Workflow"); +const utils_1 = require("../../workflows/utils"); const create_1 = require("../subworkflows/create"); -const units_1 = require("../units"); -const map_1 = require("../units/map"); -const utils_1 = require("../utils"); -const workflow_1 = require("./workflow"); -/** - * @summary Helper for creating Map units for complex workflows - * @param config {Object} map unit configuration - * @param unitFactoryCls {*} class factory for map unit - * @returns {*} map unit - */ -function createMapUnit({ config, unitFactoryCls = units_1.UnitFactory }) { - let { input: defaultInput } = map_1.defaultMapConfig; - if (config.input) { - defaultInput = { ...defaultInput, ...config.input }; - } - const unit = unitFactoryCls.create({ ...map_1.defaultMapConfig, input: defaultInput }); - return unit; -} -/** - * @summary Update subworkflow units with patch configuration defined in the workflow config - * @param subworkflowData {Object} subworkflow data - * @param unitConfigs {Array} array of patch configs for subworkflow units - * @returns subworkflowData {Object} subworkflowData with patches applied to units - */ -function updateUnitConfigs({ subworkflowData, unitConfigs }) { - unitConfigs.forEach((config) => { - const { index, type, config: unitConfig } = config; // unitConfig should contain 'attributes' key - const unit = (0, utils_1.findUnit)({ subworkflowData, index, type }); - console.log(` patching ${type} unit ${index} of subworkflow ${subworkflowData.name}`); - unit.config = (0, utils_1.applyConfig)({ obj: unit.config, config: unitConfig }); - return null; - }); - return subworkflowData; -} -/** - * @summary Use subworkflow.createSubworkflow to create a Subworkflow unit - * @param appName {String} application name - * @param unitData {*} object containing subworkflow configuration data - * @param workflowData {*} object containing all workflow configuration data - * @param swArgs {*} subworkflow classes - * @returns {*} subworkflow object - */ -function createSubworkflowUnit({ appName, unitData, workflowData, ...swArgs }) { - const { name: unitName, unitConfigs, config } = unitData; - const { subworkflows } = workflowData; - const { [appName]: dataByApp } = subworkflows; - let { [unitName]: subworkflowData } = dataByApp; - subworkflowData.config = { ...subworkflowData.config, ...config }; - if (unitConfigs) - subworkflowData = updateUnitConfigs({ subworkflowData, unitConfigs }); - return (0, create_1.createSubworkflow)({ - subworkflowData, - ...swArgs, - }); -} +// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` +JSONSchemasInterface_1.default.setSchemas(schemas_json_1.default); /** * @summary Create the first workflow object specified in a workflow configuration * @param workflow {*|null} the workflow (if already initialized, no-op) @@ -81,6 +37,20 @@ function createWorkflowHead({ workflow, unit, type, workflowCls }) { } return wf; } +/** + * @summary Helper for creating Map units for complex workflows + * @param config {Object} map unit configuration + * @param unitFactoryCls {*} class factory for map unit + * @returns {*} map unit + */ +function createMapUnit({ config, unitFactoryCls = units_1.UnitFactory }) { + let { input: defaultInput } = MapUnit_1.defaultMapConfig; + if (config.input) { + defaultInput = { ...defaultInput, ...config.input }; + } + const unit = unitFactoryCls.create({ ...MapUnit_1.defaultMapConfig, input: defaultInput }); + return unit; +} /** * @summary Combine workflow units together * @param workflow {*} the workflow object @@ -144,6 +114,43 @@ function createFromWorkflowUnits({ wfUnits, workflowCls, unitFactoryCls }) { }); return (0, utils_1.applyConfig)({ obj: workflow, config }); } +/** + * @summary Update subworkflow units with patch configuration defined in the workflow config + * @param subworkflowData {Object} subworkflow data + * @param unitConfigs {Array} array of patch configs for subworkflow units + * @returns subworkflowData {Object} subworkflowData with patches applied to units + */ +function updateUnitConfigs({ subworkflowData, unitConfigs }) { + unitConfigs.forEach((config) => { + const { index, type, config: unitConfig } = config; // unitConfig should contain 'attributes' key + const unit = (0, utils_1.findUnit)({ subworkflowData, index, type }); + console.log(` patching ${type} unit ${index} of subworkflow ${subworkflowData.name}`); + unit.config = (0, utils_1.applyConfig)({ obj: unit.config, config: unitConfig }); + return null; + }); + return subworkflowData; +} +/** + * @summary Use subworkflow.createSubworkflow to create a Subworkflow unit + * @param appName {String} application name + * @param unitData {*} object containing subworkflow configuration data + * @param workflowData {*} object containing all workflow configuration data + * @param swArgs {*} subworkflow classes + * @returns {*} subworkflow object + */ +function createSubworkflowUnit({ appName, unitData, workflowData, ...swArgs }) { + const { name: unitName, unitConfigs, config } = unitData; + const { subworkflows } = workflowData; + const { [appName]: dataByApp } = subworkflows; + let { [unitName]: subworkflowData } = dataByApp; + subworkflowData.config = { ...subworkflowData.config, ...config }; + if (unitConfigs) + subworkflowData = updateUnitConfigs({ subworkflowData, unitConfigs }); + return (0, create_1.createSubworkflow)({ + subworkflowData, + ...swArgs, + }); +} /** * @summary Creates a flattened array of workflow units from nested workflow/subworkflow * configuration data comprising a simple or complex workflow @@ -191,7 +198,7 @@ function createWorkflowUnits({ appName, workflowData, workflowSubworkflowMapByAp unitFactoryCls: swArgs.unitFactoryCls, }); } -function createWorkflow({ appName, workflowData, workflowSubworkflowMapByApplication, workflowCls = workflow_1.Workflow, ...swArgs }) { +function createWorkflow({ appName, workflowData, workflowSubworkflowMapByApplication, workflowCls = Workflow_1.Workflow, ...swArgs }) { const { name } = workflowData; console.log(`wode: creating ${appName} workflow ${name}`); const wf = createWorkflowUnits({ diff --git a/dist/js/subworkflows/convergence.d.ts b/dist/js/subworkflows/convergence.d.ts deleted file mode 100644 index fced1616..00000000 --- a/dist/js/subworkflows/convergence.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export function ConvergenceMixin(superclass: any): { - new (): { - [x: string]: any; - get convergenceParam(): any; - get convergenceResult(): any; - convergenceSeries(scopeTrack: any): any; - addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, }: { - parameter: any; - parameterInitial: any; - parameterIncrement: any; - result: any; - resultInitial: any; - condition: any; - operator: any; - tolerance: any; - maxOccurrences: any; - }): void; - }; - [x: string]: any; -}; diff --git a/dist/js/subworkflows/convergence.js b/dist/js/subworkflows/convergence.js deleted file mode 100644 index bb1d109d..00000000 --- a/dist/js/subworkflows/convergence.js +++ /dev/null @@ -1,173 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ConvergenceMixin = void 0; -const merge_1 = __importDefault(require("lodash/merge")); -const enums_1 = require("../enums"); -const factory_1 = require("./convergence/factory"); -const ConvergenceMixin = (superclass) => class extends superclass { - get convergenceParam() { - var _a; - return ((_a = this.findUnitWithTag("hasConvergenceParam")) === null || _a === void 0 ? void 0 : _a.operand) || undefined; - } - get convergenceResult() { - var _a; - return ((_a = this.findUnitWithTag("hasConvergenceResult")) === null || _a === void 0 ? void 0 : _a.operand) || undefined; - } - convergenceSeries(scopeTrack) { - if (!this.hasConvergence || !(scopeTrack === null || scopeTrack === void 0 ? void 0 : scopeTrack.length)) - return []; - let lastResult; - const series = scopeTrack - .map((scopeItem, i) => { - var _a, _b; - return ({ - x: i, - param: (_a = scopeItem.scope) === null || _a === void 0 ? void 0 : _a.global[this.convergenceParam], - y: (_b = scopeItem.scope) === null || _b === void 0 ? void 0 : _b.global[this.convergenceResult], - }); - }) - .filter(({ y }) => { - const isNewResult = y !== undefined && y !== lastResult; - lastResult = y; - return isNewResult; - }); - return series.map((item, i) => { - return { - x: i + 1, - param: item.param, - y: item.y, - }; - }); - } - addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, }) { - // RF: added TODO comments for future improvements - const { units } = this; - // Find unit to converge: should contain passed result in its results list - // TODO: make user to select unit for convergence explicitly - const unitForConvergence = units.find((x) => x.resultNames.find((name) => name === result)); - if (!unitForConvergence) { - // eslint-disable-next-line no-undef - sAlert.error(`Subworkflow does not contain unit with '${result}' as extracted property.`); - throw new Error("There is no result to converge"); - } - // initialize parameter - const param = (0, factory_1.createConvergenceParameter)({ - name: parameter, - initialValue: parameterInitial, - increment: parameterIncrement, - }); - // Replace kgrid to be ready for convergence - // TODO: kgrid should be abstracted and selected by user - const providers = unitForConvergence.importantSettingsProviders; - const gridProvider = providers.find((p) => p.name === "kgrid" || p.name === "qgrid"); - let mergedContext = param.unitContext; - if (gridProvider) { - mergedContext = (0, merge_1.default)(gridProvider.yieldData(), param.unitContext); - gridProvider.setData(mergedContext); - gridProvider.setIsEdited(true); - } - unitForConvergence.updateContext(mergedContext); - const prevResult = "prev_result"; - const iteration = "iteration"; - // Assignment with result's initial value - const prevResultInit = this._UnitFactory.create({ - name: "init result", - type: enums_1.UNIT_TYPES.assignment, - head: true, - operand: prevResult, - value: resultInitial, - }); - // Assignment with initial value of convergence parameter - const paramInit = this._UnitFactory.create({ - name: "init parameter", - type: enums_1.UNIT_TYPES.assignment, - operand: param.name, - value: param.initialValue, - tags: [enums_1.UNIT_TAGS.hasConvergenceParam], - }); - // Assignment with initial value of iteration counter - const iterInit = this._UnitFactory.create({ - name: "init counter", - type: enums_1.UNIT_TYPES.assignment, - operand: iteration, - value: 1, - }); - // Assignment for storing iteration result: extracts 'result' from convergence unit scope - const storePrevResult = this._UnitFactory.create({ - name: "store result", - type: enums_1.UNIT_TYPES.assignment, - input: [ - { - scope: unitForConvergence.flowchartId, - name: result, - }, - ], - operand: prevResult, - value: result, - }); - // Assignment for convergence param increase - const nextStep = this._UnitFactory.create({ - name: "update parameter", - type: enums_1.UNIT_TYPES.assignment, - input: param.useVariablesFromUnitContext(unitForConvergence.flowchartId), - operand: param.name, - value: param.increment, - next: unitForConvergence.flowchartId, - }); - // Final step of convergence - const exit = this._UnitFactory.create({ - type: enums_1.UNIT_TYPES.assignment, - name: "exit", - input: [], - operand: param.name, - value: param.finalValue, - }); - // Final step of convergence - const storeResult = this._UnitFactory.create({ - name: "update result", - type: enums_1.UNIT_TYPES.assignment, - input: [ - { - scope: unitForConvergence.flowchartId, - name: result, - }, - ], - operand: result, - value: result, - tags: [enums_1.UNIT_TAGS.hasConvergenceResult], - }); - // Assign next iteration value - const nextIter = this._UnitFactory.create({ - name: "update counter", - type: enums_1.UNIT_TYPES.assignment, - input: [], - operand: iteration, - value: `${iteration} + 1`, - }); - // Convergence condition unit - const conditionUnit = this._UnitFactory.create({ - name: "check convergence", - type: enums_1.UNIT_TYPES.condition, - statement: `${condition} ${operator} ${tolerance}`, - then: exit.flowchartId, - else: storePrevResult.flowchartId, - maxOccurrences, - next: storePrevResult.flowchartId, - }); - this.addUnit(paramInit, 0); - this.addUnit(prevResultInit, 1); - this.addUnit(iterInit, 2); - this.addUnit(storeResult); - this.addUnit(conditionUnit); - this.addUnit(storePrevResult); - this.addUnit(nextIter); - this.addUnit(nextStep); - this.addUnit(exit); - // `addUnit` adjusts the `next` field, hence the below. - nextStep.next = unitForConvergence.flowchartId; - } -}; -exports.ConvergenceMixin = ConvergenceMixin; diff --git a/dist/js/subworkflows/convergence/non_uniform_kgrid.d.ts b/dist/js/subworkflows/convergence/non_uniform_kgrid.d.ts deleted file mode 100644 index 780802f3..00000000 --- a/dist/js/subworkflows/convergence/non_uniform_kgrid.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export class NonUniformKGridConvergence extends ConvergenceParameter { - get unitContext(): { - kgrid: { - dimensions: string[]; - shifts: number[]; - }; - isKgridEdited: boolean; - isUsingJinjaVariables: boolean; - }; - useVariablesFromUnitContext(flowchartId: any): { - scope: any; - name: string; - }[]; -} -import { ConvergenceParameter } from "./parameter"; diff --git a/dist/js/subworkflows/convergence/non_uniform_kgrid.js b/dist/js/subworkflows/convergence/non_uniform_kgrid.js deleted file mode 100644 index 680a963f..00000000 --- a/dist/js/subworkflows/convergence/non_uniform_kgrid.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NonUniformKGridConvergence = void 0; -const parameter_1 = require("./parameter"); -class NonUniformKGridConvergence extends parameter_1.ConvergenceParameter { - get increment() { - return `[${this.initialValue}[i] + math.floor(iteration * ${this._increment} * float(context['kgrid']['reciprocalVectorRatios'][i])) for i in range(3)]`; - } - get unitContext() { - return { - kgrid: { - dimensions: [`{{${this.name}[0]}}`, `{{${this.name}[1]}}`, `{{${this.name}[2]}}`], - shifts: [0, 0, 0], - }, - isKgridEdited: true, - isUsingJinjaVariables: true, - }; - } - // eslint-disable-next-line class-methods-use-this - useVariablesFromUnitContext(flowchartId) { - return [ - { - scope: flowchartId, - name: "context", - }, - ]; - } -} -exports.NonUniformKGridConvergence = NonUniformKGridConvergence; diff --git a/dist/js/subworkflows/convergence/parameter.d.ts b/dist/js/subworkflows/convergence/parameter.d.ts deleted file mode 100644 index 2cbff560..00000000 --- a/dist/js/subworkflows/convergence/parameter.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -export class ConvergenceParameter { - constructor({ name, initialValue, increment }: { - name: any; - initialValue: any; - increment: any; - }); - name: any; - _initialValue: any; - _increment: any; - /** - * Getter for initial value as string. - * Note: this will be used in assignment unit. - * @return {string} - */ - get initialValue(): string; - /** - * @summary Defines how to increment the parameter. - * @return {string} - increment operation used in assignment unit - */ - get increment(): string; - /** - * Defines content for updating the unit context - * @return {Object} - */ - get unitContext(): Object; - /** - * Defines value once convergence is reached (for 'exit' unit). - * Note: This is used in assignment unit and most often the variable will be assigned to itself. - * @return {string} - */ - get finalValue(): string; - /** - * Create list of variables to fetch from a unit. - * Note: this is used for the `input` field for an assignment unit. - * @param {string} flowchartId - flowchartId of unit containing context variables - * @return {Object|{scope, name}} - */ - useVariablesFromUnitContext(flowchartId: string): Object | { - scope: any; - name: any; - }; -} diff --git a/dist/js/subworkflows/convergence/parameter.js b/dist/js/subworkflows/convergence/parameter.js deleted file mode 100644 index 1bc2db91..00000000 --- a/dist/js/subworkflows/convergence/parameter.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ConvergenceParameter = void 0; -/* eslint-disable class-methods-use-this */ -const lodash_1 = __importDefault(require("lodash")); -class ConvergenceParameter { - constructor({ name, initialValue, increment }) { - this.name = name; - this._initialValue = initialValue; - this._increment = increment; - } - /** - * Getter for initial value as string. - * Note: this will be used in assignment unit. - * @return {string} - */ - get initialValue() { - if (!lodash_1.default.isString(this._initialValue)) { - return JSON.stringify(this._initialValue); - } - return this._initialValue; - } - /** - * @summary Defines how to increment the parameter. - * @return {string} - increment operation used in assignment unit - */ - get increment() { - return ""; // overwrite in derived class - } - /** - * Defines content for updating the unit context - * @return {Object} - */ - get unitContext() { - return {}; - } - /** - * Defines value once convergence is reached (for 'exit' unit). - * Note: This is used in assignment unit and most often the variable will be assigned to itself. - * @return {string} - */ - get finalValue() { - return `${this.name}`; - } - /** - * Create list of variables to fetch from a unit. - * Note: this is used for the `input` field for an assignment unit. - * @param {string} flowchartId - flowchartId of unit containing context variables - * @return {Object|{scope, name}} - */ - // eslint-disable-next-line class-methods-use-this, no-unused-vars - useVariablesFromUnitContext(flowchartId) { - return []; - } -} -exports.ConvergenceParameter = ConvergenceParameter; diff --git a/dist/js/subworkflows/convergence/uniform_kgrid.d.ts b/dist/js/subworkflows/convergence/uniform_kgrid.d.ts deleted file mode 100644 index eb7d79ed..00000000 --- a/dist/js/subworkflows/convergence/uniform_kgrid.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export class UniformKGridConvergence extends ConvergenceParameter { - get unitContext(): { - kgrid: { - dimensions: string[]; - shifts: number[]; - }; - isKgridEdited: boolean; - isUsingJinjaVariables: boolean; - }; -} -import { ConvergenceParameter } from "./parameter"; diff --git a/dist/js/subworkflows/convergence/uniform_kgrid.js b/dist/js/subworkflows/convergence/uniform_kgrid.js deleted file mode 100644 index 0cbf07b5..00000000 --- a/dist/js/subworkflows/convergence/uniform_kgrid.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UniformKGridConvergence = void 0; -const parameter_1 = require("./parameter"); -class UniformKGridConvergence extends parameter_1.ConvergenceParameter { - get increment() { - return `${this.name} + ${this._increment}`; - } - get unitContext() { - return { - kgrid: { - dimensions: [`{{${this.name}}}`, `{{${this.name}}}`, `{{${this.name}}}`], - shifts: [0, 0, 0], - }, - isKgridEdited: true, - isUsingJinjaVariables: true, - }; - } - get finalValue() { - return `${this.name} + 0`; - } -} -exports.UniformKGridConvergence = UniformKGridConvergence; diff --git a/dist/js/subworkflows/index.d.ts b/dist/js/subworkflows/index.d.ts deleted file mode 100644 index 48390ca0..00000000 --- a/dist/js/subworkflows/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { Subworkflow } from "./subworkflow"; -export { createSubworkflowByName } from "./create"; diff --git a/dist/js/subworkflows/index.js b/dist/js/subworkflows/index.js deleted file mode 100644 index ac2896d6..00000000 --- a/dist/js/subworkflows/index.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createSubworkflowByName = exports.Subworkflow = void 0; -var subworkflow_1 = require("./subworkflow"); -Object.defineProperty(exports, "Subworkflow", { enumerable: true, get: function () { return subworkflow_1.Subworkflow; } }); -var create_1 = require("./create"); -Object.defineProperty(exports, "createSubworkflowByName", { enumerable: true, get: function () { return create_1.createSubworkflowByName; } }); diff --git a/dist/js/units/AssertionUnit.d.ts b/dist/js/units/AssertionUnit.d.ts index 7bfb606c..d9cf02c2 100644 --- a/dist/js/units/AssertionUnit.d.ts +++ b/dist/js/units/AssertionUnit.d.ts @@ -2,16 +2,17 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { AssertionUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type AssertionUnitSchemaMixin } from "../generated/AssertionUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = AssertionUnitSchema; type Base = typeof BaseUnit & Constructor; declare const AssertionUnit_base: Base; -export declare class AssertionUnit extends AssertionUnit_base implements Schema { - constructor(config: Partial); +declare class AssertionUnit extends AssertionUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config: Partial); getHashObject(): { statement: string; errorMessage: string | undefined; }; } -export {}; +export default AssertionUnit; diff --git a/dist/js/units/AssertionUnit.js b/dist/js/units/AssertionUnit.js index 1516fefb..0e6694b5 100644 --- a/dist/js/units/AssertionUnit.js +++ b/dist/js/units/AssertionUnit.js @@ -1,10 +1,12 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.AssertionUnit = void 0; const enums_1 = require("../enums"); const AssertionUnitSchemaMixin_1 = require("../generated/AssertionUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class AssertionUnit extends BaseUnit_1.BaseUnit { +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +class AssertionUnit extends BaseUnit_1.default { constructor(config) { super({ name: enums_1.UnitType.assertion, @@ -18,5 +20,5 @@ class AssertionUnit extends BaseUnit_1.BaseUnit { return { statement: this.statement, errorMessage: this.errorMessage }; } } -exports.AssertionUnit = AssertionUnit; (0, AssertionUnitSchemaMixin_1.assertionUnitSchemaMixin)(AssertionUnit.prototype); +exports.default = AssertionUnit; diff --git a/dist/js/units/AssignmentUnit.d.ts b/dist/js/units/AssignmentUnit.d.ts index bdc71d82..0c426380 100644 --- a/dist/js/units/AssignmentUnit.d.ts +++ b/dist/js/units/AssignmentUnit.d.ts @@ -2,13 +2,14 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type AssignmentUnitSchemaMixin } from "../generated/AssignmentUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = AssignmentUnitSchema; type Base = typeof BaseUnit & Constructor; declare const AssignmentUnit_base: Base; -export declare class AssignmentUnit extends AssignmentUnit_base implements Schema { - constructor(config: Partial); +declare class AssignmentUnit extends AssignmentUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config: Partial); getHashObject(): object; } -export {}; +export default AssignmentUnit; diff --git a/dist/js/units/AssignmentUnit.js b/dist/js/units/AssignmentUnit.js index 560af1ba..a25ad31d 100644 --- a/dist/js/units/AssignmentUnit.js +++ b/dist/js/units/AssignmentUnit.js @@ -1,10 +1,12 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.AssignmentUnit = void 0; const enums_1 = require("../enums"); const AssignmentUnitSchemaMixin_1 = require("../generated/AssignmentUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class AssignmentUnit extends BaseUnit_1.BaseUnit { +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +class AssignmentUnit extends BaseUnit_1.default { constructor(config) { super({ name: enums_1.UnitType.assignment, @@ -19,5 +21,5 @@ class AssignmentUnit extends BaseUnit_1.BaseUnit { return { input: this.input, operand: this.operand, value: this.value }; } } -exports.AssignmentUnit = AssignmentUnit; (0, AssignmentUnitSchemaMixin_1.assignmentUnitSchemaMixin)(AssignmentUnit.prototype); +exports.default = AssignmentUnit; diff --git a/dist/js/units/BaseUnit.d.ts b/dist/js/units/BaseUnit.d.ts index 1bd67aa6..8f6be42d 100644 --- a/dist/js/units/BaseUnit.d.ts +++ b/dist/js/units/BaseUnit.d.ts @@ -11,11 +11,11 @@ import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { StatusSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type BaseUnitSchemaMixin } from "../generated/BaseUnitSchemaMixin"; import { type StatusSchemaMixin } from "../generated/StatusSchemaMixin"; -import { type RuntimeItemsUILogic } from "../RuntimeItemsUILogicMixin"; +import { type RuntimeItemsUILogic } from "./mixins/RuntimeItemsUILogicMixin"; type Base = typeof InMemoryEntity & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; type Schema = WorkflowBaseUnitSchema; declare const BaseUnit_base: Base; -export declare class BaseUnit extends BaseUnit_base implements Schema { +declare class BaseUnit extends BaseUnit_base implements Schema { static usePredefinedIds: boolean; static generateFlowChartId(name: string): any; toJSON: () => Schema & AnyObject; @@ -36,4 +36,4 @@ export declare class BaseUnit extends BaseUnit_base i isInStatus(status: StatusSchema["status"]): boolean; clone(extraContext: object): this; } -export {}; +export default BaseUnit; diff --git a/dist/js/units/BaseUnit.js b/dist/js/units/BaseUnit.js index 822f5494..4a0e2cc2 100644 --- a/dist/js/units/BaseUnit.js +++ b/dist/js/units/BaseUnit.js @@ -1,7 +1,5 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.BaseUnit = void 0; -/* eslint-disable class-methods-use-this */ const entity_1 = require("@mat3ra/code/dist/js/entity"); const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); const HashedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/HashedEntityMixin"); @@ -13,8 +11,7 @@ const utils_1 = require("@mat3ra/utils"); const enums_1 = require("../enums"); const BaseUnitSchemaMixin_1 = require("../generated/BaseUnitSchemaMixin"); const StatusSchemaMixin_1 = require("../generated/StatusSchemaMixin"); -const RuntimeItemsUILogicMixin_1 = require("../RuntimeItemsUILogicMixin"); -// eslint-disable-next-line prettier/prettier +const RuntimeItemsUILogicMixin_1 = require("./mixins/RuntimeItemsUILogicMixin"); class BaseUnit extends entity_1.InMemoryEntity { static generateFlowChartId(name) { if (this.usePredefinedIds) { @@ -29,7 +26,7 @@ class BaseUnit extends entity_1.InMemoryEntity { preProcessors: [], postProcessors: [], ...config, - status: config.status || enums_1.UNIT_STATUSES.idle, + status: config.status || enums_1.UnitStatus.idle, statusTrack: config.statusTrack || [], flowchartId: config.flowchartId || BaseUnit.generateFlowChartId(config.name), tags: config.tags || [], @@ -62,7 +59,6 @@ class BaseUnit extends entity_1.InMemoryEntity { return super.clone(flowchartIDOverrideConfigAsExtraContext); } } -exports.BaseUnit = BaseUnit; BaseUnit.usePredefinedIds = false; (0, TaggableMixin_1.taggableMixin)(BaseUnit.prototype); (0, HashedEntityMixin_1.hashedEntityMixin)(BaseUnit.prototype); @@ -73,3 +69,4 @@ BaseUnit.usePredefinedIds = false; (0, StatusSchemaMixin_1.statusSchemaMixin)(BaseUnit.prototype); (0, NamedEntityMixin_1.namedEntityMixin)(BaseUnit.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(BaseUnit); +exports.default = BaseUnit; diff --git a/dist/js/units/ConditionUnit.d.ts b/dist/js/units/ConditionUnit.d.ts index 48c0bf6c..573a3f8b 100644 --- a/dist/js/units/ConditionUnit.d.ts +++ b/dist/js/units/ConditionUnit.d.ts @@ -2,13 +2,14 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ConditionUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type ConditionUnitSchemaMixin } from "../generated/ConditionUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = ConditionUnitSchema; type Base = typeof BaseUnit & Constructor; declare const ConditionUnit_base: Base; -export declare class ConditionUnit extends ConditionUnit_base implements Schema { - constructor(config: Partial); +declare class ConditionUnit extends ConditionUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config: Partial); getHashObject(): object; } -export {}; +export default ConditionUnit; diff --git a/dist/js/units/ConditionUnit.js b/dist/js/units/ConditionUnit.js index dda98e43..379ccaeb 100644 --- a/dist/js/units/ConditionUnit.js +++ b/dist/js/units/ConditionUnit.js @@ -1,10 +1,12 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ConditionUnit = void 0; const enums_1 = require("../enums"); const ConditionUnitSchemaMixin_1 = require("../generated/ConditionUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class ConditionUnit extends BaseUnit_1.BaseUnit { +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +class ConditionUnit extends BaseUnit_1.default { constructor(config) { super({ name: enums_1.UnitType.condition, @@ -24,5 +26,5 @@ class ConditionUnit extends BaseUnit_1.BaseUnit { return { statement: this.statement, maxOccurrences: this.maxOccurrences }; } } -exports.ConditionUnit = ConditionUnit; (0, ConditionUnitSchemaMixin_1.conditionUnitSchemaMixin)(ConditionUnit.prototype); +exports.default = ConditionUnit; diff --git a/dist/js/units/ExecutionUnit.d.ts b/dist/js/units/ExecutionUnit.d.ts index 79d98746..8765f011 100644 --- a/dist/js/units/ExecutionUnit.d.ts +++ b/dist/js/units/ExecutionUnit.d.ts @@ -2,14 +2,13 @@ import { Application, Executable, Flavor } from "@mat3ra/ade"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ExecutableSchema, ExecutionUnitSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; -import { type ImportantSettingsProvider } from "../context/mixins/ImportantSettingsProviderMixin"; import { type ExternalContext } from "../context/providers"; -import ExecutionUnitInput from "../ExecutionUnitInput"; +import type ConvergenceParameter from "../convergence/ConvergenceParameter"; import { type ExecutionUnitSchemaMixin } from "../generated/ExecutionUnitSchemaMixin"; -import type ConvergenceParameter from "../subworkflows/convergence/ConvergenceParameter"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; +import ExecutionUnitInput from "./ExecutionUnitInput"; type Schema = ExecutionUnitSchema; -type Base = typeof BaseUnit & Constructor & Constructor; +type Base = typeof BaseUnit & Constructor; interface SetApplicationProps { application: Application; executable?: Executable | ExecutableSchema; @@ -20,13 +19,14 @@ interface SetExecutableProps { flavor?: Flavor | FlavorSchema; } declare const ExecutionUnit_base: Base; -export declare class ExecutionUnit extends ExecutionUnit_base implements Schema { +declare class ExecutionUnit extends ExecutionUnit_base implements Schema { applicationInstance: Application; executableInstance: Executable; flavorInstance: Flavor; inputInstances: ExecutionUnitInput[]; renderingContext: Record; toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; constructor(config: Schema); setApplication({ application, executable, flavor }: SetApplicationProps): void; setExecutable({ executable, flavor }: SetExecutableProps): void; @@ -47,4 +47,4 @@ export declare class ExecutionUnit extends ExecutionUnit_base implements Schema input: string; }; } -export {}; +export default ExecutionUnit; diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index faf82af9..0f529da3 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -3,16 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ExecutionUnit = void 0; const ade_1 = require("@mat3ra/ade"); const utils_1 = require("@mat3ra/utils"); -const ContextAndRenderFieldsMixin_1 = require("../context/mixins/ContextAndRenderFieldsMixin"); -const ImportantSettingsProviderMixin_1 = require("../context/mixins/ImportantSettingsProviderMixin"); const providers_1 = require("../context/providers"); -const ExecutionUnitInput_1 = __importDefault(require("../ExecutionUnitInput")); const ExecutionUnitSchemaMixin_1 = require("../generated/ExecutionUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class ExecutionUnit extends BaseUnit_1.BaseUnit { +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +const ExecutionUnitInput_1 = __importDefault(require("./ExecutionUnitInput")); +class ExecutionUnit extends BaseUnit_1.default { constructor(config) { var _a; super(config); @@ -87,30 +84,31 @@ class ExecutionUnit extends BaseUnit_1.BaseUnit { N_k_nonuniform: "kgrid", }; const contextName = parameterToContextProviderMap[parameter.name]; - const fullContext = this.getContextProvidersInstances(externalContext).map((contextProvider) => { - if (contextProvider.name === contextName) { - contextProvider.applyCovergenceParameter(parameter); - return contextProvider.getContextItemData(); + const contextProviders = this.getContextProvidersInstances(externalContext); + const fullContext = contextProviders.map((provider) => { + if (provider.name === contextName) { + provider.applyConvergenceParameter(parameter); + return provider.getContextItemData(); } - return contextProvider.getContextItemData(); + return provider.getContextItemData(); }); - this.saveContext(fullContext); + this.saveContext(fullContext, externalContext); } render(externalContext) { - const fullContext = this.getContextProvidersInstances(externalContext).map((contextProvider) => { - return contextProvider.getContextItemData(); - }); - this.saveContext(fullContext); + const contextProviders = this.getContextProvidersInstances(externalContext); + const fullContext = contextProviders.map((provider) => provider.getContextItemData()); + this.saveContext(fullContext, externalContext); this.input = this.inputInstances.map((input) => { return input.render(this.renderingContext).toJSON(); }); } - saveContext(fullContext) { + saveContext(fullContext, { subworkflowContext }) { // persistent context this.context = fullContext.filter((c) => c.isEdited); - this.renderingContext = Object.fromEntries(fullContext.map((context) => { - return [context.name, context.data]; - })); + this.renderingContext = { + ...Object.fromEntries(fullContext.map((context) => [context.name, context.data])), + subworkflowContext: { ...subworkflowContext }, + }; } /** * @summary Calculates hash on unit-specific fields. @@ -130,7 +128,5 @@ class ExecutionUnit extends BaseUnit_1.BaseUnit { }; } } -exports.ExecutionUnit = ExecutionUnit; (0, ExecutionUnitSchemaMixin_1.executionUnitSchemaMixin)(ExecutionUnit.prototype); -(0, ContextAndRenderFieldsMixin_1.contextMixin)(ExecutionUnit.prototype); -(0, ImportantSettingsProviderMixin_1.importantSettingsProviderMixin)(ExecutionUnit.prototype); +exports.default = ExecutionUnit; diff --git a/dist/js/ExecutionUnitInput.d.ts b/dist/js/units/ExecutionUnitInput.d.ts similarity index 91% rename from dist/js/ExecutionUnitInput.d.ts rename to dist/js/units/ExecutionUnitInput.d.ts index a569f42c..67ca0e29 100644 --- a/dist/js/ExecutionUnitInput.d.ts +++ b/dist/js/units/ExecutionUnitInput.d.ts @@ -3,7 +3,7 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import type { ExecutionUnitInputSchemaMixin } from "./generated/ExecutionUnitInputSchemaMixin"; +import type { ExecutionUnitInputSchemaMixin } from "../generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; type JSON = Schema & AnyObject; type Base = typeof InMemoryEntity & Constructor; diff --git a/dist/js/ExecutionUnitInput.js b/dist/js/units/ExecutionUnitInput.js similarity index 100% rename from dist/js/ExecutionUnitInput.js rename to dist/js/units/ExecutionUnitInput.js diff --git a/dist/js/units/IOUnit.d.ts b/dist/js/units/IOUnit.d.ts index 76bafb52..5a170d2e 100644 --- a/dist/js/units/IOUnit.d.ts +++ b/dist/js/units/IOUnit.d.ts @@ -2,12 +2,13 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { DataIOUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type IOUnitSchemaMixin } from "../generated/IOUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = DataIOUnitSchema; type Base = typeof BaseUnit & Constructor; declare const IOUnit_base: Base; -export declare class IOUnit extends IOUnit_base implements Schema { - constructor(config: Partial); +declare class IOUnit extends IOUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config: Partial); } -export {}; +export default IOUnit; diff --git a/dist/js/units/IOUnit.js b/dist/js/units/IOUnit.js index 350ae782..3695adc5 100644 --- a/dist/js/units/IOUnit.js +++ b/dist/js/units/IOUnit.js @@ -1,13 +1,15 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.IOUnit = void 0; const enums_1 = require("../enums"); const IOUnitSchemaMixin_1 = require("../generated/IOUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class IOUnit extends BaseUnit_1.BaseUnit { +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +class IOUnit extends BaseUnit_1.default { constructor(config) { super({ name: enums_1.UnitType.io, subtype: "input", ...config, type: enums_1.UnitType.io }); } } -exports.IOUnit = IOUnit; (0, IOUnitSchemaMixin_1.iOUnitSchemaMixin)(IOUnit.prototype); +exports.default = IOUnit; diff --git a/dist/js/units/MapUnit.d.ts b/dist/js/units/MapUnit.d.ts index 6e345ad1..ef5e3c99 100644 --- a/dist/js/units/MapUnit.d.ts +++ b/dist/js/units/MapUnit.d.ts @@ -3,7 +3,7 @@ import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { MapUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; import { type MapUnitSchemaMixin } from "../generated/MapUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = MapUnitSchema; export declare const defaultMapConfig: { name: string; @@ -19,9 +19,10 @@ export declare const defaultMapConfig: { }; type Base = typeof BaseUnit & Constructor; declare const MapUnit_base: Base; -export declare class MapUnit extends MapUnit_base implements Schema { - constructor(config?: Partial); +declare class MapUnit extends MapUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config?: Partial); setWorkflowId(id: string): void; } -export {}; +export default MapUnit; diff --git a/dist/js/units/MapUnit.js b/dist/js/units/MapUnit.js index a412f06f..add27dd0 100644 --- a/dist/js/units/MapUnit.js +++ b/dist/js/units/MapUnit.js @@ -1,9 +1,12 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.MapUnit = exports.defaultMapConfig = void 0; +exports.defaultMapConfig = void 0; const enums_1 = require("../enums"); const MapUnitSchemaMixin_1 = require("../generated/MapUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); +const BaseUnit_1 = __importDefault(require("./BaseUnit")); exports.defaultMapConfig = { name: enums_1.UnitType.map, type: enums_1.UnitType.map, @@ -16,7 +19,7 @@ exports.defaultMapConfig = { useValues: false, }, }; -class MapUnit extends BaseUnit_1.BaseUnit { +class MapUnit extends BaseUnit_1.default { constructor(config) { super({ ...exports.defaultMapConfig, ...config }); } @@ -24,5 +27,5 @@ class MapUnit extends BaseUnit_1.BaseUnit { this.setProp("workflowId", id); } } -exports.MapUnit = MapUnit; (0, MapUnitSchemaMixin_1.mapUnitSchemaMixin)(MapUnit.prototype); +exports.default = MapUnit; diff --git a/dist/js/units/ProcessingUnit.d.ts b/dist/js/units/ProcessingUnit.d.ts deleted file mode 100644 index c8000556..00000000 --- a/dist/js/units/ProcessingUnit.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ProcessingUnitSchema } from "@mat3ra/esse/dist/js/types"; -import { type ProcessingUnitSchemaMixin } from "../generated/ProcessingUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; -type Schema = ProcessingUnitSchema; -type Base = typeof BaseUnit & Constructor; -declare const ProcessingUnit_base: Base; -export declare class ProcessingUnit extends ProcessingUnit_base implements Schema { - constructor(config: Partial); - toJSON: () => Schema & AnyObject; - setOperation(op: ProcessingUnitSchema["operation"]): void; - setOperationType(type: ProcessingUnitSchema["operationType"]): void; - setInput(input: ProcessingUnitSchema["inputData"]): void; -} -export {}; diff --git a/dist/js/units/ProcessingUnit.js b/dist/js/units/ProcessingUnit.js deleted file mode 100644 index c861e349..00000000 --- a/dist/js/units/ProcessingUnit.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProcessingUnit = void 0; -const enums_1 = require("../enums"); -const ProcessingUnitSchemaMixin_1 = require("../generated/ProcessingUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class ProcessingUnit extends BaseUnit_1.BaseUnit { - constructor(config) { - super({ - name: enums_1.UnitType.processing, - type: enums_1.UnitType.processing, - ...config, - }); - } - setOperation(op) { - this.setProp("operation", op); - } - setOperationType(type) { - this.setProp("operationType", type); - } - setInput(input) { - this.setProp("inputData", input); - } -} -exports.ProcessingUnit = ProcessingUnit; -(0, ProcessingUnitSchemaMixin_1.processingUnitSchemaMixin)(ProcessingUnit.prototype); diff --git a/dist/js/units/ReduceUnit.d.ts b/dist/js/units/ReduceUnit.d.ts index 1c4257eb..cd57cbb2 100644 --- a/dist/js/units/ReduceUnit.d.ts +++ b/dist/js/units/ReduceUnit.d.ts @@ -2,12 +2,13 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ReduceUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type ReduceUnitSchemaMixin } from "../generated/ReduceUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = ReduceUnitSchema; type Base = typeof BaseUnit & Constructor; declare const ReduceUnit_base: Base; -export declare class ReduceUnit extends ReduceUnit_base implements Schema { - constructor(unitName: string, mapUnit: string, input: ReduceUnitSchema["input"]); +declare class ReduceUnit extends ReduceUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config: Omit); } -export {}; +export default ReduceUnit; diff --git a/dist/js/units/ReduceUnit.js b/dist/js/units/ReduceUnit.js index e1a4bf82..b720dea8 100644 --- a/dist/js/units/ReduceUnit.js +++ b/dist/js/units/ReduceUnit.js @@ -1,13 +1,15 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ReduceUnit = void 0; const enums_1 = require("../enums"); const ReduceUnitSchemaMixin_1 = require("../generated/ReduceUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class ReduceUnit extends BaseUnit_1.BaseUnit { - constructor(unitName, mapUnit, input) { - super({ type: enums_1.UnitType.reduce, name: unitName, mapFlowchartId: mapUnit, input }); +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +class ReduceUnit extends BaseUnit_1.default { + constructor(config) { + super({ ...config, type: enums_1.UnitType.reduce }); } } -exports.ReduceUnit = ReduceUnit; (0, ReduceUnitSchemaMixin_1.reduceUnitSchemaMixin)(ReduceUnit.prototype); +exports.default = ReduceUnit; diff --git a/dist/js/units/SubworkflowUnit.d.ts b/dist/js/units/SubworkflowUnit.d.ts index df756fc0..02e43b83 100644 --- a/dist/js/units/SubworkflowUnit.d.ts +++ b/dist/js/units/SubworkflowUnit.d.ts @@ -2,12 +2,13 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; import { type SubworkflowUnitSchemaMixin } from "../generated/SubworkflowUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = SubworkflowUnitSchema; type Base = typeof BaseUnit & Constructor; declare const SubworkflowUnit_base: Base; -export declare class SubworkflowUnit extends SubworkflowUnit_base implements Schema { - constructor(config: Partial); +declare class SubworkflowUnit extends SubworkflowUnit_base implements Schema { toJSON: () => Schema & AnyObject; + _json: Schema & AnyObject; + constructor(config: Partial); } -export {}; +export default SubworkflowUnit; diff --git a/dist/js/units/SubworkflowUnit.js b/dist/js/units/SubworkflowUnit.js index fadfe201..0455f0c3 100644 --- a/dist/js/units/SubworkflowUnit.js +++ b/dist/js/units/SubworkflowUnit.js @@ -1,13 +1,15 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.SubworkflowUnit = void 0; const enums_1 = require("../enums"); const SubworkflowUnitSchemaMixin_1 = require("../generated/SubworkflowUnitSchemaMixin"); -const BaseUnit_1 = require("./BaseUnit"); -class SubworkflowUnit extends BaseUnit_1.BaseUnit { +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +class SubworkflowUnit extends BaseUnit_1.default { constructor(config) { super({ name: "New Subworkflow", ...config, type: enums_1.UnitType.subworkflow }); } } -exports.SubworkflowUnit = SubworkflowUnit; (0, SubworkflowUnitSchemaMixin_1.subworkflowUnitSchemaMixin)(SubworkflowUnit.prototype); +exports.default = SubworkflowUnit; diff --git a/dist/js/units/factory.d.ts b/dist/js/units/factory.d.ts index a34aea9a..8243944f 100644 --- a/dist/js/units/factory.d.ts +++ b/dist/js/units/factory.d.ts @@ -1,15 +1,15 @@ -import type { AssertionUnitSchema, AssignmentUnitSchema, ConditionUnitSchema, DataIOUnitSchema, ExecutionUnitSchema, MapUnitSchema, ProcessingUnitSchema, ReduceUnitSchema, SubworkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; -import { AssertionUnit } from "./AssertionUnit"; -import { AssignmentUnit } from "./AssignmentUnit"; -import { ConditionUnit } from "./ConditionUnit"; -import { ExecutionUnit } from "./ExecutionUnit"; -import { IOUnit } from "./IOUnit"; -import { MapUnit } from "./MapUnit"; -import { SubworkflowUnit } from "./SubworkflowUnit"; -export type UnitConfig = ExecutionUnitSchema | AssignmentUnitSchema | ConditionUnitSchema | DataIOUnitSchema | ProcessingUnitSchema | MapUnitSchema | SubworkflowUnitSchema | AssertionUnitSchema | ReduceUnitSchema; -export type AnyUnit = MapUnit | SubworkflowUnit; +import type { WorkflowSubworkflowUnitSchema, WorkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; +import AssertionUnit from "./AssertionUnit"; +import AssignmentUnit from "./AssignmentUnit"; +import ConditionUnit from "./ConditionUnit"; +import ExecutionUnit from "./ExecutionUnit"; +import IOUnit from "./IOUnit"; +import MapUnit from "./MapUnit"; +import ReduceUnit from "./ReduceUnit"; +import SubworkflowUnit from "./SubworkflowUnit"; +export type AnyWorkflowUnit = MapUnit | SubworkflowUnit | ReduceUnit; export type AnySubworkflowUnit = ExecutionUnit | AssignmentUnit | ConditionUnit | IOUnit | AssertionUnit; export declare class UnitFactory { - static createInWorkflow(config: UnitConfig): AnyUnit; - static createInSubworkflow(config: UnitConfig): AnySubworkflowUnit; + static createInWorkflow(config: WorkflowUnitSchema): AnyWorkflowUnit; + static createInSubworkflow(config: WorkflowSubworkflowUnitSchema): AnySubworkflowUnit; } diff --git a/dist/js/units/factory.js b/dist/js/units/factory.js index 61f76384..5596d097 100644 --- a/dist/js/units/factory.js +++ b/dist/js/units/factory.js @@ -1,36 +1,27 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.UnitFactory = void 0; const enums_1 = require("../enums"); -const AssertionUnit_1 = require("./AssertionUnit"); -const AssignmentUnit_1 = require("./AssignmentUnit"); -const ConditionUnit_1 = require("./ConditionUnit"); -const ExecutionUnit_1 = require("./ExecutionUnit"); -const IOUnit_1 = require("./IOUnit"); -const MapUnit_1 = require("./MapUnit"); -const SubworkflowUnit_1 = require("./SubworkflowUnit"); +const AssertionUnit_1 = __importDefault(require("./AssertionUnit")); +const AssignmentUnit_1 = __importDefault(require("./AssignmentUnit")); +const ConditionUnit_1 = __importDefault(require("./ConditionUnit")); +const ExecutionUnit_1 = __importDefault(require("./ExecutionUnit")); +const IOUnit_1 = __importDefault(require("./IOUnit")); +const MapUnit_1 = __importDefault(require("./MapUnit")); +const ReduceUnit_1 = __importDefault(require("./ReduceUnit")); +const SubworkflowUnit_1 = __importDefault(require("./SubworkflowUnit")); class UnitFactory { static createInWorkflow(config) { switch (config.type) { - // case UnitType.execution: - // return new ExecutionUnit(config); - // case UnitType.assignment: - // return new AssignmentUnit(config); - // case UnitType.condition: - // return new ConditionUnit(config); - // case UnitType.io: - // return new IOUnit(config); - // case UnitType.processing: - // return new ProcessingUnit(config); case enums_1.UnitType.map: - return new MapUnit_1.MapUnit(config); + return new MapUnit_1.default(config); case enums_1.UnitType.subworkflow: - return new SubworkflowUnit_1.SubworkflowUnit(config); - // case UnitType.assertion: - // return new AssertionUnit(config); - // TODO-question: why there was no reduce unit in the factory? - // case UnitType.reduce: - // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); + return new SubworkflowUnit_1.default(config); + case enums_1.UnitType.reduce: + return new ReduceUnit_1.default(config); default: throw new Error(`Unknown unit type: ${config.type}`); } @@ -38,18 +29,15 @@ class UnitFactory { static createInSubworkflow(config) { switch (config.type) { case enums_1.UnitType.execution: - return new ExecutionUnit_1.ExecutionUnit(config); + return new ExecutionUnit_1.default(config); case enums_1.UnitType.assignment: - return new AssignmentUnit_1.AssignmentUnit(config); + return new AssignmentUnit_1.default(config); case enums_1.UnitType.condition: - return new ConditionUnit_1.ConditionUnit(config); + return new ConditionUnit_1.default(config); case enums_1.UnitType.io: - return new IOUnit_1.IOUnit(config); + return new IOUnit_1.default(config); case enums_1.UnitType.assertion: - return new AssertionUnit_1.AssertionUnit(config); - // // TODO-question: why there was no reduce unit in the factory? - // case UnitType.reduce: - // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); + return new AssertionUnit_1.default(config); default: throw new Error(`Unknown unit type: ${config.type}`); } diff --git a/dist/js/units/index.d.ts b/dist/js/units/index.d.ts index 08eb9db7..6e55879d 100644 --- a/dist/js/units/index.d.ts +++ b/dist/js/units/index.d.ts @@ -1,12 +1,11 @@ -import { AssertionUnit } from "./AssertionUnit"; -import { AssignmentUnit } from "./AssignmentUnit"; -import { BaseUnit } from "./BaseUnit"; -import { ConditionUnit } from "./ConditionUnit"; -import { ExecutionUnit } from "./ExecutionUnit"; +import AssertionUnit from "./AssertionUnit"; +import AssignmentUnit from "./AssignmentUnit"; +import BaseUnit from "./BaseUnit"; +import ConditionUnit from "./ConditionUnit"; +import ExecutionUnit from "./ExecutionUnit"; import { UnitFactory } from "./factory"; -import { IOUnit } from "./IOUnit"; -import { MapUnit } from "./MapUnit"; -import { ProcessingUnit } from "./ProcessingUnit"; -import { ReduceUnit } from "./ReduceUnit"; -import { SubworkflowUnit } from "./SubworkflowUnit"; -export { BaseUnit, AssertionUnit, AssignmentUnit, ConditionUnit, ExecutionUnit, IOUnit, MapUnit, ProcessingUnit, ReduceUnit, SubworkflowUnit, UnitFactory, }; +import IOUnit from "./IOUnit"; +import MapUnit from "./MapUnit"; +import ReduceUnit from "./ReduceUnit"; +import SubworkflowUnit from "./SubworkflowUnit"; +export { BaseUnit, AssertionUnit, AssignmentUnit, ConditionUnit, ExecutionUnit, IOUnit, MapUnit, ReduceUnit, SubworkflowUnit, UnitFactory, }; diff --git a/dist/js/units/index.js b/dist/js/units/index.js index 0be195c9..cc4989c7 100644 --- a/dist/js/units/index.js +++ b/dist/js/units/index.js @@ -1,25 +1,26 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnitFactory = exports.SubworkflowUnit = exports.ReduceUnit = exports.ProcessingUnit = exports.MapUnit = exports.IOUnit = exports.ExecutionUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.BaseUnit = void 0; -const AssertionUnit_1 = require("./AssertionUnit"); -Object.defineProperty(exports, "AssertionUnit", { enumerable: true, get: function () { return AssertionUnit_1.AssertionUnit; } }); -const AssignmentUnit_1 = require("./AssignmentUnit"); -Object.defineProperty(exports, "AssignmentUnit", { enumerable: true, get: function () { return AssignmentUnit_1.AssignmentUnit; } }); -const BaseUnit_1 = require("./BaseUnit"); -Object.defineProperty(exports, "BaseUnit", { enumerable: true, get: function () { return BaseUnit_1.BaseUnit; } }); -const ConditionUnit_1 = require("./ConditionUnit"); -Object.defineProperty(exports, "ConditionUnit", { enumerable: true, get: function () { return ConditionUnit_1.ConditionUnit; } }); -const ExecutionUnit_1 = require("./ExecutionUnit"); -Object.defineProperty(exports, "ExecutionUnit", { enumerable: true, get: function () { return ExecutionUnit_1.ExecutionUnit; } }); +exports.UnitFactory = exports.SubworkflowUnit = exports.ReduceUnit = exports.MapUnit = exports.IOUnit = exports.ExecutionUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.BaseUnit = void 0; +const AssertionUnit_1 = __importDefault(require("./AssertionUnit")); +exports.AssertionUnit = AssertionUnit_1.default; +const AssignmentUnit_1 = __importDefault(require("./AssignmentUnit")); +exports.AssignmentUnit = AssignmentUnit_1.default; +const BaseUnit_1 = __importDefault(require("./BaseUnit")); +exports.BaseUnit = BaseUnit_1.default; +const ConditionUnit_1 = __importDefault(require("./ConditionUnit")); +exports.ConditionUnit = ConditionUnit_1.default; +const ExecutionUnit_1 = __importDefault(require("./ExecutionUnit")); +exports.ExecutionUnit = ExecutionUnit_1.default; const factory_1 = require("./factory"); Object.defineProperty(exports, "UnitFactory", { enumerable: true, get: function () { return factory_1.UnitFactory; } }); -const IOUnit_1 = require("./IOUnit"); -Object.defineProperty(exports, "IOUnit", { enumerable: true, get: function () { return IOUnit_1.IOUnit; } }); -const MapUnit_1 = require("./MapUnit"); -Object.defineProperty(exports, "MapUnit", { enumerable: true, get: function () { return MapUnit_1.MapUnit; } }); -const ProcessingUnit_1 = require("./ProcessingUnit"); -Object.defineProperty(exports, "ProcessingUnit", { enumerable: true, get: function () { return ProcessingUnit_1.ProcessingUnit; } }); -const ReduceUnit_1 = require("./ReduceUnit"); -Object.defineProperty(exports, "ReduceUnit", { enumerable: true, get: function () { return ReduceUnit_1.ReduceUnit; } }); -const SubworkflowUnit_1 = require("./SubworkflowUnit"); -Object.defineProperty(exports, "SubworkflowUnit", { enumerable: true, get: function () { return SubworkflowUnit_1.SubworkflowUnit; } }); +const IOUnit_1 = __importDefault(require("./IOUnit")); +exports.IOUnit = IOUnit_1.default; +const MapUnit_1 = __importDefault(require("./MapUnit")); +exports.MapUnit = MapUnit_1.default; +const ReduceUnit_1 = __importDefault(require("./ReduceUnit")); +exports.ReduceUnit = ReduceUnit_1.default; +const SubworkflowUnit_1 = __importDefault(require("./SubworkflowUnit")); +exports.SubworkflowUnit = SubworkflowUnit_1.default; diff --git a/dist/js/RuntimeItemsUILogicMixin.d.ts b/dist/js/units/mixins/RuntimeItemsUILogicMixin.d.ts similarity index 100% rename from dist/js/RuntimeItemsUILogicMixin.d.ts rename to dist/js/units/mixins/RuntimeItemsUILogicMixin.d.ts diff --git a/dist/js/RuntimeItemsUILogicMixin.js b/dist/js/units/mixins/RuntimeItemsUILogicMixin.js similarity index 97% rename from dist/js/RuntimeItemsUILogicMixin.js rename to dist/js/units/mixins/RuntimeItemsUILogicMixin.js index 4572573a..7ead000f 100644 --- a/dist/js/RuntimeItemsUILogicMixin.js +++ b/dist/js/units/mixins/RuntimeItemsUILogicMixin.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.runtimeItemsUILogicMixin = runtimeItemsUILogicMixin; // @ts-expect-error -const propertiesMixn = { +const propertiesMixin = { setRuntimeItemsToDefaultValues() { this.results = this.defaultResults; this.monitors = this.defaultMonitors; @@ -52,5 +52,5 @@ const propertiesMixn = { }, }; function runtimeItemsUILogicMixin(item) { - Object.defineProperties(item, Object.getOwnPropertyDescriptors(propertiesMixn)); + Object.defineProperties(item, Object.getOwnPropertyDescriptors(propertiesMixin)); } diff --git a/dist/js/workflows/default.js b/dist/js/workflows/default.js index 14ca2751..ed07c47d 100644 --- a/dist/js/workflows/default.js +++ b/dist/js/workflows/default.js @@ -20,6 +20,7 @@ const defaultWorkflowConfig = { }, subtype: "gga", type: "dft", + functional: "other", }, name: "New Subworkflow", properties: [], diff --git a/dist/js/workflows/index.d.ts b/dist/js/workflows/index.d.ts deleted file mode 100644 index f84e75a6..00000000 --- a/dist/js/workflows/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Workflow } from "./workflow"; -export function createWorkflows({ appName, workflowCls, workflowSubworkflowMapByApplication, ...swArgs }: { - [x: string]: any; - appName?: null | undefined; - workflowCls?: typeof Workflow | undefined; - workflowSubworkflowMapByApplication: any; -}): any[]; -/** - * @summary Create workflow configurations for all applications - * @param applications {Array} array of application names - * @param workflowCls {*} workflow class to instantiate - * @param workflowSubworkflowMapByApplication {Object} object containing all workflow/subworkflow map by application - * @param swArgs {Object} other classes for instantiation - * @returns {Array} array of workflow configurations - */ -export function createWorkflowConfigs({ applications, workflowCls, workflowSubworkflowMapByApplication, ...swArgs }: Array): Array; -import { createWorkflow } from "./create"; -export { Workflow, createWorkflow }; diff --git a/dist/js/workflows/index.js b/dist/js/workflows/index.js deleted file mode 100644 index 64462631..00000000 --- a/dist/js/workflows/index.js +++ /dev/null @@ -1,86 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createWorkflow = exports.Workflow = void 0; -exports.createWorkflows = createWorkflows; -exports.createWorkflowConfigs = createWorkflowConfigs; -const ade_1 = require("@mat3ra/ade"); -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const schemas_json_1 = __importDefault(require("@mat3ra/esse/dist/js/schemas.json")); -// Import Template here to apply context provider patch -// eslint-disable-next-line no-unused-vars -const patch_1 = require("../patch"); -const create_1 = require("./create"); -Object.defineProperty(exports, "createWorkflow", { enumerable: true, get: function () { return create_1.createWorkflow; } }); -const workflow_1 = require("./workflow"); -Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return workflow_1.Workflow; } }); -// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` -JSONSchemasInterface_1.default.setSchemas(schemas_json_1.default); -/* - Workflow construction follows these rules: - 1. Workflow is constructed as a collection of subworkflows defined in JSON - 2. A "units" key should contain at least one object referencing the workflow itself - 3. Additional workflows are added in order specified in the same "units" array - 4. map units are added along with their workflows according to data in "units" - 5. top-level subworkflows are added directly in the order also specified by "units" - */ -function createWorkflows({ appName = null, workflowCls = workflow_1.Workflow, workflowSubworkflowMapByApplication, ...swArgs }) { - let apps = appName !== null ? [appName] : ade_1.allApplications; - const allApplicationsFromWorkflowData = Object.keys(workflowSubworkflowMapByApplication.workflows); - // output warning if allApplications and allApplicationsFromWorkflowData do not match - if (appName === null) { - if (apps && apps.sort().join(",") !== allApplicationsFromWorkflowData.sort().join(",")) { - // eslint-disable-next-line no-console - console.warn(`Warning: allApplications and allApplicationsFromWorkflowData do not match: - ${apps.sort().join(",")} !== ${allApplicationsFromWorkflowData.sort().join(",")}`); - console.warn("Using allApplicationsFromWorkflowData"); - } - apps = allApplicationsFromWorkflowData; - } - const wfs = []; - const { workflows } = workflowSubworkflowMapByApplication; - apps.map((name) => { - const { [name]: dataByApp } = workflows; - Object.values(dataByApp).map((workflowDataForApp) => { - wfs.push((0, create_1.createWorkflow)({ - appName: name, - workflowData: workflowDataForApp, - workflowSubworkflowMapByApplication, - workflowCls, - ...swArgs, - })); - return null; - }); - return null; - }); - return wfs; -} -/** - * @summary Create workflow configurations for all applications - * @param applications {Array} array of application names - * @param workflowCls {*} workflow class to instantiate - * @param workflowSubworkflowMapByApplication {Object} object containing all workflow/subworkflow map by application - * @param swArgs {Object} other classes for instantiation - * @returns {Array} array of workflow configurations - */ -function createWorkflowConfigs({ applications, workflowCls = workflow_1.Workflow, workflowSubworkflowMapByApplication, ...swArgs }) { - const configs = []; - applications.forEach((app) => { - const workflows = createWorkflows({ - appName: app, - workflowCls, - workflowSubworkflowMapByApplication, - ...swArgs, - }); - workflows.forEach((wf) => { - configs.push({ - application: app, - name: wf.prop("name"), - config: wf.toJSON(), - }); - }); - }); - return configs; -} diff --git a/dist/js/workflows/relaxation.d.ts b/dist/js/workflows/relaxation.d.ts deleted file mode 100644 index 060471fc..00000000 --- a/dist/js/workflows/relaxation.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export function RelaxationLogicMixin(superclass: any): { - new (): { - [x: string]: any; - get relaxationSubworkflow(): any; - isRelaxationSubworkflow(subworkflow: any): boolean; - get hasRelaxation(): any; - toggleRelaxation(): void; - }; - [x: string]: any; -}; diff --git a/dist/js/workflows/relaxation.js b/dist/js/workflows/relaxation.js deleted file mode 100644 index 13214f2f..00000000 --- a/dist/js/workflows/relaxation.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RelaxationLogicMixin = void 0; -const standata_1 = require("@mat3ra/standata"); -const RelaxationLogicMixin = (superclass) => class extends superclass { - get relaxationSubworkflow() { - var _a, _b; - const appName = (_b = (_a = this.subworkflows[0]) === null || _a === void 0 ? void 0 : _a.application) === null || _b === void 0 ? void 0 : _b.name; - if (!appName) - return undefined; - const subworkflowStandata = new standata_1.SubworkflowStandata(); - const relaxationSubworkflow = subworkflowStandata.getRelaxationSubworkflowByApplication(appName); - if (!relaxationSubworkflow) - return undefined; - return new this._Subworkflow(relaxationSubworkflow); - } - isRelaxationSubworkflow(subworkflow) { - const { relaxationSubworkflow } = this; - return ((relaxationSubworkflow === null || relaxationSubworkflow === void 0 ? void 0 : relaxationSubworkflow.systemName) !== undefined && - relaxationSubworkflow.systemName === subworkflow.systemName); - } - get hasRelaxation() { - return this.subworkflows.some((subworkflow) => this.isRelaxationSubworkflow(subworkflow)); - } - toggleRelaxation() { - if (this.hasRelaxation) { - const relaxSubworkflow = this.subworkflows.find((sw) => this.isRelaxationSubworkflow(sw)); - this.removeSubworkflow(relaxSubworkflow.id); - } - else { - const vcRelax = this.relaxationSubworkflow; - if (vcRelax) { - this.addSubworkflow(vcRelax, true); - } - } - } -}; -exports.RelaxationLogicMixin = RelaxationLogicMixin; diff --git a/dist/js/workflows/utils.d.ts b/dist/js/workflows/utils.d.ts new file mode 100644 index 00000000..39cb2afc --- /dev/null +++ b/dist/js/workflows/utils.d.ts @@ -0,0 +1,9 @@ +import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; +/** + * @summary set the head of an array of units + */ +export declare function setUnitsHead(units: T[]): T[]; +/** + * @summary Re-establishes the linked `next => flowchartId` logic in an array of units + */ +export declare function setNextLinks(units: T[]): T[]; diff --git a/dist/js/workflows/utils.js b/dist/js/workflows/utils.js new file mode 100644 index 00000000..48d5d7b9 --- /dev/null +++ b/dist/js/workflows/utils.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setUnitsHead = setUnitsHead; +exports.setNextLinks = setNextLinks; +/** + * @summary set the head of an array of units + */ +function setUnitsHead(units) { + if (units.length > 0) { + units[0].head = true; + for (let i = 1; i < units.length; i++) { + units[i].head = false; + } + } + return units; +} +// TODO: fix setNextLinks on unit removal and convergence logic. +/** + * @summary Re-establishes the linked `next => flowchartId` logic in an array of units + */ +function setNextLinks(units) { + var _a; + const flowchartIds = units.map((u) => u.flowchartId); + for (let i = 0; i < units.length - 1; i++) { + if (!units[i].next) { + // newly added units don't have next set yet => set it + units[i].next = units[i + 1].flowchartId; + if (i > 0) + units[i - 1].next = units[i].flowchartId; + } + else if (!flowchartIds.includes((_a = units[i].next) !== null && _a !== void 0 ? _a : "")) { + // newly removed units may create broken next links => fix it + units[i].next = units[i + 1].flowchartId; + } + } + return units; +} diff --git a/package-lock.json b/package-lock.json index 6fd5c072..1dd8989b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,19 +13,14 @@ "@types/json-schema": "^7.0.15", "@types/nunjucks": "^3.2.6", "@types/react-jsonschema-form": "^1.7.13", - "crypto-js": "^4.2.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", "nunjucks": "^3.2.4", - "underscore": "^1.13.3", - "underscore.string": "^3.3.4", - "v20": "^0.1.0" + "slugify": "^1.6.6" }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#16b279cef97ff17056bba180d6338c2c1721ff0c", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#49faa1af1a9c136c54af6658068decfba7306642", "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", @@ -2862,8 +2857,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#16b279cef97ff17056bba180d6338c2c1721ff0c", - "integrity": "sha512-7zTp0CMboWNKdGoqYBSm/DNq4n+KFmKIn9gi7yITWVBPDHZsX0mOzSCxuAXbQpjFEFKYmqTJLkVZTN0QIHoZag==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#49faa1af1a9c136c54af6658068decfba7306642", + "integrity": "sha512-Ikz/r/mR0AQIorybHFBdv3yCYuf5x/e52g/IV8njOfCukZ4V9exyhZSjL+Gkl4Gob8GcUag2xokgPsFe5O/cDg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4927,6 +4922,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { @@ -5763,6 +5759,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "dev": true, "license": "MIT" }, "node_modules/csstype": { @@ -8553,6 +8550,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -9030,6 +9028,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, "license": "MIT" }, "node_modules/lodash.debounce": { @@ -11127,6 +11126,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -11218,6 +11226,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/stop-iteration-iterator": { @@ -11965,12 +11974,14 @@ "version": "1.13.7", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "dev": true, "license": "MIT" }, "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "^1.1.1", @@ -12070,6 +12081,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/uuid": { @@ -12082,12 +12094,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v20": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/v20/-/v20-0.1.0.tgz", - "integrity": "sha512-5mveu8OtYG01yZX4HThyj1kJIJ1YK1jj4tt3MpXo/BAwUlj8EsfEj11Pz7Z5BT1vVOPoCo6EjYzEO3RWrAGfAA==", - "license": "MIT" - }, "node_modules/v8-compile-cache": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", diff --git a/package.json b/package.json index 63eec9a5..731a9eb7 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,14 @@ "version": "0.0.0", "description": "WOrkflow DEfinitions", "scripts": { - "test": "nyc --reporter=text mocha --recursive --bail --require @babel/register/lib --require tests/js/setup.js tests/js", + "test": "mocha --recursive --bail --require ts-node/register 'tests/js/**/*.ts'", + "test:coverage": "nyc --reporter=text --reporter=html --reporter=lcov mocha --recursive --bail tests/js/**/*.ts", + "test:coverage:html": "nyc --reporter=html mocha --recursive --bail tests/js/**/*.ts", + "test:coverage:check": "nyc --reporter=text --check-coverage mocha --recursive --bail tests/js/**/*.ts", + "test:coverage:view": "node scripts/view-coverage.js", "lint": "eslint src/js tests/js && prettier --write src/js tests/js", "lint:fix": "eslint --fix --cache src/js tests/js && prettier --write src/js tests/js", - "transpile": "tsc --project tsconfig.json", + "transpile": "tsc -p tsconfig-transpile.json", "prettier": "prettier --check src/js tests/js", "prepare": "husky install || exit 0", "generate-mixins": "ts-node scripts/generate-mixins.ts" @@ -17,11 +21,9 @@ }, "main": "dist/js/index.js", "files": [ - "/assets", - "/dist", - "/src/js", - ".babelrc", - "build_workflows.js" + "dist", + "src/js", + ".babelrc" ], "author": "Exabyte Inc.", "bugs": { @@ -32,21 +34,16 @@ "dependencies": { "@exabyte-io/periodic-table.js": "2022.6.8-0", "@types/json-schema": "^7.0.15", - "@types/nunjucks": "^3.2.6", "@types/react-jsonschema-form": "^1.7.13", - "crypto-js": "^4.2.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", "nunjucks": "^3.2.4", - "underscore": "^1.13.3", - "underscore.string": "^3.3.4", - "v20": "^0.1.0" + "slugify": "^1.6.6" }, "devDependencies": { + "@types/nunjucks": "^3.2.6", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#16b279cef97ff17056bba180d6338c2c1721ff0c", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#49faa1af1a9c136c54af6658068decfba7306642", "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", @@ -93,9 +90,21 @@ "eslint --cache --fix", "prettier --write" ], + "src/js/**/*.ts": [ + "eslint --cache --fix", + "prettier --write" + ], "tests/js/**/*.js": [ "eslint --cache --fix", "prettier --write" + ], + "tests/js/**/*.ts": [ + "eslint --cache --fix", + "prettier --write" + ], + "scripts/**/*.ts": [ + "eslint --cache --fix", + "prettier --write" ] } } diff --git a/src/js/subworkflows/subworkflow.ts b/src/js/Subworkflow.ts similarity index 82% rename from src/js/subworkflows/subworkflow.ts rename to src/js/Subworkflow.ts index fba5d5b2..4cb6984b 100644 --- a/src/js/subworkflows/subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -19,17 +19,22 @@ import type { } from "@mat3ra/esse/dist/js/types"; import { type Method, Model, ModelFactory } from "@mat3ra/mode"; import { Utils } from "@mat3ra/utils"; -import _ from "underscore"; -import { UnitTag, UnitType } from "../enums"; +import type { JobExternalContext } from "./context/mixins/JobContextMixin"; +import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; +import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; +import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; +import type { WorkflowExternalContext } from "./context/mixins/WorkflowContextMixin"; +import type { ExternalContext } from "./context/providers"; +import { createConvergenceParameter } from "./convergence/factory"; +import { UnitTag, UnitType } from "./enums"; import { type SubworkflowSchemaMixin, subworkflowSchemaMixin, -} from "../generated/SubworkflowSchemaMixin"; -import { AssignmentUnit, ConditionUnit, SubworkflowUnit, UnitFactory } from "../units"; -import type { AnySubworkflowUnit } from "../units/factory"; -import { setNextLinks, setUnitsHead } from "../utils"; -import { createConvergenceParameter } from "./convergence/factory"; +} from "./generated/SubworkflowSchemaMixin"; +import { AssignmentUnit, ConditionUnit, SubworkflowUnit, UnitFactory } from "./units"; +import type { AnySubworkflowUnit } from "./units/factory"; +import { setNextLinks, setUnitsHead } from "./workflows/utils"; type ConvergenceConfig = { parameter: "N_k" | "N_k_nonuniform"; @@ -41,6 +46,7 @@ type ConvergenceConfig = { operator: string; tolerance: number; maxOccurrences: number; + externalContext: SubworkflowExternalContext; }; type Base = typeof InMemoryEntity & @@ -48,19 +54,29 @@ type Base = typeof InMemoryEntity & NamedInMemoryEntityConstructor & Constructor; -export class Subworkflow extends (InMemoryEntity as Base) implements SubworkflowSchema { +type SubworkflowExternalContext = MaterialExternalContext & + MaterialsExternalContext & + MaterialsSetExternalContext & + WorkflowExternalContext & + JobExternalContext; + +export default class Subworkflow extends (InMemoryEntity as Base) implements SubworkflowSchema { static usePredefinedIds = false; private ModelFactory: typeof ModelFactory; private applicationInstance: Application; + private unitsInstances!: AnySubworkflowUnit[]; + modelInstance: Model; - private unitsInstances: AnySubworkflowUnit[]; + properties: string[] = []; declare static createDefault: () => Subworkflow; + declare toJSON: () => SubworkflowSchema & AnyObject; + constructor(config: SubworkflowSchema, _ModelFactory = ModelFactory) { super(config); this.ModelFactory = _ModelFactory; @@ -70,9 +86,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow ...this.model, application: this.application, }); - this.unitsInstances = setNextLinks( - setUnitsHead(this.units).map((cfg) => UnitFactory.createInSubworkflow(cfg)), - ); + this.setUnits(this.units.map((cfg) => UnitFactory.createInSubworkflow(cfg))); } static generateSubworkflowId( @@ -120,15 +134,19 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow * @summary Used to generate initial application tree, therefore omit setting application. */ static fromArguments( - application: Application, + application: ApplicationSchema, model: Model, method: Method, name: string, - units: AnySubworkflowUnit[] = [], + units: SubworkflowSchema["units"] = [], config = {}, ) { + // TODO: move to standata and fix types + // @ts-ignore const nameForIdGeneration = config.attributes?.name || name; - const { functions, attributes, ...cleanConfig } = config; + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { functions: _functions, attributes: _attributes, ...cleanConfig } = config; // Set the method on the model so it can be properly serialized model.setMethod(method); @@ -137,12 +155,11 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow ...cleanConfig, _id: Subworkflow.generateSubworkflowId(nameForIdGeneration, application, model, method), name, - application: application.toJSON(), + application, properties: Array.from( new Set( units - .filter((x) => x.resultNames) - .map((x) => x.resultNames) + .map((x) => x.results?.map((r) => r.name) || []) .flat() .sort(), ), @@ -151,7 +168,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow ...model.toJSON(), method: method.toJSON(), }, - units: units.map((unit) => unit.toJSON()), + units, }); } @@ -184,26 +201,11 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow setModel(model: Model) { this.modelInstance = model; + this.model = model.toJSON(); } - setUnits(units: AnySubworkflowUnit[]) { - this.unitsInstances = units; - } - - toJSON(exclude: string[] = []): SubworkflowSchema & AnyObject { - return { - ...super.toJSON(exclude), - name: this.name, - properties: this.properties, - application: this.application, - model: this.modelInstance.toJSON(), - units: this.unitsInstances.map((x) => x.toJSON()), - ...(this.compute ? { compute: this.compute } : {}), // {"compute": null } won't pass esse validation - }; - } - - private getContextFromAssignmentUnits() { - return this.unitsInstances + private buildExternalContext(context: SubworkflowExternalContext): ExternalContext { + const subworkflowContext = this.units .filter((u) => u.type === UnitType.assignment) .reduce((acc, u) => { return { @@ -211,18 +213,17 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow [u.operand]: u.value, }; }, {} as Record); - } - render(context: Record) { - const ctx = { + return { ...context, application: this.applicationInstance, - methodData: this.modelInstance.Method.data, - model: this.modelInstance.toJSON(), - // context below is assembled from context providers and passed to units to override theirs - // ...this.context, - subworkflowContext: this.getContextFromAssignmentUnits(), + methodData: this.model.method.data, + subworkflowContext, }; + } + + render(context: SubworkflowExternalContext) { + const ctx = this.buildExternalContext(context); this.unitsInstances.forEach((u) => { if (u.type === UnitType.execution) { @@ -238,7 +239,6 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow const { unitsInstances } = this; if (unitsInstances.length === 0) { - unit.head = true; this.setUnits([unit]); } else { if (index >= 0) { @@ -246,10 +246,17 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow } else { unitsInstances.push(unit); } - this.setUnits(setNextLinks(setUnitsHead(unitsInstances))); + this.setUnits(unitsInstances); } } + private setUnits(units: AnySubworkflowUnit[]) { + // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer + this.unitsInstances = setNextLinks(setUnitsHead(units)); + this.units = units.map((x) => x.toJSON()); + this.properties = units.map((x) => x.resultNames).flat(); + } + removeUnit(flowchartId: string) { const previousUnit = this.unitsInstances.find((x) => x.next === flowchartId); @@ -257,16 +264,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow previousUnit.unsetProp("next"); } - // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer - this.setUnits( - setNextLinks( - setUnitsHead(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId)), - ), - ); - } - - get properties() { - return this.unitsInstances.map((x) => x.resultNames).flat(); + this.setUnits(this.unitsInstances.filter((x) => x.flowchartId !== flowchartId)); } getUnit(flowchartId: string) { @@ -274,14 +272,14 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow } unitIndex(flowchartId: string) { - return this.unitsInstances.findIndex((unit) => { + return this.units.findIndex((unit) => { return unit.flowchartId === flowchartId; }); } replaceUnit(index: number, unit: AnySubworkflowUnit) { this.unitsInstances[index] = unit; - this.setUnits(setNextLinks(setUnitsHead(this.unitsInstances))); + this.setUnits(this.unitsInstances); } setIsDraft(bool: boolean) { @@ -301,7 +299,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow const meaningfulFields = { application: Utils.specific.removeTimestampableKeysFromConfig(config.application), model: this.calculateModelHash(), - units: _.map(this.unitsInstances, (u) => u.calculateHash()).join(), + units: this.unitsInstances.map((u) => u.calculateHash()).join(), }; return Utils.hash.calculateHashFromObject(meaningfulFields); } @@ -350,21 +348,23 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow return []; } - let lastResult; + let prevResult: unknown; return scopeTrack .map((scopeItem, i) => { return { x: i, - // TODO-question: what is the type of scopeItem.scope?.global? + // TODO: fix types + // @ts-ignore param: scopeItem.scope?.global[this.convergenceParam], + // @ts-ignore y: scopeItem.scope?.global[this.convergenceResult], }; }) .filter(({ y }) => { - lastResult = y; - const isNewResult = y !== undefined && y !== lastResult; - return isNewResult; + const changed = prevResult !== y; + prevResult = y; + return changed; }) .map((item, i) => { return { @@ -385,6 +385,7 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow operator, tolerance, maxOccurrences, + externalContext, }: ConvergenceConfig) { // Find unit to converge: should contain passed result in its results list // TODO: make user to select unit for convergence explicitly @@ -395,9 +396,6 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow }); if (!unitForConvergence) { - // sAlert.error( - // `Subworkflow does not contain unit with '${result}' as extracted property.`, - // ); throw new Error( `Subworkflow does not contain unit with '${result}' as extracted property.`, ); @@ -410,7 +408,9 @@ export class Subworkflow extends (InMemoryEntity as Base) implements Subworkflow increment: parameterIncrement, }); - unitForConvergence.addConvergenceContext(convergenceParameter, {}); + const context = this.buildExternalContext(externalContext); + + unitForConvergence.addConvergenceContext(convergenceParameter, context); const prevResult = "prev_result"; const iteration = "iteration"; diff --git a/src/js/workflows/workflow.ts b/src/js/Workflow.ts similarity index 81% rename from src/js/workflows/workflow.ts rename to src/js/Workflow.ts index e42dc017..4a6963a9 100644 --- a/src/js/workflows/workflow.ts +++ b/src/js/Workflow.ts @@ -18,26 +18,22 @@ import type { import { tree } from "@mat3ra/mode"; import { SubworkflowStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; -// import { mix } from "mixwith"; -import _ from "underscore"; -import s from "underscore.string"; - -import { UnitType } from "../enums"; -import { type WorkflowSchemaMixin, workflowSchemaMixin } from "../generated/WorkflowSchemaMixin"; -import { Subworkflow } from "../subworkflows/subworkflow"; -import { MapUnit } from "../units"; -import { type AnyUnit, UnitFactory } from "../units/factory"; -import { setNextLinks, setUnitsHead } from "../utils"; -import defaultWorkflowConfig from "./default"; -import { RelaxationLogicMixin } from "./relaxation"; +import slugify from "slugify"; + +import type { JobExternalContext } from "./context/mixins/JobContextMixin"; +import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; +import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; +import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; +import { UnitType } from "./enums"; +import { type WorkflowSchemaMixin, workflowSchemaMixin } from "./generated/WorkflowSchemaMixin"; +import Subworkflow from "./Subworkflow"; +import { MapUnit } from "./units"; +import { type AnyWorkflowUnit, UnitFactory } from "./units/factory"; +import defaultWorkflowConfig from "./workflows/default"; +import { setNextLinks, setUnitsHead } from "./workflows/utils"; const { MODEL_NAMES } = tree; -// class BaseWorkflow extends mix(NamedDefaultableRepetitionContextAndRenderInMemoryEntity).with( -// ComputedEntityMixin, -// RelaxationLogicMixin, -// ) {} - type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & @@ -50,6 +46,12 @@ type GenerateWorkflowIdParams = { applicationName?: string; }; +/** Context passed to Workflow.render() before workflow reference is injected for subworkflows. */ +type WorkflowRenderContext = MaterialExternalContext & + MaterialsExternalContext & + MaterialsSetExternalContext & + JobExternalContext; + export class Workflow extends (InMemoryEntity as Base) { static usePredefinedIds = false; @@ -61,7 +63,7 @@ export class Workflow extends (InMemoryEntity as Base) { private subworkflowInstances: Subworkflow[]; - private unitInstances: AnyUnit[]; + private unitInstances!: AnyWorkflowUnit[]; private workflowInstances: Workflow[]; @@ -90,7 +92,7 @@ export class Workflow extends (InMemoryEntity as Base) { const config = { name: subworkflow.name, subworkflows: [subworkflow.toJSON()], - units: setNextLinks(setUnitsHead([subworkflow.getAsUnit().toJSON()])), + units: [subworkflow.getAsUnit().toJSON()], properties: subworkflow.properties, applicationName: subworkflow.application.name, workflows: [] as WorkflowSchema[], @@ -113,8 +115,8 @@ export class Workflow extends (InMemoryEntity as Base) { super(config); this.subworkflowInstances = this.subworkflows.map((x) => new Subworkflow(x)); - this.unitInstances = this.units.map((unit) => UnitFactory.createInWorkflow(unit)); this.workflowInstances = this.workflows?.map((x) => new Workflow(x)) || []; + this.setUnits(this.units.map((unit) => UnitFactory.createInWorkflow(unit))); } get workflows() { @@ -145,8 +147,17 @@ export class Workflow extends (InMemoryEntity as Base) { } } - setUnits(arr: AnyUnit[]) { - this.unitInstances = arr; + setUnits(arr: AnyWorkflowUnit[]) { + this.unitInstances = setNextLinks(setUnitsHead(arr)); + } + + render(context: WorkflowRenderContext) { + this.subworkflowInstances.forEach((sw) => { + sw.render({ + ...context, + workflow: this, + }); + }); } get usedApplications(): ApplicationSchema[] { @@ -164,9 +175,9 @@ export class Workflow extends (InMemoryEntity as Base) { } // return application names - // get usedApplicationNames() { - // return this.usedApplications.map((a) => a.name); - // } + get usedApplicationNames() { + return this.usedApplications.map((a) => a.name); + } get usedApplicationVersions() { return this.usedApplications.map((a) => a.version); @@ -200,12 +211,17 @@ export class Workflow extends (InMemoryEntity as Base) { } get humanReadableProperties() { - return this.properties.map((name) => s.humanize(name)); + return this.properties.map((name) => + name + .split("_") + .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) + .join(" "), + ); } get systemName() { const applicationNames = this.usedApplications.map((a) => a.name); - return s.slugify(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); + return slugify(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); } get defaultDescription() { @@ -214,12 +230,10 @@ export class Workflow extends (InMemoryEntity as Base) { .join(", ")}.`; } - // TODO-question: clarify head logic - private addUnit(unit: AnyUnit, head = false, index = -1) { + private addUnit(unit: AnyWorkflowUnit, head = false, index = -1) { const [...unitInstances] = this.unitInstances; if (unitInstances.length === 0) { - unit.head = true; this.setUnits([unit]); } else { if (head) { @@ -229,7 +243,7 @@ export class Workflow extends (InMemoryEntity as Base) { } else { unitInstances.push(unit); } - this.setUnits(setNextLinks(setUnitsHead(unitInstances))); + this.setUnits(unitInstances); } } @@ -250,9 +264,7 @@ export class Workflow extends (InMemoryEntity as Base) { this.subworkflowInstances = this.subworkflowInstances.filter((x) => x.id !== unit.id); - this.unitInstances = setNextLinks( - setUnitsHead(this.unitInstances.filter((x) => x.flowchartId !== flowchartId)), - ); + this.setUnits(this.unitInstances.filter((x) => x.flowchartId !== flowchartId)); } /* @@ -314,9 +326,9 @@ export class Workflow extends (InMemoryEntity as Base) { */ calculateHash(): string { const meaningfulFields = { - units: _.map(this.unitInstances, (u) => u.calculateHash()).join(), - subworkflows: _.map(this.subworkflowInstances, (sw) => sw.calculateHash()).join(), - workflows: _.map(this.workflowInstances, (w) => w.calculateHash()).join(), + units: this.unitInstances.map((u) => u.calculateHash()).join(), + subworkflows: this.subworkflowInstances.map((sw) => sw.calculateHash()).join(), + workflows: this.workflowInstances.map((w) => w.calculateHash()).join(), }; return Utils.hash.calculateHashFromObject(meaningfulFields); } diff --git a/src/js/context/mixins/ApplicationContextMixin.ts b/src/js/context/mixins/ApplicationContextMixin.ts index 948a738a..9a545fdd 100644 --- a/src/js/context/mixins/ApplicationContextMixin.ts +++ b/src/js/context/mixins/ApplicationContextMixin.ts @@ -1,21 +1,19 @@ import type { Application } from "@mat3ra/ade"; import type ContextProvider from "../providers/base/ContextProvider"; -import { globalSettings } from "../providers/settings"; export type ApplicationContextMixin = { - readonly application: Application; + application: Application; initApplicationContextMixin(externalContext: ApplicationExternalContext): void; }; -export type ApplicationExternalContext = { application?: Application }; +export type ApplicationExternalContext = { application: Application }; -export function applicationContextMixin(item: ContextProvider) { +export default function applicationContextMixin(item: ContextProvider) { // @ts-expect-error - const properties: Provider & ApplicationContextMixin = { + const properties: ContextProvider & ApplicationContextMixin = { initApplicationContextMixin(externalContext: ApplicationExternalContext) { - this.application = - externalContext.application ?? globalSettings.Application.createDefault(); + this.application = externalContext.application; }, }; diff --git a/src/js/context/mixins/ContextAndRenderFieldsMixin.ts b/src/js/context/mixins/ContextAndRenderFieldsMixin.ts deleted file mode 100644 index 86ca2bb1..00000000 --- a/src/js/context/mixins/ContextAndRenderFieldsMixin.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; - -export type Context = AnyObject; - -export type ContextMixin = { - context: Context; // persistent context - renderingContext: Context; - getRenderingContext(): Context; - updateRenderingContext(ctx: Context): void; - getPersistentContext(): Context; - updatePersistentContext(ctx: Context): void; - getCombinedContext(): Context; -}; - -export function contextMixin(item: T): asserts item is T & ContextMixin { - // @ts-expect-error - const properties: InMemoryEntity & ContextMixin = { - get context() { - return this.requiredProp("context"); - }, - set context(ctx: Context) { - this.setProp("context", ctx); - }, - renderingContext: {}, - updateRenderingContext(ctx: Context) { - this.context = { ...this.renderingContext, ...ctx }; - }, - getRenderingContext() { - return this.renderingContext; - }, - getPersistentContext() { - return this.context; - }, - updatePersistentContext(ctx: Context) { - this.context = { ...ctx }; - }, - getCombinedContext() { - return { - ...this.getPersistentContext(), - ...this.getRenderingContext(), - }; - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/src/js/context/mixins/ImportantSettingsProviderMixin.ts b/src/js/context/mixins/ImportantSettingsProviderMixin.ts deleted file mode 100644 index ea77c701..00000000 --- a/src/js/context/mixins/ImportantSettingsProviderMixin.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { deepClone } from "@mat3ra/code/dist/js/utils/clone"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; - -export type ImportantSettingsProvider = { - important: object; - setImportant(key: string, value: unknown): void; - isImportantEdited: boolean | undefined; -}; - -export type ImportantSettingsProviderInMemoryEntityConstructor = - Constructor; - -export function importantSettingsProviderMixin( - item: T, -): asserts item is T & ImportantSettingsProvider { - // @ts-expect-error - const properties: InMemoryEntity & AbstractBase & ImportantSettingsProvider = { - get important() { - return deepClone(this._json.important || {}); - }, - - setImportant(key: string, value: unknown) { - this.setProp("important", { [key]: value }); - }, - - get isImportantEdited() { - return this.prop("important.isEdited"); - }, - - set isImportantEdited(bool) { - this.setProp("important", Object.assign(this.important, { isEdited: bool })); - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/src/js/context/mixins/MaterialsSetContextMixin.ts b/src/js/context/mixins/MaterialsSetContextMixin.ts index f0f9c76e..08b78196 100644 --- a/src/js/context/mixins/MaterialsSetContextMixin.ts +++ b/src/js/context/mixins/MaterialsSetContextMixin.ts @@ -8,26 +8,32 @@ type MaterialsSet = { }; export type MaterialsSetExternalContext = { - materialsSet: MaterialsSet; + materialsSet?: MaterialsSet; }; export type MaterialsSetContextMixin = { - materialsSet: MaterialsSet; + materialsSet?: MaterialsSet; initMaterialsSetContextMixin(externalContext: MaterialsSetExternalContext): void; sortMaterialsByIndexInSet(materials?: OrderedMaterial[]): OrderedMaterial[]; }; export default function materialsSetContextMixin(item: ContextProvider) { // @ts-expect-error - const properties: MaterialsSetContextProvider & MaterialsSetContextMixin = { + const properties: ContextProvider & MaterialsSetContextMixin = { initMaterialsSetContextMixin(externalContext: MaterialsSetExternalContext) { this.materialsSet = externalContext.materialsSet; }, sortMaterialsByIndexInSet(materials: OrderedMaterial[] = []) { + const { materialsSet } = this; + + if (!materialsSet) { + return materials; + } + // DO NOT SORT IN PLACE AS IT CHANGES THE ORDER IN `this.materials` AND HAS SIDE EFFECTS (MaterialViewer). - return materials.concat().sort((a, b) => { - return compareEntitiesInOrderedSetForSorting(a, b, this.materialsSet._id, false); + return [...materials].sort((a, b) => { + return compareEntitiesInOrderedSetForSorting(a, b, materialsSet._id, false); }); }, }; diff --git a/src/js/context/mixins/WorkflowContextMixin.ts b/src/js/context/mixins/WorkflowContextMixin.ts index a583d131..3cc0307f 100644 --- a/src/js/context/mixins/WorkflowContextMixin.ts +++ b/src/js/context/mixins/WorkflowContextMixin.ts @@ -1,11 +1,6 @@ -import type { WorkflowSchema } from "@mat3ra/esse/dist/js/types"; - +import type { Workflow } from "../../Workflow"; import type ContextProvider from "../providers/base/ContextProvider"; -type Workflow = WorkflowSchema & { - hasRelaxation?: boolean; -}; - export type WorkflowContextMixin = { isEdited: boolean; workflow: Workflow; diff --git a/src/js/context/providers/IonDynamicsDataManager.ts b/src/js/context/providers/IonDynamicsDataManager.ts index e9231ae7..3c786fbc 100644 --- a/src/js/context/providers/IonDynamicsDataManager.ts +++ b/src/js/context/providers/IonDynamicsDataManager.ts @@ -2,7 +2,7 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { DynamicsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import type { ExternalContext, UnitContext } from "./base/ContextProvider"; +import type { BaseExternalContext, UnitContext } from "./base/ContextProvider"; import JSONSchemaFormDataProvider from "./base/JSONSchemaFormDataProvider"; type Schema = DynamicsContextItemSchema; @@ -23,7 +23,7 @@ export default class IonDynamicsDataManager extends JSONSchemaFormDataProvider(unitContext, "dynamics"); return new IonDynamicsDataManager(contextItem, externalContext); @@ -40,7 +40,7 @@ export default class IonDynamicsDataManager extends JSONSchemaFormDataProvider, externalContext: ExternalContext) { + constructor(contextItem: Partial, externalContext: BaseExternalContext) { super(contextItem, externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { diff --git a/src/js/context/providers/MLSettingsDataManager.ts b/src/js/context/providers/MLSettingsDataManager.ts index ca83397b..0c9142e6 100644 --- a/src/js/context/providers/MLSettingsDataManager.ts +++ b/src/js/context/providers/MLSettingsDataManager.ts @@ -3,10 +3,9 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { MlSettingsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { +import applicationContextMixin, { type ApplicationContextMixin, type ApplicationExternalContext, - applicationContextMixin, } from "../mixins/ApplicationContextMixin"; import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; diff --git a/src/js/context/providers/MLTrainTestSplitDataManager.ts b/src/js/context/providers/MLTrainTestSplitDataManager.ts index 06252afd..c2618a95 100644 --- a/src/js/context/providers/MLTrainTestSplitDataManager.ts +++ b/src/js/context/providers/MLTrainTestSplitDataManager.ts @@ -3,10 +3,9 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { MlTrainTestSplitContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { +import applicationContextMixin, { type ApplicationContextMixin, type ApplicationExternalContext, - applicationContextMixin, } from "../mixins/ApplicationContextMixin"; import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; diff --git a/src/js/context/providers/PlanewaveCutoffDataManager.ts b/src/js/context/providers/PlanewaveCutoffDataManager.ts index 6dc12c75..985e1014 100644 --- a/src/js/context/providers/PlanewaveCutoffDataManager.ts +++ b/src/js/context/providers/PlanewaveCutoffDataManager.ts @@ -3,18 +3,21 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { CutoffsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { +import applicationContextMixin, { type ApplicationContextMixin, type ApplicationExternalContext, - applicationContextMixin, } from "../mixins/ApplicationContextMixin"; -import ContextProvider, { type ExternalContext, type UnitContext } from "./base/ContextProvider"; +import ContextProvider, { + type BaseExternalContext, + type UnitContext, +} from "./base/ContextProvider"; type ApplicationName = "vasp" | "espresso"; type Schema = CutoffsContextItemSchema; -type PlanewaveExternalContext = ExternalContext & ApplicationExternalContext; -type Base = typeof ContextProvider & Constructor; +type PlanewaveExternalContext = BaseExternalContext & ApplicationExternalContext; +type Base = typeof ContextProvider & + Constructor; // Type guard to check if a string is a valid ApplicationName function isApplicationName(name: string): name is ApplicationName { @@ -59,7 +62,7 @@ export default class PlanewaveCutoffDataManager extends (ContextProvider as Base return new PlanewaveCutoffDataManager(contextItem, externalContext); } - constructor(contextItem: Partial = {}, externalContext: PlanewaveExternalContext = {}) { + constructor(contextItem: Partial, externalContext: PlanewaveExternalContext) { super(contextItem, externalContext); this.initApplicationContextMixin(externalContext); diff --git a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts index 2dbf25e0..db3fe1b0 100644 --- a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts @@ -1,6 +1,6 @@ import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; -import ConvergenceParameter from "../../../subworkflows/convergence/ConvergenceParameter"; +import ConvergenceParameter from "../../../convergence/ConvergenceParameter"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; @@ -18,7 +18,7 @@ export default class KGridFormDataManager extends PointsGridFormDataProvider a * b) * nAtoms; } case "spacing": - return lodash.round( - this.reciprocalLattice.getSpacingFromDimensions(dimensions, Units.angstrom), - 3, + return Number( + this.reciprocalLattice + .getSpacingFromDimensions(dimensions, Units.angstrom) + .toFixed(3), ); default: return 1; diff --git a/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts b/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts index e1bc0efe..3a5ffd8a 100644 --- a/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts +++ b/src/js/context/providers/PointsPath/PointsPathFormDataProvider.ts @@ -6,12 +6,10 @@ import type { PointsPathDataProviderSchema, } from "@mat3ra/esse/dist/js/types"; import { type ReciprocalLattice, Made } from "@mat3ra/made"; -import s from "underscore.string"; -import { +import applicationContextMixin, { type ApplicationContextMixin, type ApplicationExternalContext, - applicationContextMixin, } from "../../mixins/ApplicationContextMixin"; import materialContextMixin, { type MaterialContextMixin, @@ -116,7 +114,7 @@ abstract class PointsPathFormDataProvider extends Mixi return { ...p, - coordinates: coordinates.map((c) => +s.sprintf("%14.9f", c)), + coordinates: coordinates.map((c) => Number(c.toFixed(9))), }; }) as Data; diff --git a/src/js/context/providers/base/ContextProvider.ts b/src/js/context/providers/base/ContextProvider.ts index b92aa8c9..841e7c4a 100644 --- a/src/js/context/providers/base/ContextProvider.ts +++ b/src/js/context/providers/base/ContextProvider.ts @@ -19,11 +19,12 @@ export type Domain = "executable" | "important"; export type EntityName = "unit" | "subworkflow"; -export type ExternalContext = object; +/** Minimal bound for provider external context; the full contract is ExternalContext in context/providers/index.ts */ +export type BaseExternalContext = object; abstract class ContextProvider< S extends ContextItemSchema = ContextItemSchema, - EC extends ExternalContext = ExternalContext, + EC extends BaseExternalContext = BaseExternalContext, > { abstract name: S["name"]; diff --git a/src/js/context/providers/base/JSONSchemaDataProvider.ts b/src/js/context/providers/base/JSONSchemaDataProvider.ts index 7eb48b72..84ca17f4 100644 --- a/src/js/context/providers/base/JSONSchemaDataProvider.ts +++ b/src/js/context/providers/base/JSONSchemaDataProvider.ts @@ -1,10 +1,9 @@ import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; import type { ContextItemSchema } from "@mat3ra/esse/dist/js/types"; -import type { ExternalContext } from "./ContextProvider"; import ContextProvider from "./ContextProvider"; -export interface JinjaExternalContext extends ExternalContext { +export interface JinjaExternalContext { isUsingJinjaVariables?: boolean; } diff --git a/src/js/context/providers/index.ts b/src/js/context/providers/index.ts index 2048cac1..6e35680f 100644 --- a/src/js/context/providers/index.ts +++ b/src/js/context/providers/index.ts @@ -1,8 +1,12 @@ -import { type Application } from "@mat3ra/ade"; -import type { JobSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; - -import type { OrderedMaterial } from "../mixins/MaterialContextMixin"; +import type { ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; +import type { JobExternalContext } from "../mixins/JobContextMixin"; +import type { MaterialExternalContext } from "../mixins/MaterialContextMixin"; +import type { MaterialsExternalContext } from "../mixins/MaterialsContextMixin"; +import type { MaterialsSetExternalContext } from "../mixins/MaterialsSetContextMixin"; +import type { MethodDataExternalContext } from "../mixins/MethodDataContextMixin"; +import type { WorkflowExternalContext } from "../mixins/WorkflowContextMixin"; import type { UnitContext } from "./base/ContextProvider"; +import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import BoundaryConditionsFormDataManager from "./BoundaryConditionsFormDataManager"; import QENEBInputDataManager from "./by_application/espresso/QENEBInputDataManager"; import QEPWXInputDataManager from "./by_application/espresso/QEPWXInputDataManager"; @@ -61,19 +65,23 @@ export const PROVIDER_REGISTRY = { NWChemInputDataManager, } as const; +export type SubworkflowContext = { + subworkflowContext: Record; +}; + /** * External context type used by ExecutionUnitInput when creating providers. * This type is always expected to be present when providers are instantiated. */ -export type ExternalContext = { - application: Application; - material: OrderedMaterial; - materials: OrderedMaterial[]; - workflow: WorkflowSchema; - job: JobSchema; - isUsingJinjaVariables?: boolean; - materialsSet: { _id: string }; -}; +export type ExternalContext = ApplicationExternalContext & + WorkflowExternalContext & + JobExternalContext & + MaterialsExternalContext & + MethodDataExternalContext & + MaterialsSetExternalContext & + MaterialExternalContext & + JinjaExternalContext & + SubworkflowContext; /** * Type for provider names as they appear in templates. @@ -104,12 +112,8 @@ export function createProvider( if (!ProviderClass) { throw new Error(`Unknown provider: ${name}`); } - // Type assertion is safe here because ExecutionUnitInput's ExternalContext - // extends the base ExternalContext and includes all properties needed by providers. - // Each provider may expect a more specific ExternalContext type, but at runtime - // the ExecutionUnitInput's ExternalContext will have all required properties. - // This is a legitimate use of `any` for dynamic dispatch where TypeScript - // cannot statically verify the types, but runtime behavior is guaranteed. + // The full ExternalContext is a superset of each provider's expected context type, + // so passing it to every provider's createFromUnitContext is type-safe (no assertion). return ProviderClass.createFromUnitContext(context, externalContext); } diff --git a/src/js/subworkflows/convergence/ConvergenceParameter.ts b/src/js/convergence/ConvergenceParameter.ts similarity index 100% rename from src/js/subworkflows/convergence/ConvergenceParameter.ts rename to src/js/convergence/ConvergenceParameter.ts diff --git a/src/js/subworkflows/convergence/NonUniformKGridConvergence.ts b/src/js/convergence/NonUniformKGridConvergence.ts similarity index 100% rename from src/js/subworkflows/convergence/NonUniformKGridConvergence.ts rename to src/js/convergence/NonUniformKGridConvergence.ts diff --git a/src/js/subworkflows/convergence/UniformKGridConvergence.ts b/src/js/convergence/UniformKGridConvergence.ts similarity index 100% rename from src/js/subworkflows/convergence/UniformKGridConvergence.ts rename to src/js/convergence/UniformKGridConvergence.ts diff --git a/src/js/subworkflows/convergence/factory.ts b/src/js/convergence/factory.ts similarity index 100% rename from src/js/subworkflows/convergence/factory.ts rename to src/js/convergence/factory.ts diff --git a/src/js/enums.ts b/src/js/enums.ts index e6529c04..e09b7c0c 100644 --- a/src/js/enums.ts +++ b/src/js/enums.ts @@ -1,10 +1,3 @@ -/** - * THIS ENUMS ARE SHARED WITH TESTS. - * DO NOT IMPORT ANYTHINGS IN THIS MODULE. - */ - -export const IO_ID_COLUMN = "exabyteId"; - export const UNIT_TYPES = { // not currently used convergence: "convergence", @@ -19,7 +12,7 @@ export const UNIT_TYPES = { processing: "processing", io: "io", assertion: "assertion", -}; +} as const; export enum UnitType { convergence = "convergence", @@ -34,28 +27,23 @@ export enum UnitType { assertion = "assertion", } -export const UNIT_STATUSES = { - idle: "idle", - active: "active", - finished: "finished", - error: "error", - warning: "warning", -}; - -export const UNIT_TAGS = { - hasConvergenceParam: "hasConvergenceParam", - hasConvergenceResult: "hasConvergenceResult", -}; - export enum UnitTag { hasConvergenceParam = "hasConvergenceParam", hasConvergenceResult = "hasConvergenceResult", } +export enum UnitStatus { + idle = "idle", + active = "active", + finished = "finished", + error = "error", + warning = "warning", +} + export const WORKFLOW_STATUSES = { "up-to-date": "up-to-date", outdated: "outdated", -}; +} as const; export const TAB_NAVIGATION_CONFIG = { overview: { @@ -78,6 +66,6 @@ export const TAB_NAVIGATION_CONFIG = { className: "", href: "sw-compute", }, -}; +} as const; export const UNIT_NAME_INVALID_CHARS = "/"; diff --git a/src/js/index.js b/src/js/index.ts similarity index 52% rename from src/js/index.js rename to src/js/index.ts index 3d617f51..14033608 100644 --- a/src/js/index.js +++ b/src/js/index.ts @@ -1,13 +1,7 @@ -import { PointsPathFormDataProvider } from "./context/providers/PointsPath/PointsPathFormDataProvider"; +import PointsPathFormDataProvider from "./context/providers/PointsPath/PointsPathFormDataProvider"; import { globalSettings } from "./context/providers/settings"; -import { - TAB_NAVIGATION_CONFIG, - UNIT_NAME_INVALID_CHARS, - UNIT_STATUSES, - UNIT_TYPES, - WORKFLOW_STATUSES, -} from "./enums"; -import { createSubworkflowByName, Subworkflow } from "./subworkflows"; +import { TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES } from "./enums"; +import Subworkflow from "./Subworkflow"; import { AssertionUnit, AssignmentUnit, @@ -16,26 +10,17 @@ import { ExecutionUnit, IOUnit, MapUnit, - ProcessingUnit, ReduceUnit, SubworkflowUnit, } from "./units"; -import { builders } from "./units/builders"; import { UnitFactory } from "./units/factory"; import { defaultMapConfig } from "./units/MapUnit"; -import { createWorkflow, createWorkflowConfigs, createWorkflows, Workflow } from "./workflows"; +import { Workflow } from "./Workflow"; export { Subworkflow, Workflow, - createWorkflow, - createWorkflows, - createWorkflowConfigs, - createSubworkflowByName, UnitFactory, - builders, - UNIT_TYPES, - UNIT_STATUSES, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, @@ -46,7 +31,6 @@ export { ConditionUnit, IOUnit, MapUnit, - ProcessingUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, diff --git a/src/js/standata/README.md b/src/js/standata/README.md new file mode 100644 index 00000000..ee6751e1 --- /dev/null +++ b/src/js/standata/README.md @@ -0,0 +1 @@ +This must be moved to standata diff --git a/src/js/subworkflows/create.js b/src/js/standata/subworkflows/create.js similarity index 97% rename from src/js/subworkflows/create.js rename to src/js/standata/subworkflows/create.js index 98be7180..7b7b8cb6 100644 --- a/src/js/subworkflows/create.js +++ b/src/js/standata/subworkflows/create.js @@ -7,13 +7,14 @@ import { ModelFactory, } from "@mat3ra/mode"; import { ApplicationMethodStandata } from "@mat3ra/standata"; +// eslint-disable-next-line import/no-extraneous-dependencies import _ from "lodash"; -import { UnitFactory } from "../units"; +import { Subworkflow } from "../../Subworkflow"; +import { UnitFactory } from "../../units"; +import { applyConfig } from "../../workflows/utils"; import { builders } from "../units/builders"; -import { applyConfig } from "../utils"; import { dynamicSubworkflowsByApp, getSurfaceEnergySubworkflowUnits } from "./dynamic"; -import { Subworkflow } from "./subworkflow"; // NOTE: DFTModel => DFTModelConfig, configs should have the same name as the model/method class + "Config" at the end function _getConfigFromModelOrMethodName(name, kind) { diff --git a/src/js/subworkflows/dynamic/espresso/getQpointIrrep.js b/src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js similarity index 95% rename from src/js/subworkflows/dynamic/espresso/getQpointIrrep.js rename to src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js index 8d97fe48..3d3b7580 100644 --- a/src/js/subworkflows/dynamic/espresso/getQpointIrrep.js +++ b/src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js @@ -1,4 +1,4 @@ -import { UNIT_TYPES } from "../../../enums"; +import { UNIT_TYPES } from "../../../../enums"; /** * @summary Get QptIrr units used in phonon map calculations diff --git a/src/js/subworkflows/dynamic/index.js b/src/js/standata/subworkflows/dynamic/index.js similarity index 100% rename from src/js/subworkflows/dynamic/index.js rename to src/js/standata/subworkflows/dynamic/index.js diff --git a/src/js/subworkflows/dynamic/surfaceEnergy.js b/src/js/standata/subworkflows/dynamic/surfaceEnergy.js similarity index 100% rename from src/js/subworkflows/dynamic/surfaceEnergy.js rename to src/js/standata/subworkflows/dynamic/surfaceEnergy.js diff --git a/src/js/units/builders/AssertionUnitConfigBuilder.js b/src/js/standata/units/builders/AssertionUnitConfigBuilder.js similarity index 93% rename from src/js/units/builders/AssertionUnitConfigBuilder.js rename to src/js/standata/units/builders/AssertionUnitConfigBuilder.js index bb0e6f4e..ffecee10 100644 --- a/src/js/units/builders/AssertionUnitConfigBuilder.js +++ b/src/js/standata/units/builders/AssertionUnitConfigBuilder.js @@ -1,4 +1,4 @@ -import { UNIT_TYPES } from "../../enums"; +import { UNIT_TYPES } from "../../../enums"; import { UnitConfigBuilder } from "./UnitConfigBuilder"; export class AssertionUnitConfigBuilder extends UnitConfigBuilder { diff --git a/src/js/units/builders/AssignmentUnitConfigBuilder.js b/src/js/standata/units/builders/AssignmentUnitConfigBuilder.js similarity index 95% rename from src/js/units/builders/AssignmentUnitConfigBuilder.js rename to src/js/standata/units/builders/AssignmentUnitConfigBuilder.js index c4f56468..3de282e7 100644 --- a/src/js/units/builders/AssignmentUnitConfigBuilder.js +++ b/src/js/standata/units/builders/AssignmentUnitConfigBuilder.js @@ -1,4 +1,4 @@ -import { UNIT_TYPES } from "../../enums"; +import { UNIT_TYPES } from "../../../enums"; import { UnitConfigBuilder } from "./UnitConfigBuilder"; export class AssignmentUnitConfigBuilder extends UnitConfigBuilder { diff --git a/src/js/units/builders/ExecutionUnitConfigBuilder.js b/src/js/standata/units/builders/ExecutionUnitConfigBuilder.js similarity index 97% rename from src/js/units/builders/ExecutionUnitConfigBuilder.js rename to src/js/standata/units/builders/ExecutionUnitConfigBuilder.js index 21ca1d96..5d38cafa 100644 --- a/src/js/units/builders/ExecutionUnitConfigBuilder.js +++ b/src/js/standata/units/builders/ExecutionUnitConfigBuilder.js @@ -1,7 +1,7 @@ /* eslint-disable class-methods-use-this */ import { ApplicationRegistry } from "@mat3ra/ade"; -import { UNIT_TYPES } from "../../enums"; +import { UNIT_TYPES } from "../../../enums"; import { UnitConfigBuilder } from "./UnitConfigBuilder"; export class ExecutionUnitConfigBuilder extends UnitConfigBuilder { diff --git a/src/js/units/builders/IOUnitConfigBuilder.js b/src/js/standata/units/builders/IOUnitConfigBuilder.js similarity index 96% rename from src/js/units/builders/IOUnitConfigBuilder.js rename to src/js/standata/units/builders/IOUnitConfigBuilder.js index 4a5fc3e2..83089665 100644 --- a/src/js/units/builders/IOUnitConfigBuilder.js +++ b/src/js/standata/units/builders/IOUnitConfigBuilder.js @@ -1,4 +1,4 @@ -import { UNIT_TYPES } from "../../enums"; +import { UNIT_TYPES } from "../../../enums"; import { UnitConfigBuilder } from "./UnitConfigBuilder"; export class IOUnitConfigBuilder extends UnitConfigBuilder { diff --git a/src/js/units/builders/UnitConfigBuilder.js b/src/js/standata/units/builders/UnitConfigBuilder.js similarity index 97% rename from src/js/units/builders/UnitConfigBuilder.js rename to src/js/standata/units/builders/UnitConfigBuilder.js index d09c5b5d..2fa67953 100644 --- a/src/js/units/builders/UnitConfigBuilder.js +++ b/src/js/standata/units/builders/UnitConfigBuilder.js @@ -1,4 +1,5 @@ import { Utils } from "@mat3ra/utils"; +// eslint-disable-next-line import/no-extraneous-dependencies import _ from "underscore"; export class UnitConfigBuilder { diff --git a/src/js/units/builders/index.js b/src/js/standata/units/builders/index.js similarity index 100% rename from src/js/units/builders/index.js rename to src/js/standata/units/builders/index.js diff --git a/src/js/utils.ts b/src/js/standata/utils.ts similarity index 57% rename from src/js/utils.ts rename to src/js/standata/utils.ts index f2a0f33d..5804e1dc 100644 --- a/src/js/utils.ts +++ b/src/js/standata/utils.ts @@ -1,35 +1,4 @@ -import type { SubworkflowSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; -import lodash from "lodash"; - -/** - * @summary set the head of an array of units - */ -export function setUnitsHead(units: T[]) { - if (units.length > 0) { - units[0].head = true; - lodash.tail(units).map((x) => (x.head = false)); - } - return units; -} - -// TODO: fix setNextLinks on unit removal and convergence logic. -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -export function setNextLinks(units: T[]) { - const flowchartIds = units.map((u) => u.flowchartId); - for (let i = 0; i < units.length - 1; i++) { - if (!units[i].next) { - // newly added units don't have next set yet => set it - units[i].next = units[i + 1].flowchartId; - if (i > 0) units[i - 1].next = units[i].flowchartId; - } else if (!flowchartIds.includes(units[i].next ?? "")) { - // newly removed units may create broken next links => fix it - units[i].next = units[i + 1].flowchartId; - } - } - return units; -} +import type { SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; /** * @summary Apply configuration data to an object diff --git a/src/js/workflows/create.js b/src/js/standata/workflows/create.js similarity index 93% rename from src/js/workflows/create.js rename to src/js/standata/workflows/create.js index 44d1e6c7..176e618f 100644 --- a/src/js/workflows/create.js +++ b/src/js/standata/workflows/create.js @@ -1,61 +1,14 @@ -import { createSubworkflow } from "../subworkflows/create"; -import { UnitFactory } from "../units"; -import { defaultMapConfig } from "../units/map"; -import { applyConfig, findUnit } from "../utils"; -import { Workflow } from "./workflow"; +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; +import schemas from "@mat3ra/esse/dist/js/schemas.json"; -/** - * @summary Helper for creating Map units for complex workflows - * @param config {Object} map unit configuration - * @param unitFactoryCls {*} class factory for map unit - * @returns {*} map unit - */ -function createMapUnit({ config, unitFactoryCls = UnitFactory }) { - let { input: defaultInput } = defaultMapConfig; - if (config.input) { - defaultInput = { ...defaultInput, ...config.input }; - } - const unit = unitFactoryCls.create({ ...defaultMapConfig, input: defaultInput }); - return unit; -} - -/** - * @summary Update subworkflow units with patch configuration defined in the workflow config - * @param subworkflowData {Object} subworkflow data - * @param unitConfigs {Array} array of patch configs for subworkflow units - * @returns subworkflowData {Object} subworkflowData with patches applied to units - */ -function updateUnitConfigs({ subworkflowData, unitConfigs }) { - unitConfigs.forEach((config) => { - const { index, type, config: unitConfig } = config; // unitConfig should contain 'attributes' key - const unit = findUnit({ subworkflowData, index, type }); - console.log(` patching ${type} unit ${index} of subworkflow ${subworkflowData.name}`); - unit.config = applyConfig({ obj: unit.config, config: unitConfig }); - return null; - }); - return subworkflowData; -} +import { UnitFactory } from "../../units"; +import { defaultMapConfig } from "../../units/MapUnit"; +import { Workflow } from "../../Workflow"; +import { applyConfig, findUnit } from "../../workflows/utils"; +import { createSubworkflow } from "../subworkflows/create"; -/** - * @summary Use subworkflow.createSubworkflow to create a Subworkflow unit - * @param appName {String} application name - * @param unitData {*} object containing subworkflow configuration data - * @param workflowData {*} object containing all workflow configuration data - * @param swArgs {*} subworkflow classes - * @returns {*} subworkflow object - */ -function createSubworkflowUnit({ appName, unitData, workflowData, ...swArgs }) { - const { name: unitName, unitConfigs, config } = unitData; - const { subworkflows } = workflowData; - const { [appName]: dataByApp } = subworkflows; - let { [unitName]: subworkflowData } = dataByApp; - subworkflowData.config = { ...subworkflowData.config, ...config }; - if (unitConfigs) subworkflowData = updateUnitConfigs({ subworkflowData, unitConfigs }); - return createSubworkflow({ - subworkflowData, - ...swArgs, - }); -} +// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` +JSONSchemasInterface.setSchemas(schemas); /** * @summary Create the first workflow object specified in a workflow configuration @@ -81,6 +34,21 @@ function createWorkflowHead({ workflow, unit, type, workflowCls }) { return wf; } +/** + * @summary Helper for creating Map units for complex workflows + * @param config {Object} map unit configuration + * @param unitFactoryCls {*} class factory for map unit + * @returns {*} map unit + */ +function createMapUnit({ config, unitFactoryCls = UnitFactory }) { + let { input: defaultInput } = defaultMapConfig; + if (config.input) { + defaultInput = { ...defaultInput, ...config.input }; + } + const unit = unitFactoryCls.create({ ...defaultMapConfig, input: defaultInput }); + return unit; +} + /** * @summary Combine workflow units together * @param workflow {*} the workflow object @@ -144,6 +112,44 @@ function createFromWorkflowUnits({ wfUnits, workflowCls, unitFactoryCls }) { return applyConfig({ obj: workflow, config }); } +/** + * @summary Update subworkflow units with patch configuration defined in the workflow config + * @param subworkflowData {Object} subworkflow data + * @param unitConfigs {Array} array of patch configs for subworkflow units + * @returns subworkflowData {Object} subworkflowData with patches applied to units + */ +function updateUnitConfigs({ subworkflowData, unitConfigs }) { + unitConfigs.forEach((config) => { + const { index, type, config: unitConfig } = config; // unitConfig should contain 'attributes' key + const unit = findUnit({ subworkflowData, index, type }); + console.log(` patching ${type} unit ${index} of subworkflow ${subworkflowData.name}`); + unit.config = applyConfig({ obj: unit.config, config: unitConfig }); + return null; + }); + return subworkflowData; +} + +/** + * @summary Use subworkflow.createSubworkflow to create a Subworkflow unit + * @param appName {String} application name + * @param unitData {*} object containing subworkflow configuration data + * @param workflowData {*} object containing all workflow configuration data + * @param swArgs {*} subworkflow classes + * @returns {*} subworkflow object + */ +function createSubworkflowUnit({ appName, unitData, workflowData, ...swArgs }) { + const { name: unitName, unitConfigs, config } = unitData; + const { subworkflows } = workflowData; + const { [appName]: dataByApp } = subworkflows; + let { [unitName]: subworkflowData } = dataByApp; + subworkflowData.config = { ...subworkflowData.config, ...config }; + if (unitConfigs) subworkflowData = updateUnitConfigs({ subworkflowData, unitConfigs }); + return createSubworkflow({ + subworkflowData, + ...swArgs, + }); +} + /** * @summary Creates a flattened array of workflow units from nested workflow/subworkflow * configuration data comprising a simple or complex workflow @@ -198,7 +204,7 @@ function createWorkflowUnits({ }); } -function createWorkflow({ +export function createWorkflow({ appName, workflowData, workflowSubworkflowMapByApplication, @@ -218,5 +224,3 @@ function createWorkflow({ wf.applicationName = appName; return wf; } - -export { createWorkflow }; diff --git a/src/js/subworkflows/convergence.js b/src/js/subworkflows/convergence.js deleted file mode 100644 index ebe6290f..00000000 --- a/src/js/subworkflows/convergence.js +++ /dev/null @@ -1,196 +0,0 @@ -import merge from "lodash/merge"; - -import { UNIT_TAGS, UNIT_TYPES } from "../enums"; -import { createConvergenceParameter } from "./convergence/factory"; - -export const ConvergenceMixin = (superclass) => - class extends superclass { - get convergenceParam() { - return this.findUnitWithTag("hasConvergenceParam")?.operand || undefined; - } - - get convergenceResult() { - return this.findUnitWithTag("hasConvergenceResult")?.operand || undefined; - } - - convergenceSeries(scopeTrack) { - if (!this.hasConvergence || !scopeTrack?.length) return []; - let lastResult; - const series = scopeTrack - .map((scopeItem, i) => ({ - x: i, - param: scopeItem.scope?.global[this.convergenceParam], - y: scopeItem.scope?.global[this.convergenceResult], - })) - .filter(({ y }) => { - const isNewResult = y !== undefined && y !== lastResult; - lastResult = y; - return isNewResult; - }); - return series.map((item, i) => { - return { - x: i + 1, - param: item.param, - y: item.y, - }; - }); - } - - addConvergence({ - parameter, - parameterInitial, - parameterIncrement, - result, - resultInitial, - condition, - operator, - tolerance, - maxOccurrences, - }) { - // RF: added TODO comments for future improvements - - const { units } = this; - // Find unit to converge: should contain passed result in its results list - // TODO: make user to select unit for convergence explicitly - const unitForConvergence = units.find((x) => - x.resultNames.find((name) => name === result), - ); - - if (!unitForConvergence) { - // eslint-disable-next-line no-undef - sAlert.error( - `Subworkflow does not contain unit with '${result}' as extracted property.`, - ); - throw new Error("There is no result to converge"); - } - - // initialize parameter - const param = createConvergenceParameter({ - name: parameter, - initialValue: parameterInitial, - increment: parameterIncrement, - }); - - // Replace kgrid to be ready for convergence - // TODO: kgrid should be abstracted and selected by user - const providers = unitForConvergence.importantSettingsProviders; - const gridProvider = providers.find((p) => p.name === "kgrid" || p.name === "qgrid"); - let mergedContext = param.unitContext; - if (gridProvider) { - mergedContext = merge(gridProvider.yieldData(), param.unitContext); - gridProvider.setData(mergedContext); - gridProvider.setIsEdited(true); - } - unitForConvergence.updateContext(mergedContext); - - const prevResult = "prev_result"; - const iteration = "iteration"; - - // Assignment with result's initial value - const prevResultInit = this._UnitFactory.create({ - name: "init result", - type: UNIT_TYPES.assignment, - head: true, - operand: prevResult, - value: resultInitial, - }); - - // Assignment with initial value of convergence parameter - const paramInit = this._UnitFactory.create({ - name: "init parameter", - type: UNIT_TYPES.assignment, - operand: param.name, - value: param.initialValue, - tags: [UNIT_TAGS.hasConvergenceParam], - }); - - // Assignment with initial value of iteration counter - const iterInit = this._UnitFactory.create({ - name: "init counter", - type: UNIT_TYPES.assignment, - operand: iteration, - value: 1, - }); - - // Assignment for storing iteration result: extracts 'result' from convergence unit scope - const storePrevResult = this._UnitFactory.create({ - name: "store result", - type: UNIT_TYPES.assignment, - input: [ - { - scope: unitForConvergence.flowchartId, - name: result, - }, - ], - operand: prevResult, - value: result, - }); - - // Assignment for convergence param increase - const nextStep = this._UnitFactory.create({ - name: "update parameter", - type: UNIT_TYPES.assignment, - input: param.useVariablesFromUnitContext(unitForConvergence.flowchartId), - operand: param.name, - value: param.increment, - next: unitForConvergence.flowchartId, - }); - - // Final step of convergence - const exit = this._UnitFactory.create({ - type: UNIT_TYPES.assignment, - name: "exit", - input: [], - operand: param.name, - value: param.finalValue, - }); - - // Final step of convergence - const storeResult = this._UnitFactory.create({ - name: "update result", - type: UNIT_TYPES.assignment, - input: [ - { - scope: unitForConvergence.flowchartId, - name: result, - }, - ], - operand: result, - value: result, - tags: [UNIT_TAGS.hasConvergenceResult], - }); - - // Assign next iteration value - const nextIter = this._UnitFactory.create({ - name: "update counter", - type: UNIT_TYPES.assignment, - input: [], - operand: iteration, - value: `${iteration} + 1`, - }); - - // Convergence condition unit - const conditionUnit = this._UnitFactory.create({ - name: "check convergence", - type: UNIT_TYPES.condition, - statement: `${condition} ${operator} ${tolerance}`, - then: exit.flowchartId, - else: storePrevResult.flowchartId, - maxOccurrences, - next: storePrevResult.flowchartId, - }); - - this.addUnit(paramInit, 0); - this.addUnit(prevResultInit, 1); - this.addUnit(iterInit, 2); - this.addUnit(storeResult); - this.addUnit(conditionUnit); - this.addUnit(storePrevResult); - this.addUnit(nextIter); - this.addUnit(nextStep); - this.addUnit(exit); - - // `addUnit` adjusts the `next` field, hence the below. - nextStep.next = unitForConvergence.flowchartId; - } - }; diff --git a/src/js/subworkflows/index.js b/src/js/subworkflows/index.js deleted file mode 100644 index 48390ca0..00000000 --- a/src/js/subworkflows/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { Subworkflow } from "./subworkflow"; -export { createSubworkflowByName } from "./create"; diff --git a/src/js/units/AssertionUnit.ts b/src/js/units/AssertionUnit.ts index ce0f302c..7d04f505 100644 --- a/src/js/units/AssertionUnit.ts +++ b/src/js/units/AssertionUnit.ts @@ -7,12 +7,16 @@ import { type AssertionUnitSchemaMixin, assertionUnitSchemaMixin, } from "../generated/AssertionUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = AssertionUnitSchema; type Base = typeof BaseUnit & Constructor; -export class AssertionUnit extends (BaseUnit as Base) implements Schema { +class AssertionUnit extends (BaseUnit as Base) implements Schema { + declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + constructor(config: Partial) { super({ name: UnitType.assertion, @@ -23,11 +27,11 @@ export class AssertionUnit extends (BaseUnit as Base) implements Schema { }); } - declare toJSON: () => Schema & AnyObject; - getHashObject() { return { statement: this.statement, errorMessage: this.errorMessage }; } } assertionUnitSchemaMixin(AssertionUnit.prototype); + +export default AssertionUnit; diff --git a/src/js/units/AssignmentUnit.ts b/src/js/units/AssignmentUnit.ts index a981394f..c410be40 100644 --- a/src/js/units/AssignmentUnit.ts +++ b/src/js/units/AssignmentUnit.ts @@ -7,12 +7,16 @@ import { type AssignmentUnitSchemaMixin, assignmentUnitSchemaMixin, } from "../generated/AssignmentUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = AssignmentUnitSchema; type Base = typeof BaseUnit & Constructor; -export class AssignmentUnit extends (BaseUnit as Base) implements Schema { +class AssignmentUnit extends (BaseUnit as Base) implements Schema { + declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + constructor(config: Partial) { super({ name: UnitType.assignment, @@ -24,11 +28,11 @@ export class AssignmentUnit extends (BaseUnit as Base) implements Schema { }); } - declare toJSON: () => Schema & AnyObject; - getHashObject(): object { return { input: this.input, operand: this.operand, value: this.value }; } } assignmentUnitSchemaMixin(AssignmentUnit.prototype); + +export default AssignmentUnit; diff --git a/src/js/units/BaseUnit.ts b/src/js/units/BaseUnit.ts index 5e16597b..1ab90f6b 100644 --- a/src/js/units/BaseUnit.ts +++ b/src/js/units/BaseUnit.ts @@ -1,4 +1,3 @@ -/* eslint-disable class-methods-use-this */ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { type Defaultable, @@ -27,10 +26,13 @@ import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { StatusSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; import { Utils } from "@mat3ra/utils"; -import { UNIT_STATUSES } from "../enums"; +import { UnitStatus } from "../enums"; import { type BaseUnitSchemaMixin, baseUnitSchemaMixin } from "../generated/BaseUnitSchemaMixin"; import { type StatusSchemaMixin, statusSchemaMixin } from "../generated/StatusSchemaMixin"; -import { type RuntimeItemsUILogic, runtimeItemsUILogicMixin } from "../RuntimeItemsUILogicMixin"; +import { + type RuntimeItemsUILogic, + runtimeItemsUILogicMixin, +} from "./mixins/RuntimeItemsUILogicMixin"; type Base = typeof InMemoryEntity & Constructor & @@ -45,8 +47,7 @@ type Base = typeof InMemoryEntity & type Schema = WorkflowBaseUnitSchema; -// eslint-disable-next-line prettier/prettier -export class BaseUnit extends (InMemoryEntity as Base) implements Schema { +class BaseUnit extends (InMemoryEntity as Base) implements Schema { static usePredefinedIds = false; static generateFlowChartId(name: string) { @@ -79,7 +80,7 @@ export class BaseUnit extends (InMemoryEntity as Base preProcessors: [], postProcessors: [], ...config, - status: config.status || UNIT_STATUSES.idle, + status: config.status || UnitStatus.idle, statusTrack: config.statusTrack || [], flowchartId: config.flowchartId || BaseUnit.generateFlowChartId(config.name), tags: config.tags || [], @@ -122,3 +123,5 @@ baseUnitSchemaMixin(BaseUnit.prototype); statusSchemaMixin(BaseUnit.prototype); namedEntityMixin(BaseUnit.prototype); defaultableEntityMixin(BaseUnit); + +export default BaseUnit; diff --git a/src/js/units/ConditionUnit.ts b/src/js/units/ConditionUnit.ts index b48d81df..fa04edb3 100644 --- a/src/js/units/ConditionUnit.ts +++ b/src/js/units/ConditionUnit.ts @@ -7,12 +7,16 @@ import { type ConditionUnitSchemaMixin, conditionUnitSchemaMixin, } from "../generated/ConditionUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = ConditionUnitSchema; type Base = typeof BaseUnit & Constructor; -export class ConditionUnit extends (BaseUnit as Base) implements Schema { +class ConditionUnit extends (BaseUnit as Base) implements Schema { + declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + constructor(config: Partial) { super({ name: UnitType.condition, @@ -29,11 +33,11 @@ export class ConditionUnit extends (BaseUnit as Base) implements Schema { }); } - declare toJSON: () => Schema & AnyObject; - getHashObject(): object { return { statement: this.statement, maxOccurrences: this.maxOccurrences }; } } conditionUnitSchemaMixin(ConditionUnit.prototype); + +export default ConditionUnit; diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index 4fdfb0c1..5a7ca802 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -9,24 +9,17 @@ import type { } from "@mat3ra/esse/dist/js/types"; import { Utils } from "@mat3ra/utils"; -import { contextMixin } from "../context/mixins/ContextAndRenderFieldsMixin"; -import { - type ImportantSettingsProvider, - importantSettingsProviderMixin, -} from "../context/mixins/ImportantSettingsProviderMixin"; import { type ExternalContext, createProvider } from "../context/providers"; -import ExecutionUnitInput from "../ExecutionUnitInput"; +import type ConvergenceParameter from "../convergence/ConvergenceParameter"; import { type ExecutionUnitSchemaMixin, executionUnitSchemaMixin, } from "../generated/ExecutionUnitSchemaMixin"; -import type ConvergenceParameter from "../subworkflows/convergence/ConvergenceParameter"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; +import ExecutionUnitInput from "./ExecutionUnitInput"; type Schema = ExecutionUnitSchema; -type Base = typeof BaseUnit & - Constructor & - Constructor; +type Base = typeof BaseUnit & Constructor; interface SetApplicationProps { application: Application; @@ -39,7 +32,7 @@ interface SetExecutableProps { flavor?: Flavor | FlavorSchema; } -export class ExecutionUnit extends (BaseUnit as Base) implements Schema { +class ExecutionUnit extends (BaseUnit as Base) implements Schema { applicationInstance!: Application; executableInstance!: Executable; @@ -52,6 +45,8 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { declare toJSON: () => Schema & AnyObject; + declare _json: Schema & AnyObject; + constructor(config: Schema) { super(config); @@ -144,43 +139,38 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { } as const; const contextName = parameterToContextProviderMap[parameter.name]; + const contextProviders = this.getContextProvidersInstances(externalContext); + + const fullContext = contextProviders.map((provider) => { + if (provider.name === contextName) { + provider.applyConvergenceParameter(parameter); + return provider.getContextItemData(); + } + return provider.getContextItemData(); + }); - const fullContext = this.getContextProvidersInstances(externalContext).map( - (contextProvider) => { - if (contextProvider.name === contextName) { - contextProvider.applyCovergenceParameter(parameter); - return contextProvider.getContextItemData(); - } - return contextProvider.getContextItemData(); - }, - ); - - this.saveContext(fullContext); + this.saveContext(fullContext, externalContext); } render(externalContext: ExternalContext) { - const fullContext = this.getContextProvidersInstances(externalContext).map( - (contextProvider) => { - return contextProvider.getContextItemData(); - }, - ); + const contextProviders = this.getContextProvidersInstances(externalContext); + const fullContext = contextProviders.map((provider) => provider.getContextItemData()); - this.saveContext(fullContext); + this.saveContext(fullContext, externalContext); this.input = this.inputInstances.map((input) => { return input.render(this.renderingContext).toJSON(); }); } - private saveContext(fullContext: ContextItemSchema[]) { + private saveContext(fullContext: ContextItemSchema[], { subworkflowContext }: ExternalContext) { // persistent context this.context = fullContext.filter((c) => c.isEdited); - this.renderingContext = Object.fromEntries( - fullContext.map((context) => { - return [context.name, context.data]; - }), - ); + this.renderingContext = { + ...Object.fromEntries(fullContext.map((context) => [context.name, context.data])), + subworkflowContext: { ...subworkflowContext }, + }; } /** @@ -208,27 +198,8 @@ export class ExecutionUnit extends (BaseUnit as Base) implements Schema { ), }; } - - // toJSON() { - // const json = super.toJSON() as ExecutionUnitSchemaBase & AnyObject; - - // // Remove results from executable; TODO: why do we need this? - // if (json.executable) { - // // eslint-disable-next-line @typescript-eslint/no-unused-vars - // const { results: _, ...executable } = json.executable; - - // return { - // ...json, - // executable: { - // ...executable, - // }, - // }; - // } - - // return json; - // } } executionUnitSchemaMixin(ExecutionUnit.prototype); -contextMixin(ExecutionUnit.prototype); -importantSettingsProviderMixin(ExecutionUnit.prototype); + +export default ExecutionUnit; diff --git a/src/js/ExecutionUnitInput.ts b/src/js/units/ExecutionUnitInput.ts similarity index 94% rename from src/js/ExecutionUnitInput.ts rename to src/js/units/ExecutionUnitInput.ts index e06a8df7..902d01d6 100644 --- a/src/js/ExecutionUnitInput.ts +++ b/src/js/units/ExecutionUnitInput.ts @@ -6,7 +6,7 @@ import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import nunjucks from "nunjucks"; -import type { ExecutionUnitInputSchemaMixin } from "./generated/ExecutionUnitInputSchemaMixin"; +import type { ExecutionUnitInputSchemaMixin } from "../generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; type JSON = Schema & AnyObject; diff --git a/src/js/units/IOUnit.ts b/src/js/units/IOUnit.ts index 83aed5ae..cf7d44b6 100644 --- a/src/js/units/IOUnit.ts +++ b/src/js/units/IOUnit.ts @@ -4,17 +4,21 @@ import type { DataIOUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; import { type IOUnitSchemaMixin, iOUnitSchemaMixin } from "../generated/IOUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = DataIOUnitSchema; type Base = typeof BaseUnit & Constructor; -export class IOUnit extends (BaseUnit as Base) implements Schema { +class IOUnit extends (BaseUnit as Base) implements Schema { + declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + constructor(config: Partial) { super({ name: UnitType.io, subtype: "input", ...config, type: UnitType.io }); } - - declare toJSON: () => Schema & AnyObject; } iOUnitSchemaMixin(IOUnit.prototype); + +export default IOUnit; diff --git a/src/js/units/MapUnit.ts b/src/js/units/MapUnit.ts index cc2bc82b..9451b600 100644 --- a/src/js/units/MapUnit.ts +++ b/src/js/units/MapUnit.ts @@ -4,7 +4,7 @@ import type { MapUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; import { type MapUnitSchemaMixin, mapUnitSchemaMixin } from "../generated/MapUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = MapUnitSchema; @@ -23,16 +23,20 @@ export const defaultMapConfig = { type Base = typeof BaseUnit & Constructor; -export class MapUnit extends (BaseUnit as Base) implements Schema { +class MapUnit extends (BaseUnit as Base) implements Schema { + declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + constructor(config?: Partial) { super({ ...defaultMapConfig, ...config }); } - declare toJSON: () => Schema & AnyObject; - setWorkflowId(id: string) { this.setProp("workflowId", id); } } mapUnitSchemaMixin(MapUnit.prototype); + +export default MapUnit; diff --git a/src/js/units/ReduceUnit.ts b/src/js/units/ReduceUnit.ts index e8116b0b..9e95e3e7 100644 --- a/src/js/units/ReduceUnit.ts +++ b/src/js/units/ReduceUnit.ts @@ -7,17 +7,21 @@ import { type ReduceUnitSchemaMixin, reduceUnitSchemaMixin, } from "../generated/ReduceUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = ReduceUnitSchema; type Base = typeof BaseUnit & Constructor; -export class ReduceUnit extends (BaseUnit as Base) implements Schema { - constructor(unitName: string, mapUnit: string, input: ReduceUnitSchema["input"]) { - super({ type: UnitType.reduce, name: unitName, mapFlowchartId: mapUnit, input }); - } - +class ReduceUnit extends (BaseUnit as Base) implements Schema { declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + + constructor(config: Omit) { + super({ ...config, type: UnitType.reduce }); + } } reduceUnitSchemaMixin(ReduceUnit.prototype); + +export default ReduceUnit; diff --git a/src/js/units/SubworkflowUnit.ts b/src/js/units/SubworkflowUnit.ts index 083e8420..b81b1edc 100644 --- a/src/js/units/SubworkflowUnit.ts +++ b/src/js/units/SubworkflowUnit.ts @@ -7,17 +7,21 @@ import { type SubworkflowUnitSchemaMixin, subworkflowUnitSchemaMixin, } from "../generated/SubworkflowUnitSchemaMixin"; -import { BaseUnit } from "./BaseUnit"; +import BaseUnit from "./BaseUnit"; type Schema = SubworkflowUnitSchema; type Base = typeof BaseUnit & Constructor; -export class SubworkflowUnit extends (BaseUnit as Base) implements Schema { +class SubworkflowUnit extends (BaseUnit as Base) implements Schema { + declare toJSON: () => Schema & AnyObject; + + declare _json: Schema & AnyObject; + constructor(config: Partial) { super({ name: "New Subworkflow", ...config, type: UnitType.subworkflow }); } - - declare toJSON: () => Schema & AnyObject; } subworkflowUnitSchemaMixin(SubworkflowUnit.prototype); + +export default SubworkflowUnit; diff --git a/src/js/units/factory.ts b/src/js/units/factory.ts index 0d6116e1..4770681c 100644 --- a/src/js/units/factory.ts +++ b/src/js/units/factory.ts @@ -1,45 +1,16 @@ -import type { - AssertionUnitSchema, - AssignmentUnitSchema, - ConditionUnitSchema, - DataIOUnitSchema, - ExecutionUnitSchema, - MapUnitSchema, - ProcessingUnitSchema, - ReduceUnitSchema, - SubworkflowUnitSchema, -} from "@mat3ra/esse/dist/js/types"; +import type { WorkflowSubworkflowUnitSchema, WorkflowUnitSchema } from "@mat3ra/esse/dist/js/types"; import { UnitType } from "../enums"; -import { AssertionUnit } from "./AssertionUnit"; -import { AssignmentUnit } from "./AssignmentUnit"; -import { ConditionUnit } from "./ConditionUnit"; -import { ExecutionUnit } from "./ExecutionUnit"; -import { IOUnit } from "./IOUnit"; -import { MapUnit } from "./MapUnit"; -import { ProcessingUnit } from "./ProcessingUnit"; -import { SubworkflowUnit } from "./SubworkflowUnit"; +import AssertionUnit from "./AssertionUnit"; +import AssignmentUnit from "./AssignmentUnit"; +import ConditionUnit from "./ConditionUnit"; +import ExecutionUnit from "./ExecutionUnit"; +import IOUnit from "./IOUnit"; +import MapUnit from "./MapUnit"; +import ReduceUnit from "./ReduceUnit"; +import SubworkflowUnit from "./SubworkflowUnit"; -export type UnitConfig = - | ExecutionUnitSchema - | AssignmentUnitSchema - | ConditionUnitSchema - | DataIOUnitSchema - | ProcessingUnitSchema - | MapUnitSchema - | SubworkflowUnitSchema - | AssertionUnitSchema - | ReduceUnitSchema; - -export type AnyUnit = - // | ExecutionUnit - // | AssignmentUnit - // | ConditionUnit - // | IOUnit - // | ProcessingUnit - MapUnit | SubworkflowUnit; -// | AssertionUnit; -// | ReduceUnit; +export type AnyWorkflowUnit = MapUnit | SubworkflowUnit | ReduceUnit; export type AnySubworkflowUnit = | ExecutionUnit @@ -49,33 +20,20 @@ export type AnySubworkflowUnit = | AssertionUnit; export class UnitFactory { - static createInWorkflow(config: UnitConfig): AnyUnit { + static createInWorkflow(config: WorkflowUnitSchema): AnyWorkflowUnit { switch (config.type) { - // case UnitType.execution: - // return new ExecutionUnit(config); - // case UnitType.assignment: - // return new AssignmentUnit(config); - // case UnitType.condition: - // return new ConditionUnit(config); - // case UnitType.io: - // return new IOUnit(config); - // case UnitType.processing: - // return new ProcessingUnit(config); case UnitType.map: return new MapUnit(config); case UnitType.subworkflow: return new SubworkflowUnit(config); - // case UnitType.assertion: - // return new AssertionUnit(config); - // TODO-question: why there was no reduce unit in the factory? - // case UnitType.reduce: - // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); + case UnitType.reduce: + return new ReduceUnit(config); default: throw new Error(`Unknown unit type: ${config.type}`); } } - static createInSubworkflow(config: UnitConfig): AnySubworkflowUnit { + static createInSubworkflow(config: WorkflowSubworkflowUnitSchema): AnySubworkflowUnit { switch (config.type) { case UnitType.execution: return new ExecutionUnit(config); @@ -87,9 +45,6 @@ export class UnitFactory { return new IOUnit(config); case UnitType.assertion: return new AssertionUnit(config); - // // TODO-question: why there was no reduce unit in the factory? - // case UnitType.reduce: - // return new ReduceUnit(config.name, config.mapFlowchartId, config.input); default: throw new Error(`Unknown unit type: ${config.type}`); } diff --git a/src/js/units/index.ts b/src/js/units/index.ts index 8574c322..727f357c 100644 --- a/src/js/units/index.ts +++ b/src/js/units/index.ts @@ -1,14 +1,13 @@ -import { AssertionUnit } from "./AssertionUnit"; -import { AssignmentUnit } from "./AssignmentUnit"; -import { BaseUnit } from "./BaseUnit"; -import { ConditionUnit } from "./ConditionUnit"; -import { ExecutionUnit } from "./ExecutionUnit"; +import AssertionUnit from "./AssertionUnit"; +import AssignmentUnit from "./AssignmentUnit"; +import BaseUnit from "./BaseUnit"; +import ConditionUnit from "./ConditionUnit"; +import ExecutionUnit from "./ExecutionUnit"; import { UnitFactory } from "./factory"; -import { IOUnit } from "./IOUnit"; -import { MapUnit } from "./MapUnit"; -import { ProcessingUnit } from "./ProcessingUnit"; -import { ReduceUnit } from "./ReduceUnit"; -import { SubworkflowUnit } from "./SubworkflowUnit"; +import IOUnit from "./IOUnit"; +import MapUnit from "./MapUnit"; +import ReduceUnit from "./ReduceUnit"; +import SubworkflowUnit from "./SubworkflowUnit"; export { BaseUnit, @@ -18,7 +17,6 @@ export { ExecutionUnit, IOUnit, MapUnit, - ProcessingUnit, ReduceUnit, SubworkflowUnit, UnitFactory, diff --git a/src/js/RuntimeItemsUILogicMixin.ts b/src/js/units/mixins/RuntimeItemsUILogicMixin.ts similarity index 97% rename from src/js/RuntimeItemsUILogicMixin.ts rename to src/js/units/mixins/RuntimeItemsUILogicMixin.ts index 09a9d2e7..2f316b95 100644 --- a/src/js/RuntimeItemsUILogicMixin.ts +++ b/src/js/units/mixins/RuntimeItemsUILogicMixin.ts @@ -33,7 +33,7 @@ type Base = InMemoryEntity & }; // @ts-expect-error -const propertiesMixn: Base & RuntimeItemsUILogic & RuntimeItemsUILogicPrivate = { +const propertiesMixin: Base & RuntimeItemsUILogic & RuntimeItemsUILogicPrivate = { setRuntimeItemsToDefaultValues() { this.results = this.defaultResults; this.monitors = this.defaultMonitors; @@ -83,5 +83,5 @@ const propertiesMixn: Base & RuntimeItemsUILogic & RuntimeItemsUILogicPrivate = }; export function runtimeItemsUILogicMixin(item: T) { - Object.defineProperties(item, Object.getOwnPropertyDescriptors(propertiesMixn)); + Object.defineProperties(item, Object.getOwnPropertyDescriptors(propertiesMixin)); } diff --git a/src/js/workflows/default.ts b/src/js/workflows/default.ts index f7ae0904..8336a497 100644 --- a/src/js/workflows/default.ts +++ b/src/js/workflows/default.ts @@ -20,6 +20,7 @@ const defaultWorkflowConfig: WorkflowSchema = { }, subtype: "gga", type: "dft", + functional: "other", }, name: "New Subworkflow", properties: [], diff --git a/src/js/workflows/index.js b/src/js/workflows/index.js deleted file mode 100644 index 0eaa0a8a..00000000 --- a/src/js/workflows/index.js +++ /dev/null @@ -1,98 +0,0 @@ -import { allApplications } from "@mat3ra/ade"; -import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import schemas from "@mat3ra/esse/dist/js/schemas.json"; - -// Import Template here to apply context provider patch -// eslint-disable-next-line no-unused-vars -import { Template } from "../patch"; -import { createWorkflow } from "./create"; -import { Workflow } from "./workflow"; - -// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` -JSONSchemasInterface.setSchemas(schemas); - -/* - Workflow construction follows these rules: - 1. Workflow is constructed as a collection of subworkflows defined in JSON - 2. A "units" key should contain at least one object referencing the workflow itself - 3. Additional workflows are added in order specified in the same "units" array - 4. map units are added along with their workflows according to data in "units" - 5. top-level subworkflows are added directly in the order also specified by "units" - */ -function createWorkflows({ - appName = null, - workflowCls = Workflow, - workflowSubworkflowMapByApplication, - ...swArgs -}) { - let apps = appName !== null ? [appName] : allApplications; - const allApplicationsFromWorkflowData = Object.keys( - workflowSubworkflowMapByApplication.workflows, - ); - // output warning if allApplications and allApplicationsFromWorkflowData do not match - if (appName === null) { - if (apps && apps.sort().join(",") !== allApplicationsFromWorkflowData.sort().join(",")) { - // eslint-disable-next-line no-console - console.warn( - `Warning: allApplications and allApplicationsFromWorkflowData do not match: - ${apps.sort().join(",")} !== ${allApplicationsFromWorkflowData.sort().join(",")}`, - ); - console.warn("Using allApplicationsFromWorkflowData"); - } - apps = allApplicationsFromWorkflowData; - } - const wfs = []; - const { workflows } = workflowSubworkflowMapByApplication; - apps.map((name) => { - const { [name]: dataByApp } = workflows; - Object.values(dataByApp).map((workflowDataForApp) => { - wfs.push( - createWorkflow({ - appName: name, - workflowData: workflowDataForApp, - workflowSubworkflowMapByApplication, - workflowCls, - ...swArgs, - }), - ); - return null; - }); - return null; - }); - return wfs; -} - -/** - * @summary Create workflow configurations for all applications - * @param applications {Array} array of application names - * @param workflowCls {*} workflow class to instantiate - * @param workflowSubworkflowMapByApplication {Object} object containing all workflow/subworkflow map by application - * @param swArgs {Object} other classes for instantiation - * @returns {Array} array of workflow configurations - */ -function createWorkflowConfigs({ - applications, - workflowCls = Workflow, - workflowSubworkflowMapByApplication, - ...swArgs -}) { - const configs = []; - applications.forEach((app) => { - const workflows = createWorkflows({ - appName: app, - workflowCls, - workflowSubworkflowMapByApplication, - ...swArgs, - }); - workflows.forEach((wf) => { - configs.push({ - application: app, - name: wf.prop("name"), - config: wf.toJSON(), - }); - }); - }); - return configs; -} - -export { Workflow, createWorkflows, createWorkflowConfigs, createWorkflow }; diff --git a/src/js/workflows/relaxation.js b/src/js/workflows/relaxation.js deleted file mode 100644 index 36df6876..00000000 --- a/src/js/workflows/relaxation.js +++ /dev/null @@ -1,42 +0,0 @@ -import { SubworkflowStandata } from "@mat3ra/standata"; - -export const RelaxationLogicMixin = (superclass) => - class extends superclass { - get relaxationSubworkflow() { - const appName = this.subworkflows[0]?.application?.name; - if (!appName) return undefined; - const subworkflowStandata = new SubworkflowStandata(); - const relaxationSubworkflow = - subworkflowStandata.getRelaxationSubworkflowByApplication(appName); - if (!relaxationSubworkflow) return undefined; - return new this._Subworkflow(relaxationSubworkflow); - } - - isRelaxationSubworkflow(subworkflow) { - const { relaxationSubworkflow } = this; - return ( - relaxationSubworkflow?.systemName !== undefined && - relaxationSubworkflow.systemName === subworkflow.systemName - ); - } - - get hasRelaxation() { - return this.subworkflows.some((subworkflow) => - this.isRelaxationSubworkflow(subworkflow), - ); - } - - toggleRelaxation() { - if (this.hasRelaxation) { - const relaxSubworkflow = this.subworkflows.find((sw) => - this.isRelaxationSubworkflow(sw), - ); - this.removeSubworkflow(relaxSubworkflow.id); - } else { - const vcRelax = this.relaxationSubworkflow; - if (vcRelax) { - this.addSubworkflow(vcRelax, true); - } - } - } - }; diff --git a/src/js/workflows/utils.ts b/src/js/workflows/utils.ts new file mode 100644 index 00000000..bbc93259 --- /dev/null +++ b/src/js/workflows/utils.ts @@ -0,0 +1,33 @@ +import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; + +/** + * @summary set the head of an array of units + */ +export function setUnitsHead(units: T[]) { + if (units.length > 0) { + units[0].head = true; + for (let i = 1; i < units.length; i++) { + units[i].head = false; + } + } + return units; +} + +// TODO: fix setNextLinks on unit removal and convergence logic. +/** + * @summary Re-establishes the linked `next => flowchartId` logic in an array of units + */ +export function setNextLinks(units: T[]) { + const flowchartIds = units.map((u) => u.flowchartId); + for (let i = 0; i < units.length - 1; i++) { + if (!units[i].next) { + // newly added units don't have next set yet => set it + units[i].next = units[i + 1].flowchartId; + if (i > 0) units[i - 1].next = units[i].flowchartId; + } else if (!flowchartIds.includes(units[i].next ?? "")) { + // newly removed units may create broken next links => fix it + units[i].next = units[i + 1].flowchartId; + } + } + return units; +} diff --git a/tests/js/Workflow.test.ts b/tests/js/Workflow.test.ts new file mode 100644 index 00000000..f8df5a09 --- /dev/null +++ b/tests/js/Workflow.test.ts @@ -0,0 +1,166 @@ +import { expect } from "chai"; + +import { Subworkflow, Workflow } from "../../src/js"; +import { UnitType } from "../../src/js/enums"; + +describe("Workflow", () => { + describe("construction", () => { + it("creates workflow from default config with name, subworkflows, units, and _id", () => { + const config = { ...Workflow.defaultConfig }; + const workflow = new Workflow(config); + + expect(workflow.name).to.equal(Workflow.defaultConfig.name); + expect(workflow.toJSON().subworkflows).to.have.lengthOf( + Workflow.defaultConfig.subworkflows.length, + ); + expect(workflow.toJSON().units).to.have.lengthOf(Workflow.defaultConfig.units.length); + expect(workflow._id).to.be.a("string"); + expect(workflow._id.length).to.be.above(0); + }); + }); + + describe("ID generation", () => { + it("assigns different _id to two workflows from default config", () => { + const w1 = new Workflow({ ...Workflow.defaultConfig }); + const w2 = new Workflow({ ...Workflow.defaultConfig }); + + expect(w1._id).to.not.equal(w2._id); + }); + }); + + describe("usePredefinedIds", () => { + afterEach(() => { + Workflow.usePredefinedIds = false; + }); + + it("throws when usePredefinedIds is true and config has no applicationName", () => { + Workflow.usePredefinedIds = true; + const config = { ...Workflow.defaultConfig }; + delete (config as { applicationName?: string }).applicationName; + + expect(() => new Workflow(config)).to.throw( + "applicationName is required when usePredefinedIds is true", + ); + }); + }); + + describe("fromSubworkflow", () => { + it("creates workflow with one subworkflow and one unit matching subworkflow name", () => { + const subworkflowConfig = Workflow.defaultConfig.subworkflows[0]; + const subworkflow = new Subworkflow(subworkflowConfig); + const workflow = Workflow.fromSubworkflow(subworkflow); + + expect(workflow.toJSON().subworkflows).to.have.lengthOf(1); + expect(workflow.toJSON().units).to.have.lengthOf(1); + expect(workflow.name).to.equal(subworkflow.name); + }); + }); + + describe("toJSON", () => { + it("returns object with name, units, subworkflows, and workflows", () => { + const config = { ...Workflow.defaultConfig }; + const workflow = new Workflow(config); + const json = workflow.toJSON(); + + expect(json).to.have.property("name", workflow.name); + expect(json).to.have.property("units").that.is.an("array"); + expect(json).to.have.property("subworkflows").that.is.an("array"); + expect(json).to.have.property("workflows").that.is.an("array"); + }); + }); + + describe("getters", () => { + it("exposes usedApplications, usedApplicationNames, properties, systemName, defaultDescription", () => { + const config = { ...Workflow.defaultConfig }; + const workflow = new Workflow(config); + + expect(workflow.usedApplications).to.be.an("array"); + expect(workflow.usedApplicationNames).to.be.an("array"); + expect(workflow.properties).to.be.an("array"); + expect(workflow.systemName).to.be.a("string"); + expect(workflow.systemName.length).to.be.above(0); + expect(workflow.defaultDescription).to.be.a("string"); + expect(workflow.defaultDescription.length).to.be.above(0); + }); + }); + + describe("addSubworkflow / removeSubworkflow", () => { + it("adds subworkflows then removes one and updates counts", () => { + const defaultSub = Workflow.defaultConfig.subworkflows[0]; + const defaultUnit = Workflow.defaultConfig.units[0]; + const config = { + ...Workflow.defaultConfig, + subworkflows: [ + defaultSub, + { ...defaultSub, _id: "second-sw-id", name: "Second Subworkflow" }, + ], + units: [ + defaultUnit, + { + ...defaultUnit, + _id: "second-sw-id", + flowchartId: "second-fc-id", + name: "Second Subworkflow", + }, + ], + }; + const workflow = new Workflow(config); + const secondSubworkflow = new Subworkflow(config.subworkflows[1]); + const thirdSubworkflow = new Subworkflow({ + ...defaultSub, + _id: "third-sw-id", + name: "Third Subworkflow", + }); + workflow.addSubworkflow(thirdSubworkflow); + + expect(workflow.toJSON().subworkflows).to.have.lengthOf(3); + expect(workflow.toJSON().units).to.have.lengthOf(3); + + workflow.removeSubworkflow(secondSubworkflow.id); + + expect(workflow.toJSON().subworkflows).to.have.lengthOf(2); + expect(workflow.toJSON().units).to.have.lengthOf(2); + }); + }); + + describe("addUnitType", () => { + it("adds a subworkflow unit when called with UnitType.subworkflow", () => { + const config = { ...Workflow.defaultConfig }; + const workflow = new Workflow(config); + const initialSubworkflows = workflow.toJSON().subworkflows.length; + const initialUnits = workflow.toJSON().units.length; + + workflow.addUnitType(UnitType.subworkflow); + + expect(workflow.toJSON().subworkflows).to.have.lengthOf(initialSubworkflows + 1); + expect(workflow.toJSON().units).to.have.lengthOf(initialUnits + 1); + }); + }); + + describe("calculateHash", () => { + it("returns a non-empty string", () => { + const config = { ...Workflow.defaultConfig }; + const workflow = new Workflow(config); + + const hash = workflow.calculateHash(); + + expect(hash).to.be.a("string"); + expect(hash.length).to.be.above(0); + }); + + it("returns the same hash for the same workflow", () => { + const w1 = new Workflow({ ...Workflow.defaultConfig }); + const w2 = new Workflow({ ...Workflow.defaultConfig }); + + expect(w1.calculateHash()).to.equal(w2.calculateHash()); + }); + + it("returns different hash when workflow content differs", () => { + const w1 = new Workflow({ ...Workflow.defaultConfig }); + const w2 = new Workflow({ ...Workflow.defaultConfig }); + w2.addUnitType(UnitType.subworkflow); + + expect(w1.calculateHash()).to.not.equal(w2.calculateHash()); + }); + }); +}); diff --git a/tests/js/context.test.js b/tests/js/context.test.js deleted file mode 100644 index d27c1138..00000000 --- a/tests/js/context.test.js +++ /dev/null @@ -1,69 +0,0 @@ -/* eslint-disable max-classes-per-file */ -import { ContextProvider } from "@mat3ra/ade"; -import { expect } from "chai"; - -import { applicationContextMixin } from "../../src/js/context/mixins/ApplicationContextMixin"; -import { materialContextMixin } from "../../src/js/context/mixins/MaterialContextMixin"; -import { globalSettings } from "../../src/js/context/providers/settings"; - -class MockMaterial { - static createDefault() { - return "defaultMockMaterial"; - } -} - -class SpecificMockMaterial { - static createDefault() { - return "defaultSpecificMockMaterial"; - } -} - -class MockApplication { - static createDefault() { - return "defaultMockApplication"; - } -} - -class SpecificMockApplication { - static createDefault() { - return "defaultSpecificMockApplication"; - } -} - -class ProviderEntity extends ContextProvider { - constructor(config) { - super(config); - this.initApplicationContextMixin(); - this.initMaterialContextMixin(); - } -} - -applicationContextMixin(ProviderEntity.prototype); -materialContextMixin(ProviderEntity.prototype); - -class DerivedProviderEntity extends ProviderEntity {} - -describe("Material & Application ContextMixin", () => { - const config = { name: "test" }; - - after(() => { - globalSettings.resetDefaults(); - }); - - it("uses static entity class", () => { - globalSettings.setMaterial(MockMaterial); - globalSettings.setApplication(MockApplication); - - const provider = new ProviderEntity(config); - expect(provider.material).to.be.equal("defaultMockMaterial"); - expect(provider.application).to.be.equal("defaultMockApplication"); - }); - - it("uses static entity class from derived class", () => { - globalSettings.setMaterial(SpecificMockMaterial); - globalSettings.setApplication(SpecificMockApplication); - const provider = new DerivedProviderEntity(config); - expect(provider.material).to.be.equal("defaultSpecificMockMaterial"); - expect(provider.application).to.be.equal("defaultSpecificMockApplication"); - }); -}); diff --git a/tests/js/espresso.test.js b/tests/js/espresso.test.js deleted file mode 100644 index 938f112a..00000000 --- a/tests/js/espresso.test.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Constraint } from "@mat3ra/made/dist/js/constraints/constraints"; -import { Material } from "@mat3ra/made/dist/js/material"; -import { expect } from "chai"; - -import QEPWXContextProvider from "../../src/js/context/providers/by_application/espresso/QEPWXContextProvider"; - -describe("QEPWXContextProvider.atomicPositionsWithConstraints", () => { - const expectedOutput = `Si 0.000000000 0.000000000 0.000000000 1 0 1 -Si 0.250000000 0.250000000 0.250000000 0 0 0`; - - it("returns each atom on its own line when input is array", () => { - const material = Material.createDefault(); - const constraints = [ - new Constraint({ id: 0, value: [true, false, true] }), - new Constraint({ id: 1, value: [false, false, false] }), - ]; - material.setBasisConstraints(constraints); - const result = QEPWXContextProvider.atomicPositionsWithConstraints(material); - expect(result).to.equal(expectedOutput); - }); -}); diff --git a/tests/js/subworkflow.test.js b/tests/js/subworkflow.test.js deleted file mode 100644 index 5cd0313d..00000000 --- a/tests/js/subworkflow.test.js +++ /dev/null @@ -1,128 +0,0 @@ -import { ApplicationRegistry } from "@mat3ra/ade"; -import { workflowSubworkflowMapByApplication } from "@mat3ra/standata"; -import { expect } from "chai"; - -import { createSubworkflowByName, Subworkflow } from "../../src/js/subworkflows"; -import { AssignmentUnit, ConditionUnit } from "../../src/js/units"; - -const assignmentUnitData = { - type: "assignment", - application: { name: "espresso", version: "6.3" }, -}; - -const conditionUnitData = { - type: "condition", - application: { name: "espresso", version: "6.3" }, -}; - -describe("subworkflows", () => { - let subworkflow; - - beforeEach(() => { - subworkflow = createSubworkflowByName({ - appName: "espresso", - swfName: "total_energy", - workflowSubworkflowMapByApplication, - }); - }); - - it("have updateContext function", () => { - expect(typeof subworkflow.updateContext).to.be.equal("function"); - }); - it("can update context", () => { - const newContext = { testKey: "testValue" }; - subworkflow.updateContext(newContext); - expect(subworkflow.context).to.include(newContext); - }); - it("add unit to list end", () => { - expect(subworkflow.units.length).to.be.equal(1); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - - const assignementUnit = new AssignmentUnit(assignmentUnitData); - subworkflow.addUnit(assignementUnit, -1); - - expect(subworkflow.units.length).to.be.equal(2); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - expect(subworkflow.units[1]._json.type).to.be.equal("assignment"); - }); - it("add unit to list head", () => { - expect(subworkflow.units.length).to.be.equal(1); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - - const assignementUnit = new AssignmentUnit(assignmentUnitData); - subworkflow.addUnit(assignementUnit, 0); - - expect(subworkflow.units.length).to.be.equal(2); - expect(subworkflow.units[0]._json.type).to.be.equal("assignment"); - expect(subworkflow.units[1]._json.type).to.be.equal("execution"); - }); - it("add unit in the middle list of two", () => { - expect(subworkflow.units.length).to.be.equal(1); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - - const assignementUnit = new AssignmentUnit(assignmentUnitData); - const conditionUnit = new ConditionUnit(conditionUnitData); - subworkflow.addUnit(assignementUnit, -1); - - expect(subworkflow.units.length).to.be.equal(2); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - expect(subworkflow.units[1]._json.type).to.be.equal("assignment"); - - subworkflow.addUnit(conditionUnit, 1); - - expect(subworkflow.units.length).to.be.equal(3); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - expect(subworkflow.units[1]._json.type).to.be.equal("condition"); - expect(subworkflow.units[2]._json.type).to.be.equal("assignment"); - }); - it("can update application", () => { - const assignementUnit = new AssignmentUnit(assignmentUnitData); - subworkflow.addUnit(assignementUnit, -1); - - expect(subworkflow.units.length).to.be.equal(2); - expect(subworkflow.units[0]._json.type).to.be.equal("execution"); - expect(subworkflow.units[1]._json.type).to.be.equal("assignment"); - expect(subworkflow.units[0].application.version).to.be.equal("6.3"); - expect(subworkflow.units[1].application?.version).to.be.equal(undefined); - - const newApplication = ApplicationRegistry.createApplication({ - name: "espresso", - version: "6.7.0", - }); - - expect(newApplication.version).to.be.equal("6.7.0"); - - subworkflow.setApplication(newApplication); - - expect(subworkflow.application.version).to.be.equal("6.7.0"); - expect(subworkflow.units[0].application?.version).to.be.equal("6.7.0"); - expect(subworkflow.units[1].application?.version).to.be.equal(undefined); - }); -}); - -describe("subworkflow UUIDs", () => { - afterEach(() => { - Subworkflow.usePredefinedIds = false; - }); - - it("subworkflow UUIDs are kept if predefined", () => { - Subworkflow.usePredefinedIds = true; - - const subworkflow1 = createSubworkflowByName({ - appName: "espresso", - swfName: "total_energy", - workflowSubworkflowMapByApplication, - subworkflowCls: Subworkflow, - }); - - const subworkflow2 = createSubworkflowByName({ - appName: "espresso", - swfName: "total_energy", - workflowSubworkflowMapByApplication, - subworkflowCls: Subworkflow, - }); - - expect(subworkflow1._id).to.not.be.equal(""); - expect(subworkflow1._id).to.equal(subworkflow2._id); - }); -}); diff --git a/tests/js/unit.test.js b/tests/js/unit.test.js deleted file mode 100644 index 5b06d16d..00000000 --- a/tests/js/unit.test.js +++ /dev/null @@ -1,120 +0,0 @@ -import { Application } from "@mat3ra/ade"; -import { workflowSubworkflowMapByApplication } from "@mat3ra/standata"; -import { expect } from "chai"; - -import { createUnit } from "../../src/js/subworkflows/create"; -import { AssignmentUnit, BaseUnit, ExecutionUnit } from "../../src/js/units"; -import { builders } from "../../src/js/units/builders"; -import { UnitFactory } from "../../src/js/units/factory"; -import { createWorkflows } from "../../src/js/workflows"; - -describe("units", () => { - it("can be cloned with new flowchartId", () => { - const workflows = createWorkflows({ workflowSubworkflowMapByApplication }); - const exampleWorkflow = workflows[0]; - const exampleSubworkflow = exampleWorkflow.subworkflows[0]; - const exampleUnit = exampleSubworkflow.units[0]; - const exampleUnitClone = exampleUnit.clone(); - // eslint-disable-next-line no-unused-expressions - expect(exampleUnitClone).to.exist; - expect(exampleUnit.flowchartId).to.not.equal(exampleUnitClone.flowchartId); - }); - - it("can create execution unit", () => { - const unit = createUnit({ - config: { - type: "executionBuilder", - config: { - name: "test", - execName: "pw.x", - flavorName: "pw_scf", - flowchartId: "test", - }, - }, - application: new Application({ name: "espresso" }), - unitBuilders: builders, - unitFactoryCls: UnitFactory, - }); - - const expectedResults = [ - { name: "atomic_forces" }, - { name: "fermi_energy" }, - { name: "pressure" }, - { name: "stress_tensor" }, - { name: "total_energy" }, - { name: "total_energy_contributions" }, - { name: "total_force" }, - ]; - - expect(unit.flavor.results).to.deep.equal(expectedResults); - expect(unit.results).to.deep.equal(expectedResults); - }); -}); - -describe("unit UUIDs", () => { - afterEach(() => { - // Reset all usePredefinedIds after each test - BaseUnit.usePredefinedIds = false; - ExecutionUnit.usePredefinedIds = false; - AssignmentUnit.usePredefinedIds = false; - builders.UnitConfigBuilder.usePredefinedIds = false; - }); - - it("unit flowchartIds are kept if predefined", () => { - BaseUnit.usePredefinedIds = true; - ExecutionUnit.usePredefinedIds = true; - AssignmentUnit.usePredefinedIds = true; - - const createTestUnit = (type, name) => - UnitFactory.create({ - type, - name, - application: { name: "espresso" }, - }); - - // Test ExecutionUnit flowchartId - const execUnit1 = createTestUnit("execution", "test-execution"); - const execUnit2 = createTestUnit("execution", "test-execution"); - expect(execUnit1.flowchartId).to.equal(execUnit2.flowchartId); - - // Test AssignmentUnit flowchartId - const assignUnit1 = createTestUnit("assignment", "test-assignment"); - const assignUnit2 = createTestUnit("assignment", "test-assignment"); - expect(assignUnit1.flowchartId).to.equal(assignUnit2.flowchartId); - - // Different unit types should have different flowchartIds - expect(execUnit1.flowchartId).to.not.equal(assignUnit1.flowchartId); - }); - - it("unit flowchartIds are different when usePredefinedIds is false", () => { - const execUnit1 = UnitFactory.create({ - type: "execution", - name: "test-execution", - application: { name: "espresso" }, - }); - - const execUnit2 = UnitFactory.create({ - type: "execution", - name: "test-execution", - application: { name: "espresso" }, - }); - - expect(execUnit1.flowchartId).to.not.equal(execUnit2.flowchartId); - }); - - it("unit builders generate deterministic flowchartIds when usePredefinedIds is true", () => { - builders.UnitConfigBuilder.usePredefinedIds = true; - - const builder1 = new builders.UnitConfigBuilder({ - name: "test-builder", - type: "execution", - }); - - const builder2 = new builders.UnitConfigBuilder({ - name: "test-builder", - type: "execution", - }); - - expect(builder1._flowchartId).to.equal(builder2._flowchartId); - }); -}); diff --git a/tests/js/workflow.test.js b/tests/js/workflow.test.js deleted file mode 100644 index c66b9863..00000000 --- a/tests/js/workflow.test.js +++ /dev/null @@ -1,203 +0,0 @@ -import { WorkflowStandata, workflowSubworkflowMapByApplication } from "@mat3ra/standata"; -import { expect } from "chai"; - -import { builders, createWorkflows, Subworkflow, UnitFactory, Workflow } from "../../src/js"; -import { createWorkflow } from "../../src/js/workflows/create"; - -// Expected predefined IDs constants - update these after running test to see actual values -const EXPECTED_WORKFLOW_ID = "cd826954-8c96-59f7-b2de-f36ce2d86105"; -const EXPECTED_SUBWORKFLOW_ID = "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d"; -const EXPECTED_UNIT_ID = "9fc7a088-5533-5f70-bb33-f676ec65f565"; - -describe("workflows", () => { - it("can all be created", () => { - const workflows = createWorkflows({ workflowSubworkflowMapByApplication }); - workflows.map((wf) => { - // eslint-disable-next-line no-unused-expressions - expect(wf).to.exist; - // eslint-disable-next-line no-unused-expressions - expect(wf.isValid()).to.be.true; - - const wfCopy = new Workflow(wf.toJSON()); - - // eslint-disable-next-line no-unused-expressions - expect(wfCopy.isValid()).to.be.true; - - // expect(wf.validate()).to.be.true; - return null; - }); - }); - - it("can generate workflow configs with predefined IDs", () => { - // Set up predefined IDs for all classes - const WorkflowCls = Workflow; - WorkflowCls.usePredefinedIds = true; - - const SubworkflowCls = Subworkflow; - SubworkflowCls.usePredefinedIds = true; - - builders.UnitConfigBuilder.usePredefinedIds = true; - builders.AssignmentUnitConfigBuilder.usePredefinedIds = true; - builders.AssertionUnitConfigBuilder.usePredefinedIds = true; - builders.ExecutionUnitConfigBuilder.usePredefinedIds = true; - builders.IOUnitConfigBuilder.usePredefinedIds = true; - - UnitFactory.BaseUnit.usePredefinedIds = true; - UnitFactory.AssignmentUnit.usePredefinedIds = true; - UnitFactory.AssertionUnit.usePredefinedIds = true; - UnitFactory.ExecutionUnit.usePredefinedIds = true; - UnitFactory.IOUnit.usePredefinedIds = true; - UnitFactory.SubworkflowUnit.usePredefinedIds = true; - UnitFactory.ConditionUnit.usePredefinedIds = true; - UnitFactory.MapUnit.usePredefinedIds = true; - UnitFactory.ProcessingUnit.usePredefinedIds = true; - - try { - // Test using a minimal workflow configuration - const workflow = createWorkflows({ - appName: "espresso", - workflowSubworkflowMapByApplication, - workflowCls: WorkflowCls, - SubworkflowCls, - UnitFactory, - UnitConfigBuilder: { - ...builders, - Workflow: WorkflowCls, - }, - })[0]; - - // eslint-disable-next-line no-unused-expressions - expect(workflow).to.exist; - expect(workflow).to.have.property("_id"); - - expect(workflow._id).to.equal(EXPECTED_WORKFLOW_ID); - - expect(workflow).to.have.property("subworkflows"); - expect(workflow.subworkflows[0]).to.have.property("_id"); - expect(workflow.subworkflows[0]._id).to.equal(EXPECTED_SUBWORKFLOW_ID); - - expect(workflow.subworkflows[0]).to.have.property("units"); - expect(workflow.subworkflows[0].units[0]).to.have.property("flowchartId"); - expect(workflow.subworkflows[0].units[0].flowchartId).to.equal(EXPECTED_UNIT_ID); - } finally { - // Clean up - reset usePredefinedIds to false - WorkflowCls.usePredefinedIds = false; - SubworkflowCls.usePredefinedIds = false; - - builders.UnitConfigBuilder.usePredefinedIds = false; - builders.AssignmentUnitConfigBuilder.usePredefinedIds = false; - builders.AssertionUnitConfigBuilder.usePredefinedIds = false; - builders.ExecutionUnitConfigBuilder.usePredefinedIds = false; - builders.IOUnitConfigBuilder.usePredefinedIds = false; - - UnitFactory.BaseUnit.usePredefinedIds = false; - UnitFactory.AssignmentUnit.usePredefinedIds = false; - UnitFactory.AssertionUnit.usePredefinedIds = false; - UnitFactory.ExecutionUnit.usePredefinedIds = false; - UnitFactory.IOUnit.usePredefinedIds = false; - UnitFactory.SubworkflowUnit.usePredefinedIds = false; - UnitFactory.ConditionUnit.usePredefinedIds = false; - UnitFactory.MapUnit.usePredefinedIds = false; - UnitFactory.ProcessingUnit.usePredefinedIds = false; - } - }); - - it("generates non-colliding predefined IDs", () => { - Workflow.usePredefinedIds = true; - const workflow1 = createWorkflow({ - appName: "espresso", - workflowData: workflowSubworkflowMapByApplication.workflows.espresso.total_energy, - workflowSubworkflowMapByApplication, - workflowCls: Workflow, - }); - const workflow2 = createWorkflow({ - appName: "vasp", - workflowData: workflowSubworkflowMapByApplication.workflows.vasp.total_energy, - workflowSubworkflowMapByApplication, - workflowCls: Workflow, - }); - expect(workflow1._id).to.not.equal(workflow2._id); - }); -}); - -describe("workflow property", () => { - it("isMultiMaterial is read correctly", () => { - // Nudged Elastic Band is multi-material - const mmWorkflow = createWorkflow({ - appName: "espresso", - workflowData: workflowSubworkflowMapByApplication.workflows.espresso.neb, - workflowSubworkflowMapByApplication, - }); - // eslint-disable-next-line no-unused-expressions - expect(mmWorkflow.isMultiMaterial).to.be.true; - }); - - it("properties are not empty", () => { - const workflow = createWorkflow({ - appName: "espresso", - workflowData: workflowSubworkflowMapByApplication.workflows.espresso.total_energy, - workflowSubworkflowMapByApplication, - }); - - // eslint-disable-next-line no-unused-expressions - expect(workflow.properties).to.be.an("array").that.is.not.empty; - }); -}); - -describe("relaxation logic", () => { - let espressoWorkflow; - beforeEach(() => { - const espressoWorkflowConfig = new WorkflowStandata().findEntitiesByTags( - "espresso", - "total_energy", - )[0]; - espressoWorkflow = new Workflow(espressoWorkflowConfig); - }); - - it("relaxationSubworkflow returns correct subworkflow for application", () => { - const espressoRelaxation = espressoWorkflow.relaxationSubworkflow; - - // eslint-disable-next-line no-unused-expressions - expect(espressoRelaxation).to.exist; - - expect(espressoRelaxation.systemName).to.equal("espresso-variable-cell-relaxation"); - }); - - it("toggles relaxation correctly", () => { - expect(espressoWorkflow.hasRelaxation).to.be.false; - espressoWorkflow.toggleRelaxation(); - expect(espressoWorkflow.hasRelaxation).to.be.true; - expect(espressoWorkflow.relaxationSubworkflow).to.exist; - expect(espressoWorkflow.relaxationSubworkflow.systemName).to.equal( - "espresso-variable-cell-relaxation", - ); - - espressoWorkflow.toggleRelaxation(); - expect(espressoWorkflow.hasRelaxation).to.be.false; - // relaxationSubworkflow getter always returns a relaxation subworkflow for the application - expect(espressoWorkflow.relaxationSubworkflow).to.exist; - }); -}); - -describe("Workflow UUIDs", () => { - afterEach(() => { - Workflow.usePredefinedIds = false; - }); - - it("workflow UUIDs are kept if predefined", () => { - Workflow.usePredefinedIds = true; - - const createTestWorkflow = () => - createWorkflow({ - appName: "espresso", - workflowData: workflowSubworkflowMapByApplication.workflows.espresso.total_energy, - workflowSubworkflowMapByApplication, - workflowCls: Workflow, - }); - - const workflow1 = createTestWorkflow(); - const workflow2 = createTestWorkflow(); - expect(workflow1._id).to.not.be.equal(""); - expect(workflow1._id).to.equal(workflow2._id); - }); -}); diff --git a/tsconfig-transpile.json b/tsconfig-transpile.json new file mode 100644 index 00000000..3f6f7c8c --- /dev/null +++ b/tsconfig-transpile.json @@ -0,0 +1,7 @@ +{ + "extends": "@mat3ra/tsconfig/tsconfig-js-py-transpile.json", + "include": [ + "src/js", + "types" + ] +} diff --git a/tsconfig.json b/tsconfig.json index fc97d3ef..45cd41bc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "@mat3ra/tsconfig/tsconfig-js-py-transpile.json", + "extends": "@mat3ra/tsconfig/tsconfig-js-py-dev.json", "include": [ - "src/js/**/*", - "types/**/*" + "src/js", + "tests/js", + "types" ] } From 8d2388a8878dfa722c42e16469a17c70851f1042 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 9 Feb 2026 17:39:20 +0200 Subject: [PATCH 04/30] chore: package.json --- package-lock.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1dd8989b..c857ebd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@exabyte-io/periodic-table.js": "2022.6.8-0", "@types/json-schema": "^7.0.15", - "@types/nunjucks": "^3.2.6", "@types/react-jsonschema-form": "^1.7.13", "nunjucks": "^3.2.4", "slugify": "^1.6.6" @@ -27,6 +26,7 @@ "@mat3ra/standata": "2026.1.12-0", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", + "@types/nunjucks": "^3.2.6", "chai": "^4.3.4", "eslint": "^7.32.0", "eslint-config-airbnb": "^19.0.2", @@ -4387,6 +4387,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", + "dev": true, "license": "MIT" }, "node_modules/@types/react": { From 69990bfb103515b8c1844ced3fe42c776de2a39c Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 9 Feb 2026 17:48:10 +0200 Subject: [PATCH 05/30] chore: package.json --- package-lock.json | 47 ----------------------------------------------- package.json | 2 -- 2 files changed, 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index c857ebd2..fa4e168e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,6 @@ "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#49faa1af1a9c136c54af6658068decfba7306642", - "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "2026.1.12-0", @@ -56,7 +55,6 @@ "@mat3ra/ade": "*", "@mat3ra/code": "*", "@mat3ra/esse": "*", - "@mat3ra/ide": "*", "@mat3ra/made": "*", "@mat3ra/mode": "*", "@mat3ra/standata": "*", @@ -3716,34 +3714,6 @@ "node": ">=4.2.0" } }, - "node_modules/@mat3ra/ide": { - "version": "2025.11.19-0", - "resolved": "https://registry.npmjs.org/@mat3ra/ide/-/ide-2025.11.19-0.tgz", - "integrity": "sha512-RG/qKLgOZ7akAkv4LWTn6WtMF/sx1JECdZF9CF7dHDR2o1jbYurXRyvccVZbb823SDZWB4rUdWu9+b/mOkDeCA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.16.0", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", - "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", - "chai": "^4.3.4", - "lodash": "^4.17.21", - "moment": "^2.17.1", - "pluralize": "^3.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@mat3ra/code": "*", - "@mat3ra/esse": "*" - } - }, "node_modules/@mat3ra/made": { "version": "0.0.0", "resolved": "git+ssh://git@github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", @@ -9520,16 +9490,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -10359,13 +10319,6 @@ "node": ">=4" } }, - "node_modules/pluralize": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-3.1.0.tgz", - "integrity": "sha512-2wcybwjwXOzGI1rlxWtlcs0/nSYK0OzNPqsg35TKxJFQlGhFu3cZ1x7EHS4r4bubQlhzyF4YxxlJqQnIhkUQCw==", - "dev": true, - "license": "MIT" - }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", diff --git a/package.json b/package.json index 731a9eb7..44721496 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#49faa1af1a9c136c54af6658068decfba7306642", - "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "2026.1.12-0", @@ -76,7 +75,6 @@ "@mat3ra/ade": "*", "@mat3ra/code": "*", "@mat3ra/esse": "*", - "@mat3ra/ide": "*", "@mat3ra/made": "*", "@mat3ra/mode": "*", "@mat3ra/standata": "*", From a7ad18a29caa919e30dfb733c872e4bab403c6ab Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 9 Feb 2026 18:01:26 +0200 Subject: [PATCH 06/30] chore: package.json --- package-lock.json | 1791 --------------------------------------------- 1 file changed, 1791 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa4e168e..25b2a791 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,13 +61,8 @@ "@mat3ra/utils": "*" } }, - "../../../lib/ade.js": { - "extraneous": true - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -80,8 +75,6 @@ }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.9.3", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", - "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -98,8 +91,6 @@ }, "node_modules/@babel/cli": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", - "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", "license": "MIT", "dependencies": { "commander": "^4.0.1", @@ -127,8 +118,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -141,8 +130,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -150,8 +137,6 @@ }, "node_modules/@babel/core": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.0", @@ -180,8 +165,6 @@ }, "node_modules/@babel/eslint-parser": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", - "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", "license": "MIT", "dependencies": { "eslint-scope": "^5.1.1", @@ -198,8 +181,6 @@ }, "node_modules/@babel/generator": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", @@ -214,8 +195,6 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -226,8 +205,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -242,8 +219,6 @@ }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", - "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -263,8 +238,6 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", - "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -280,8 +253,6 @@ }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", @@ -297,8 +268,6 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -309,8 +278,6 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -318,8 +285,6 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.5", @@ -331,8 +296,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -344,8 +307,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -361,8 +322,6 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -373,8 +332,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -382,8 +339,6 @@ }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -399,8 +354,6 @@ }, "node_modules/@babel/helper-replace-supers": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", @@ -416,8 +369,6 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -429,8 +380,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -438,8 +387,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -447,8 +394,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -456,8 +401,6 @@ }, "node_modules/@babel/helper-wrap-function": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -470,8 +413,6 @@ }, "node_modules/@babel/helpers": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -483,8 +424,6 @@ }, "node_modules/@babel/highlight": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -498,8 +437,6 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -510,8 +447,6 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -524,8 +459,6 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -533,14 +466,10 @@ }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { "node": ">=0.8.0" @@ -548,8 +477,6 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", "engines": { "node": ">=4" @@ -557,8 +484,6 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -569,8 +494,6 @@ }, "node_modules/@babel/parser": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { "@babel/types": "^7.28.5" @@ -584,8 +507,6 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", - "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -601,8 +522,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { @@ -617,8 +536,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -632,8 +549,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -649,8 +564,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", - "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, "license": "MIT", "dependencies": { @@ -666,9 +579,6 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -685,9 +595,6 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", @@ -702,9 +609,6 @@ }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", @@ -720,9 +624,6 @@ }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -737,9 +638,6 @@ }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", @@ -754,9 +652,6 @@ }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -771,9 +666,6 @@ }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -788,9 +680,6 @@ }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -805,9 +694,6 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -822,9 +708,6 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", @@ -842,9 +725,6 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -859,9 +739,6 @@ }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -877,9 +754,6 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -894,9 +768,6 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -913,9 +784,6 @@ }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -930,8 +798,6 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -942,8 +808,6 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -954,8 +818,6 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -969,8 +831,6 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -981,8 +841,6 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" @@ -993,8 +851,6 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, "license": "MIT", "dependencies": { @@ -1009,8 +865,6 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { @@ -1025,8 +879,6 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1037,8 +889,6 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1053,8 +903,6 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1065,8 +913,6 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1077,8 +923,6 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1089,8 +933,6 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1101,8 +943,6 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1113,8 +953,6 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1125,8 +963,6 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1140,8 +976,6 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1155,8 +989,6 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1171,8 +1003,6 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", "dependencies": { @@ -1188,8 +1018,6 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1203,8 +1031,6 @@ }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1221,8 +1047,6 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -1238,8 +1062,6 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1253,8 +1075,6 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", - "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1268,8 +1088,6 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1285,8 +1103,6 @@ }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", - "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, "license": "MIT", "dependencies": { @@ -1302,8 +1118,6 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -1322,8 +1136,6 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1338,8 +1150,6 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", - "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1354,8 +1164,6 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1370,8 +1178,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1385,8 +1191,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1402,8 +1206,6 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { @@ -1418,8 +1220,6 @@ }, "node_modules/@babel/plugin-transform-explicit-resource-management": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", - "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1435,8 +1235,6 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", - "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1450,8 +1248,6 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1466,8 +1262,6 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1482,8 +1276,6 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1499,8 +1291,6 @@ }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1515,8 +1305,6 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1530,8 +1318,6 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", - "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "dev": true, "license": "MIT", "dependencies": { @@ -1546,8 +1332,6 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1561,8 +1345,6 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1577,8 +1359,6 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1593,8 +1373,6 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.28.3", @@ -1611,8 +1389,6 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1627,8 +1403,6 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1643,8 +1417,6 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1658,8 +1430,6 @@ }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, "license": "MIT", "dependencies": { @@ -1674,8 +1444,6 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, "license": "MIT", "dependencies": { @@ -1690,8 +1458,6 @@ }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", - "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1710,8 +1476,6 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1726,8 +1490,6 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1742,8 +1504,6 @@ }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", - "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1758,8 +1518,6 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1773,8 +1531,6 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, "license": "MIT", "dependencies": { @@ -1790,8 +1546,6 @@ }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1808,8 +1562,6 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1823,8 +1575,6 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "dev": true, "license": "MIT", "dependencies": { @@ -1839,8 +1589,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "dev": true, "license": "MIT", "dependencies": { @@ -1859,8 +1607,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1875,8 +1621,6 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "dev": true, "license": "MIT", "dependencies": { @@ -1892,8 +1636,6 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", - "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1907,8 +1649,6 @@ }, "node_modules/@babel/plugin-transform-regexp-modifiers": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, "license": "MIT", "dependencies": { @@ -1924,8 +1664,6 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1939,8 +1677,6 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1954,8 +1690,6 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1970,8 +1704,6 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1985,8 +1717,6 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2000,8 +1730,6 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2015,8 +1743,6 @@ }, "node_modules/@babel/plugin-transform-typescript": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", - "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", "dev": true, "license": "MIT", "dependencies": { @@ -2035,8 +1761,6 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2050,8 +1774,6 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2067,8 +1789,6 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2083,8 +1803,6 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, "license": "MIT", "dependencies": { @@ -2100,8 +1818,6 @@ }, "node_modules/@babel/preset-env": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", - "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.16.4", @@ -2188,8 +1904,6 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2204,8 +1918,6 @@ }, "node_modules/@babel/preset-react": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "dev": true, "license": "MIT", "dependencies": { @@ -2225,8 +1937,6 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", - "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", "dev": true, "license": "MIT", "dependencies": { @@ -2245,8 +1955,6 @@ }, "node_modules/@babel/register": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.3.tgz", - "integrity": "sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==", "dev": true, "license": "MIT", "dependencies": { @@ -2265,8 +1973,6 @@ }, "node_modules/@babel/runtime": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, "license": "MIT", "engines": { @@ -2275,8 +1981,6 @@ }, "node_modules/@babel/runtime-corejs3": { "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -2289,8 +1993,6 @@ }, "node_modules/@babel/template": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -2303,8 +2005,6 @@ }, "node_modules/@babel/traverse": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -2321,8 +2021,6 @@ }, "node_modules/@babel/types": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2334,8 +2032,6 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { @@ -2347,8 +2043,6 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2358,8 +2052,6 @@ }, "node_modules/@es-joy/jsdoccomment": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz", - "integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2373,8 +2065,6 @@ }, "node_modules/@es-joy/jsdoccomment/node_modules/comment-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", - "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", "dev": true, "license": "MIT", "engines": { @@ -2383,8 +2073,6 @@ }, "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz", - "integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==", "dev": true, "license": "MIT", "engines": { @@ -2393,8 +2081,6 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "peer": true, @@ -2413,8 +2099,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -2427,8 +2111,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "peer": true, @@ -2438,8 +2120,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -2458,8 +2138,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2474,8 +2152,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -2483,8 +2159,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "license": "MIT", "engines": { "node": ">= 4" @@ -2492,8 +2166,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -2505,20 +2177,14 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, "node_modules/@exabyte-io/eslint-config": { "version": "2025.5.13-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/eslint-config/-/eslint-config-2025.5.13-0.tgz", - "integrity": "sha512-uZcq9jzmDHl+N71GYEM7l0z6mwyYfuZdNA/bIyql6Mp2H++Oot62nIoMhgvds1r7dbrtL/3jD3Xv0YDj12NiYw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2552,8 +2218,6 @@ }, "node_modules/@exabyte-io/periodic-table.js": { "version": "2022.6.8-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.6.8-0.tgz", - "integrity": "sha512-tN9V+Q6AUo/RVn9qrgx4dV+1VI5GbBjwJGbx4+K+zIw2W8Rnwp2l22lj123Xj9wdFLpygyPruETCM04XJkPNuw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -2571,8 +2235,6 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/register": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", - "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -2590,15 +2252,10 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/underscore": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "deprecated": "Use @eslint/config-array instead", "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -2611,15 +2268,10 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "deprecated": "Use @eslint/object-schema instead", "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2635,8 +2287,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2645,8 +2295,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -2659,8 +2307,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2673,8 +2319,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2686,8 +2330,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -2702,8 +2344,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2715,8 +2355,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -2725,15 +2363,11 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -2742,8 +2376,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -2752,8 +2384,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2763,8 +2393,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2772,14 +2400,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2788,8 +2412,6 @@ }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", "dev": true, "license": "MIT" }, @@ -2842,8 +2464,6 @@ }, "node_modules/@mat3ra/code/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -2889,8 +2509,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/cli": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", - "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", "dev": true, "license": "MIT", "dependencies": { @@ -2919,8 +2537,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/core": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { @@ -2950,8 +2566,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/eslint-parser": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz", - "integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==", "dev": true, "license": "MIT", "dependencies": { @@ -2969,8 +2583,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/helper-define-polyfill-provider": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, "license": "MIT", "dependencies": { @@ -2986,9 +2598,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "license": "MIT", "dependencies": { @@ -3004,8 +2613,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "license": "MIT", "engines": { @@ -3017,8 +2624,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-env": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", - "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", "dev": true, "license": "MIT", "dependencies": { @@ -3102,8 +2707,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "license": "MIT", "dependencies": { @@ -3117,8 +2720,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-react": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", - "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3138,8 +2739,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/runtime-corejs3": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", - "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3151,8 +2750,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils": { "version": "2025.11.20-0", - "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2025.11.20-0.tgz", - "integrity": "sha512-igkswFIPrvIsOKiGdLE6ifgKGa3nruepjq2pPs9us+gHRn4tCaFNsBJqHw3ysw1dLgCtoYhHyYbMdpQu46+FCw==", "dev": true, "license": "ISC", "dependencies": { @@ -3182,8 +2779,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", - "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3212,15 +2807,11 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli/node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core": { "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3250,8 +2841,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3260,8 +2849,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", - "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3279,8 +2866,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3289,8 +2874,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, "license": "MIT", "dependencies": { @@ -3307,8 +2890,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3317,9 +2898,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "license": "MIT", "dependencies": { @@ -3335,9 +2913,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, "license": "MIT", "dependencies": { @@ -3355,8 +2930,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", - "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", "dev": true, "license": "MIT", "dependencies": { @@ -3444,8 +3017,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3454,8 +3025,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-modules": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", "dev": true, "license": "MIT", "dependencies": { @@ -3471,8 +3040,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-react": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "dev": true, "license": "MIT", "dependencies": { @@ -3492,8 +3059,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/runtime-corejs3": { "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -3506,8 +3071,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3521,8 +3084,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3531,8 +3092,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs3": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "dev": true, "license": "MIT", "dependencies": { @@ -3545,8 +3104,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "license": "MIT", "dependencies": { @@ -3558,8 +3115,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", "engines": { @@ -3568,8 +3123,6 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -3581,8 +3134,6 @@ }, "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3596,8 +3147,6 @@ }, "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs3": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { @@ -3610,8 +3159,6 @@ }, "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-regenerator": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, "license": "MIT", "dependencies": { @@ -3623,8 +3170,6 @@ }, "node_modules/@mat3ra/esse/node_modules/commander": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "license": "MIT", "engines": { @@ -3633,8 +3178,6 @@ }, "node_modules/@mat3ra/esse/node_modules/complex.js": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", - "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", "dev": true, "license": "MIT", "engines": { @@ -3647,15 +3190,11 @@ }, "node_modules/@mat3ra/esse/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/esse/node_modules/fraction.js": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", "dev": true, "license": "MIT", "engines": { @@ -3668,8 +3207,6 @@ }, "node_modules/@mat3ra/esse/node_modules/mathjs": { "version": "12.4.1", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", - "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3692,8 +3229,6 @@ }, "node_modules/@mat3ra/esse/node_modules/typed-function": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", - "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", "dev": true, "license": "MIT", "engines": { @@ -3702,8 +3237,6 @@ }, "node_modules/@mat3ra/esse/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3745,8 +3278,6 @@ }, "node_modules/@mat3ra/made/node_modules/@babel/core": { "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3776,8 +3307,6 @@ }, "node_modules/@mat3ra/made/node_modules/@babel/register": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", - "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3796,8 +3325,6 @@ }, "node_modules/@mat3ra/made/node_modules/@exabyte-io/periodic-table.js": { "version": "2022.5.28-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.28-0.tgz", - "integrity": "sha512-BA+u07dkt4e8yqcBHTv5szXXeMyNFcW0G2Ki3Vbugv6ku6dfl4+Sji8cs5PUr+hkYptc7rTg5r89lfr6Vt+oJw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -3816,8 +3343,6 @@ }, "node_modules/@mat3ra/made/node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/core": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3847,22 +3372,16 @@ }, "node_modules/@mat3ra/made/node_modules/@exabyte-io/periodic-table.js/node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/made/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/made/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3875,8 +3394,6 @@ }, "node_modules/@mat3ra/made/node_modules/underscore": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", "dev": true, "license": "MIT" }, @@ -3918,8 +3435,6 @@ }, "node_modules/@mat3ra/standata": { "version": "2026.1.12-0", - "resolved": "https://registry.npmjs.org/@mat3ra/standata/-/standata-2026.1.12-0.tgz", - "integrity": "sha512-XsDvjqrNKQHnDNcCzwIRJnDrcC2pKZF+rzG1PGX7Iw7M+BdygxS790zZjcnch2YrgESb81Qc4GjXvpFCjOemHQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3944,8 +3459,6 @@ }, "node_modules/@mat3ra/standata/node_modules/@babel/core": { "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3975,15 +3488,11 @@ }, "node_modules/@mat3ra/standata/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/standata/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3996,8 +3505,6 @@ }, "node_modules/@mat3ra/tsconfig": { "version": "2024.6.3-0", - "resolved": "https://registry.npmjs.org/@mat3ra/tsconfig/-/tsconfig-2024.6.3-0.tgz", - "integrity": "sha512-dA3gKDSl9+vlZvot1DN+UXfZPgxPSyHkZrkfVCTOWvzwm/3NdJ4cTzrTxjBIWUrZukpVVtH5ao8FbXLB6RDQzQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4006,8 +3513,6 @@ }, "node_modules/@mat3ra/utils": { "version": "2025.9.20-0", - "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2025.9.20-0.tgz", - "integrity": "sha512-Jnnu+GtfzaJ5VrXA8vwOP6ry7sUzjRV31FibDOCCoKqYXIEKRmudcydG+RoHWdYpmGdKxkKDKEphNJIIlFbU4g==", "dev": true, "license": "ISC", "dependencies": { @@ -4037,8 +3542,6 @@ }, "node_modules/@mat3ra/utils/node_modules/@babel/core": { "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4068,8 +3571,6 @@ }, "node_modules/@mat3ra/utils/node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -4078,8 +3579,6 @@ }, "node_modules/@mat3ra/utils/node_modules/complex.js": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.2.tgz", - "integrity": "sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g==", "dev": true, "license": "MIT", "engines": { @@ -4092,15 +3591,11 @@ }, "node_modules/@mat3ra/utils/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/utils/node_modules/fraction.js": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", "dev": true, "license": "MIT", "engines": { @@ -4113,8 +3608,6 @@ }, "node_modules/@mat3ra/utils/node_modules/mathjs": { "version": "12.4.1", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", - "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4137,8 +3630,6 @@ }, "node_modules/@mat3ra/utils/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -4150,8 +3641,6 @@ }, "node_modules/@mat3ra/utils/node_modules/typed-function": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.1.tgz", - "integrity": "sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==", "dev": true, "license": "MIT", "engines": { @@ -4160,8 +3649,6 @@ }, "node_modules/@mat3ra/utils/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4174,15 +3661,11 @@ }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "license": "MIT", "optional": true }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", "dependencies": { @@ -4191,8 +3674,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "peer": true, @@ -4206,8 +3687,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "peer": true, @@ -4217,8 +3696,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "peer": true, @@ -4232,8 +3709,6 @@ }, "node_modules/@pkgr/core": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "peer": true, @@ -4246,43 +3721,31 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@types/chai": { "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", "dev": true, "license": "MIT" }, "node_modules/@types/chai-almost": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/chai-almost/-/chai-almost-1.0.3.tgz", - "integrity": "sha512-NMLjvnFjgxS0Z36whNuoma2p/2Fu6m+dV8eddO8tRAztMAqTqYxFYGyJNsAsOlwx89siUMfxQ1Wdqew2xXsiEg==", "dev": true, "license": "MIT", "dependencies": { @@ -4291,21 +3754,15 @@ }, "node_modules/@types/js-yaml": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, "node_modules/@types/json-schema-merge-allof": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.5.tgz", - "integrity": "sha512-5mS11ZUTyFNUVEMpK3uKoPb6BWL/nLgW/ln2VOiI8OOxKEYC4Gl9O3WjS5P49yqVTfkcbCAPKw3T1O4erUah5g==", "dev": true, "license": "MIT", "dependencies": { @@ -4314,22 +3771,16 @@ }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", "dev": true, "license": "MIT" }, "node_modules/@types/mathjs": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-5.0.1.tgz", - "integrity": "sha512-EFBuueI+BRed9bnUO6/9my55b4FH+VQIvqMm58h9JGbtaGCkqr3YSDhnmVbM1SJjF//8SURERSypzNwejOk7lA==", "dev": true, "license": "MIT", "dependencies": { @@ -4338,15 +3789,11 @@ }, "node_modules/@types/mocha": { "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "20.19.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", - "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", "dev": true, "license": "MIT", "dependencies": { @@ -4355,15 +3802,11 @@ }, "node_modules/@types/nunjucks": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", - "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", "dev": true, "license": "MIT" }, "node_modules/@types/react": { "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -4371,8 +3814,6 @@ }, "node_modules/@types/react-jsonschema-form": { "version": "1.7.13", - "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.13.tgz", - "integrity": "sha512-C2jgO7/ow76oCSfUK++jKKox17R0A7ryMYNE5hJ2dR1Ske9jhuvjIlurvzMePh+Xjk8wey0nzB2C7HFKe2pRdg==", "license": "MIT", "dependencies": { "@types/json-schema": "*", @@ -4381,23 +3822,17 @@ }, "node_modules/@types/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@types/underscore": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.13.0.tgz", - "integrity": "sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA==", "dev": true, "license": "MIT" }, "node_modules/@types/underscore.string": { "version": "0.0.40", - "resolved": "https://registry.npmjs.org/@types/underscore.string/-/underscore.string-0.0.40.tgz", - "integrity": "sha512-6J3Wp6PnuXhSxVSVaSoh9SKiormScoa2pPLKpZk5QsjKD3RKQZQj/mwBVfULd2MUl5gM/UlLSvr+cynd/7VWQA==", "dev": true, "license": "MIT", "dependencies": { @@ -4406,8 +3841,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "license": "MIT", "peer": true, @@ -4442,8 +3875,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "peer": true, @@ -4456,8 +3887,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", "peer": true, @@ -4485,8 +3914,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "peer": true, @@ -4504,8 +3931,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "license": "MIT", "peer": true, @@ -4533,8 +3958,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "peer": true, @@ -4548,8 +3971,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "peer": true, @@ -4577,8 +3998,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "peer": true, @@ -4591,8 +4010,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "peer": true, @@ -4619,8 +4036,6 @@ }, "node_modules/@typescript-eslint/utils/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "peer": true, @@ -4633,8 +4048,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "peer": true, @@ -4652,8 +4065,6 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -4666,21 +4077,15 @@ }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true, "license": "ISC" }, "node_modules/a-sync-waterfall": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", "license": "MIT" }, "node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4691,8 +4096,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -4700,8 +4103,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -4713,8 +4114,6 @@ }, "node_modules/acorn-walk/node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -4726,8 +4125,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4740,8 +4137,6 @@ }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -4756,8 +4151,6 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4774,22 +4167,16 @@ }, "node_modules/almost-equal": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-0.0.0.tgz", - "integrity": "sha512-/wvWNupeAr7sp7J2ZXvQvd97uyxsokx4TXdV6YMhd/EDwctlgY3wUGZCgQx1sJQyxU+c8EWRCWsLGOumdiS9aw==", "dev": true, "license": "MIT" }, "node_modules/an-array": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", - "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", "dev": true, "license": "MIT" }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "license": "MIT", "engines": { "node": ">=6" @@ -4797,8 +4184,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4813,8 +4198,6 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4826,8 +4209,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -4835,8 +4216,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4850,8 +4229,6 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "devOptional": true, "license": "ISC", "dependencies": { @@ -4864,8 +4241,6 @@ }, "node_modules/append-transform": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "license": "MIT", "dependencies": { @@ -4877,29 +4252,21 @@ }, "node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true, "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4912,8 +4279,6 @@ }, "node_modules/array-almost-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-almost-equal/-/array-almost-equal-1.0.0.tgz", - "integrity": "sha512-NiQJq0vH5nEebm7FMs52fli23nwCh+RBKZZtA5g5qUmqGAkb9n8/WOTW8zjDocLADXXM1CRanFfPTMdrI2yZwg==", "dev": true, "license": "MIT", "dependencies": { @@ -4923,8 +4288,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4940,8 +4303,6 @@ }, "node_modules/array-includes": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4963,8 +4324,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "peer": true, @@ -4974,8 +4333,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -4993,8 +4350,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -5012,8 +4367,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5034,14 +4387,10 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "license": "MIT" }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "license": "MIT", "engines": { @@ -5050,15 +4399,11 @@ }, "node_modules/ast-types-flow": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true, "license": "ISC" }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "license": "MIT", "engines": { "node": ">=8" @@ -5066,8 +4411,6 @@ }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -5076,8 +4419,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5092,8 +4433,6 @@ }, "node_modules/axe-core": { "version": "4.11.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", - "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", "dev": true, "license": "MPL-2.0", "engines": { @@ -5102,15 +4441,11 @@ }, "node_modules/axobject-query": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true, "license": "Apache-2.0" }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", @@ -5123,8 +4458,6 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0", @@ -5136,8 +4469,6 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1" @@ -5148,14 +4479,10 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/baseline-browser-mapping": { "version": "2.8.24", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.24.tgz", - "integrity": "sha512-uUhTRDPXamakPyghwrUcjaGvvBqGrWvBHReoiULMIpOJVM9IYzQh83Xk2Onx5HlGI2o10NNCzcs9TG/S3TkwrQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -5163,8 +4490,6 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "devOptional": true, "license": "MIT", "engines": { @@ -5176,8 +4501,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5186,8 +4509,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5199,15 +4520,11 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "license": "ISC" }, "node_modules/browserslist": { "version": "4.27.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "funding": [ { "type": "opencollective", @@ -5239,14 +4556,10 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, "node_modules/caching-transform": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "license": "MIT", "dependencies": { @@ -5261,8 +4574,6 @@ }, "node_modules/caching-transform/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -5277,8 +4588,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5296,8 +4605,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5310,8 +4617,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { @@ -5327,8 +4632,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "license": "MIT", "engines": { "node": ">=6" @@ -5336,8 +4639,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -5346,8 +4647,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001753", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz", - "integrity": "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==", "funding": [ { "type": "opencollective", @@ -5366,8 +4665,6 @@ }, "node_modules/chai": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "license": "MIT", "dependencies": { @@ -5385,8 +4682,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5401,8 +4696,6 @@ }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5411,8 +4704,6 @@ }, "node_modules/check-error": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "license": "MIT", "dependencies": { @@ -5424,8 +4715,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "optional": true, "dependencies": { @@ -5449,8 +4738,6 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -5459,8 +4746,6 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -5472,8 +4757,6 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "license": "MIT", "dependencies": { @@ -5489,8 +4772,6 @@ }, "node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -5501,15 +4782,11 @@ }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -5518,8 +4795,6 @@ }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -5533,8 +4808,6 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "license": "MIT", "engines": { @@ -5543,8 +4816,6 @@ }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -5557,8 +4828,6 @@ }, "node_modules/cmd-ts": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/cmd-ts/-/cmd-ts-0.13.0.tgz", - "integrity": "sha512-nsnxf6wNIM/JAS7T/x/1JmbEsjH0a8tezXqqpaL0O6+eV0/aDEnRxwjxpu0VzDdRcaC1ixGSbRlUuf/IU59I4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5570,8 +4839,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5582,21 +4849,15 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "license": "MIT", "engines": { "node": ">= 6" @@ -5604,8 +4865,6 @@ }, "node_modules/comment-parser": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", "dev": true, "license": "MIT", "engines": { @@ -5614,14 +4873,10 @@ }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "license": "MIT" }, "node_modules/complex.js": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", - "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==", "dev": true, "license": "MIT OR GPL-2.0", "engines": { @@ -5630,8 +4885,6 @@ }, "node_modules/compute-gcd": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", "dev": true, "dependencies": { "validate.io-array": "^1.0.3", @@ -5641,8 +4894,6 @@ }, "node_modules/compute-lcm": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", "dev": true, "dependencies": { "compute-gcd": "^1.2.1", @@ -5653,27 +4904,19 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", - "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", "license": "MIT", "dependencies": { "browserslist": "^4.26.3" @@ -5685,8 +4928,6 @@ }, "node_modules/core-js-pure": { "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz", - "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5697,15 +4938,11 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5718,8 +4955,6 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5728,35 +4963,25 @@ }, "node_modules/crypto-js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", "dev": true, "license": "MIT" }, "node_modules/csstype": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/dag-map": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5773,8 +4998,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5791,8 +5014,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5809,8 +5030,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5826,8 +5045,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -5836,15 +5053,11 @@ }, "node_modules/decimal.js": { "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, "node_modules/deep-eql": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5856,14 +5069,10 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "license": "MIT" }, "node_modules/default-require-extensions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "license": "MIT", "dependencies": { @@ -5878,8 +5087,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5896,8 +5103,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -5914,15 +5119,11 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true, "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5931,8 +5132,6 @@ }, "node_modules/diff-sequences": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true, "license": "MIT", "peer": true, @@ -5942,8 +5141,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "peer": true, @@ -5956,8 +5153,6 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -5968,8 +5163,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5983,28 +5176,20 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.245", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.245.tgz", - "integrity": "sha512-rdmGfW47ZhL/oWEJAY4qxRtdly2B98ooTJ0pdEI4jhVLZ6tNf8fPtov2wS1IRKwFJT92le3x4Knxiwzl7cPPpQ==", "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", @@ -6016,8 +5201,6 @@ }, "node_modules/es-abstract": { "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -6085,8 +5268,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -6095,8 +5276,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -6105,8 +5284,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -6118,8 +5295,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -6134,8 +5309,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -6147,8 +5320,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -6165,15 +5336,11 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -6181,15 +5348,11 @@ }, "node_modules/escape-latex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { "node": ">=10" @@ -6200,9 +5363,6 @@ }, "node_modules/eslint": { "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", @@ -6258,8 +5418,6 @@ }, "node_modules/eslint-compat-utils": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", - "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", "dev": true, "license": "MIT", "peer": true, @@ -6275,8 +5433,6 @@ }, "node_modules/eslint-compat-utils/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "peer": true, @@ -6289,8 +5445,6 @@ }, "node_modules/eslint-config-airbnb": { "version": "19.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.2.tgz", - "integrity": "sha512-4v5DEMVSl043LaCT+gsxPcoiIk0iYG5zxJKKjIy80H/D//2E0vtuOBWkb0CBDxjF+y26yQzspIXYuY6wMmt9Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -6311,8 +5465,6 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "license": "MIT", "dependencies": { @@ -6331,8 +5483,6 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", "dev": true, "license": "MIT", "bin": { @@ -6344,8 +5494,6 @@ }, "node_modules/eslint-import-resolver-exports": { "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz", - "integrity": "sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg==", "dev": true, "license": "MIT", "dependencies": { @@ -6358,8 +5506,6 @@ }, "node_modules/eslint-import-resolver-meteor": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-meteor/-/eslint-import-resolver-meteor-0.4.0.tgz", - "integrity": "sha512-BSqvgt6QZvk9EGhDGnM4azgbxyBD8b0y6FYA52WFzpWpHcZV9ys8PxM33bx8dlCy3HyopRLLsMUnlhTpZzsZmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6372,8 +5518,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6384,8 +5528,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6394,8 +5536,6 @@ }, "node_modules/eslint-json-compat-utils": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/eslint-json-compat-utils/-/eslint-json-compat-utils-0.2.1.tgz", - "integrity": "sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==", "dev": true, "license": "MIT", "peer": true, @@ -6417,8 +5557,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -6435,8 +5573,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6445,8 +5581,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", "dev": true, "license": "MIT", "dependencies": { @@ -6473,8 +5607,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -6483,8 +5615,6 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6496,15 +5626,11 @@ }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/eslint-plugin-jsdoc": { "version": "37.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.1.0.tgz", - "integrity": "sha512-DpkFzX5Sqkqzy4MCgowhDXmusWcF1Gn7wYnphdGfWmIkoQr6SwL0jEtltGAVyF5Rj6ACi6ydw0oCCI5hF3yz6w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6527,8 +5653,6 @@ }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -6540,8 +5664,6 @@ }, "node_modules/eslint-plugin-jsonc": { "version": "2.21.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.21.0.tgz", - "integrity": "sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==", "dev": true, "license": "MIT", "peer": true, @@ -6568,8 +5690,6 @@ }, "node_modules/eslint-plugin-jsonc/node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "peer": true, @@ -6582,8 +5702,6 @@ }, "node_modules/eslint-plugin-jsonc/node_modules/eslint-visitor-keys": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -6596,8 +5714,6 @@ }, "node_modules/eslint-plugin-jsonc/node_modules/espree": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "peer": true, @@ -6615,8 +5731,6 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "license": "MIT", "dependencies": { @@ -6642,8 +5756,6 @@ }, "node_modules/eslint-plugin-mui-path-imports": { "version": "0.0.15", - "resolved": "https://registry.npmjs.org/eslint-plugin-mui-path-imports/-/eslint-plugin-mui-path-imports-0.0.15.tgz", - "integrity": "sha512-u61kgRBtUAG+zoApuf8oWuW6mf3SIfrpMq/gSQEM2h/3qzkqvWXB4RRmPzVryS6bpeXT0QsW8rFcdcMVnoz0hw==", "dev": true, "license": "MIT", "dependencies": { @@ -6658,8 +5770,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "4.2.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", - "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", "dev": true, "license": "MIT", "dependencies": { @@ -6680,8 +5790,6 @@ }, "node_modules/eslint-plugin-react": { "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", "dev": true, "license": "MIT", "dependencies": { @@ -6709,8 +5817,6 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "license": "MIT", "peer": true, @@ -6723,8 +5829,6 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6736,8 +5840,6 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", "dependencies": { @@ -6754,8 +5856,6 @@ }, "node_modules/eslint-plugin-simple-import-sort": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", - "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6764,8 +5864,6 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -6777,8 +5875,6 @@ }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -6786,8 +5882,6 @@ }, "node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -6801,8 +5895,6 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "license": "Apache-2.0", "engines": { "node": ">=4" @@ -6810,8 +5902,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "license": "Apache-2.0", "engines": { "node": ">=10" @@ -6819,8 +5909,6 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" @@ -6828,8 +5916,6 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6844,8 +5930,6 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -6853,8 +5937,6 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "license": "MIT", "engines": { "node": ">= 4" @@ -6862,8 +5944,6 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -6875,14 +5955,10 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, "node_modules/eslint/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6893,14 +5969,10 @@ }, "node_modules/eslint/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, "node_modules/espree": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -6913,8 +5985,6 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "license": "Apache-2.0", "engines": { "node": ">=4" @@ -6922,8 +5992,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -6935,8 +6003,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -6947,8 +6013,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -6959,8 +6023,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -6968,8 +6030,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -6977,8 +6037,6 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -7001,21 +6059,15 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "peer": true, @@ -7032,20 +6084,14 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -7060,8 +6106,6 @@ }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "peer": true, @@ -7071,8 +6115,6 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -7083,8 +6125,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -7096,8 +6136,6 @@ }, "node_modules/find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "license": "MIT", "dependencies": { "commondir": "^1.0.1", @@ -7110,8 +6148,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -7127,8 +6163,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -7137,8 +6171,6 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -7151,14 +6183,10 @@ }, "node_modules/flatted": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7173,8 +6201,6 @@ }, "node_modules/foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "license": "ISC", "dependencies": { @@ -7187,8 +6213,6 @@ }, "node_modules/fraction.js": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", - "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==", "dev": true, "license": "MIT OR GPL-2.0", "engines": { @@ -7197,8 +6221,6 @@ }, "node_modules/fromentries": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { @@ -7218,21 +6240,14 @@ }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -7244,8 +6259,6 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7253,8 +6266,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7274,14 +6285,10 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "license": "MIT" }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -7290,8 +6297,6 @@ }, "node_modules/generator-function": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", "engines": { @@ -7300,8 +6305,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -7309,8 +6312,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -7319,8 +6320,6 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "license": "MIT", "engines": { @@ -7329,8 +6328,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7354,8 +6351,6 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { @@ -7364,8 +6359,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -7378,8 +6371,6 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -7391,8 +6382,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -7409,9 +6398,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -7430,8 +6416,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -7442,8 +6426,6 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -7457,8 +6439,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7474,8 +6454,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "peer": true, @@ -7496,8 +6474,6 @@ }, "node_modules/globby/node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "peer": true, @@ -7507,8 +6483,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -7520,23 +6494,17 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT", "peer": true }, "node_modules/growl": { "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, "license": "MIT", "engines": { @@ -7545,8 +6513,6 @@ }, "node_modules/has": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, "license": "MIT", "engines": { @@ -7555,8 +6521,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -7568,8 +6532,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -7577,8 +6539,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -7590,8 +6550,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7606,8 +6564,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -7619,8 +6575,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -7635,8 +6589,6 @@ }, "node_modules/hasha": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7652,8 +6604,6 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7662,8 +6612,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7674,8 +6622,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -7684,15 +6630,11 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7701,8 +6643,6 @@ }, "node_modules/husky": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true, "license": "MIT", "bin": { @@ -7717,8 +6657,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "peer": true, @@ -7728,8 +6666,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -7744,8 +6680,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", "engines": { "node": ">=0.8.19" @@ -7753,8 +6687,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -7763,9 +6695,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -7774,14 +6703,10 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -7795,8 +6720,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -7813,8 +6736,6 @@ }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7833,8 +6754,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7849,8 +6768,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -7862,8 +6779,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -7879,15 +6794,11 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -7899,8 +6810,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -7914,8 +6823,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -7932,8 +6839,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -7949,8 +6854,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7958,8 +6861,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -7974,8 +6875,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { @@ -7987,8 +6886,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { @@ -8007,8 +6904,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8019,8 +6914,6 @@ }, "node_modules/is-invalid-path": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8032,8 +6925,6 @@ }, "node_modules/is-invalid-path/node_modules/is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, "license": "MIT", "engines": { @@ -8042,8 +6933,6 @@ }, "node_modules/is-invalid-path/node_modules/is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -8055,8 +6944,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -8068,8 +6955,6 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -8081,8 +6966,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "devOptional": true, "license": "MIT", "engines": { @@ -8091,8 +6974,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8108,8 +6989,6 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -8118,8 +6997,6 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -8130,8 +7007,6 @@ }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -8149,8 +7024,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -8162,8 +7035,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -8178,8 +7049,6 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -8191,8 +7060,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -8208,8 +7075,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8226,8 +7091,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8242,15 +7105,11 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -8262,8 +7121,6 @@ }, "node_modules/is-valid-path": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", "dev": true, "license": "MIT", "dependencies": { @@ -8275,8 +7132,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -8288,8 +7143,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -8304,8 +7157,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8321,8 +7172,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -8331,21 +7180,15 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8353,8 +7196,6 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8363,8 +7204,6 @@ }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8376,8 +7215,6 @@ }, "node_modules/istanbul-lib-instrument": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8392,8 +7229,6 @@ }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "license": "ISC", "dependencies": { @@ -8410,8 +7245,6 @@ }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8423,8 +7256,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8438,8 +7269,6 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -8454,8 +7283,6 @@ }, "node_modules/istanbul-lib-report/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -8467,8 +7294,6 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8482,8 +7307,6 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8492,8 +7315,6 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8506,21 +7327,15 @@ }, "node_modules/javascript-natural-sort": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", "dev": true, "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8532,8 +7347,6 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", "dev": true, "license": "MIT", "engines": { @@ -8542,8 +7355,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -8554,21 +7365,15 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true, "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-compare": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8577,8 +7382,6 @@ }, "node_modules/json-schema-deref-sync": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.14.0.tgz", - "integrity": "sha512-yGR1xmhdiD6R0MSrwWcFxQzAj5b3i5Gb/mt5tvQKgFMMeNe0KZYNEN/jWr7G+xn39Azqgcvk4ZKMs8dQl8e4wA==", "dev": true, "license": "MIT", "dependencies": { @@ -8597,8 +7400,6 @@ }, "node_modules/json-schema-merge-allof": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", - "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "dev": true, "license": "MIT", "dependencies": { @@ -8612,8 +7413,6 @@ }, "node_modules/json-schema-to-typescript": { "version": "15.0.4", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz", - "integrity": "sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8636,8 +7435,6 @@ }, "node_modules/json-schema-to-typescript/node_modules/prettier": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -8652,20 +7449,14 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -8676,8 +7467,6 @@ }, "node_modules/jsonc-eslint-parser": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.1.tgz", - "integrity": "sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==", "dev": true, "license": "MIT", "peer": true, @@ -8696,8 +7485,6 @@ }, "node_modules/jsonc-eslint-parser/node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "peer": true, @@ -8710,8 +7497,6 @@ }, "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -8724,8 +7509,6 @@ }, "node_modules/jsonc-eslint-parser/node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "peer": true, @@ -8743,8 +7526,6 @@ }, "node_modules/jsonc-eslint-parser/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "peer": true, @@ -8757,8 +7538,6 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8773,8 +7552,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -8782,8 +7559,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8791,15 +7566,11 @@ }, "node_modules/language-subtag-registry": { "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -8811,8 +7582,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -8824,8 +7593,6 @@ }, "node_modules/lilconfig": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", "dev": true, "license": "MIT", "engines": { @@ -8834,8 +7601,6 @@ }, "node_modules/lint-staged": { "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", "dev": true, "license": "MIT", "dependencies": { @@ -8866,8 +7631,6 @@ }, "node_modules/lint-staged/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "license": "MIT", "engines": { @@ -8876,8 +7639,6 @@ }, "node_modules/lint-staged/node_modules/supports-color": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, "license": "MIT", "engines": { @@ -8889,8 +7650,6 @@ }, "node_modules/listr2": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, "license": "MIT", "dependencies": { @@ -8917,8 +7676,6 @@ }, "node_modules/listr2/node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { @@ -8934,15 +7691,11 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -8951,8 +7704,6 @@ }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8966,8 +7717,6 @@ }, "node_modules/listr2/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -8981,8 +7730,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -8997,40 +7744,28 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -9046,8 +7781,6 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { @@ -9065,15 +7798,11 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -9082,8 +7811,6 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9100,8 +7827,6 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9115,8 +7840,6 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -9130,8 +7853,6 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9143,8 +7864,6 @@ }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -9153,8 +7872,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -9162,8 +7879,6 @@ }, "node_modules/make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "license": "MIT", "dependencies": { "pify": "^4.0.1", @@ -9175,8 +7890,6 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", "bin": { "semver": "bin/semver" @@ -9184,15 +7897,11 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -9201,8 +7910,6 @@ }, "node_modules/mathjs": { "version": "5.10.3", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-5.10.3.tgz", - "integrity": "sha512-ySjg30BC3dYjQm73ILZtwcWzFJde0VU6otkXW/57IjjuYRa3Qaf0Kb8pydEuBZYtqW2OxreAtsricrAmOj3jIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9224,15 +7931,11 @@ }, "node_modules/mathjs/node_modules/decimal.js": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", - "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==", "dev": true, "license": "MIT" }, "node_modules/md5": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9243,22 +7946,16 @@ }, "node_modules/memory-cache": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "peer": true, @@ -9268,8 +7965,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -9282,8 +7977,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -9292,8 +7985,6 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -9304,8 +7995,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -9314,15 +8003,11 @@ }, "node_modules/mixwith": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mixwith/-/mixwith-0.1.1.tgz", - "integrity": "sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A==", "dev": true, "license": "Apache-2.0" }, "node_modules/mocha": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9365,8 +8050,6 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "license": "MIT", "engines": { @@ -9375,8 +8058,6 @@ }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -9403,8 +8084,6 @@ }, "node_modules/mocha/node_modules/debug": { "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9421,16 +8100,11 @@ }, "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "license": "MIT" }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -9450,8 +8124,6 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -9463,8 +8135,6 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, "license": "ISC", "dependencies": { @@ -9476,8 +8146,6 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9492,14 +8160,10 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, "license": "MIT", "bin": { @@ -9511,22 +8175,16 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true, "license": "MIT", "peer": true }, "node_modules/node-preload": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9538,14 +8196,10 @@ }, "node_modules/node-releases": { "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "devOptional": true, "license": "MIT", "engines": { @@ -9554,8 +8208,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -9567,8 +8219,6 @@ }, "node_modules/nunjucks": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", - "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", "license": "BSD-2-Clause", "dependencies": { "a-sync-waterfall": "^1.0.0", @@ -9592,8 +8242,6 @@ }, "node_modules/nunjucks/node_modules/commander": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "license": "MIT", "engines": { "node": ">= 6" @@ -9601,8 +8249,6 @@ }, "node_modules/nyc": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "license": "ISC", "dependencies": { @@ -9643,8 +8289,6 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9655,15 +8299,11 @@ }, "node_modules/nyc/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/nyc/node_modules/find-cache-dir": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { @@ -9680,8 +8320,6 @@ }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -9694,8 +8332,6 @@ }, "node_modules/nyc/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -9704,8 +8340,6 @@ }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9717,8 +8351,6 @@ }, "node_modules/nyc/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9733,8 +8365,6 @@ }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -9749,8 +8379,6 @@ }, "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -9762,8 +8390,6 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9775,8 +8401,6 @@ }, "node_modules/nyc/node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9788,8 +8412,6 @@ }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -9798,8 +8420,6 @@ }, "node_modules/nyc/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9813,8 +8433,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -9828,15 +8446,11 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { @@ -9858,8 +8472,6 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9872,8 +8484,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { @@ -9882,8 +8492,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -9895,8 +8503,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -9905,8 +8511,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -9926,8 +8530,6 @@ }, "node_modules/object.entries": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -9942,8 +8544,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9961,8 +8561,6 @@ }, "node_modules/object.hasown": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -9979,8 +8577,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -9998,8 +8594,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -10007,8 +8601,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -10023,8 +8615,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -10040,8 +8630,6 @@ }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10058,8 +8646,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10074,8 +8660,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -10090,8 +8674,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10106,8 +8688,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", "engines": { "node": ">=6" @@ -10115,8 +8695,6 @@ }, "node_modules/package-hash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10131,8 +8709,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -10143,8 +8719,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -10153,8 +8727,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10162,8 +8734,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -10171,14 +8741,10 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "peer": true, @@ -10188,8 +8754,6 @@ }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "license": "MIT", "engines": { @@ -10198,14 +8762,10 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "devOptional": true, "license": "MIT", "engines": { @@ -10217,8 +8777,6 @@ }, "node_modules/pidtree": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true, "license": "MIT", "bin": { @@ -10230,8 +8788,6 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "license": "MIT", "engines": { "node": ">=6" @@ -10239,8 +8795,6 @@ }, "node_modules/pirates": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", "engines": { "node": ">= 6" @@ -10248,8 +8802,6 @@ }, "node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "license": "MIT", "dependencies": { "find-up": "^3.0.0" @@ -10260,8 +8812,6 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "license": "MIT", "dependencies": { "locate-path": "^3.0.0" @@ -10272,8 +8822,6 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "license": "MIT", "dependencies": { "p-locate": "^3.0.0", @@ -10285,8 +8833,6 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -10300,8 +8846,6 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "license": "MIT", "dependencies": { "p-limit": "^2.0.0" @@ -10312,8 +8856,6 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "license": "MIT", "engines": { "node": ">=4" @@ -10321,8 +8863,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -10331,8 +8871,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -10340,8 +8878,6 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -10356,8 +8892,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -10369,8 +8903,6 @@ }, "node_modules/process-on-spawn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", - "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10382,8 +8914,6 @@ }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -10391,8 +8921,6 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { @@ -10403,8 +8931,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" @@ -10412,8 +8938,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -10434,8 +8958,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10444,15 +8966,11 @@ }, "node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -10464,8 +8982,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -10487,14 +9003,10 @@ }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", - "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -10505,15 +9017,11 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -10533,8 +9041,6 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "license": "MIT", "engines": { "node": ">=8" @@ -10545,8 +9051,6 @@ }, "node_modules/regexpu-core": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", - "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", @@ -10562,8 +9066,6 @@ }, "node_modules/regextras": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true, "license": "MIT", "engines": { @@ -10572,14 +9074,10 @@ }, "node_modules/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -10590,8 +9088,6 @@ }, "node_modules/release-zalgo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "license": "ISC", "dependencies": { @@ -10603,8 +9099,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -10613,8 +9107,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10622,15 +9114,11 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, "license": "ISC" }, "node_modules/requireindex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, "license": "MIT", "engines": { @@ -10639,8 +9127,6 @@ }, "node_modules/resolve": { "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "license": "MIT", "dependencies": { "is-core-module": "^2.16.1", @@ -10659,8 +9145,6 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", "engines": { "node": ">=4" @@ -10668,8 +9152,6 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -10678,8 +9160,6 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -10692,8 +9172,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "peer": true, @@ -10704,16 +9182,11 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -10727,8 +9200,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -10752,8 +9223,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10762,8 +9231,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10782,8 +9249,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -10803,8 +9268,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -10820,8 +9283,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -10838,22 +9299,16 @@ }, "node_modules/seed-random": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", "dev": true, "license": "MIT" }, "node_modules/seedrandom": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true, "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -10861,8 +9316,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10871,15 +9324,11 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10896,8 +9345,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10912,8 +9359,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -10927,8 +9372,6 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -10939,8 +9382,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -10951,8 +9392,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -10960,8 +9399,6 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { @@ -10980,8 +9417,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { @@ -10997,8 +9432,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -11016,8 +9449,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -11036,15 +9467,11 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "license": "MIT", "engines": { "node": ">=6" @@ -11052,8 +9479,6 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11069,8 +9494,6 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -11082,8 +9505,6 @@ }, "node_modules/slugify": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -11091,8 +9512,6 @@ }, "node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -11100,8 +9519,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -11110,8 +9527,6 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -11119,8 +9534,6 @@ }, "node_modules/spawn-wrap": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "license": "ISC", "dependencies": { @@ -11137,8 +9550,6 @@ }, "node_modules/spawn-wrap/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -11153,15 +9564,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11171,22 +9578,16 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11199,8 +9600,6 @@ }, "node_modules/string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -11209,8 +9608,6 @@ }, "node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -11227,8 +9624,6 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -11240,8 +9635,6 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -11256,8 +9649,6 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { @@ -11284,8 +9675,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -11306,8 +9695,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11325,8 +9712,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11343,8 +9728,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -11355,8 +9738,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -11365,8 +9746,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -11375,8 +9754,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "license": "MIT", "engines": { "node": ">=8" @@ -11387,8 +9764,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11399,8 +9774,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11411,8 +9784,6 @@ }, "node_modules/synckit": { "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "peer": true, @@ -11428,8 +9799,6 @@ }, "node_modules/table": { "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -11444,14 +9813,10 @@ }, "node_modules/table/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -11459,8 +9824,6 @@ }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -11476,8 +9839,6 @@ }, "node_modules/table/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11490,8 +9851,6 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -11505,28 +9864,20 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/tiny-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11542,8 +9893,6 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -11560,8 +9909,6 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -11573,8 +9920,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -11586,8 +9931,6 @@ }, "node_modules/traverse": { "version": "0.6.11", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", - "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", "dev": true, "license": "MIT", "dependencies": { @@ -11604,8 +9947,6 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11648,8 +9989,6 @@ }, "node_modules/ts-node/node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -11661,8 +10000,6 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -11671,8 +10008,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -11684,8 +10019,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -11697,8 +10030,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -11707,15 +10038,11 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "license": "MIT", "peer": true, @@ -11731,16 +10058,12 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD", "peer": true }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -11751,8 +10074,6 @@ }, "node_modules/type-detect": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { @@ -11761,8 +10082,6 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -11773,8 +10092,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -11788,8 +10105,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -11808,8 +10123,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11830,8 +10143,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -11851,8 +10162,6 @@ }, "node_modules/typed-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.1.0.tgz", - "integrity": "sha512-TuQzwiT4DDg19beHam3E66oRXhyqlyfgjHB/5fcvsRXbfmWPJfto9B4a0TBdTrQAPGlGmXh/k7iUI+WsObgORA==", "dev": true, "engines": { "node": ">= 6" @@ -11860,8 +10169,6 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11870,8 +10177,6 @@ }, "node_modules/typedarray.prototype.slice": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", - "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", "dev": true, "license": "MIT", "dependencies": { @@ -11893,8 +10198,6 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -11907,8 +10210,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -11926,15 +10227,11 @@ }, "node_modules/underscore": { "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", "dev": true, "license": "MIT" }, "node_modules/underscore.string": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11947,15 +10244,11 @@ }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "license": "MIT", "engines": { "node": ">=4" @@ -11963,8 +10256,6 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -11976,8 +10267,6 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", - "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "license": "MIT", "engines": { "node": ">=4" @@ -11985,8 +10274,6 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", - "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "license": "MIT", "engines": { "node": ">=4" @@ -11994,8 +10281,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "funding": [ { "type": "opencollective", @@ -12024,8 +10309,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -12033,15 +10316,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "license": "MIT", "bin": { @@ -12050,40 +10329,28 @@ }, "node_modules/v8-compile-cache": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, "node_modules/valid-url": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", "dev": true }, "node_modules/validate.io-array": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", "dev": true, "license": "MIT" }, "node_modules/validate.io-function": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==", "dev": true }, "node_modules/validate.io-integer": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dev": true, "dependencies": { "validate.io-number": "^1.0.3" @@ -12091,8 +10358,6 @@ }, "node_modules/validate.io-integer-array": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dev": true, "dependencies": { "validate.io-array": "^1.0.3", @@ -12101,14 +10366,10 @@ }, "node_modules/validate.io-number": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==", "dev": true }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -12122,8 +10383,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -12142,8 +10401,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12170,8 +10427,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -12189,15 +10444,11 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -12218,8 +10469,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12227,15 +10476,11 @@ }, "node_modules/workerpool": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12252,15 +10497,11 @@ }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -12269,8 +10510,6 @@ }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -12284,14 +10523,10 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "license": "ISC", "dependencies": { @@ -12303,8 +10538,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -12313,14 +10546,10 @@ }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "license": "ISC", "engines": { @@ -12329,8 +10558,6 @@ }, "node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -12348,8 +10575,6 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "license": "ISC", "engines": { @@ -12358,8 +10583,6 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", "dependencies": { @@ -12374,8 +10597,6 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -12387,8 +10608,6 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { @@ -12400,15 +10619,11 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -12417,8 +10632,6 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -12432,8 +10645,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -12442,8 +10653,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { From bece93fff5d3065aea4a671ab40bfef396df2d42 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 10 Feb 2026 02:13:01 +0200 Subject: [PATCH 07/30] chore: add coverage/ to .gitignore Co-authored-by: Cursor --- .gitignore | 1 + dist/js/enums.d.ts | 1 - dist/js/enums.js | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 5c022456..4e862dc4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build/ node_modules/ .eslintcache .nyc_output/ +coverage/ .idea/ .DS_Store diff --git a/dist/js/enums.d.ts b/dist/js/enums.d.ts index f2cc5489..da08eaf7 100644 --- a/dist/js/enums.d.ts +++ b/dist/js/enums.d.ts @@ -7,7 +7,6 @@ export declare const UNIT_TYPES: { readonly assignment: "assignment"; readonly condition: "condition"; readonly subworkflow: "subworkflow"; - readonly processing: "processing"; readonly io: "io"; readonly assertion: "assertion"; }; diff --git a/dist/js/enums.js b/dist/js/enums.js index c4a0019c..180edf9a 100644 --- a/dist/js/enums.js +++ b/dist/js/enums.js @@ -12,7 +12,6 @@ exports.UNIT_TYPES = { assignment: "assignment", condition: "condition", subworkflow: "subworkflow", - processing: "processing", io: "io", assertion: "assertion", }; From 6f0c453d4bffaeef16a749b7d3c612594cff7886 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 10 Feb 2026 02:16:46 +0200 Subject: [PATCH 08/30] chore: enum --- src/js/enums.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/js/enums.ts b/src/js/enums.ts index e09b7c0c..ee819d61 100644 --- a/src/js/enums.ts +++ b/src/js/enums.ts @@ -9,7 +9,6 @@ export const UNIT_TYPES = { assignment: "assignment", condition: "condition", subworkflow: "subworkflow", - processing: "processing", io: "io", assertion: "assertion", } as const; From 7b077d97b95ee06321a03caca78de52634c94b74 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 17 Feb 2026 21:13:32 +0200 Subject: [PATCH 09/30] fix: add isMultiMaterial to workflow/subworkflow --- dist/js/Subworkflow.d.ts | 7 +- dist/js/generated/SubworkflowSchemaMixin.js | 6 + dist/js/generated/WorkflowSchemaMixin.js | 6 + dist/js/standata/utils.d.ts | 2 +- dist/js/subworkflows/subworkflow.d.ts | 1904 -------- dist/js/workflows/workflow.d.ts | 4453 ------------------- package-lock.json | 6 +- package.json | 2 +- src/js/Subworkflow.ts | 1 + src/js/generated/SubworkflowSchemaMixin.ts | 6 + src/js/generated/WorkflowSchemaMixin.ts | 6 + 11 files changed, 35 insertions(+), 6364 deletions(-) delete mode 100644 dist/js/subworkflows/subworkflow.d.ts delete mode 100644 dist/js/workflows/workflow.d.ts diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index aa1b983a..9f76dfb0 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -71,7 +71,10 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow unitIndex(flowchartId: string): number; replaceUnit(index: number, unit: AnySubworkflowUnit): void; setIsDraft(bool: boolean): void; - get methodData(): {} | undefined; + get methodData(): { + [k: string]: unknown; + searchText?: string; + } | undefined; /** * @summary Calculates hash of the subworkflow. Meaningful fields are units, app and model. * units must be sorted topologically before hashing (already sorted). @@ -111,7 +114,7 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow next?: string; enableRender?: boolean; subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; + source: "api" | "object_storage"; input: ({ type: "api"; endpoint: string; diff --git a/dist/js/generated/SubworkflowSchemaMixin.js b/dist/js/generated/SubworkflowSchemaMixin.js index 638d4d65..7d0ee411 100644 --- a/dist/js/generated/SubworkflowSchemaMixin.js +++ b/dist/js/generated/SubworkflowSchemaMixin.js @@ -34,6 +34,12 @@ function subworkflowSchemaMixin(item) { set application(value) { this.setProp("application", value); }, + get isMultiMaterial() { + return this.prop("isMultiMaterial"); + }, + set isMultiMaterial(value) { + this.setProp("isMultiMaterial", value); + }, get isDraft() { return this.prop("isDraft"); }, diff --git a/dist/js/generated/WorkflowSchemaMixin.js b/dist/js/generated/WorkflowSchemaMixin.js index c026e11f..c4115838 100644 --- a/dist/js/generated/WorkflowSchemaMixin.js +++ b/dist/js/generated/WorkflowSchemaMixin.js @@ -28,6 +28,12 @@ function workflowSchemaMixin(item) { set units(value) { this.setProp("units", value); }, + get isMultiMaterial() { + return this.prop("isMultiMaterial"); + }, + set isMultiMaterial(value) { + this.setProp("isMultiMaterial", value); + }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); } diff --git a/dist/js/standata/utils.d.ts b/dist/js/standata/utils.d.ts index 9d1cae5b..3f43a67e 100644 --- a/dist/js/standata/utils.d.ts +++ b/dist/js/standata/utils.d.ts @@ -54,7 +54,7 @@ export declare function findUnit({ subworkflowData, index, type, }: { next?: string; enableRender?: boolean; subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; + source: "api" | "object_storage"; input: ({ type: "api"; endpoint: string; diff --git a/dist/js/subworkflows/subworkflow.d.ts b/dist/js/subworkflows/subworkflow.d.ts deleted file mode 100644 index 643a897b..00000000 --- a/dist/js/subworkflows/subworkflow.d.ts +++ /dev/null @@ -1,1904 +0,0 @@ -import { Application } from "@mat3ra/ade"; -import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { ApplicationSchema, BaseMethod, BaseModel } from "@mat3ra/esse/dist/js/types"; -import { type Method, Model, ModelFactory } from "@mat3ra/mode"; -import { type SubworkflowSchemaMixin } from "../generated/SubworkflowSchemaMixin"; -import { type BaseUnit, UnitFactory } from "../units"; -type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; -declare const Subworkflow_base: Base; -export declare class Subworkflow extends Subworkflow_base { - static usePredefinedIds: boolean; - private ModelFactory; - private UnitFactory; - private applicationInstance; - private modelInstance; - private unitsInstances; - constructor(config: SubworkflowSchemaMixin, _ModelFactory?: typeof ModelFactory, _UnitFactory?: typeof UnitFactory); - static generateSubworkflowId(name: string, application?: ApplicationSchema, model?: BaseModel, method?: BaseMethod): any; - static get defaultConfig(): { - _id: any; - name: string; - application: import("node_modules/@mat3ra/ade/dist/js/applicationMixin").DefaultApplicationConfig; - model: { - method: { - readonly type: "pseudopotential"; - readonly subtype: "us"; - }; - type: "dft"; - subtype: "gga"; - }; - properties: never[]; - units: never[]; - }; - getAsUnit(): BaseUnit; - static fromArguments(application: Application, model: Model, method: Method, name: string, units?: BaseUnit[], config?: {}, Cls?: typeof Subworkflow): Subworkflow; - setApplication(application: Application): void; - setModel(model: Model): void; - setUnits(units: BaseUnit[]): void; - toJSON(exclude?: string[]): { - compute?: { - queue: "D" | "OR" | "OF" | "OFplus" | "SR" | "SF" | "SFplus" | "GPOF" | "GP2OF" | "GP4OF" | "GPSF" | "GP2SF" | "GP4SF" | "OR4" | "OR8" | "OR16" | "SR4" | "SR8" | "SR16" | "GOF" | "G4OF" | "G8OF" | "GSF" | "G4SF" | "G8SF"; - nodes: number; - ppn: number; - timeLimit: string; - timeLimitType?: "per single attempt" | "compound"; - isRestartable?: boolean; - notify?: string; - email?: string; - maxCPU?: number; - arguments?: { - nimage?: number; - npools?: number; - nband?: number; - ntg?: number; - ndiag?: number; - }; - cluster?: { - fqdn?: string; - jid?: string; - }; - errors?: { - domain?: "rupy" | "alfred" | "celim" | "webapp"; - reason?: string; - message?: string; - traceback?: string; - }[]; - excludeFilesPattern?: string; - } | undefined; - model: import("@mat3ra/esse/dist/js/types").AnyModelSchema & import("@mat3ra/esse/dist/js/esse/types").AnyObject; - units: import("@mat3ra/esse/dist/js/esse/types").AnyObject[]; - }; - get contextProviders(): any[]; - /** - * Extracts a reduced version of the entity config to be stored inside redux state. - * This is used to track changes to context, monitors, properties, etc. when multiple materials are in state. - */ - extractReducedExternalDependentConfig(): { - id: string; - context: any; - units: any[]; - }; - /** - * Applies the reduced config obtained from extractReducedExternalDependentConfig on the entity. - */ - applyReducedExternalDependentConfig(config: any): void; - get contextFromAssignmentUnits(): {}; - render(context?: {}): void; - /** - * TODO: reuse workflow function instead - */ - addUnit(unit: BaseUnit, index?: number): void; - removeUnit(flowchartId: string): void; - get properties(): any[]; - getUnit(flowchartId: string): { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "io"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; - input: ({ - type: "db_ids"; - ids: string[]; - } | { - type: "db_collection"; - collection: string; - draft: boolean; - } | { - type: "object_storage"; - objectData: { - CONTAINER?: string; - NAME?: string; - PROVIDER?: string; - REGION?: string; - SIZE?: number; - TIMESTAMP?: string; - }; - overwrite?: boolean; - pathname?: string; - basename?: string; - filetype?: string; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "condition"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - input: { - scope: string; - name: string; - }[]; - statement: string; - then: string; - else: string; - maxOccurrences: number; - throwException?: boolean; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assertion"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - statement: string; - errorMessage?: string; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "execution"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - application: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - shortName: string; - summary: string; - version: string; - build: string; - hasAdvancedComputeOptions?: boolean; - isLicensed?: boolean; - }; - executable: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - applicationId: string[]; - hasAdvancedComputeOptions?: boolean; - }; - flavor: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - executableId: string; - executableName?: string; - applicationName?: string; - input: { - templateId?: string; - templateName?: string; - name?: string; - }[]; - supportedApplicationVersions?: string[]; - }; - input: { - template: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - applicationName: string; - applicationVersion?: string; - executableName: string; - contextProviders: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; - }[]; - content: string; - }; - rendered: string; - isManuallyChanged: boolean; - }[]; - context: ({ - name: "input"; - data: { - contextProviderName: "nwchem-total-energy"; - CHARGE: number; - MULT: number; - BASIS: string; - NAT: number; - NTYP: number; - ATOMIC_POSITIONS: string; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - ATOMIC_SPECIES: string; - FUNCTIONAL: string; - CARTESIAN: boolean; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS?: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - FIRST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - LAST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - INTERMEDIATE_IMAGES: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[][]; - contextProviderName: "qe-neb"; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - contextProviderName: "qe-pwx"; - } | { - POSCAR: string; - POSCAR_WITH_CONSTRAINTS: string; - contextProviderName: "vasp"; - } | { - FIRST_IMAGE: string; - LAST_IMAGE: string; - INTERMEDIATE_IMAGES: string[]; - contextProviderName: "vasp-neb"; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "cutoffs"; - data: { - wavefunction?: number; - density?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "kgrid" | "qgrid" | "igrid"; - data: { - dimensions: [number, number, number] | [string, string, string]; - shifts?: [number, number, number]; - reciprocalVectorRatios?: [number, number, number]; - gridMetricType: "KPPRA" | "spacing"; - gridMetricValue: number; - preferGridMetric?: boolean; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "qpath" | "ipath" | "kpath" | "explicitKPath" | "explicitKPath2PIBA"; - data: [{ - point?: string; - steps: number; - coordinates: number[]; - }, ...{ - point?: string; - steps: number; - coordinates: number[]; - }[]]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_j"; - data: [{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }, ...{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_u"; - data: { - atomicSpecies?: string; - atomicOrbital?: string; - hubbardUValue?: number; - }[]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_v"; - data: [{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }, ...{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_legacy"; - data: [{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }, ...{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "neb"; - data: { - nImages?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "boundaryConditions"; - data: { - type?: "pbc" | "bc1" | "bc2" | "bc3"; - offset?: number; - electricField?: number; - targetFermiEnergy?: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "mlSettings"; - data: { - target_column_name?: string; - problem_category?: "regression" | "classification" | "clustering"; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "mlTrainTestSplit"; - data: { - fraction_held_as_test_set?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "dynamics"; - data: { - numberOfSteps?: number; - timeStep?: number; - electronMass?: number; - temperature?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "collinearMagnetization"; - data: { - startingMagnetization: { - atomicSpecies: string; - value: number; - index: number; - }[]; - isTotalMagnetization: boolean; - totalMagnetization: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "nonCollinearMagnetization"; - data: { - isExistingChargeDensity?: boolean; - isStartingMagnetization?: boolean; - startingMagnetization?: { - index?: number; - atomicSpecies?: string; - value?: number; - }[]; - isArbitrarySpinAngle?: boolean; - isArbitrarySpinDirection?: boolean; - lforcet?: boolean; - spinAngles?: { - index?: number; - atomicSpecies?: string; - angle1?: number; - angle2?: number; - }[]; - isConstrainedMagnetization?: boolean; - constrainedMagnetization?: { - constrainType?: "none" | "total" | "atomic" | "total direction" | "atomic direction"; - lambda?: number; - }; - isFixedMagnetization?: boolean; - fixedMagnetization?: { - x?: number; - y?: number; - z?: number; - }; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assignment"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - scope?: string; - input?: { - scope: string; - name: string; - }[]; - operand: string; - value: string | boolean | number; - } | undefined; - unitIndex(flowchartId: string): number; - replaceUnit(index: number, unit: BaseUnit): void; - get scopeVariables(): string[]; - get scalarResults(): string[]; - get isMultiMaterial(): boolean; - get isDraft(): boolean; - setIsDraft(bool: boolean): void; - get methodData(): any; - /** - * @summary Calculates hash of the subworkflow. Meaningful fields are units, app and model. - * units must be sorted topologically before hashing (already sorted). - */ - calculateHash(): string; - _calculateModelHash(): string; - findUnitById(id: string): { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "io"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; - input: ({ - type: "db_ids"; - ids: string[]; - } | { - type: "db_collection"; - collection: string; - draft: boolean; - } | { - type: "object_storage"; - objectData: { - CONTAINER?: string; - NAME?: string; - PROVIDER?: string; - REGION?: string; - SIZE?: number; - TIMESTAMP?: string; - }; - overwrite?: boolean; - pathname?: string; - basename?: string; - filetype?: string; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "condition"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - input: { - scope: string; - name: string; - }[]; - statement: string; - then: string; - else: string; - maxOccurrences: number; - throwException?: boolean; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assertion"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - statement: string; - errorMessage?: string; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "execution"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - application: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - shortName: string; - summary: string; - version: string; - build: string; - hasAdvancedComputeOptions?: boolean; - isLicensed?: boolean; - }; - executable: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - applicationId: string[]; - hasAdvancedComputeOptions?: boolean; - }; - flavor: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - executableId: string; - executableName?: string; - applicationName?: string; - input: { - templateId?: string; - templateName?: string; - name?: string; - }[]; - supportedApplicationVersions?: string[]; - }; - input: { - template: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - applicationName: string; - applicationVersion?: string; - executableName: string; - contextProviders: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; - }[]; - content: string; - }; - rendered: string; - isManuallyChanged: boolean; - }[]; - context: ({ - name: "input"; - data: { - contextProviderName: "nwchem-total-energy"; - CHARGE: number; - MULT: number; - BASIS: string; - NAT: number; - NTYP: number; - ATOMIC_POSITIONS: string; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - ATOMIC_SPECIES: string; - FUNCTIONAL: string; - CARTESIAN: boolean; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS?: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - FIRST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - LAST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - INTERMEDIATE_IMAGES: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[][]; - contextProviderName: "qe-neb"; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - contextProviderName: "qe-pwx"; - } | { - POSCAR: string; - POSCAR_WITH_CONSTRAINTS: string; - contextProviderName: "vasp"; - } | { - FIRST_IMAGE: string; - LAST_IMAGE: string; - INTERMEDIATE_IMAGES: string[]; - contextProviderName: "vasp-neb"; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "cutoffs"; - data: { - wavefunction?: number; - density?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "kgrid" | "qgrid" | "igrid"; - data: { - dimensions: [number, number, number] | [string, string, string]; - shifts?: [number, number, number]; - reciprocalVectorRatios?: [number, number, number]; - gridMetricType: "KPPRA" | "spacing"; - gridMetricValue: number; - preferGridMetric?: boolean; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "qpath" | "ipath" | "kpath" | "explicitKPath" | "explicitKPath2PIBA"; - data: [{ - point?: string; - steps: number; - coordinates: number[]; - }, ...{ - point?: string; - steps: number; - coordinates: number[]; - }[]]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_j"; - data: [{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }, ...{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_u"; - data: { - atomicSpecies?: string; - atomicOrbital?: string; - hubbardUValue?: number; - }[]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_v"; - data: [{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }, ...{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_legacy"; - data: [{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }, ...{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "neb"; - data: { - nImages?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "boundaryConditions"; - data: { - type?: "pbc" | "bc1" | "bc2" | "bc3"; - offset?: number; - electricField?: number; - targetFermiEnergy?: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "mlSettings"; - data: { - target_column_name?: string; - problem_category?: "regression" | "classification" | "clustering"; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "mlTrainTestSplit"; - data: { - fraction_held_as_test_set?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "dynamics"; - data: { - numberOfSteps?: number; - timeStep?: number; - electronMass?: number; - temperature?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "collinearMagnetization"; - data: { - startingMagnetization: { - atomicSpecies: string; - value: number; - index: number; - }[]; - isTotalMagnetization: boolean; - totalMagnetization: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "nonCollinearMagnetization"; - data: { - isExistingChargeDensity?: boolean; - isStartingMagnetization?: boolean; - startingMagnetization?: { - index?: number; - atomicSpecies?: string; - value?: number; - }[]; - isArbitrarySpinAngle?: boolean; - isArbitrarySpinDirection?: boolean; - lforcet?: boolean; - spinAngles?: { - index?: number; - atomicSpecies?: string; - angle1?: number; - angle2?: number; - }[]; - isConstrainedMagnetization?: boolean; - constrainedMagnetization?: { - constrainType?: "none" | "total" | "atomic" | "total direction" | "atomic direction"; - lambda?: number; - }; - isFixedMagnetization?: boolean; - fixedMagnetization?: { - x?: number; - y?: number; - z?: number; - }; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assignment"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - scope?: string; - input?: { - scope: string; - name: string; - }[]; - operand: string; - value: string | boolean | number; - } | undefined; - findUnitKeyById(id: string): string; - findUnitWithTag(tag: string): { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "io"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - subtype: "input" | "output" | "dataFrame"; - source: "api" | "db" | "object_storage"; - input: ({ - type: "db_ids"; - ids: string[]; - } | { - type: "db_collection"; - collection: string; - draft: boolean; - } | { - type: "object_storage"; - objectData: { - CONTAINER?: string; - NAME?: string; - PROVIDER?: string; - REGION?: string; - SIZE?: number; - TIMESTAMP?: string; - }; - overwrite?: boolean; - pathname?: string; - basename?: string; - filetype?: string; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "condition"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - input: { - scope: string; - name: string; - }[]; - statement: string; - then: string; - else: string; - maxOccurrences: number; - throwException?: boolean; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assertion"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - statement: string; - errorMessage?: string; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "execution"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - application: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - shortName: string; - summary: string; - version: string; - build: string; - hasAdvancedComputeOptions?: boolean; - isLicensed?: boolean; - }; - executable: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - applicationId: string[]; - hasAdvancedComputeOptions?: boolean; - }; - flavor: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - executableId: string; - executableName?: string; - applicationName?: string; - input: { - templateId?: string; - templateName?: string; - name?: string; - }[]; - supportedApplicationVersions?: string[]; - }; - input: { - template: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - applicationName: string; - applicationVersion?: string; - executableName: string; - contextProviders: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; - }[]; - content: string; - }; - rendered: string; - isManuallyChanged: boolean; - }[]; - context: ({ - name: "input"; - data: { - contextProviderName: "nwchem-total-energy"; - CHARGE: number; - MULT: number; - BASIS: string; - NAT: number; - NTYP: number; - ATOMIC_POSITIONS: string; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - ATOMIC_SPECIES: string; - FUNCTIONAL: string; - CARTESIAN: boolean; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS?: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - FIRST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - LAST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - INTERMEDIATE_IMAGES: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[][]; - contextProviderName: "qe-neb"; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - contextProviderName: "qe-pwx"; - } | { - POSCAR: string; - POSCAR_WITH_CONSTRAINTS: string; - contextProviderName: "vasp"; - } | { - FIRST_IMAGE: string; - LAST_IMAGE: string; - INTERMEDIATE_IMAGES: string[]; - contextProviderName: "vasp-neb"; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "cutoffs"; - data: { - wavefunction?: number; - density?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "kgrid" | "qgrid" | "igrid"; - data: { - dimensions: [number, number, number] | [string, string, string]; - shifts?: [number, number, number]; - reciprocalVectorRatios?: [number, number, number]; - gridMetricType: "KPPRA" | "spacing"; - gridMetricValue: number; - preferGridMetric?: boolean; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "qpath" | "ipath" | "kpath" | "explicitKPath" | "explicitKPath2PIBA"; - data: [{ - point?: string; - steps: number; - coordinates: number[]; - }, ...{ - point?: string; - steps: number; - coordinates: number[]; - }[]]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_j"; - data: [{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }, ...{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_u"; - data: { - atomicSpecies?: string; - atomicOrbital?: string; - hubbardUValue?: number; - }[]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_v"; - data: [{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }, ...{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_legacy"; - data: [{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }, ...{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "neb"; - data: { - nImages?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "boundaryConditions"; - data: { - type?: "pbc" | "bc1" | "bc2" | "bc3"; - offset?: number; - electricField?: number; - targetFermiEnergy?: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "mlSettings"; - data: { - target_column_name?: string; - problem_category?: "regression" | "classification" | "clustering"; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "mlTrainTestSplit"; - data: { - fraction_held_as_test_set?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "dynamics"; - data: { - numberOfSteps?: number; - timeStep?: number; - electronMass?: number; - temperature?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "collinearMagnetization"; - data: { - startingMagnetization: { - atomicSpecies: string; - value: number; - index: number; - }[]; - isTotalMagnetization: boolean; - totalMagnetization: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "nonCollinearMagnetization"; - data: { - isExistingChargeDensity?: boolean; - isStartingMagnetization?: boolean; - startingMagnetization?: { - index?: number; - atomicSpecies?: string; - value?: number; - }[]; - isArbitrarySpinAngle?: boolean; - isArbitrarySpinDirection?: boolean; - lforcet?: boolean; - spinAngles?: { - index?: number; - atomicSpecies?: string; - angle1?: number; - angle2?: number; - }[]; - isConstrainedMagnetization?: boolean; - constrainedMagnetization?: { - constrainType?: "none" | "total" | "atomic" | "total direction" | "atomic direction"; - lambda?: number; - }; - isFixedMagnetization?: boolean; - fixedMagnetization?: { - x?: number; - y?: number; - z?: number; - }; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - })[]; - } | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assignment"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - scope?: string; - input?: { - scope: string; - name: string; - }[]; - operand: string; - value: string | boolean | number; - } | undefined; - get hasConvergence(): boolean; -} -export {}; diff --git a/dist/js/workflows/workflow.d.ts b/dist/js/workflows/workflow.d.ts deleted file mode 100644 index bb88caae..00000000 --- a/dist/js/workflows/workflow.d.ts +++ /dev/null @@ -1,4453 +0,0 @@ -export class Workflow extends BaseWorkflow { - static getDefaultComputeConfig: any; - static jsonSchema: { - $id: string; - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - workflows: { - description: string; - type: string; - items: { - type: string; - }; - }; - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - metadata: { - type: string; - }; - properties: { - description: string; - type: string; - items: { - description: string; - type: string; - }; - }; - isUsingDataset: { - description: string; - type: string; - }; - subworkflows: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - properties: { - description: string; - type: string; - items: { - description: string; - type: string; - }; - }; - compute: { - $schema: string; - title: string; - description: string; - type: string; - required: string[]; - properties: { - queue: { - description: string; - type: string; - enum: string[]; - }; - nodes: { - description: string; - type: string; - }; - ppn: { - description: string; - type: string; - }; - timeLimit: { - description: string; - type: string; - }; - timeLimitType: { - description: string; - type: string; - default: string; - enum: string[]; - }; - isRestartable: { - description: string; - type: string; - default: boolean; - }; - notify: { - description: string; - type: string; - }; - email: { - description: string; - type: string; - }; - maxCPU: { - description: string; - type: string; - }; - arguments: { - description: string; - default: {}; - $schema: string; - title: string; - type: string; - additionalProperties: boolean; - properties: { - nimage: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - npools: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - nband: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - ntg: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - ndiag: { - description: string; - type: string; - default: number; - minimum: number; - maximum: number; - }; - }; - }; - cluster: { - description: string; - type: string; - properties: { - fqdn: { - description: string; - type: string; - }; - jid: { - description: string; - type: string; - }; - }; - }; - errors: { - description: string; - type: string; - items: { - type: string; - properties: { - domain: { - description: string; - type: string; - enum: string[]; - }; - reason: { - description: string; - type: string; - }; - message: { - description: string; - type: string; - }; - traceback: { - description: string; - type: string; - }; - }; - }; - }; - excludeFilesPattern: { - description: string; - type: string; - }; - }; - }; - units: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - oneOf: ({ - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - subtype: { - enum: string[]; - }; - source: { - enum: string[]; - }; - input: { - type: string; - items: { - oneOf: ({ - $schema: string; - title: string; - type: string; - properties: { - type: { - const: string; - }; - ids: { - description: string; - type: string; - items: { - type: string; - }; - }; - collection?: undefined; - draft?: undefined; - objectData?: undefined; - overwrite?: undefined; - pathname?: undefined; - basename?: undefined; - filetype?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - type: string; - properties: { - type: { - const: string; - }; - collection: { - description: string; - type: string; - }; - draft: { - description: string; - type: string; - }; - ids?: undefined; - objectData?: undefined; - overwrite?: undefined; - pathname?: undefined; - basename?: undefined; - filetype?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - const: string; - }; - objectData: { - $schema: string; - title: string; - type: string; - properties: { - CONTAINER: { - description: string; - type: string; - }; - NAME: { - description: string; - type: string; - }; - PROVIDER: { - description: string; - type: string; - }; - REGION: { - description: string; - type: string; - }; - SIZE: { - description: string; - type: string; - }; - TIMESTAMP: { - description: string; - type: string; - }; - }; - }; - overwrite: { - description: string; - type: string; - }; - pathname: { - description: string; - type: string; - }; - basename: { - description: string; - type: string; - $comment: string; - }; - filetype: { - description: string; - type: string; - }; - ids?: undefined; - collection?: undefined; - draft?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - $schema?: undefined; - title?: undefined; - type?: undefined; - required?: undefined; - properties?: undefined; - }; - description?: undefined; - }; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - }; - statement: { - description: string; - type: string; - }; - then: { - description: string; - type: string; - }; - else: { - description: string; - type: string; - }; - maxOccurrences: { - description: string; - type: string; - }; - throwException: { - description: string; - type: string; - }; - subtype?: undefined; - source?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - statement: { - type: string; - description: string; - }; - errorMessage: { - type: string; - description: string; - }; - subtype?: undefined; - source?: undefined; - input?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - application: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - shortName: { - description: string; - type: string; - }; - summary: { - description: string; - type: string; - }; - version: { - description: string; - type: string; - }; - build: { - description: string; - type: string; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - isLicensed: { - description: string; - type: string; - }; - }; - }; - executable: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - applicationId: { - description: string; - type: string; - items: { - type: string; - }; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - }; - }; - flavor: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - executableId: { - description: string; - type: string; - }; - executableName: { - description: string; - type: string; - }; - applicationName: { - description: string; - type: string; - }; - input: { - title: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - additionalProperties: boolean; - properties: { - templateId: { - type: string; - }; - templateName: { - type: string; - }; - name: { - description: string; - type: string; - }; - }; - }; - }; - supportedApplicationVersions: { - description: string; - type: string; - items: { - type: string; - }; - }; - }; - }; - input: { - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - template: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - applicationName: { - type: string; - }; - applicationVersion: { - type: string; - }; - executableName: { - type: string; - }; - contextProviders: { - type: string; - items: { - description: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - tsType: string; - }; - }; - }; - }; - content: { - description: string; - type: string; - }; - }; - }; - rendered: { - description: string; - type: string; - }; - isManuallyChanged: { - type: string; - default: boolean; - }; - scope?: undefined; - name?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - description?: undefined; - }; - context: { - type: string; - items: { - $schema: string; - title: string; - oneOf: ({ - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - oneOf: ({ - $schema: string; - title: string; - description: string; - type: string; - properties: { - contextProviderName: { - type: string; - const: string; - description: string; - }; - CHARGE: { - type: string; - description: string; - }; - MULT: { - type: string; - description: string; - }; - BASIS: { - type: string; - description: string; - }; - NAT: { - type: string; - description: string; - }; - NTYP: { - type: string; - description: string; - }; - ATOMIC_POSITIONS: { - type: string; - description: string; - items?: undefined; - }; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: { - type: string; - description: string; - }; - ATOMIC_SPECIES: { - type: string; - description: string; - items?: undefined; - }; - FUNCTIONAL: { - type: string; - description: string; - }; - CARTESIAN: { - type: string; - description: string; - }; - IBRAV?: undefined; - RESTART_MODE?: undefined; - ATOMIC_SPECIES_WITH_LABELS?: undefined; - NTYP_WITH_LABELS?: undefined; - CELL_PARAMETERS?: undefined; - FIRST_IMAGE?: undefined; - LAST_IMAGE?: undefined; - INTERMEDIATE_IMAGES?: undefined; - POSCAR?: undefined; - POSCAR_WITH_CONSTRAINTS?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - description: string; - type: string; - required: string[]; - properties: { - IBRAV: { - type: string; - }; - RESTART_MODE: { - type: string; - enum: string[]; - default: string; - }; - ATOMIC_SPECIES: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - Mass_X: { - type: string; - description: string; - }; - PseudoPot_X: { - type: string; - description: string; - }; - }; - }; - description?: undefined; - }; - ATOMIC_SPECIES_WITH_LABELS: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - Mass_X: { - type: string; - description: string; - }; - PseudoPot_X: { - type: string; - description: string; - }; - }; - }; - }; - NAT: { - type: string; - description: string; - }; - NTYP: { - type: string; - description: string; - }; - NTYP_WITH_LABELS: { - type: string; - description: string; - minimum: number; - }; - ATOMIC_POSITIONS: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - x: { - type: string; - description: string; - }; - y: { - type: string; - description: string; - }; - z: { - type: string; - description: string; - }; - "if_pos(1)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(2)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(3)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - }; - }; - description?: undefined; - }; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: { - type: string; - description: string; - }; - CELL_PARAMETERS: { - type: string; - additionalProperties: boolean; - properties: { - v1: { - $schema: string; - title: string; - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - v2: { - $schema: string; - title: string; - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - v3: { - $schema: string; - title: string; - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - }; - }; - FIRST_IMAGE: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - x: { - type: string; - description: string; - }; - y: { - type: string; - description: string; - }; - z: { - type: string; - description: string; - }; - "if_pos(1)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(2)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(3)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - }; - }; - description?: undefined; - }; - LAST_IMAGE: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - x: { - type: string; - description: string; - }; - y: { - type: string; - description: string; - }; - z: { - type: string; - description: string; - }; - "if_pos(1)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(2)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(3)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - }; - }; - description?: undefined; - }; - INTERMEDIATE_IMAGES: { - type: string; - description: string; - items: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - x: { - type: string; - description: string; - }; - y: { - type: string; - description: string; - }; - z: { - type: string; - description: string; - }; - "if_pos(1)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(2)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(3)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - }; - }; - }; - }; - contextProviderName: { - type: string; - const: string; - description: string; - }; - CHARGE?: undefined; - MULT?: undefined; - BASIS?: undefined; - FUNCTIONAL?: undefined; - CARTESIAN?: undefined; - POSCAR?: undefined; - POSCAR_WITH_CONSTRAINTS?: undefined; - }; - } | { - $schema: string; - title: string; - description: string; - type: string; - required: string[]; - properties: { - IBRAV: { - type: string; - }; - RESTART_MODE: { - type: string; - enum: string[]; - default: string; - }; - ATOMIC_SPECIES: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - Mass_X: { - type: string; - description: string; - }; - PseudoPot_X: { - type: string; - description: string; - }; - }; - }; - description?: undefined; - }; - ATOMIC_SPECIES_WITH_LABELS: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - Mass_X: { - type: string; - description: string; - }; - PseudoPot_X: { - type: string; - description: string; - }; - }; - }; - }; - NAT: { - type: string; - description: string; - }; - NTYP: { - type: string; - description: string; - }; - NTYP_WITH_LABELS: { - type: string; - description: string; - minimum: number; - }; - ATOMIC_POSITIONS: { - type: string; - items: { - type: string; - required: string[]; - additionalProperties: boolean; - properties: { - X: { - type: string; - description: string; - }; - x: { - type: string; - description: string; - }; - y: { - type: string; - description: string; - }; - z: { - type: string; - description: string; - }; - "if_pos(1)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(2)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - "if_pos(3)": { - $schema: string; - title: string; - type: string; - minimum: number; - maximum: number; - }; - }; - }; - description?: undefined; - }; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: { - type: string; - description: string; - }; - CELL_PARAMETERS: { - type: string; - additionalProperties: boolean; - properties: { - v1: { - $schema: string; - title: string; - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - v2: { - $schema: string; - title: string; - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - v3: { - $schema: string; - title: string; - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - }; - }; - contextProviderName: { - type: string; - const: string; - description: string; - }; - CHARGE?: undefined; - MULT?: undefined; - BASIS?: undefined; - FUNCTIONAL?: undefined; - CARTESIAN?: undefined; - FIRST_IMAGE?: undefined; - LAST_IMAGE?: undefined; - INTERMEDIATE_IMAGES?: undefined; - POSCAR?: undefined; - POSCAR_WITH_CONSTRAINTS?: undefined; - }; - } | { - $schema: string; - title: string; - description: string; - type: string; - properties: { - POSCAR: { - type: string; - description: string; - }; - POSCAR_WITH_CONSTRAINTS: { - type: string; - description: string; - }; - contextProviderName: { - type: string; - const: string; - description: string; - }; - CHARGE?: undefined; - MULT?: undefined; - BASIS?: undefined; - NAT?: undefined; - NTYP?: undefined; - ATOMIC_POSITIONS?: undefined; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: undefined; - ATOMIC_SPECIES?: undefined; - FUNCTIONAL?: undefined; - CARTESIAN?: undefined; - IBRAV?: undefined; - RESTART_MODE?: undefined; - ATOMIC_SPECIES_WITH_LABELS?: undefined; - NTYP_WITH_LABELS?: undefined; - CELL_PARAMETERS?: undefined; - FIRST_IMAGE?: undefined; - LAST_IMAGE?: undefined; - INTERMEDIATE_IMAGES?: undefined; - }; - required: string[]; - } | { - $schema: string; - title: string; - description: string; - type: string; - properties: { - FIRST_IMAGE: { - type: string; - description: string; - items?: undefined; - }; - LAST_IMAGE: { - type: string; - description: string; - items?: undefined; - }; - INTERMEDIATE_IMAGES: { - type: string; - description: string; - items: { - type: string; - items?: undefined; - }; - }; - contextProviderName: { - type: string; - const: string; - description: string; - }; - CHARGE?: undefined; - MULT?: undefined; - BASIS?: undefined; - NAT?: undefined; - NTYP?: undefined; - ATOMIC_POSITIONS?: undefined; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: undefined; - ATOMIC_SPECIES?: undefined; - FUNCTIONAL?: undefined; - CARTESIAN?: undefined; - IBRAV?: undefined; - RESTART_MODE?: undefined; - ATOMIC_SPECIES_WITH_LABELS?: undefined; - NTYP_WITH_LABELS?: undefined; - CELL_PARAMETERS?: undefined; - POSCAR?: undefined; - POSCAR_WITH_CONSTRAINTS?: undefined; - }; - required: string[]; - })[]; - discriminator: { - propertyName: string; - }; - $schema?: undefined; - title?: undefined; - description?: undefined; - type?: undefined; - properties?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - properties: { - wavefunction: { - type: string; - }; - density: { - type: string; - }; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - enum: string[]; - const?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - required: string[]; - properties: { - dimensions: { - oneOf: { - type: string; - items: { - type: string; - }; - minItems: number; - maxItems: number; - }[]; - }; - shifts: { - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - reciprocalVectorRatios: { - type: string; - minItems: number; - maxItems: number; - items: { - type: string; - }; - }; - gridMetricType: { - type: string; - enum: string[]; - }; - gridMetricValue: { - type: string; - }; - preferGridMetric: { - type: string; - }; - wavefunction?: undefined; - density?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - enum: string[]; - const?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - minItems: number; - items: { - type: string; - required: string[]; - properties: { - point: { - type: string; - }; - steps: { - type: string; - }; - coordinates: { - type: string; - items: { - type: string; - }; - }; - paramType?: undefined; - atomicSpecies?: undefined; - atomicOrbital?: undefined; - value?: undefined; - hubbardUValue?: undefined; - siteIndex?: undefined; - atomicSpecies2?: undefined; - siteIndex2?: undefined; - atomicOrbital2?: undefined; - hubbardVValue?: undefined; - atomicSpeciesIndex?: undefined; - }; - }; - oneOf?: undefined; - discriminator?: undefined; - properties?: undefined; - required?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - minItems: number; - items: { - type: string; - properties: { - paramType: { - type: string; - title: string; - enum: string[]; - }; - atomicSpecies: { - type: string; - title: string; - }; - atomicOrbital: { - type: string; - title: string; - }; - value: { - type: string; - title: string; - }; - point?: undefined; - steps?: undefined; - coordinates?: undefined; - hubbardUValue?: undefined; - siteIndex?: undefined; - atomicSpecies2?: undefined; - siteIndex2?: undefined; - atomicOrbital2?: undefined; - hubbardVValue?: undefined; - atomicSpeciesIndex?: undefined; - }; - required?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - properties?: undefined; - required?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - items: { - type: string; - properties: { - atomicSpecies: { - type: string; - title: string; - }; - atomicOrbital: { - type: string; - title: string; - }; - hubbardUValue: { - type: string; - title: string; - }; - point?: undefined; - steps?: undefined; - coordinates?: undefined; - paramType?: undefined; - value?: undefined; - siteIndex?: undefined; - atomicSpecies2?: undefined; - siteIndex2?: undefined; - atomicOrbital2?: undefined; - hubbardVValue?: undefined; - atomicSpeciesIndex?: undefined; - }; - required?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - properties?: undefined; - required?: undefined; - minItems?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - minItems: number; - items: { - type: string; - properties: { - atomicSpecies: { - type: string; - title: string; - }; - siteIndex: { - type: string; - title: string; - }; - atomicOrbital: { - type: string; - title: string; - }; - atomicSpecies2: { - type: string; - title: string; - }; - siteIndex2: { - type: string; - title: string; - }; - atomicOrbital2: { - type: string; - title: string; - }; - hubbardVValue: { - type: string; - title: string; - }; - point?: undefined; - steps?: undefined; - coordinates?: undefined; - paramType?: undefined; - value?: undefined; - hubbardUValue?: undefined; - atomicSpeciesIndex?: undefined; - }; - required?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - properties?: undefined; - required?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - uniqueItems: boolean; - minItems: number; - items: { - type: string; - properties: { - atomicSpecies: { - type: string; - title: string; - }; - atomicSpeciesIndex: { - type: string; - title: string; - }; - hubbardUValue: { - type: string; - title: string; - }; - point?: undefined; - steps?: undefined; - coordinates?: undefined; - paramType?: undefined; - atomicOrbital?: undefined; - value?: undefined; - siteIndex?: undefined; - atomicSpecies2?: undefined; - siteIndex2?: undefined; - atomicOrbital2?: undefined; - hubbardVValue?: undefined; - }; - required?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - properties?: undefined; - required?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - properties: { - nImages: { - type: string; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - type: string; - properties: { - type: { - type: string; - enum: string[]; - default: string; - description: string; - }; - offset: { - type: string; - }; - electricField: { - type: string; - title: string; - }; - targetFermiEnergy: { - type: string; - title: string; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - description?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - properties: { - target_column_name: { - type: string; - }; - problem_category: { - type: string; - enum: string[]; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - properties: { - fraction_held_as_test_set: { - type: string; - minimum: number; - maximum: number; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - properties: { - numberOfSteps: { - type: string; - title: string; - }; - timeStep: { - type: string; - title: string; - }; - electronMass: { - type: string; - title: string; - }; - temperature: { - type: string; - title: string; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - startingMagnetization?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - isEdited: { - type: string; - }; - extraData: { - type: string; - $schema?: undefined; - title?: undefined; - required?: undefined; - properties?: undefined; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - required: string[]; - properties: { - startingMagnetization: { - type: string; - items: { - type: string; - required: string[]; - properties: { - atomicSpecies: { - type: string; - title: string; - }; - value: { - type: string; - title: string; - minimum: number; - maximum: number; - }; - index: { - type: string; - title: string; - }; - }; - }; - }; - isTotalMagnetization: { - type: string; - title: string; - }; - totalMagnetization: { - type: string; - title: string; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - isExistingChargeDensity?: undefined; - isStartingMagnetization?: undefined; - isArbitrarySpinAngle?: undefined; - isArbitrarySpinDirection?: undefined; - lforcet?: undefined; - spinAngles?: undefined; - isConstrainedMagnetization?: undefined; - constrainedMagnetization?: undefined; - isFixedMagnetization?: undefined; - fixedMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - type: string; - const: string; - enum?: undefined; - }; - data: { - $schema: string; - title: string; - description: string; - type: string; - properties: { - isExistingChargeDensity: { - type: string; - title: string; - }; - isStartingMagnetization: { - type: string; - title: string; - }; - startingMagnetization: { - type: string; - items: { - type: string; - properties: { - index: { - type: string; - title: string; - }; - atomicSpecies: { - type: string; - title: string; - }; - value: { - type: string; - title: string; - minimum?: undefined; - maximum?: undefined; - }; - }; - required?: undefined; - }; - }; - isArbitrarySpinAngle: { - type: string; - title: string; - }; - isArbitrarySpinDirection: { - type: string; - title: string; - }; - lforcet: { - type: string; - }; - spinAngles: { - type: string; - items: { - type: string; - properties: { - index: { - type: string; - title: string; - }; - atomicSpecies: { - type: string; - title: string; - }; - angle1: { - type: string; - title: string; - }; - angle2: { - type: string; - title: string; - }; - }; - }; - }; - isConstrainedMagnetization: { - type: string; - title: string; - }; - constrainedMagnetization: { - type: string; - properties: { - constrainType: { - type: string; - title: string; - enum: string[]; - }; - lambda: { - type: string; - title: string; - }; - }; - }; - isFixedMagnetization: { - type: string; - title: string; - }; - fixedMagnetization: { - type: string; - properties: { - x: { - type: string; - title: string; - }; - y: { - type: string; - title: string; - }; - z: { - type: string; - title: string; - }; - }; - }; - wavefunction?: undefined; - density?: undefined; - dimensions?: undefined; - shifts?: undefined; - reciprocalVectorRatios?: undefined; - gridMetricType?: undefined; - gridMetricValue?: undefined; - preferGridMetric?: undefined; - nImages?: undefined; - type?: undefined; - offset?: undefined; - electricField?: undefined; - targetFermiEnergy?: undefined; - target_column_name?: undefined; - problem_category?: undefined; - fraction_held_as_test_set?: undefined; - numberOfSteps?: undefined; - timeStep?: undefined; - electronMass?: undefined; - temperature?: undefined; - isTotalMagnetization?: undefined; - totalMagnetization?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - required?: undefined; - minItems?: undefined; - items?: undefined; - uniqueItems?: undefined; - }; - extraData: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - materialHash: { - type: string; - }; - }; - }; - isEdited: { - type: string; - }; - }; - })[]; - }; - }; - subtype?: undefined; - source?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - scope?: undefined; - operand?: undefined; - value?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - scope: { - type: string; - }; - input: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - template?: undefined; - rendered?: undefined; - isManuallyChanged?: undefined; - }; - oneOf?: undefined; - discriminator?: undefined; - }; - }; - operand: { - description: string; - type: string; - }; - value: { - description: string; - oneOf: { - type: string; - }[]; - }; - subtype?: undefined; - source?: undefined; - statement?: undefined; - then?: undefined; - else?: undefined; - maxOccurrences?: undefined; - throwException?: undefined; - errorMessage?: undefined; - application?: undefined; - executable?: undefined; - flavor?: undefined; - context?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - required: string[]; - }; - }; - model: { - $schema: string; - title: string; - type: string; - oneOf: ({ - $schema: string; - title: string; - type: string; - definitions: { - lda: { - required: string[]; - properties: { - type: { - const: string; - }; - subtype: { - const: string; - }; - functional: { - enum: string[]; - }; - method: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - precision: { - description: string; - type: string; - }; - data: { - description: string; - type: string; - }; - }; - }; - }; - }; - gga: { - required: string[]; - properties: { - type: { - const: string; - }; - subtype: { - const: string; - }; - functional: { - enum: string[]; - }; - method: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - precision: { - description: string; - type: string; - }; - data: { - description: string; - type: string; - }; - }; - }; - }; - }; - hybrid: { - required: string[]; - properties: { - type: { - const: string; - }; - subtype: { - const: string; - }; - functional: { - enum: string[]; - }; - method: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - precision: { - description: string; - type: string; - }; - data: { - description: string; - type: string; - }; - }; - }; - }; - }; - }; - oneOf: { - properties: { - type: { - const: string; - }; - subtype: { - const: string; - }; - functional: { - enum: string[]; - }; - method: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - precision: { - description: string; - type: string; - }; - data: { - description: string; - type: string; - }; - }; - }; - }; - required: string[]; - }[]; - discriminator: { - propertyName: string; - }; - required: string[]; - properties: { - type: { - const: string; - enum?: undefined; - }; - subtype?: undefined; - method?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - properties: { - type: { - enum: string[]; - const?: undefined; - }; - subtype: { - enum: string[]; - }; - method: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - type: { - description: string; - type: string; - }; - subtype: { - description: string; - type: string; - }; - precision: { - description: string; - type: string; - }; - data: { - description: string; - type: string; - }; - }; - }; - }; - required: string[]; - definitions?: undefined; - oneOf?: undefined; - discriminator?: undefined; - })[]; - discriminator: { - propertyName: string; - }; - }; - application: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - shortName: { - description: string; - type: string; - }; - summary: { - description: string; - type: string; - }; - version: { - description: string; - type: string; - }; - build: { - description: string; - type: string; - }; - hasAdvancedComputeOptions: { - description: string; - type: string; - }; - isLicensed: { - description: string; - type: string; - }; - }; - }; - isDraft: { - description: string; - type: string; - default: boolean; - }; - }; - }; - }; - units: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - oneOf: ({ - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - workflowId: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - required: string[]; - properties: { - target: { - description: string; - type: string; - }; - scope: { - description: string; - type: string; - }; - name: { - description: string; - type: string; - }; - values: { - description: string; - type: string; - items: { - oneOf: { - type: string; - }[]; - }; - }; - useValues: { - type: string; - }; - }; - items?: undefined; - }; - mapFlowchartId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - mapFlowchartId: { - description: string; - type: string; - }; - input: { - description: string; - type: string; - items: { - type: string; - required: string[]; - properties: { - operation: { - description: string; - type: string; - }; - arguments: { - description: string; - type: string; - items: { - type: string; - }; - }; - }; - }; - required?: undefined; - properties?: undefined; - }; - workflowId?: undefined; - }; - } | { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - _id: { - description: string; - type: string; - }; - slug: { - description: string; - type: string; - }; - systemName: { - type: string; - }; - schemaVersion: { - description: string; - type: string; - default: string; - }; - name: { - description: string; - type: string; - }; - isDefault: { - description: string; - type: string; - default: boolean; - }; - preProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - postProcessors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - monitors: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - results: { - description: string; - type: string; - items: { - $schema: string; - title: string; - type: string; - required: string[]; - properties: { - name: { - description: string; - type: string; - }; - }; - }; - }; - tags: { - description: string; - type: string; - items: { - type: string; - }; - }; - status: { - type: string; - description: string; - enum: string[]; - }; - statusTrack: { - type: string; - items: { - type: string; - required: string[]; - properties: { - trackedAt: { - type: string; - }; - status: { - type: string; - }; - repetition: { - type: string; - }; - }; - }; - }; - isDraft: { - type: string; - }; - type: { - description: string; - type: string; - const: string; - }; - head: { - description: string; - type: string; - }; - flowchartId: { - description: string; - type: string; - }; - next: { - description: string; - type: string; - }; - enableRender: { - description: string; - type: string; - }; - workflowId?: undefined; - input?: undefined; - mapFlowchartId?: undefined; - }; - })[]; - discriminator: { - propertyName: string; - }; - required: string[]; - }; - }; - }; - }; - static usePredefinedIds: boolean; - static get defaultConfig(): { - name: string; - properties: never[]; - subworkflows: { - _id: string; - application: { - name: string; - summary: string; - version: string; - }; - model: { - method: { - subtype: string; - type: string; - }; - subtype: string; - type: string; - }; - name: string; - properties: never[]; - units: never[]; - }[]; - workflows: never[]; - units: { - _id: string; - flowchartId: string; - head: boolean; - monitors: never[]; - postProcessors: never[]; - preProcessors: never[]; - results: never[]; - type: string; - name: string; - }[]; - }; - static generateWorkflowId(name: any, properties?: null, subworkflows?: null, applicationName?: null): any; - static fromSubworkflow(subworkflow: any, ClsConstructor?: typeof Workflow): Workflow; - static fromSubworkflows(name: any, ClsConstructor?: typeof Workflow, ...subworkflows: any[]): Workflow; - constructor(config: any, _Subworkflow?: typeof Subworkflow, _UnitFactory?: typeof UnitFactory, _Workflow?: typeof Workflow, _MapUnit?: typeof MapUnit); - _Subworkflow: typeof Subworkflow; - _UnitFactory: typeof UnitFactory; - _Workflow: typeof Workflow; - _MapUnit: typeof MapUnit; - initialize(): void; - _subworkflows: any; - _units: any; - _workflows: any; - /** - * @summary Adds subworkflow to current workflow. - * @param subworkflow {Subworkflow} - * @param head {Boolean} - */ - addSubworkflow(subworkflow: Subworkflow, head?: boolean, index?: number): void; - removeSubworkflow(id: any): void; - subworkflowId(index: any): any; - replaceSubworkflowAtIndex(index: any, newSubworkflow: any): void; - get units(): any; - setUnits(arr: any): void; - get usedApplications(): any[]; - get usedApplicationNames(): any[]; - get usedApplicationVersions(): any[]; - get usedApplicationNamesWithVersions(): string[]; - get usedModels(): any[]; - get humanReadableUsedModels(): any[]; - toJSON(exclude?: any[]): lodash.Omit; - get isDefault(): any; - set isMultiMaterial(value: any); - get isMultiMaterial(): any; - set isUsingDataset(value: boolean); - get isUsingDataset(): boolean; - get properties(): any[]; - get humanReadableProperties(): string[]; - get systemName(): string; - get defaultDescription(): string; - get exabyteId(): any; - get hash(): any; - get isOutdated(): any; - get history(): any; - setMethodData(methodData: any): void; - /** - * @param unit {Unit} - * @param head {Boolean} - * @param index {Number} - */ - addUnit(unit: Unit, head?: boolean, index?: number): void; - removeUnit(flowchartId: any): void; - /** - * @return Subworkflow[] - */ - get subworkflows(): any; - get workflows(): any; - addUnitType(type: any, head?: boolean, index?: number): void; - addMapUnit(mapUnit: any, mapWorkflow: any): void; - findSubworkflowById(id: any): any; - get allSubworkflows(): any[]; - /** - * @summary Calculates hash of the workflow. Meaningful fields are units and subworkflows. - * units and subworkflows must be sorted topologically before hashing (already sorted). - */ - calculateHash(): string; -} -declare class BaseWorkflow { -} -import { Subworkflow } from "../subworkflows/subworkflow"; -import { UnitFactory } from "../units/factory"; -import { MapUnit } from "../units"; -import lodash from "lodash"; -export {}; diff --git a/package-lock.json b/package-lock.json index 5ef16ce2..e0e92b54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#51a506ec7955b608d02f686cf09a38ee8d90e24a", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "2026.1.12-0", @@ -2475,8 +2475,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#51a506ec7955b608d02f686cf09a38ee8d90e24a", - "integrity": "sha512-ixS1WlkBIj3izXVJaJWB5X4vzMn6HxbdwwHEIJAkF+0ISIf/lfFHaXSondkHLa+7QzpCjELTvHJUuLl3YlSUYQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#66ac7dcfd993cc492644e158b0b422b2ddbdacec", + "integrity": "sha512-MlG1UccCt4e1o3UK4wO5fg5hlgwekDdXwMtMnWw3n+ICNfyTzIS2xpkP/GhxZhS/JagxsGxah9YNcr7MZaN8MA==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index fd35fb43..05493da3 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#51a506ec7955b608d02f686cf09a38ee8d90e24a", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "2026.1.12-0", diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index 4cb6984b..4a3fef3b 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -191,6 +191,7 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub } this.application = application.toJSON(); + // set model to the default one for the application selected this.setModel( this.ModelFactory.createFromApplication({ diff --git a/src/js/generated/SubworkflowSchemaMixin.ts b/src/js/generated/SubworkflowSchemaMixin.ts index a9954d11..cb63d88f 100644 --- a/src/js/generated/SubworkflowSchemaMixin.ts +++ b/src/js/generated/SubworkflowSchemaMixin.ts @@ -40,6 +40,12 @@ export function subworkflowSchemaMixin( set application(value: SubworkflowMixinSchema["application"]) { this.setProp("application", value); }, + get isMultiMaterial() { + return this.prop("isMultiMaterial"); + }, + set isMultiMaterial(value: SubworkflowMixinSchema["isMultiMaterial"]) { + this.setProp("isMultiMaterial", value); + }, get isDraft() { return this.prop("isDraft"); }, diff --git a/src/js/generated/WorkflowSchemaMixin.ts b/src/js/generated/WorkflowSchemaMixin.ts index 02d5f468..c03848b6 100644 --- a/src/js/generated/WorkflowSchemaMixin.ts +++ b/src/js/generated/WorkflowSchemaMixin.ts @@ -34,6 +34,12 @@ export function workflowSchemaMixin( set units(value: BaseWorkflowSchema["units"]) { this.setProp("units", value); }, + get isMultiMaterial() { + return this.prop("isMultiMaterial"); + }, + set isMultiMaterial(value: BaseWorkflowSchema["isMultiMaterial"]) { + this.setProp("isMultiMaterial", value); + }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); From e9dc5509f6bcb878251ab30fb7a3039a501fba55 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 19 Mar 2026 15:26:09 +0200 Subject: [PATCH 10/30] chore: new standata --- package-lock.json | 66 +++++------------------------------------------ package.json | 2 +- 2 files changed, 8 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index e0e92b54..9596a876 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "2026.1.12-0", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7f2a794f8b6a7b1a0c7f334ca8be72b7004f4b5f", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "@types/nunjucks": "^3.2.6", @@ -3434,73 +3434,21 @@ } }, "node_modules/@mat3ra/standata": { - "version": "2026.1.12-0", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#7f2a794f8b6a7b1a0c7f334ca8be72b7004f4b5f", + "integrity": "sha512-zTn9iZFitESBt42iybKhSO8B8Boaf84ThpToaPd5OZKUrAeg6zmn5yiJGIUyQ0vi79gShG7D+Sj0vzTH8yz5Aw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.24.1", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", - "@babel/preset-typescript": "^7.22.5", - "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", "cmd-ts": "^0.13.0", "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "ts-node": "^10.9.1", - "typescript": "^4.5.5" + "lodash": "^4.17.21" }, "engines": { "node": ">=20.0.0" - } - }, - "node_modules/@mat3ra/standata/node_modules/@babel/core": { - "version": "7.24.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mat3ra/standata/node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@mat3ra/standata/node_modules/typescript": { - "version": "4.9.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" }, - "engines": { - "node": ">=4.2.0" + "peerDependencies": { + "@mat3ra/esse": "*" } }, "node_modules/@mat3ra/tsconfig": { diff --git a/package.json b/package.json index 05493da3..45f3be29 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "2026.1.12-0", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7f2a794f8b6a7b1a0c7f334ca8be72b7004f4b5f", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "chai": "^4.3.4", From 58d578f0b6cf8543593ecfa838cd2f6c0890a2fa Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 00:28:52 +0200 Subject: [PATCH 11/30] chore: remove standata-related code + add render test --- dist/js/Subworkflow.d.ts | 2 +- dist/js/Subworkflow.js | 2 +- dist/js/Workflow.d.ts | 6 +- dist/js/Workflow.js | 33 +- .../mixins/ApplicationContextMixin.d.ts | 6 +- dist/js/context/mixins/JobContextMixin.d.ts | 4 +- .../PointsGrid/IGridFormDataManager.d.ts | 5 + .../PointsGrid/IGridFormDataManager.js | 6 +- .../PointsGrid/KGridFormDataManager.d.ts | 5 + .../PointsGrid/KGridFormDataManager.js | 6 +- .../PointsGridFormDataProvider.d.ts | 65 +- .../PointsGrid/PointsGridFormDataProvider.js | 8 +- .../PointsGrid/QGridFormDataManager.d.ts | 5 + .../PointsGrid/QGridFormDataManager.js | 6 +- .../providers/base/ContextProvider.d.ts | 2 +- .../context/providers/base/ContextProvider.js | 6 +- .../espresso/QEPWXInputDataManager.d.ts | 34 - .../espresso/QEPWXInputDataManager.js | 9 +- dist/js/context/providers/index.d.ts | 4 +- dist/js/standata/subworkflows/create.d.ts | 49 -- dist/js/standata/subworkflows/create.js | 178 ----- .../dynamic/espresso/getQpointIrrep.d.ts | 17 - .../dynamic/espresso/getQpointIrrep.js | 27 - .../standata/subworkflows/dynamic/index.d.ts | 8 - .../js/standata/subworkflows/dynamic/index.js | 10 - .../subworkflows/dynamic/surfaceEnergy.d.ts | 4 - .../subworkflows/dynamic/surfaceEnergy.js | 72 -- .../builders/AssertionUnitConfigBuilder.d.ts | 20 - .../builders/AssertionUnitConfigBuilder.js | 28 - .../builders/AssignmentUnitConfigBuilder.d.ts | 23 - .../builders/AssignmentUnitConfigBuilder.js | 35 - .../builders/ExecutionUnitConfigBuilder.d.ts | 39 -- .../builders/ExecutionUnitConfigBuilder.js | 56 -- .../units/builders/IOUnitConfigBuilder.d.ts | 31 - .../units/builders/IOUnitConfigBuilder.js | 50 -- .../units/builders/UnitConfigBuilder.d.ts | 37 -- .../units/builders/UnitConfigBuilder.js | 76 --- dist/js/standata/units/builders/index.d.ts | 12 - dist/js/standata/units/builders/index.js | 16 - dist/js/standata/utils.d.ts | 616 ------------------ dist/js/standata/utils.js | 39 -- dist/js/standata/workflows/create.d.ts | 8 - dist/js/standata/workflows/create.js | 218 ------- dist/js/units/ExecutionUnit.d.ts | 11 +- dist/js/units/ExecutionUnit.js | 54 +- dist/js/units/ExecutionUnitInput.d.ts | 2 +- dist/js/units/ExecutionUnitInput.js | 18 +- package-lock.json | 16 +- package.json | 4 +- src/js/Subworkflow.ts | 8 +- src/js/Workflow.ts | 52 +- .../context/mixins/ApplicationContextMixin.ts | 6 +- src/js/context/mixins/JobContextMixin.ts | 4 +- .../PointsGrid/IGridFormDataManager.ts | 13 + .../PointsGrid/KGridFormDataManager.ts | 13 + .../PointsGrid/PointsGridFormDataProvider.ts | 21 +- .../PointsGrid/QGridFormDataManager.ts | 13 + .../context/providers/base/ContextProvider.ts | 8 +- .../espresso/QEPWXInputDataManager.ts | 9 +- src/js/context/providers/index.ts | 9 +- src/js/standata/README.md | 1 - src/js/standata/subworkflows/create.js | 221 ------- .../dynamic/espresso/getQpointIrrep.js | 35 - src/js/standata/subworkflows/dynamic/index.js | 8 - .../subworkflows/dynamic/surfaceEnergy.js | 124 ---- .../builders/AssertionUnitConfigBuilder.js | 28 - .../builders/AssignmentUnitConfigBuilder.js | 36 - .../builders/ExecutionUnitConfigBuilder.js | 59 -- .../units/builders/IOUnitConfigBuilder.js | 53 -- .../units/builders/UnitConfigBuilder.js | 93 --- src/js/standata/units/builders/index.js | 15 - src/js/standata/utils.ts | 51 -- src/js/standata/workflows/create.js | 230 ------- src/js/units/ExecutionUnit.ts | 78 +-- src/js/units/ExecutionUnitInput.ts | 23 +- tests/js/Workflow.test.ts | 80 ++- 76 files changed, 357 insertions(+), 2922 deletions(-) delete mode 100644 dist/js/standata/subworkflows/create.d.ts delete mode 100644 dist/js/standata/subworkflows/create.js delete mode 100644 dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.d.ts delete mode 100644 dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js delete mode 100644 dist/js/standata/subworkflows/dynamic/index.d.ts delete mode 100644 dist/js/standata/subworkflows/dynamic/index.js delete mode 100644 dist/js/standata/subworkflows/dynamic/surfaceEnergy.d.ts delete mode 100644 dist/js/standata/subworkflows/dynamic/surfaceEnergy.js delete mode 100644 dist/js/standata/units/builders/AssertionUnitConfigBuilder.d.ts delete mode 100644 dist/js/standata/units/builders/AssertionUnitConfigBuilder.js delete mode 100644 dist/js/standata/units/builders/AssignmentUnitConfigBuilder.d.ts delete mode 100644 dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js delete mode 100644 dist/js/standata/units/builders/ExecutionUnitConfigBuilder.d.ts delete mode 100644 dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js delete mode 100644 dist/js/standata/units/builders/IOUnitConfigBuilder.d.ts delete mode 100644 dist/js/standata/units/builders/IOUnitConfigBuilder.js delete mode 100644 dist/js/standata/units/builders/UnitConfigBuilder.d.ts delete mode 100644 dist/js/standata/units/builders/UnitConfigBuilder.js delete mode 100644 dist/js/standata/units/builders/index.d.ts delete mode 100644 dist/js/standata/units/builders/index.js delete mode 100644 dist/js/standata/utils.d.ts delete mode 100644 dist/js/standata/utils.js delete mode 100644 dist/js/standata/workflows/create.d.ts delete mode 100644 dist/js/standata/workflows/create.js delete mode 100644 src/js/standata/README.md delete mode 100644 src/js/standata/subworkflows/create.js delete mode 100644 src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js delete mode 100644 src/js/standata/subworkflows/dynamic/index.js delete mode 100644 src/js/standata/subworkflows/dynamic/surfaceEnergy.js delete mode 100644 src/js/standata/units/builders/AssertionUnitConfigBuilder.js delete mode 100644 src/js/standata/units/builders/AssignmentUnitConfigBuilder.js delete mode 100644 src/js/standata/units/builders/ExecutionUnitConfigBuilder.js delete mode 100644 src/js/standata/units/builders/IOUnitConfigBuilder.js delete mode 100644 src/js/standata/units/builders/UnitConfigBuilder.js delete mode 100644 src/js/standata/units/builders/index.js delete mode 100644 src/js/standata/utils.ts delete mode 100644 src/js/standata/workflows/create.js diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index 9f76dfb0..91e50a06 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -33,7 +33,7 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow static usePredefinedIds: boolean; private ModelFactory; private applicationInstance; - private unitsInstances; + unitsInstances: AnySubworkflowUnit[]; modelInstance: Model; properties: string[]; static createDefault: () => Subworkflow; diff --git a/dist/js/Subworkflow.js b/dist/js/Subworkflow.js index 4f558548..951192b6 100644 --- a/dist/js/Subworkflow.js +++ b/dist/js/Subworkflow.js @@ -122,7 +122,7 @@ class Subworkflow extends entity_1.InMemoryEntity { }, {}); return { ...context, - application: this.applicationInstance, + application: this.applicationInstance.toJSON(), methodData: this.model.method.data, subworkflowContext, }; diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index dbad18f3..4b3eccab 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -15,17 +15,15 @@ import { MapUnit } from "./units"; import { type AnyWorkflowUnit } from "./units/factory"; type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & Constructor; /** Context passed to Workflow.render() before workflow reference is injected for subworkflows. */ -type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & JobExternalContext; +export type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & JobExternalContext; declare const Workflow_base: Base; export declare class Workflow extends Workflow_base { static usePredefinedIds: boolean; static readonly defaultConfig: WorkflowSchema; static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; - private subworkflowInstances; + subworkflowInstances: Subworkflow[]; private unitInstances; private workflowInstances; - private static generateDefaultWorkflowId; - private static generateStandataWorkflowId; static fromSubworkflow(subworkflow: Subworkflow): Workflow; constructor(config: WorkflowSchema & { applicationName?: string; diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index cf6493e3..5e8badf9 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -24,19 +24,6 @@ class Workflow extends entity_1.InMemoryEntity { static get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("workflow"); } - static generateDefaultWorkflowId() { - return utils_1.Utils.uuid.getUUID(); - } - static generateStandataWorkflowId({ name, properties, subworkflows, applicationName, }) { - const propsInfo = (properties === null || properties === void 0 ? void 0 : properties.length) ? properties.sort().join(",") : ""; - const swInfo = (subworkflows === null || subworkflows === void 0 ? void 0 : subworkflows.length) - ? subworkflows.map((sw) => sw.name || "unknown").join(",") - : ""; - const seed = [`workflow-${name}`, applicationName, propsInfo, swInfo] - .filter((p) => p) - .join("-"); - return utils_1.Utils.uuid.getUUIDFromNamespace(seed); - } static fromSubworkflow(subworkflow) { const config = { name: subworkflow.name, @@ -50,18 +37,10 @@ class Workflow extends entity_1.InMemoryEntity { } constructor(config) { var _a; - if (!config._id) { - if (Workflow.usePredefinedIds) { - if (!config.applicationName) { - throw new Error("applicationName is required when usePredefinedIds is true"); - } - config._id = Workflow.generateStandataWorkflowId(config); - } - else { - config._id = Workflow.generateDefaultWorkflowId(); - } - } - super(config); + super({ + ...config, + _id: config._id || utils_1.Utils.uuid.getUUID(), + }); this.subworkflowInstances = this.subworkflows.map((x) => new Subworkflow_1.default(x)); this.workflowInstances = ((_a = this.workflows) === null || _a === void 0 ? void 0 : _a.map((x) => new Workflow(x))) || []; this.setUnits(this.units.map((unit) => factory_1.UnitFactory.createInWorkflow(unit))); @@ -198,7 +177,7 @@ class Workflow extends entity_1.InMemoryEntity { case enums_1.UnitType.map: { const mapWorkflowConfig = { ...default_1.default, - _id: Workflow.generateDefaultWorkflowId(), + _id: utils_1.Utils.uuid.getUUID(), }; const mapUnit = new units_1.MapUnit({ workflowId: mapWorkflowConfig._id, @@ -217,7 +196,7 @@ class Workflow extends entity_1.InMemoryEntity { } addMapUnit(mapUnit, mapWorkflow) { const mapWorkflowConfig = { - _id: Workflow.generateDefaultWorkflowId(), + _id: utils_1.Utils.uuid.getUUID(), ...mapWorkflow.toJSON(), }; mapUnit.setWorkflowId(mapWorkflowConfig._id); diff --git a/dist/js/context/mixins/ApplicationContextMixin.d.ts b/dist/js/context/mixins/ApplicationContextMixin.d.ts index 0b51f031..4a05f834 100644 --- a/dist/js/context/mixins/ApplicationContextMixin.d.ts +++ b/dist/js/context/mixins/ApplicationContextMixin.d.ts @@ -1,10 +1,10 @@ -import type { Application } from "@mat3ra/ade"; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import type ContextProvider from "../providers/base/ContextProvider"; export type ApplicationContextMixin = { - application: Application; + application: ApplicationSchema; initApplicationContextMixin(externalContext: ApplicationExternalContext): void; }; export type ApplicationExternalContext = { - application: Application; + application: ApplicationSchema; }; export default function applicationContextMixin(item: ContextProvider): void; diff --git a/dist/js/context/mixins/JobContextMixin.d.ts b/dist/js/context/mixins/JobContextMixin.d.ts index dd504945..62afcb73 100644 --- a/dist/js/context/mixins/JobContextMixin.d.ts +++ b/dist/js/context/mixins/JobContextMixin.d.ts @@ -2,10 +2,10 @@ import type { JobSchema } from "@mat3ra/esse/dist/js/types"; import type ContextProvider from "../providers/base/ContextProvider"; export type JobContextMixin = { isEdited: boolean; - job: JobSchema; + job?: Pick; initJobContextMixin(externalContext: JobExternalContext): void; }; export type JobExternalContext = { - job: JobSchema; + job?: Pick; }; export default function jobContextMixin(item: ContextProvider): void; diff --git a/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts index 5f9eb184..feb2cbe3 100644 --- a/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/IGridFormDataManager.d.ts @@ -1,9 +1,14 @@ +import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "igrid"; +type Schema = GridContextItemSchema; export default class IGridFormDataManager extends PointsGridFormDataProvider { readonly name: "igrid"; readonly divisor: 0.2; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: Partial, externalContext: ExternalContext); static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): IGridFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsGrid/IGridFormDataManager.js b/dist/js/context/providers/PointsGrid/IGridFormDataManager.js index 8597bff2..5a8095a8 100644 --- a/dist/js/context/providers/PointsGrid/IGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/IGridFormDataManager.js @@ -3,12 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const PointsGridFormDataProvider_1 = __importDefault(require("./PointsGridFormDataProvider")); class IGridFormDataManager extends PointsGridFormDataProvider_1.default { - constructor() { - super(...arguments); + constructor(contextItem, externalContext) { + super(contextItem, externalContext); this.name = "igrid"; this.divisor = 0.2; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(this.jsonSchemaId, this.jsonSchemaPatchConfig); } static createFromUnitContext(unitContext, externalContext) { const contextItem = this.findContextItem(unitContext, "igrid"); diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts index 64d377f4..073292b8 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.d.ts @@ -1,10 +1,15 @@ +import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; import ConvergenceParameter from "../../../convergence/ConvergenceParameter"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "kgrid"; +type Schema = GridContextItemSchema; export default class KGridFormDataManager extends PointsGridFormDataProvider { readonly name: "kgrid"; readonly divisor: 1; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: Partial, externalContext: ExternalContext); static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): KGridFormDataManager; applyConvergenceParameter(parameter: ConvergenceParameter): void; } diff --git a/dist/js/context/providers/PointsGrid/KGridFormDataManager.js b/dist/js/context/providers/PointsGrid/KGridFormDataManager.js index 35f51d25..f6546b08 100644 --- a/dist/js/context/providers/PointsGrid/KGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/KGridFormDataManager.js @@ -3,12 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const PointsGridFormDataProvider_1 = __importDefault(require("./PointsGridFormDataProvider")); class KGridFormDataManager extends PointsGridFormDataProvider_1.default { - constructor() { - super(...arguments); + constructor(contextItem, externalContext) { + super(contextItem, externalContext); this.name = "kgrid"; this.divisor = 1; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(this.jsonSchemaId, this.jsonSchemaPatchConfig); } static createFromUnitContext(unitContext, externalContext) { const contextItem = this.findContextItem(unitContext, "kgrid"); diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts index 075355a0..a5195542 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts @@ -13,6 +13,7 @@ export default abstract class PointsGridFormDataProvider, externalContext: ExternalContext); private initInstanceFields; private getDefaultGridMetricValue; getDefaultData(): PointsGridDataProviderSchema; - private get jsonSchemaPatchConfig(); + protected get jsonSchemaPatchConfig(): { + dimensions: { + default?: any[] | undefined; + type: string; + items: { + default?: string | number | readonly number[] | readonly string[] | undefined; + type: string; + }; + minItems: number; + maxItems: number; + }; + shifts: { + default?: any[] | undefined; + type: string; + items: { + default?: string | number | readonly number[] | readonly string[] | undefined; + type: string; + }; + minItems: number; + maxItems: number; + }; + reciprocalVectorRatios: { + default?: any[] | undefined; + type: string; + items: { + default?: string | number | readonly number[] | readonly string[] | undefined; + type: string; + }; + minItems: number; + maxItems: number; + }; + gridMetricType: { + default: "KPPRA" | "spacing"; + }; + description: string; + required: string[]; + dependencies: { + gridMetricType: { + oneOf: { + properties: { + gridMetricType: { + enum: string[]; + }; + gridMetricValue: { + type: string; + minimum: number; + title: string; + default: number; + }; + preferGridMetric: { + type: string; + title: string; + default: boolean; + }; + }; + }[]; + }; + }; + }; get uiSchema(): { dimensions: { readonly "ui:options": { @@ -80,6 +139,6 @@ export default abstract class PointsGridFormDataProvider { ...(isArray ? { default: defaultValue } : {}), }; }; -const jsonSchemaId = "context-providers-directory/points-grid-data-provider"; const defaultShift = 0; const defaultShifts = [defaultShift, defaultShift, defaultShift]; class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { @@ -31,10 +29,9 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { super(contextItem, externalContext); this.domain = "important"; this.entityName = "unit"; + this.jsonSchemaId = "context-providers-directory/points-grid-data-provider"; this.initMaterialContextMixin(externalContext); this.initInstanceFields(); - const { jsonSchemaPatchConfig } = this; - this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, jsonSchemaPatchConfig); } initInstanceFields() { var _a, _b, _c, _d, _e; @@ -209,9 +206,6 @@ class PointsGridFormDataProvider extends JSONSchemaFormDataProvider_1.default { } } setData(data) { - if (!data) { - return; - } const { dimensions, gridMetricType, preferGridMetric, gridMetricValue } = data; if (preferGridMetric && gridMetricType && gridMetricValue) { return super.setData({ diff --git a/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts b/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts index b71eb59f..a13c4b1e 100644 --- a/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts +++ b/dist/js/context/providers/PointsGrid/QGridFormDataManager.d.ts @@ -1,9 +1,14 @@ +import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; type Name = "qgrid"; +type Schema = GridContextItemSchema; export default class QGridFormDataManager extends PointsGridFormDataProvider { readonly name: "qgrid"; readonly divisor: 5; + readonly jsonSchema: JSONSchema7 | undefined; + constructor(contextItem: Partial, externalContext: ExternalContext); static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QGridFormDataManager; } export {}; diff --git a/dist/js/context/providers/PointsGrid/QGridFormDataManager.js b/dist/js/context/providers/PointsGrid/QGridFormDataManager.js index 7536e920..cb74bb23 100644 --- a/dist/js/context/providers/PointsGrid/QGridFormDataManager.js +++ b/dist/js/context/providers/PointsGrid/QGridFormDataManager.js @@ -3,12 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const PointsGridFormDataProvider_1 = __importDefault(require("./PointsGridFormDataProvider")); class QGridFormDataManager extends PointsGridFormDataProvider_1.default { - constructor() { - super(...arguments); + constructor(contextItem, externalContext) { + super(contextItem, externalContext); this.name = "qgrid"; this.divisor = 5; + this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(this.jsonSchemaId, this.jsonSchemaPatchConfig); } static createFromUnitContext(unitContext, externalContext) { const contextItem = this.findContextItem(unitContext, "qgrid"); diff --git a/dist/js/context/providers/base/ContextProvider.d.ts b/dist/js/context/providers/base/ContextProvider.d.ts index e4841df6..59956bd5 100644 --- a/dist/js/context/providers/base/ContextProvider.d.ts +++ b/dist/js/context/providers/base/ContextProvider.d.ts @@ -24,7 +24,7 @@ declare abstract class ContextProvider, externalContext: EC); setIsEdited(isEdited: boolean): void; getData(): S["data"]; - setData(data?: S["data"]): void; + setData(data: S["data"]): void; getContextItemData(): S; /** * Helper method to find a context item from a unit context array by name. diff --git a/dist/js/context/providers/base/ContextProvider.js b/dist/js/context/providers/base/ContextProvider.js index 4cf83424..127f8e33 100644 --- a/dist/js/context/providers/base/ContextProvider.js +++ b/dist/js/context/providers/base/ContextProvider.js @@ -5,7 +5,9 @@ class ContextProvider { constructor(contextItem, externalContext) { this.externalContext = externalContext; this.isEdited = contextItem.isEdited || false; - this.setData(contextItem.data); + if (contextItem.data) { + this.setData(contextItem.data); + } } setIsEdited(isEdited) { this.isEdited = isEdited; @@ -14,7 +16,7 @@ class ContextProvider { return this.isEdited && this.data ? this.data : this.getDefaultData(); } setData(data) { - this.data = data ? utils_1.Utils.clone.deepClone(data) : undefined; + this.data = utils_1.Utils.clone.deepClone(data); } getContextItemData() { return { diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts index 7c547200..5d934e94 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts @@ -23,41 +23,7 @@ export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { readonly jsonSchema: JSONSchema7 | undefined; constructor(config: Partial, externalContext: ExternalContext); private buildQEPWXContext; - private getDataPerMaterial; getDefaultData(): { - perMaterial?: undefined; - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - contextProviderName: "qe-pwx"; - } | { perMaterial: QEPwxContextProviderSchema[]; IBRAV: number; RESTART_MODE: "from_scratch" | "restart"; diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js index 402812ba..4a705f4e 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js @@ -72,7 +72,7 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { }); return { IBRAV: 0, - RESTART_MODE: job.parent || workflow.hasRelaxation ? "restart" : "from_scratch", + RESTART_MODE: (job === null || job === void 0 ? void 0 : job.parent) || workflow.hasRelaxation ? "restart" : "from_scratch", ATOMIC_SPECIES, ATOMIC_SPECIES_WITH_LABELS, NAT: basis.atomicPositions.length, @@ -84,18 +84,13 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { contextProviderName: "qe-pwx", }; } - getDataPerMaterial() { - if (!this.materials || this.materials.length <= 1) - return {}; - return { perMaterial: this.materials.map((material) => this.buildQEPWXContext(material)) }; - } getDefaultData() { // the below values are read from PlanewaveDataManager instead // ECUTWFC = 40; // ECUTRHO = 200; return { ...this.buildQEPWXContext(this.material), - ...this.getDataPerMaterial(), + perMaterial: this.materials.map((material) => this.buildQEPWXContext(material)), }; } } diff --git a/dist/js/context/providers/index.d.ts b/dist/js/context/providers/index.d.ts index a521f3a3..dd4c9b88 100644 --- a/dist/js/context/providers/index.d.ts +++ b/dist/js/context/providers/index.d.ts @@ -1,3 +1,4 @@ +import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; import type { ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; import type { JobExternalContext } from "../mixins/JobContextMixin"; import type { MaterialExternalContext } from "../mixins/MaterialContextMixin"; @@ -63,8 +64,9 @@ export declare const PROVIDER_REGISTRY: { readonly VASPNEBInputDataManager: typeof VASPNEBInputDataManager; readonly NWChemInputDataManager: typeof NWChemInputDataManager; }; +export type AssignmentContext = Record; export type SubworkflowContext = { - subworkflowContext: Record; + subworkflowContext: AssignmentContext; }; /** * External context type used by ExecutionUnitInput when creating providers. diff --git a/dist/js/standata/subworkflows/create.d.ts b/dist/js/standata/subworkflows/create.d.ts deleted file mode 100644 index 7f799808..00000000 --- a/dist/js/standata/subworkflows/create.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @summary Create workflow unit from JSON configuration - * Supports applying functions to the builder prior to building via "functions" - * Supports applying attributes to the builder after building via "attributes" - * @param config {Object} unit config - * @param application {*} application - * @param unitBuilders {Object} workflow unit builders - * @param unitFactoryCls {*} workflow unit class factory - * @returns {*|{head: boolean, preProcessors: [], postProcessors: [], name: *, flowchartId: *, type: *, results: [], monitors: []}} - */ -export function createUnit({ config, application, unitBuilders, unitFactoryCls, cache }: Object): any | { - head: boolean; - preProcessors: []; - postProcessors: []; - name: any; - flowchartId: any; - type: any; - results: []; - monitors: []; -}; -export function createSubworkflow({ subworkflowData, cache, AppRegistry, modelFactoryCls, methodFactoryCls, subworkflowCls, unitFactoryCls, unitBuilders, }: { - subworkflowData: any; - cache?: never[] | undefined; - AppRegistry?: typeof ApplicationRegistry | undefined; - modelFactoryCls?: typeof ModelFactory | undefined; - methodFactoryCls?: typeof MethodFactory | undefined; - subworkflowCls?: any; - unitFactoryCls?: typeof UnitFactory | undefined; - unitBuilders?: { - UnitConfigBuilder: typeof import("../units/builders/UnitConfigBuilder").UnitConfigBuilder; - AssignmentUnitConfigBuilder: typeof import("../units/builders/AssignmentUnitConfigBuilder").AssignmentUnitConfigBuilder; - AssertionUnitConfigBuilder: typeof import("../units/builders/AssertionUnitConfigBuilder").AssertionUnitConfigBuilder; - ExecutionUnitConfigBuilder: typeof import("../units/builders/ExecutionUnitConfigBuilder").ExecutionUnitConfigBuilder; - IOUnitConfigBuilder: typeof import("../units/builders/IOUnitConfigBuilder").IOUnitConfigBuilder; - } | undefined; -}): any; -/** - * @summary Convenience wrapper around createSubworkflow to create by app name and swf name - * @param appName {String} application name - * @param swfName {String} subworkflow name (snake_case.yml) - * @param workflowSubworkflowMapByApplication {Object} object containing all workflow/subworkflow map by application - * @param swArgs {Object} classes for instantiation - * @returns {*} subworkflow object - */ -export function createSubworkflowByName({ appName, swfName, workflowSubworkflowMapByApplication, ...swArgs }: string): any; -import { ApplicationRegistry } from "@mat3ra/ade"; -import { ModelFactory } from "@mat3ra/mode"; -import { MethodFactory } from "@mat3ra/mode"; -import { UnitFactory } from "../../units"; diff --git a/dist/js/standata/subworkflows/create.js b/dist/js/standata/subworkflows/create.js deleted file mode 100644 index c66510c5..00000000 --- a/dist/js/standata/subworkflows/create.js +++ /dev/null @@ -1,178 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createUnit = createUnit; -exports.createSubworkflow = createSubworkflow; -exports.createSubworkflowByName = createSubworkflowByName; -const ade_1 = require("@mat3ra/ade"); -const mode_1 = require("@mat3ra/mode"); -const standata_1 = require("@mat3ra/standata"); -// eslint-disable-next-line import/no-extraneous-dependencies -const lodash_1 = __importDefault(require("lodash")); -const Subworkflow_1 = require("../../Subworkflow"); -const units_1 = require("../../units"); -const utils_1 = require("../../workflows/utils"); -const builders_1 = require("../units/builders"); -const dynamic_1 = require("./dynamic"); -// NOTE: DFTModel => DFTModelConfig, configs should have the same name as the model/method class + "Config" at the end -function _getConfigFromModelOrMethodName(name, kind) { - const configs = kind === "Model" ? mode_1.default_models : mode_1.default_methods; - if (!configs[`${name}Config`]) { - // eslint-disable-next-line no-param-reassign - name = `Unknown${kind}`; - } - return configs[`${name}Config`]; -} -/** - * @summary Create model from subworkflow data - * @param config {Object} model config - * @param modelFactoryCls {any} model factory to use - * @returns {DFTModel|Model} - */ -function createModel({ config, modelFactoryCls }) { - const { name, config: modelConfig = {} } = config; - const defaultConfig = _getConfigFromModelOrMethodName(name, "Model"); - return modelFactoryCls.create({ ...defaultConfig, ...modelConfig }); -} -/** - * @summary Create method from subworkflow data - * @param config {Object} method configuration - * @param methodFactoryCls {any} - * @param applicationConfig {Object} application configuration - * @returns {{method, setSearchText}} - */ -function createMethod({ config, methodFactoryCls, applicationConfig = {} }) { - const { name, setSearchText = null, config: methodConfig = {} } = config; - const defaultConfig = _getConfigFromModelOrMethodName(name, "Method"); - const defaultConfigForApp = new standata_1.ApplicationMethodStandata().getDefaultMethodConfigForApplication(applicationConfig); - const defaultConfigForAppSimple = defaultConfigForApp && defaultConfigForApp.units - ? mode_1.MethodConversionHandler.convertToSimple(defaultConfigForApp) - : defaultConfigForApp; - const method = methodFactoryCls.create({ - ...defaultConfig, - ...defaultConfigForAppSimple, - ...methodConfig, - }); - return { method, setSearchText }; -} -/** - * @summary Create top-level objects used in subworkflow initialization - * @param subworkflowData {Object} subworkflow data - * @param AppRegistry - * @param modelFactoryCls {any} model factory class - * @param methodFactoryCls {any} method factory class - * @returns {{application: *, method: *, model: (DFTModel|Model), setSearchText: String|null}} - */ -function createTopLevel({ subworkflowData, modelFactoryCls, methodFactoryCls, AppRegistry }) { - const { application: appConfig, model: modelConfig, method: methodConfig } = subworkflowData; - const application = AppRegistry.createApplication(appConfig); - const model = createModel({ config: modelConfig, modelFactoryCls }); - const { method, setSearchText } = createMethod({ - config: methodConfig, - methodFactoryCls, - applicationConfig: appConfig, - }); - return { - application, - model, - method, - setSearchText, - }; -} -/** - * @summary Create workflow unit from JSON configuration - * Supports applying functions to the builder prior to building via "functions" - * Supports applying attributes to the builder after building via "attributes" - * @param config {Object} unit config - * @param application {*} application - * @param unitBuilders {Object} workflow unit builders - * @param unitFactoryCls {*} workflow unit class factory - * @returns {*|{head: boolean, preProcessors: [], postProcessors: [], name: *, flowchartId: *, type: *, results: [], monitors: []}} - */ -function createUnit({ config, application, unitBuilders, unitFactoryCls, cache = [] }) { - const { type, config: unitConfig } = config; - if (type === "executionBuilder") { - const { name, execName, flavorName, flowchartId } = unitConfig; - const builder = new unitBuilders.ExecutionUnitConfigBuilder(name, application, execName, flavorName, flowchartId, cache); - // config should contain "functions" and "attributes" - const cfg = (0, utils_1.applyConfig)({ obj: builder, config, callBuild: true }); - return unitFactoryCls.create(cfg); - } - return unitFactoryCls.create({ type, ...unitConfig }); -} -/** - * @summary Dynamically create subworkflow units - * @param dynamicSubworkflow {String} name of unit creation function - * @param units {Array} configured units to provide to dynamic unit creation - * @param unitBuilders {Object} unit configuration builders - * @param unitFactoryCls {*} unit factory class - * @param application {*} application (optional) - * @returns {*} - */ -function createDynamicUnits({ dynamicSubworkflow, units, unitBuilders, unitFactoryCls, application = null, }) { - const { name, subfolder } = dynamicSubworkflow; - const func = subfolder && lodash_1.default.get(dynamic_1.dynamicSubworkflowsByApp, `${subfolder}.${name}`, () => { }); - switch (name) { - case "surfaceEnergy": - // eslint-disable-next-line no-case-declarations - const [scfUnit] = units; - return (0, dynamic_1.getSurfaceEnergySubworkflowUnits)({ scfUnit, unitBuilders }); - case "getQpointIrrep": - return func({ unitBuilders, unitFactoryCls, application }); - default: - throw new Error(`dynamicSubworkflow=${name} not recognized`); - } -} -function createSubworkflow({ subworkflowData, cache = [], AppRegistry = ade_1.ApplicationRegistry, modelFactoryCls = mode_1.ModelFactory, methodFactoryCls = mode_1.MethodFactory, subworkflowCls = Subworkflow_1.Subworkflow, unitFactoryCls = units_1.UnitFactory, unitBuilders = builders_1.builders, }) { - const { application, model, method, setSearchText } = createTopLevel({ - subworkflowData, - AppRegistry, - modelFactoryCls, - methodFactoryCls, - }); - let units = []; - const { name, units: unitConfigs, config = {}, dynamicSubworkflow = null } = subworkflowData; - unitConfigs.forEach((_config) => { - units.push(createUnit({ - config: _config, - application, - unitBuilders, - unitFactoryCls, - cache, - })); - }); - if (dynamicSubworkflow) { - units = createDynamicUnits({ - dynamicSubworkflow, - units, - unitBuilders, - unitFactoryCls, - application, - }); - } - let subworkflow = subworkflowCls.fromArguments(application, model, method, name, units, config); - const { functions = {}, attributes = {} } = config; - subworkflow = (0, utils_1.applyConfig)({ obj: subworkflow, config: { functions, attributes } }); - if (setSearchText) - subworkflow.model.Method.setSearchText(setSearchText); - return subworkflow; -} -/** - * @summary Convenience wrapper around createSubworkflow to create by app name and swf name - * @param appName {String} application name - * @param swfName {String} subworkflow name (snake_case.yml) - * @param workflowSubworkflowMapByApplication {Object} object containing all workflow/subworkflow map by application - * @param swArgs {Object} classes for instantiation - * @returns {*} subworkflow object - */ -function createSubworkflowByName({ appName, swfName, workflowSubworkflowMapByApplication, ...swArgs }) { - const { subworkflows } = workflowSubworkflowMapByApplication; - const { [appName]: allSubworkflowData } = subworkflows; - const { [swfName]: subworkflowData } = allSubworkflowData; - return createSubworkflow({ - subworkflowData, - ...swArgs, - }); -} diff --git a/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.d.ts b/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.d.ts deleted file mode 100644 index 7c5bdc2f..00000000 --- a/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @summary Get QptIrr units used in phonon map calculations - * @param unitBuilders {Object} unit builders - * @param unitFactoryCls {*} unit factory class - * @param application {*} application instance - * @returns {[{head: boolean, preProcessors: [], postProcessors: [], name: *, flowchartId: *, type: *, results: [], monitors: []},*]} - */ -export function getQpointIrrep({ unitBuilders, unitFactoryCls, application }: Object): [{ - head: boolean; - preProcessors: []; - postProcessors: []; - name: any; - flowchartId: any; - type: any; - results: []; - monitors: []; -}, any]; diff --git a/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js b/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js deleted file mode 100644 index c6488393..00000000 --- a/dist/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getQpointIrrep = getQpointIrrep; -const enums_1 = require("../../../../enums"); -/** - * @summary Get QptIrr units used in phonon map calculations - * @param unitBuilders {Object} unit builders - * @param unitFactoryCls {*} unit factory class - * @param application {*} application instance - * @returns {[{head: boolean, preProcessors: [], postProcessors: [], name: *, flowchartId: *, type: *, results: [], monitors: []},*]} - */ -function getQpointIrrep({ unitBuilders, unitFactoryCls, application }) { - const { ExecutionUnitConfigBuilder } = unitBuilders; - const pythonUnit = new ExecutionUnitConfigBuilder("python", application, "python", "espresso_xml_get_qpt_irr").build(); - const assignmentUnit = unitFactoryCls.create({ - type: enums_1.UNIT_TYPES.assignment, - input: [ - { - scope: pythonUnit.flowchartId, - name: "STDOUT", - }, - ], - operand: "Q_POINTS", - value: "json.loads(STDOUT)", - }); - return [pythonUnit, assignmentUnit]; -} diff --git a/dist/js/standata/subworkflows/dynamic/index.d.ts b/dist/js/standata/subworkflows/dynamic/index.d.ts deleted file mode 100644 index 6192c868..00000000 --- a/dist/js/standata/subworkflows/dynamic/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { getSurfaceEnergySubworkflowUnits } from "./surfaceEnergy"; -export namespace dynamicSubworkflowsByApp { - namespace espresso { - export { getQpointIrrep }; - } -} -import { getQpointIrrep } from "./espresso/getQpointIrrep"; -export { getSurfaceEnergySubworkflowUnits }; diff --git a/dist/js/standata/subworkflows/dynamic/index.js b/dist/js/standata/subworkflows/dynamic/index.js deleted file mode 100644 index bd706c58..00000000 --- a/dist/js/standata/subworkflows/dynamic/index.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.dynamicSubworkflowsByApp = exports.getSurfaceEnergySubworkflowUnits = void 0; -const getQpointIrrep_1 = require("./espresso/getQpointIrrep"); -const surfaceEnergy_1 = require("./surfaceEnergy"); -Object.defineProperty(exports, "getSurfaceEnergySubworkflowUnits", { enumerable: true, get: function () { return surfaceEnergy_1.getSurfaceEnergySubworkflowUnits; } }); -const dynamicSubworkflowsByApp = { - espresso: { getQpointIrrep: getQpointIrrep_1.getQpointIrrep }, -}; -exports.dynamicSubworkflowsByApp = dynamicSubworkflowsByApp; diff --git a/dist/js/standata/subworkflows/dynamic/surfaceEnergy.d.ts b/dist/js/standata/subworkflows/dynamic/surfaceEnergy.d.ts deleted file mode 100644 index b2b79dcc..00000000 --- a/dist/js/standata/subworkflows/dynamic/surfaceEnergy.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function getSurfaceEnergySubworkflowUnits({ scfUnit, unitBuilders }: { - scfUnit: any; - unitBuilders: any; -}): any[]; diff --git a/dist/js/standata/subworkflows/dynamic/surfaceEnergy.js b/dist/js/standata/subworkflows/dynamic/surfaceEnergy.js deleted file mode 100644 index 60667d4e..00000000 --- a/dist/js/standata/subworkflows/dynamic/surfaceEnergy.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getSurfaceEnergySubworkflowUnits = getSurfaceEnergySubworkflowUnits; -const utils_1 = require("@mat3ra/utils"); -function getIOUnitEndpointOptions(query, projection = "{}") { - return { - params: { - query, - projection, - }, - }; -} -function getAssignmentUnitInput(unit, name) { - return [ - { - name, - scope: unit.flowchartId, - }, - ]; -} -function getSurfaceEnergySubworkflowUnits({ scfUnit, unitBuilders }) { - const { IOUnitConfigBuilder, AssignmentUnitConfigBuilder, AssertionUnitConfigBuilder } = unitBuilders; - let input, endpointOptions; - endpointOptions = getIOUnitEndpointOptions("{'_id': MATERIAL_ID}"); - const getSlabUnit = new IOUnitConfigBuilder("io-slab", "materials", endpointOptions).build(); - input = getAssignmentUnitInput(getSlabUnit, "DATA"); - const setSlabUnit = new AssignmentUnitConfigBuilder("slab", "SLAB", "DATA[0]", input).build(); - endpointOptions = getIOUnitEndpointOptions("{'_id': SLAB.metadata.bulkId}"); - const getBulkUnit = new IOUnitConfigBuilder("io-bulk", "materials", endpointOptions).build(); - const BULKValue = "DATA[0] if DATA else None"; - input = getAssignmentUnitInput(getBulkUnit, "DATA"); - const setBulkUnit = new AssignmentUnitConfigBuilder("bulk", "BULK", BULKValue, input).build(); - const assertBulkUnit = new AssertionUnitConfigBuilder("assert-bulk", "BULK != None", "Bulk material does not exist!").build(); - const query = utils_1.Utils.str.removeNewLinesAndExtraSpaces(`{ - 'exabyteId': BULK.exabyteId, - 'data.name': 'total_energy', - 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} - }`); - // Do not confuse `sort` with `$sort`. `sort` is used in meteor collections and `$sort` is used in Mongo queries. - const projection = "{'sort': {'precision.value': -1}, 'limit': 1}"; - endpointOptions = getIOUnitEndpointOptions(query, projection); - const getEBulkUnit = new IOUnitConfigBuilder("io-e-bulk", "refined-properties", endpointOptions).build(); - input = getAssignmentUnitInput(getEBulkUnit, "DATA"); - const EBULKValue = "DATA[0].data.value if DATA else None"; - const setEBulkUnit = new AssignmentUnitConfigBuilder("e-bulk", "E_BULK", EBULKValue, input).build(); - const assertEBulkUnit = new AssertionUnitConfigBuilder("assert-e-bulk", "E_BULK != None", "E_BULK does not exist!").build(); - const AValue = "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"; - const setSurfaceUnit = new AssignmentUnitConfigBuilder("surface", "A", AValue).build(); - const setNBulkUnit = new AssignmentUnitConfigBuilder("n-bulk", "N_BULK", "len(BULK.basis.elements)").build(); - const setNSlabUnit = new AssignmentUnitConfigBuilder("n-slab", "N_SLAB", "len(SLAB.basis.elements)").build(); - input = getAssignmentUnitInput(scfUnit, "total_energy"); - const setESlabUnit = new AssignmentUnitConfigBuilder("e-slab", "E_SLAB", "total_energy", input).build(); - const results = [{ name: "surface_energy" }]; - const SEValue = "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"; - const surfaceEnergyUnit = new AssignmentUnitConfigBuilder("surface-energy", "SURFACE_ENERGY", SEValue, [], results).build(); - return [ - getSlabUnit, - setSlabUnit, - getBulkUnit, - setBulkUnit, - assertBulkUnit, - getEBulkUnit, - setEBulkUnit, - assertEBulkUnit, - setSurfaceUnit, - setNBulkUnit, - setNSlabUnit, - scfUnit, - setESlabUnit, - surfaceEnergyUnit, - ]; -} diff --git a/dist/js/standata/units/builders/AssertionUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/AssertionUnitConfigBuilder.d.ts deleted file mode 100644 index 85878114..00000000 --- a/dist/js/standata/units/builders/AssertionUnitConfigBuilder.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export class AssertionUnitConfigBuilder extends UnitConfigBuilder { - constructor(name: any, statement: any, errorMessage: any); - _statement: any; - _errorMessage: any; - statement(str: any): this; - errorMessage(str: any): this; - build(): { - statement: any; - errorMessage: any; - type: any; - name: any; - head: boolean; - results: any[]; - monitors: any[]; - flowchartId: any; - preProcessors: any[]; - postProcessors: any[]; - }; -} -import { UnitConfigBuilder } from "./UnitConfigBuilder"; diff --git a/dist/js/standata/units/builders/AssertionUnitConfigBuilder.js b/dist/js/standata/units/builders/AssertionUnitConfigBuilder.js deleted file mode 100644 index ea44d426..00000000 --- a/dist/js/standata/units/builders/AssertionUnitConfigBuilder.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AssertionUnitConfigBuilder = void 0; -const enums_1 = require("../../../enums"); -const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); -class AssertionUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { - constructor(name, statement, errorMessage) { - super({ name, type: enums_1.UNIT_TYPES.assertion }); - this._statement = statement; - this._errorMessage = errorMessage; - } - statement(str) { - this._statement = str; - return this; - } - errorMessage(str) { - this._errorMessage = str; - return this; - } - build() { - return { - ...super.build(), - statement: this._statement, - errorMessage: this._errorMessage, - }; - } -} -exports.AssertionUnitConfigBuilder = AssertionUnitConfigBuilder; diff --git a/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.d.ts deleted file mode 100644 index a1d509eb..00000000 --- a/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export class AssignmentUnitConfigBuilder extends UnitConfigBuilder { - constructor(name: any, variableName: any, variableValue: any, input?: any[], results?: any[]); - _variableName: any; - _variableValue: any; - _input: any[]; - input(arr: any): this; - variableName(str: any): this; - variableValue(str: any): this; - build(): { - input: any[]; - operand: any; - value: any; - type: any; - name: any; - head: boolean; - results: any[]; - monitors: any[]; - flowchartId: any; - preProcessors: any[]; - postProcessors: any[]; - }; -} -import { UnitConfigBuilder } from "./UnitConfigBuilder"; diff --git a/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js b/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js deleted file mode 100644 index ac23a6f3..00000000 --- a/dist/js/standata/units/builders/AssignmentUnitConfigBuilder.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AssignmentUnitConfigBuilder = void 0; -const enums_1 = require("../../../enums"); -const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); -class AssignmentUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { - constructor(name, variableName, variableValue, input = [], results = []) { - super({ name, type: enums_1.UNIT_TYPES.assignment }); - this._variableName = variableName; - this._variableValue = variableValue; - this._input = input; - this._results = results; - } - input(arr) { - this._input = arr; - return this; - } - variableName(str) { - this._variableName = str; - return this; - } - variableValue(str) { - this._variableValue = str; - return this; - } - build() { - return { - ...super.build(), - input: this._input, - operand: this._variableName, - value: this._variableValue, - }; - } -} -exports.AssignmentUnitConfigBuilder = AssignmentUnitConfigBuilder; diff --git a/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.d.ts deleted file mode 100644 index 1536482a..00000000 --- a/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -export class ExecutionUnitConfigBuilder extends UnitConfigBuilder { - constructor(name: any, application: any, execName: any, flavorName: any, flowchartId: any, cache?: any[]); - _results: any; - _monitors: any; - _preProcessors: any; - _postProcessors: any; - initialize(application: any, execName: any, flavorName: any): void; - application: any; - executable: any; - flavor: any; - build(): { - application: any; - executable: any; - flavor: any; - type: any; - name: any; - head: boolean; - results: any[]; - monitors: any[]; - flowchartId: any; - preProcessors: any[]; - postProcessors: any[]; - }; - /** - * Creates an executable instance. This method is intended to be overridden in subclasses. - * @param {Application} application - The application object - * @param {string} execName - The name of the executable - * @returns {Executable} The created executable instance - */ - _createExecutable(application: Application, execName: string): Executable; - /** - * Creates a flavor instance. This method is intended to be overridden in subclasses. - * @param {Executable} executable - The executable object - * @param {string} flavorName - The name of the flavor - * @returns {Flavor} The created flavor instance - */ - _createFlavor(executable: Executable, flavorName: string): Flavor; -} -import { UnitConfigBuilder } from "./UnitConfigBuilder"; diff --git a/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js b/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js deleted file mode 100644 index fed56145..00000000 --- a/dist/js/standata/units/builders/ExecutionUnitConfigBuilder.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ExecutionUnitConfigBuilder = void 0; -/* eslint-disable class-methods-use-this */ -const ade_1 = require("@mat3ra/ade"); -const enums_1 = require("../../../enums"); -const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); -class ExecutionUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { - constructor(name, application, execName, flavorName, flowchartId, cache = []) { - super({ name, type: enums_1.UNIT_TYPES.execution, flowchartId, cache }); - try { - this.initialize(application, execName, flavorName); - } - catch (e) { - console.error(`Can't initialize executable/flavor: ${execName}/${flavorName}`); - throw e; - } - // initialize runtimeItems - this._results = this.flavor.results; - this._monitors = this.flavor.monitors; - this._preProcessors = this.flavor.preProcessors; - this._postProcessors = this.flavor.postProcessors; - } - initialize(application, execName, flavorName) { - this.application = application; - this.executable = this._createExecutable(this.application, execName); - this.flavor = this._createFlavor(this.executable, flavorName); - } - build() { - return { - ...super.build(), - application: this.application.toJSON(), - executable: this.executable.toJSON(), - flavor: this.flavor.toJSON(), - }; - } - /** - * Creates an executable instance. This method is intended to be overridden in subclasses. - * @param {Application} application - The application object - * @param {string} execName - The name of the executable - * @returns {Executable} The created executable instance - */ - _createExecutable(application, execName) { - return ade_1.ApplicationRegistry.getExecutableByName(application.name, execName); - } - /** - * Creates a flavor instance. This method is intended to be overridden in subclasses. - * @param {Executable} executable - The executable object - * @param {string} flavorName - The name of the flavor - * @returns {Flavor} The created flavor instance - */ - _createFlavor(executable, flavorName) { - return ade_1.ApplicationRegistry.getFlavorByName(executable, flavorName); - } -} -exports.ExecutionUnitConfigBuilder = ExecutionUnitConfigBuilder; diff --git a/dist/js/standata/units/builders/IOUnitConfigBuilder.d.ts b/dist/js/standata/units/builders/IOUnitConfigBuilder.d.ts deleted file mode 100644 index d560f789..00000000 --- a/dist/js/standata/units/builders/IOUnitConfigBuilder.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -export class IOUnitConfigBuilder extends UnitConfigBuilder { - constructor(name: any, endpointName: any, endpointOptions: any); - _endpointName: any; - _endpointOptions: any; - _variableName: string; - _subtype: string; - _source: string; - endpointName(str: any): this; - endpointOptions(options: any): this; - variableName(str: any): this; - subtype(str: any): this; - source(str: any): this; - build(): { - subtype: string; - source: string; - input: { - endpoint: any; - endpoint_options: any; - name: string; - }[]; - type: any; - name: any; - head: boolean; - results: any[]; - monitors: any[]; - flowchartId: any; - preProcessors: any[]; - postProcessors: any[]; - }; -} -import { UnitConfigBuilder } from "./UnitConfigBuilder"; diff --git a/dist/js/standata/units/builders/IOUnitConfigBuilder.js b/dist/js/standata/units/builders/IOUnitConfigBuilder.js deleted file mode 100644 index 5a568bd6..00000000 --- a/dist/js/standata/units/builders/IOUnitConfigBuilder.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IOUnitConfigBuilder = void 0; -const enums_1 = require("../../../enums"); -const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); -class IOUnitConfigBuilder extends UnitConfigBuilder_1.UnitConfigBuilder { - constructor(name, endpointName, endpointOptions) { - super({ name, type: enums_1.UNIT_TYPES.io }); - this._endpointName = endpointName; - this._endpointOptions = endpointOptions; - this._variableName = "DATA"; - this._subtype = "input"; - this._source = "api"; - } - endpointName(str) { - this._endpointName = str; - return this; - } - endpointOptions(options) { - this._endpointOptions = options; - return this; - } - variableName(str) { - this._variableName = str; - return this; - } - subtype(str) { - this._subtype = str; - return this; - } - source(str) { - this._source = str; - return this; - } - build() { - return { - ...super.build(), - subtype: this._subtype, - source: this._source, - input: [ - { - endpoint: this._endpointName, - endpoint_options: this._endpointOptions, - name: this._variableName, - }, - ], - }; - } -} -exports.IOUnitConfigBuilder = IOUnitConfigBuilder; diff --git a/dist/js/standata/units/builders/UnitConfigBuilder.d.ts b/dist/js/standata/units/builders/UnitConfigBuilder.d.ts deleted file mode 100644 index 8df2407b..00000000 --- a/dist/js/standata/units/builders/UnitConfigBuilder.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -export class UnitConfigBuilder { - static usePredefinedIds: boolean; - static _stringArrayToNamedObject(array: any): any; - constructor({ name, type, flowchartId, cache }: { - name: any; - type: any; - flowchartId: any; - cache?: never[] | undefined; - }); - type: any; - _name: any; - _head: boolean; - _results: any[]; - _monitors: any[]; - _preProcessors: any[]; - _postProcessors: any[]; - cache: any[]; - _flowchartId: any; - name(str: any): this; - head(bool: any): this; - generateFlowChartId(seed: any, countInCache?: number): any; - flowchartId(flowchartId: any): this; - addPreProcessors(preProcessorNames: any): this; - addPostProcessors(postProcessorNames: any): this; - addResults(resultNames: any): this; - addMonitors(monitorNames: any): this; - build(): { - type: any; - name: any; - head: boolean; - results: any[]; - monitors: any[]; - flowchartId: any; - preProcessors: any[]; - postProcessors: any[]; - }; -} diff --git a/dist/js/standata/units/builders/UnitConfigBuilder.js b/dist/js/standata/units/builders/UnitConfigBuilder.js deleted file mode 100644 index ae3373b0..00000000 --- a/dist/js/standata/units/builders/UnitConfigBuilder.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnitConfigBuilder = void 0; -const utils_1 = require("@mat3ra/utils"); -// eslint-disable-next-line import/no-extraneous-dependencies -const underscore_1 = __importDefault(require("underscore")); -class UnitConfigBuilder { - constructor({ name, type, flowchartId, cache = [] }) { - this.type = type; - this._name = name; - this._head = false; - this._results = []; - this._monitors = []; - this._preProcessors = []; - this._postProcessors = []; - this.cache = cache; - const countInCache = this.cache.filter((s) => s === name).length; - this.cache.push(name); - this._flowchartId = flowchartId || this.generateFlowChartId(name, countInCache); - } - name(str) { - this._name = str; - return this; - } - head(bool) { - this._head = bool; - return this; - } - generateFlowChartId(seed, countInCache = 0) { - const suffix = countInCache > 0 ? `-${countInCache}` : ""; - const seedWithSuffix = `${seed}${suffix}`; - if (this.constructor.usePredefinedIds) - return utils_1.Utils.uuid.getUUIDFromNamespace(seedWithSuffix); - return utils_1.Utils.uuid.getUUID(); - } - flowchartId(flowchartId) { - this._flowchartId = flowchartId; - return this; - } - static _stringArrayToNamedObject(array) { - return array.map((name) => (underscore_1.default.isString(name) ? { name } : name)); - } - addPreProcessors(preProcessorNames) { - this._preProcessors = underscore_1.default.union(this.constructor._stringArrayToNamedObject(preProcessorNames), this._preProcessors); - return this; - } - addPostProcessors(postProcessorNames) { - this._postProcessors = underscore_1.default.union(this.constructor._stringArrayToNamedObject(postProcessorNames), this._postProcessors); - return this; - } - addResults(resultNames) { - this._results = underscore_1.default.union(this.constructor._stringArrayToNamedObject(resultNames), this._results); - return this; - } - addMonitors(monitorNames) { - this._monitors = underscore_1.default.union(this.constructor._stringArrayToNamedObject(monitorNames), this._monitors); - return this; - } - build() { - return { - type: this.type, - name: this._name, - head: this._head, - results: this._results, - monitors: this._monitors, - flowchartId: this._flowchartId, - preProcessors: this._preProcessors, - postProcessors: this._postProcessors, - }; - } -} -exports.UnitConfigBuilder = UnitConfigBuilder; -UnitConfigBuilder.usePredefinedIds = false; diff --git a/dist/js/standata/units/builders/index.d.ts b/dist/js/standata/units/builders/index.d.ts deleted file mode 100644 index 2271d086..00000000 --- a/dist/js/standata/units/builders/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export namespace builders { - export { UnitConfigBuilder }; - export { AssignmentUnitConfigBuilder }; - export { AssertionUnitConfigBuilder }; - export { ExecutionUnitConfigBuilder }; - export { IOUnitConfigBuilder }; -} -import { UnitConfigBuilder } from "./UnitConfigBuilder"; -import { AssignmentUnitConfigBuilder } from "./AssignmentUnitConfigBuilder"; -import { AssertionUnitConfigBuilder } from "./AssertionUnitConfigBuilder"; -import { ExecutionUnitConfigBuilder } from "./ExecutionUnitConfigBuilder"; -import { IOUnitConfigBuilder } from "./IOUnitConfigBuilder"; diff --git a/dist/js/standata/units/builders/index.js b/dist/js/standata/units/builders/index.js deleted file mode 100644 index bd53bfa5..00000000 --- a/dist/js/standata/units/builders/index.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.builders = void 0; -const AssertionUnitConfigBuilder_1 = require("./AssertionUnitConfigBuilder"); -const AssignmentUnitConfigBuilder_1 = require("./AssignmentUnitConfigBuilder"); -const ExecutionUnitConfigBuilder_1 = require("./ExecutionUnitConfigBuilder"); -const IOUnitConfigBuilder_1 = require("./IOUnitConfigBuilder"); -const UnitConfigBuilder_1 = require("./UnitConfigBuilder"); -const builders = { - UnitConfigBuilder: UnitConfigBuilder_1.UnitConfigBuilder, - AssignmentUnitConfigBuilder: AssignmentUnitConfigBuilder_1.AssignmentUnitConfigBuilder, - AssertionUnitConfigBuilder: AssertionUnitConfigBuilder_1.AssertionUnitConfigBuilder, - ExecutionUnitConfigBuilder: ExecutionUnitConfigBuilder_1.ExecutionUnitConfigBuilder, - IOUnitConfigBuilder: IOUnitConfigBuilder_1.IOUnitConfigBuilder, -}; -exports.builders = builders; diff --git a/dist/js/standata/utils.d.ts b/dist/js/standata/utils.d.ts deleted file mode 100644 index 3f43a67e..00000000 --- a/dist/js/standata/utils.d.ts +++ /dev/null @@ -1,616 +0,0 @@ -import type { SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; -/** - * @summary Apply configuration data to an object - * @param obj {*} object / class containing methods or attributes to be set - * @param config { functions: {}, attributes: {} } functions to call and attributes to set - * @param callBuild {boolean} if true; call build between applying functions and attributes - * @returns {*} updated object - */ -export declare function applyConfig({ obj, config, callBuild, }: { - obj: any; - config: { - functions?: Record; - attributes?: Record; - }; - callBuild: boolean; -}): any; -/** - * @summary Safely extract unit object from subworkflow data - */ -export declare function findUnit({ subworkflowData, index, type, }: { - subworkflowData: SubworkflowSchema; - index: number; - type: "assignment" | "condition" | "processing" | "io" | "assertion" | "execution" | "reduce"; -}): { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "io"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - subtype: "input" | "output" | "dataFrame"; - source: "api" | "object_storage"; - input: ({ - type: "api"; - endpoint: string; - endpoint_options: {}; - name?: string; - } | { - type: "object_storage"; - objectData: { - CONTAINER?: string; - NAME?: string; - PROVIDER?: string; - REGION?: string; - SIZE?: number; - TIMESTAMP?: string; - }; - overwrite?: boolean; - pathname?: string; - basename?: string; - filetype?: string; - })[]; -} | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "condition"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - input: { - scope: string; - name: string; - }[]; - statement: string; - then: string; - else: string; - maxOccurrences: number; - throwException?: boolean; -} | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assertion"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - statement: string; - errorMessage?: string; -} | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "execution"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - application: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - shortName: string; - summary: string; - version: string; - build: string; - hasAdvancedComputeOptions?: boolean; - isLicensed?: boolean; - }; - executable: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - hasAdvancedComputeOptions?: boolean; - }; - flavor: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - executableName?: string; - applicationName?: string; - input: { - templateId?: string; - templateName?: string; - name?: string; - }[]; - supportedApplicationVersions?: string[]; - }; - input: { - template: { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - applicationName: string; - applicationVersion?: string; - executableName: string; - contextProviders: { - name: import("@mat3ra/esse/dist/js/types").ContextProviderNameEnum; - }[]; - content: string; - }; - rendered: string; - isManuallyChanged: boolean; - }[]; - context: ({ - name: "input"; - data: { - contextProviderName: "nwchem-total-energy"; - CHARGE: number; - MULT: number; - BASIS: string; - NAT: number; - NTYP: number; - ATOMIC_POSITIONS: string; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - ATOMIC_SPECIES: string; - FUNCTIONAL: string; - CARTESIAN: boolean; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS?: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS?: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - FIRST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - LAST_IMAGE: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - INTERMEDIATE_IMAGES: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[][]; - contextProviderName: "qe-neb"; - } | { - IBRAV: number; - RESTART_MODE: "from_scratch" | "restart"; - ATOMIC_SPECIES: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - ATOMIC_SPECIES_WITH_LABELS: { - X: string; - Mass_X: number; - PseudoPot_X: string; - }[]; - NAT: number; - NTYP: number; - NTYP_WITH_LABELS: number; - ATOMIC_POSITIONS: { - X?: string; - x: number; - y: number; - z: number; - "if_pos(1)"?: number; - "if_pos(2)"?: number; - "if_pos(3)"?: number; - }[]; - ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: string; - CELL_PARAMETERS: { - v1?: [number, number, number]; - v2?: [number, number, number]; - v3?: [number, number, number]; - }; - contextProviderName: "qe-pwx"; - } | { - POSCAR: string; - POSCAR_WITH_CONSTRAINTS: string; - contextProviderName: "vasp"; - } | { - FIRST_IMAGE: string; - LAST_IMAGE: string; - INTERMEDIATE_IMAGES: string[]; - contextProviderName: "vasp-neb"; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "cutoffs"; - data: { - wavefunction?: number; - density?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "kgrid" | "qgrid" | "igrid"; - data: { - dimensions: [number, number, number] | [string, string, string]; - shifts?: [number, number, number]; - reciprocalVectorRatios?: [number, number, number]; - gridMetricType: "KPPRA" | "spacing"; - gridMetricValue: number; - preferGridMetric?: boolean; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "qpath" | "ipath" | "kpath" | "explicitKPath" | "explicitKPath2PIBA"; - data: [{ - point?: string; - steps: number; - coordinates: number[]; - }, ...{ - point?: string; - steps: number; - coordinates: number[]; - }[]]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_j"; - data: [{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }, ...{ - paramType?: "U" | "J" | "B" | "E2" | "E3"; - atomicSpecies?: string; - atomicOrbital?: string; - value?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_u"; - data: { - atomicSpecies?: string; - atomicOrbital?: string; - hubbardUValue?: number; - }[]; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "hubbard_v"; - data: [{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }, ...{ - atomicSpecies?: string; - siteIndex?: number; - atomicOrbital?: string; - atomicSpecies2?: string; - siteIndex2?: number; - atomicOrbital2?: string; - hubbardVValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "hubbard_legacy"; - data: [{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }, ...{ - atomicSpecies?: string; - atomicSpeciesIndex?: number; - hubbardUValue?: number; - }[]]; - isEdited: boolean; - extraData: {}; - } | { - name: "neb"; - data: { - nImages?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "boundaryConditions"; - data: { - type?: "pbc" | "bc1" | "bc2" | "bc3"; - offset?: number; - electricField?: number; - targetFermiEnergy?: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "mlSettings"; - data: { - target_column_name?: string; - problem_category?: "regression" | "classification" | "clustering"; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "mlTrainTestSplit"; - data: { - fraction_held_as_test_set?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "dynamics"; - data: { - numberOfSteps?: number; - timeStep?: number; - electronMass?: number; - temperature?: number; - }; - isEdited: boolean; - extraData: {}; - } | { - name: "collinearMagnetization"; - data: { - startingMagnetization: { - atomicSpecies: string; - value: number; - index: number; - }[]; - isTotalMagnetization: boolean; - totalMagnetization: number; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - } | { - name: "nonCollinearMagnetization"; - data: { - isExistingChargeDensity?: boolean; - isStartingMagnetization?: boolean; - startingMagnetization?: { - index?: number; - atomicSpecies?: string; - value?: number; - }[]; - isArbitrarySpinAngle?: boolean; - isArbitrarySpinDirection?: boolean; - lforcet?: boolean; - spinAngles?: { - index?: number; - atomicSpecies?: string; - angle1?: number; - angle2?: number; - }[]; - isConstrainedMagnetization?: boolean; - constrainedMagnetization?: { - constrainType?: "none" | "total" | "atomic" | "total direction" | "atomic direction"; - lambda?: number; - }; - isFixedMagnetization?: boolean; - fixedMagnetization?: { - x?: number; - y?: number; - z?: number; - }; - }; - extraData: { - materialHash: string; - }; - isEdited: boolean; - })[]; -} | { - _id?: string; - slug?: string; - systemName?: string; - schemaVersion?: string; - name: string; - isDefault?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - tags?: string[]; - status?: "idle" | "active" | "warning" | "error" | "finished"; - statusTrack?: { - trackedAt: number; - status: string; - repetition?: number; - }[]; - isDraft?: boolean; - type: "assignment"; - head?: boolean; - flowchartId: string; - next?: string; - enableRender?: boolean; - scope?: string; - input?: { - scope: string; - name: string; - }[]; - operand: string; - value: string | boolean | number; -}; diff --git a/dist/js/standata/utils.js b/dist/js/standata/utils.js deleted file mode 100644 index 3ab06135..00000000 --- a/dist/js/standata/utils.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.applyConfig = applyConfig; -exports.findUnit = findUnit; -/** - * @summary Apply configuration data to an object - * @param obj {*} object / class containing methods or attributes to be set - * @param config { functions: {}, attributes: {} } functions to call and attributes to set - * @param callBuild {boolean} if true; call build between applying functions and attributes - * @returns {*} updated object - */ -function applyConfig({ obj, config = {}, callBuild = false, }) { - const { functions = {}, attributes = {} } = config; - // eslint-disable-next-line no-restricted-syntax - for (const [func, args] of Object.entries(functions)) { - // eslint-disable-next-line no-nested-ternary - if (obj[func]) { - if (args) - obj[func](args); - else - obj[func](); - } - } - const modified = callBuild ? obj.build() : obj; - // eslint-disable-next-line no-restricted-syntax - for (const [key, values] of Object.entries(attributes)) { - modified[key] = values; - } - return modified; -} -/** - * @summary Safely extract unit object from subworkflow data - */ -function findUnit({ subworkflowData, index, type, }) { - const unit = subworkflowData.units[index]; - if (unit.type !== type) - throw new Error("findUnit() error: unit type does not match!"); - return unit; -} diff --git a/dist/js/standata/workflows/create.d.ts b/dist/js/standata/workflows/create.d.ts deleted file mode 100644 index 6d0af67b..00000000 --- a/dist/js/standata/workflows/create.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export function createWorkflow({ appName, workflowData, workflowSubworkflowMapByApplication, workflowCls, ...swArgs }: { - [x: string]: any; - appName: any; - workflowData: any; - workflowSubworkflowMapByApplication: any; - workflowCls?: typeof Workflow | undefined; -}): any[]; -import { Workflow } from "../../Workflow"; diff --git a/dist/js/standata/workflows/create.js b/dist/js/standata/workflows/create.js deleted file mode 100644 index cf4d7634..00000000 --- a/dist/js/standata/workflows/create.js +++ /dev/null @@ -1,218 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createWorkflow = createWorkflow; -const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const schemas_json_1 = __importDefault(require("@mat3ra/esse/dist/js/schemas.json")); -const units_1 = require("../../units"); -const MapUnit_1 = require("../../units/MapUnit"); -const Workflow_1 = require("../../Workflow"); -const utils_1 = require("../../workflows/utils"); -const create_1 = require("../subworkflows/create"); -// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` -JSONSchemasInterface_1.default.setSchemas(schemas_json_1.default); -/** - * @summary Helper for creating Map units for complex workflows - * @param config {Object} map unit configuration - * @param unitFactoryCls {*} class factory for map unit - * @returns {*} map unit - */ -function createMapUnit({ config, unitFactoryCls = units_1.UnitFactory }) { - let { input: defaultInput } = MapUnit_1.defaultMapConfig; - if (config.input) { - defaultInput = { ...defaultInput, ...config.input }; - } - const unit = unitFactoryCls.create({ ...MapUnit_1.defaultMapConfig, input: defaultInput }); - return unit; -} -/** - * @summary Update subworkflow units with patch configuration defined in the workflow config - * @param subworkflowData {Object} subworkflow data - * @param unitConfigs {Array} array of patch configs for subworkflow units - * @returns subworkflowData {Object} subworkflowData with patches applied to units - */ -function updateUnitConfigs({ subworkflowData, unitConfigs }) { - unitConfigs.forEach((config) => { - const { index, type, config: unitConfig } = config; // unitConfig should contain 'attributes' key - const unit = (0, utils_1.findUnit)({ subworkflowData, index, type }); - console.log(` patching ${type} unit ${index} of subworkflow ${subworkflowData.name}`); - unit.config = (0, utils_1.applyConfig)({ obj: unit.config, config: unitConfig }); - return null; - }); - return subworkflowData; -} -/** - * @summary Use subworkflow.createSubworkflow to create a Subworkflow unit - * @param appName {String} application name - * @param unitData {*} object containing subworkflow configuration data - * @param workflowData {*} object containing all workflow configuration data - * @param swArgs {*} subworkflow classes - * @returns {*} subworkflow object - */ -function createSubworkflowUnit({ appName, unitData, workflowData, cache, ...swArgs }) { - const { name: unitName, unitConfigs, config } = unitData; - const { subworkflows } = workflowData; - const { [appName]: dataByApp } = subworkflows; - let { [unitName]: subworkflowData } = dataByApp; - subworkflowData.config = { ...subworkflowData.config, ...config }; - if (unitConfigs) - subworkflowData = updateUnitConfigs({ subworkflowData, unitConfigs }); - return (0, create_1.createSubworkflow)({ - subworkflowData, - cache, - ...swArgs, - }); -} -/** - * @summary Create the first workflow object specified in a workflow configuration - * @param workflow {*|null} the workflow (if already initialized, no-op) - * @param unit {*} workflow unit object - * @param type {String} value in ["workflow", "subworkflow"] - * @param workflowCls {*} workflow class - * @returns {Workflow|*} workflow object - */ -function createWorkflowHead({ workflow, unit, type, workflowCls }) { - if (workflow) - return workflow; - let wf; - switch (type) { - case "workflow": - wf = unit; - break; - case "subworkflow": - wf = workflowCls.fromSubworkflow(unit); - break; - default: - throw new Error(`workflow type=${type} not understood.`); - } - return wf; -} -/** - * @summary Combine workflow units together - * @param workflow {*} the workflow object - * @param unit {*} workflow/subworkflow object - * @param config {*} additional configuration for e.g. map units - * @param type {String} value in ["workflow", "subworkflow"] - * @param unitFactoryCls {*} unit factory class for e.g. map units - * @returns {*} modified workflow - */ -function composeWorkflow({ workflow, unit, config, type, unitFactoryCls }) { - /* eslint-disable no-case-declarations */ - switch (type) { - case "workflow": - const { mapUnit: isMapUnit, ...mapUnitConfig } = config; - if (isMapUnit) { - const mapUnit = createMapUnit({ config: mapUnitConfig, unitFactoryCls }); - workflow.addMapUnit(mapUnit, unit); - } - else { - console.log("adding workflows directly to workflows is not supported."); - } - break; - case "subworkflow": - workflow.addSubworkflow(unit); - break; - default: - throw new Error(`workflow type=${type} not understood.`); - } - /* eslint-enable no-case-declarations */ - return workflow; -} -/** - * @summary Convert a flattened array of workflow units to a properly constructed workflow - * @param wfUnits {Array} array of workflow units - * @param workflowCls {*} workflow class - * @param unitFactoryCls {*} unit factory class - * @returns {*} constructed workflow - */ -function createFromWorkflowUnits({ wfUnits, workflowCls, unitFactoryCls }) { - let workflow, unit, config, type; - wfUnits.map((wfUnit) => { - ({ unit, config, type } = wfUnit); - if (!workflow) { - workflow = createWorkflowHead({ - workflow, - unit, - type, - workflowCls, - }); - } - else { - workflow = composeWorkflow({ - workflow, - unit, - config, - type, - unitFactoryCls, - }); - } - return null; - }); - return (0, utils_1.applyConfig)({ obj: workflow, config }); -} -/** - * @summary Creates a flattened array of workflow units from nested workflow/subworkflow - * configuration data comprising a simple or complex workflow - * @param appName - * @param units - * @param swArgs - * @returns {*[]} - */ -function createWorkflowUnits({ appName, workflowData, workflowSubworkflowMapByApplication, workflowCls, cache = [], ...swArgs }) { - const wfUnits = []; - const { units } = workflowData; - let unit, config; - units.map((unitData) => { - const { type } = unitData; - switch (type) { - case "workflow": - ({ config } = unitData); - unit = createWorkflowUnits({ - appName, - workflowData: unitData, - workflowSubworkflowMapByApplication, - workflowCls, - ...swArgs, - }); - break; - case "subworkflow": - ({ config } = workflowData); - unit = createSubworkflowUnit({ - appName, - unitData, - workflowData: workflowSubworkflowMapByApplication, - cache, - ...swArgs, - }); - break; - default: - break; - } - wfUnits.push({ config, unit, type }); - return null; - }); - return createFromWorkflowUnits({ - wfUnits, - workflowCls, - subworkflowCls: swArgs.subworkflowCls, - unitFactoryCls: swArgs.unitFactoryCls, - }); -} -function createWorkflow({ appName, workflowData, workflowSubworkflowMapByApplication, workflowCls = Workflow_1.Workflow, ...swArgs }) { - const cache = []; - const { name } = workflowData; - console.log(`wode: creating ${appName} workflow ${name}`); - const wf = createWorkflowUnits({ - appName, - workflowData, - workflowSubworkflowMapByApplication, - workflowCls, - cache, - ...swArgs, - }); - wf.setName(name); - wf.applicationName = appName; - return wf; -} diff --git a/dist/js/units/ExecutionUnit.d.ts b/dist/js/units/ExecutionUnit.d.ts index 8765f011..e35257df 100644 --- a/dist/js/units/ExecutionUnit.d.ts +++ b/dist/js/units/ExecutionUnit.d.ts @@ -1,7 +1,7 @@ import { Application, Executable, Flavor } from "@mat3ra/ade"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ExecutableSchema, ExecutionUnitSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; +import type { ApplicationSchema, ExecutableSchema, ExecutionUnitSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type ExternalContext } from "../context/providers"; import type ConvergenceParameter from "../convergence/ConvergenceParameter"; import { type ExecutionUnitSchemaMixin } from "../generated/ExecutionUnitSchemaMixin"; @@ -10,21 +10,18 @@ import ExecutionUnitInput from "./ExecutionUnitInput"; type Schema = ExecutionUnitSchema; type Base = typeof BaseUnit & Constructor; interface SetApplicationProps { - application: Application; - executable?: Executable | ExecutableSchema; - flavor?: Flavor | FlavorSchema; -} -interface SetExecutableProps { + application: Application | ApplicationSchema; executable?: Executable | ExecutableSchema; flavor?: Flavor | FlavorSchema; } +type SetExecutableProps = Pick; declare const ExecutionUnit_base: Base; declare class ExecutionUnit extends ExecutionUnit_base implements Schema { applicationInstance: Application; executableInstance: Executable; flavorInstance: Flavor; inputInstances: ExecutionUnitInput[]; - renderingContext: Record; + renderingContext: Partial; toJSON: () => Schema & AnyObject; _json: Schema & AnyObject; constructor(config: Schema); diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index 0f529da3..2b4dca14 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -4,11 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const ade_1 = require("@mat3ra/ade"); +const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); const providers_1 = require("../context/providers"); const ExecutionUnitSchemaMixin_1 = require("../generated/ExecutionUnitSchemaMixin"); const BaseUnit_1 = __importDefault(require("./BaseUnit")); const ExecutionUnitInput_1 = __importDefault(require("./ExecutionUnitInput")); +const standata = new standata_1.ApplicationStandata(); class ExecutionUnit extends BaseUnit_1.default { constructor(config) { var _a; @@ -16,51 +18,35 @@ class ExecutionUnit extends BaseUnit_1.default { this.inputInstances = []; this.renderingContext = {}; const { application, executable, flavor } = config; - const applicationInstance = ade_1.ApplicationRegistry.createApplication(application); - const executableInstance = ade_1.ApplicationRegistry.getExecutableByConfig(application.name, executable); - const flavorInstance = ade_1.ApplicationRegistry.getFlavorByConfig(executableInstance, flavor); - if (!flavorInstance) { - throw new Error("Flavor is not set"); - } - this.setApplication({ - application: applicationInstance, - executable: executableInstance, - flavor: flavorInstance, - }); + this.setApplication({ application, executable, flavor }); this.name = this.name || ((_a = this.flavor) === null || _a === void 0 ? void 0 : _a.name) || ""; } setApplication({ application, executable, flavor }) { - this.applicationInstance = application; - this.setProp("application", application.toJSON()); + this.applicationInstance = new ade_1.Application(standata.getApplication(application)); + this.setProp("application", this.applicationInstance.toJSON()); this.setExecutable({ executable, flavor }); } setExecutable({ executable, flavor }) { - const defaultExecutable = ade_1.ApplicationRegistry.getExecutableByName(this.application.name); - const instance = executable instanceof ade_1.Executable - ? executable - : new ade_1.Executable(executable !== null && executable !== void 0 ? executable : defaultExecutable.toJSON()); - this.allowedResults = instance.results; - this.allowedMonitors = instance.monitors; - this.allowedPostProcessors = instance.postProcessors; - this.setProp("executable", instance.toJSON()); + const { executable: executablePlain } = standata.getExecutableAndFlavorByName(this.application.name); + this.executableInstance = new ade_1.Executable(executable || executablePlain); + this.allowedResults = this.executableInstance.results; + this.allowedMonitors = this.executableInstance.monitors; + this.allowedPostProcessors = this.executableInstance.postProcessors; + this.setProp("executable", this.executableInstance.toJSON()); this.setFlavor(flavor); } setFlavor(flavor) { - const defaultFlavor = ade_1.ApplicationRegistry.getFlavorByConfig(this.executableInstance); - const instance = flavor instanceof ade_1.Flavor ? flavor : new ade_1.Flavor(flavor !== null && flavor !== void 0 ? flavor : defaultFlavor === null || defaultFlavor === void 0 ? void 0 : defaultFlavor.toJSON()); - if (!instance) { - throw new Error("Flavor is not found for executable"); - } - this.flavorInstance = instance; - this.defaultMonitors = instance.monitors; - this.defaultResults = instance.results; - this.defaultPostProcessors = instance.postProcessors; - this.setProp("flavor", instance.toJSON()); + const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName(this.application.name, this.executable.name); + this.flavorInstance = new ade_1.Flavor(flavor || defaultFlavor); + this.defaultMonitors = this.flavorInstance.monitors; + this.defaultResults = this.flavorInstance.results; + this.defaultPostProcessors = this.flavorInstance.postProcessors; + this.setProp("flavor", this.flavorInstance.toJSON()); this.setRuntimeItemsToDefaultValues(); this.setDefaultInput(); } setDefaultInput() { - const inputs = ade_1.ApplicationRegistry.getInput(this.flavorInstance); + const inputs = standata.getInput(this.flavorInstance); this.inputInstances = inputs.map(ExecutionUnitInput_1.default.createFromTemplate); } getContextProvidersInstances(externalContext) { @@ -102,12 +88,12 @@ class ExecutionUnit extends BaseUnit_1.default { return input.render(this.renderingContext).toJSON(); }); } - saveContext(fullContext, { subworkflowContext }) { + saveContext(fullContext, externalContext) { // persistent context this.context = fullContext.filter((c) => c.isEdited); this.renderingContext = { ...Object.fromEntries(fullContext.map((context) => [context.name, context.data])), - subworkflowContext: { ...subworkflowContext }, + ...externalContext, }; } /** diff --git a/dist/js/units/ExecutionUnitInput.d.ts b/dist/js/units/ExecutionUnitInput.d.ts index 67ca0e29..f653daab 100644 --- a/dist/js/units/ExecutionUnitInput.d.ts +++ b/dist/js/units/ExecutionUnitInput.d.ts @@ -3,7 +3,7 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import type { ExecutionUnitInputSchemaMixin } from "../generated/ExecutionUnitInputSchemaMixin"; +import { ExecutionUnitInputSchemaMixin } from "../generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; type JSON = Schema & AnyObject; type Base = typeof InMemoryEntity & Constructor; diff --git a/dist/js/units/ExecutionUnitInput.js b/dist/js/units/ExecutionUnitInput.js index c61e3998..0558ccf9 100644 --- a/dist/js/units/ExecutionUnitInput.js +++ b/dist/js/units/ExecutionUnitInput.js @@ -6,7 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); const ade_1 = require("@mat3ra/ade"); const entity_1 = require("@mat3ra/code/dist/js/entity"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); +const standata_1 = require("@mat3ra/standata"); const nunjucks_1 = __importDefault(require("nunjucks")); +const ExecutionUnitInputSchemaMixin_1 = require("../generated/ExecutionUnitInputSchemaMixin"); +const env = (0, standata_1.setupNunjucksEnvironment)(new nunjucks_1.default.Environment()); class ExecutionUnitInput extends entity_1.InMemoryEntity { static get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("workflow/unit/input/-inputItem"); @@ -27,9 +30,18 @@ class ExecutionUnitInput extends entity_1.InMemoryEntity { if (this.isManuallyChanged) { return this; } - const rendered = nunjucks_1.default.compile(this.template.content).render(renderingContext); - this.rendered = rendered || this.template.content; - return this; + try { + const rendered = nunjucks_1.default.compile(this.template.content, env).render(renderingContext); + this.rendered = rendered || this.template.content; + return this; + } + catch (error) { + console.error("Error rendering template", this.template.content); + console.error("Rendering context: ", JSON.stringify(renderingContext)); + console.error("Error", error); + throw error; + } } } exports.default = ExecutionUnitInput; +(0, ExecutionUnitInputSchemaMixin_1.executionUnitInputSchemaMixin)(ExecutionUnitInput.prototype); diff --git a/package-lock.json b/package-lock.json index 9596a876..968a2dd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,11 +18,11 @@ "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#b0f35365bdc76c284730f17cbc786fdb43726c0a", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7f2a794f8b6a7b1a0c7f334ca8be72b7004f4b5f", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#381d4b30de2d807c9b7fa2bdf4dcadc54da04576", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "@types/nunjucks": "^3.2.6", @@ -2437,8 +2437,8 @@ }, "node_modules/@mat3ra/code": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", - "integrity": "sha512-lxmiLW3kCYWc2of2BWbrE+NNU4DcRNGtaJYJ7C9UA7y2JQXjuHYX1dqCDh5hN3A6esu8giEOXsBwf+b64M9EYQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#b0f35365bdc76c284730f17cbc786fdb43726c0a", + "integrity": "sha512-M1Cd5r2KWHcpQ7Lw6drqvyrSQhQtATDegdakqrbzEJ5+V4n2XAHxyutVI5qQ+kYhdFuU19gXmkwz8X/SSwENFQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3435,14 +3435,16 @@ }, "node_modules/@mat3ra/standata": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#7f2a794f8b6a7b1a0c7f334ca8be72b7004f4b5f", - "integrity": "sha512-zTn9iZFitESBt42iybKhSO8B8Boaf84ThpToaPd5OZKUrAeg6zmn5yiJGIUyQ0vi79gShG7D+Sj0vzTH8yz5Aw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#381d4b30de2d807c9b7fa2bdf4dcadc54da04576", + "integrity": "sha512-3CSQpVpvuTOBy/MSnX6+dYyrJ+ay81yaxFGQV35zfvc0Ng9kULpvbi0qusWrgEU7XJh2e2nrUukYC/SN+1paOg==", "dev": true, "license": "Apache-2.0", "dependencies": { "cmd-ts": "^0.13.0", "js-yaml": "^4.1.0", - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" }, "engines": { "node": ">=20.0.0" diff --git a/package.json b/package.json index 45f3be29..296fc0a6 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ "@types/nunjucks": "^3.2.6", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cb3fa59e2cc143d744f9019322208d928ff8de88", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#b0f35365bdc76c284730f17cbc786fdb43726c0a", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7f2a794f8b6a7b1a0c7f334ca8be72b7004f4b5f", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#381d4b30de2d807c9b7fa2bdf4dcadc54da04576", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "chai": "^4.3.4", diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index 4a3fef3b..f6cdcaf3 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -25,7 +25,7 @@ import type { MaterialExternalContext } from "./context/mixins/MaterialContextMi import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; import type { WorkflowExternalContext } from "./context/mixins/WorkflowContextMixin"; -import type { ExternalContext } from "./context/providers"; +import type { AssignmentContext, ExternalContext } from "./context/providers"; import { createConvergenceParameter } from "./convergence/factory"; import { UnitTag, UnitType } from "./enums"; import { @@ -67,7 +67,7 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub private applicationInstance: Application; - private unitsInstances!: AnySubworkflowUnit[]; + unitsInstances!: AnySubworkflowUnit[]; modelInstance: Model; @@ -213,11 +213,11 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub ...acc, [u.operand]: u.value, }; - }, {} as Record); + }, {} as AssignmentContext); return { ...context, - application: this.applicationInstance, + application: this.applicationInstance.toJSON(), methodData: this.model.method.data, subworkflowContext, }; diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 4a6963a9..de1e86b4 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -39,15 +39,8 @@ type Base = typeof InMemoryEntity & NamedInMemoryEntityConstructor & Constructor; -type GenerateWorkflowIdParams = { - name: string; - properties?: string[]; - subworkflows?: SubworkflowSchema[]; - applicationName?: string; -}; - /** Context passed to Workflow.render() before workflow reference is injected for subworkflows. */ -type WorkflowRenderContext = MaterialExternalContext & +export type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & JobExternalContext; @@ -61,33 +54,12 @@ export class Workflow extends (InMemoryEntity as Base) { return JSONSchemasInterface.getSchemaById("workflow"); } - private subworkflowInstances: Subworkflow[]; + subworkflowInstances: Subworkflow[]; private unitInstances!: AnyWorkflowUnit[]; private workflowInstances: Workflow[]; - private static generateDefaultWorkflowId() { - return Utils.uuid.getUUID(); - } - - private static generateStandataWorkflowId({ - name, - properties, - subworkflows, - applicationName, - }: GenerateWorkflowIdParams) { - const propsInfo = properties?.length ? properties.sort().join(",") : ""; - const swInfo = subworkflows?.length - ? subworkflows.map((sw) => sw.name || "unknown").join(",") - : ""; - const seed = [`workflow-${name}`, applicationName, propsInfo, swInfo] - .filter((p) => p) - .join("-"); - - return Utils.uuid.getUUIDFromNamespace(seed); - } - static fromSubworkflow(subworkflow: Subworkflow) { const config = { name: subworkflow.name, @@ -101,18 +73,10 @@ export class Workflow extends (InMemoryEntity as Base) { } constructor(config: WorkflowSchema & { applicationName?: string }) { - if (!config._id) { - if (Workflow.usePredefinedIds) { - if (!config.applicationName) { - throw new Error("applicationName is required when usePredefinedIds is true"); - } - config._id = Workflow.generateStandataWorkflowId(config); - } else { - config._id = Workflow.generateDefaultWorkflowId(); - } - } - - super(config); + super({ + ...config, + _id: config._id || Utils.uuid.getUUID(), + }); this.subworkflowInstances = this.subworkflows.map((x) => new Subworkflow(x)); this.workflowInstances = this.workflows?.map((x) => new Workflow(x)) || []; @@ -277,7 +241,7 @@ export class Workflow extends (InMemoryEntity as Base) { case UnitType.map: { const mapWorkflowConfig = { ...defaultWorkflowConfig, - _id: Workflow.generateDefaultWorkflowId(), + _id: Utils.uuid.getUUID(), }; const mapUnit = new MapUnit({ workflowId: mapWorkflowConfig._id, @@ -300,7 +264,7 @@ export class Workflow extends (InMemoryEntity as Base) { addMapUnit(mapUnit: MapUnit, mapWorkflow: Workflow) { const mapWorkflowConfig = { - _id: Workflow.generateDefaultWorkflowId(), + _id: Utils.uuid.getUUID(), ...mapWorkflow.toJSON(), }; diff --git a/src/js/context/mixins/ApplicationContextMixin.ts b/src/js/context/mixins/ApplicationContextMixin.ts index 9a545fdd..a9eb6e01 100644 --- a/src/js/context/mixins/ApplicationContextMixin.ts +++ b/src/js/context/mixins/ApplicationContextMixin.ts @@ -1,13 +1,13 @@ -import type { Application } from "@mat3ra/ade"; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import type ContextProvider from "../providers/base/ContextProvider"; export type ApplicationContextMixin = { - application: Application; + application: ApplicationSchema; initApplicationContextMixin(externalContext: ApplicationExternalContext): void; }; -export type ApplicationExternalContext = { application: Application }; +export type ApplicationExternalContext = { application: ApplicationSchema }; export default function applicationContextMixin(item: ContextProvider) { // @ts-expect-error diff --git a/src/js/context/mixins/JobContextMixin.ts b/src/js/context/mixins/JobContextMixin.ts index 49798e4c..4fdd5258 100644 --- a/src/js/context/mixins/JobContextMixin.ts +++ b/src/js/context/mixins/JobContextMixin.ts @@ -4,12 +4,12 @@ import type ContextProvider from "../providers/base/ContextProvider"; export type JobContextMixin = { isEdited: boolean; - job: JobSchema; + job?: Pick; initJobContextMixin(externalContext: JobExternalContext): void; }; export type JobExternalContext = { - job: JobSchema; + job?: Pick; }; export default function jobContextMixin(item: ContextProvider) { diff --git a/src/js/context/providers/PointsGrid/IGridFormDataManager.ts b/src/js/context/providers/PointsGrid/IGridFormDataManager.ts index 73b15403..2ac7181a 100644 --- a/src/js/context/providers/PointsGrid/IGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/IGridFormDataManager.ts @@ -1,4 +1,6 @@ +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; @@ -11,6 +13,17 @@ export default class IGridFormDataManager extends PointsGridFormDataProvider, externalContext: ExternalContext) { + super(contextItem, externalContext); + + this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById( + this.jsonSchemaId, + this.jsonSchemaPatchConfig, + ); + } + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "igrid"); diff --git a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts index db3fe1b0..bc92a6fc 100644 --- a/src/js/context/providers/PointsGrid/KGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/KGridFormDataManager.ts @@ -1,4 +1,6 @@ +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; import ConvergenceParameter from "../../../convergence/ConvergenceParameter"; import type { UnitContext } from "../base/ContextProvider"; @@ -12,6 +14,17 @@ export default class KGridFormDataManager extends PointsGridFormDataProvider, externalContext: ExternalContext) { + super(contextItem, externalContext); + + this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById( + this.jsonSchemaId, + this.jsonSchemaPatchConfig, + ); + } + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "kgrid"); diff --git a/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts b/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts index f92e0e68..ec45f55f 100644 --- a/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts +++ b/src/js/context/providers/PointsGrid/PointsGridFormDataProvider.ts @@ -1,7 +1,6 @@ import { Units } from "@mat3ra/code/dist/js/constants"; import { math as codeJSMath } from "@mat3ra/code/dist/js/math"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { GridContextItemSchema, PointsGridDataProviderSchema, @@ -44,7 +43,6 @@ const vector = ( }; }; -const jsonSchemaId = "context-providers-directory/points-grid-data-provider"; const defaultShift = 0; const defaultShifts: Vector3DSchema = [defaultShift, defaultShift, defaultShift]; @@ -57,6 +55,8 @@ export default abstract class PointsGridFormDataProvider< readonly entityName = "unit" as const; + readonly jsonSchemaId = "context-providers-directory/points-grid-data-provider"; + public dimensions!: Data["dimensions"]; public shifts!: Data["shifts"]; @@ -80,19 +80,12 @@ export default abstract class PointsGridFormDataProvider< value: number; }; - readonly jsonSchema: JSONSchema7 | undefined; + abstract readonly jsonSchema: JSONSchema7 | undefined; constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); this.initMaterialContextMixin(externalContext); this.initInstanceFields(); - - const { jsonSchemaPatchConfig } = this; - - this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById( - jsonSchemaId, - jsonSchemaPatchConfig, - ); } private initInstanceFields() { @@ -155,7 +148,7 @@ export default abstract class PointsGridFormDataProvider< return defaultData; } - private get jsonSchemaPatchConfig() { + protected get jsonSchemaPatchConfig() { const metricDescription = { KPPRA: `${this.name.toUpperCase()}PPRA (${this.name}pt per reciprocal atom)`, // KPPRA or QPPRA spacing: "grid spacing", @@ -301,11 +294,7 @@ export default abstract class PointsGridFormDataProvider< } } - setData(data?: Data) { - if (!data) { - return; - } - + setData(data: Data) { const { dimensions, gridMetricType, preferGridMetric, gridMetricValue } = data; if (preferGridMetric && gridMetricType && gridMetricValue) { diff --git a/src/js/context/providers/PointsGrid/QGridFormDataManager.ts b/src/js/context/providers/PointsGrid/QGridFormDataManager.ts index bb224a0b..3b80a542 100644 --- a/src/js/context/providers/PointsGrid/QGridFormDataManager.ts +++ b/src/js/context/providers/PointsGrid/QGridFormDataManager.ts @@ -1,4 +1,6 @@ +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { GridContextItemSchema } from "@mat3ra/esse/dist/js/types"; +import type { JSONSchema7 } from "json-schema"; import type { UnitContext } from "../base/ContextProvider"; import PointsGridFormDataProvider, { type ExternalContext } from "./PointsGridFormDataProvider"; @@ -11,6 +13,17 @@ export default class QGridFormDataManager extends PointsGridFormDataProvider, externalContext: ExternalContext) { + super(contextItem, externalContext); + + this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById( + this.jsonSchemaId, + this.jsonSchemaPatchConfig, + ); + } + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "qgrid"); diff --git a/src/js/context/providers/base/ContextProvider.ts b/src/js/context/providers/base/ContextProvider.ts index 841e7c4a..b85c8ec1 100644 --- a/src/js/context/providers/base/ContextProvider.ts +++ b/src/js/context/providers/base/ContextProvider.ts @@ -46,7 +46,9 @@ abstract class ContextProvider< this.externalContext = externalContext; this.isEdited = contextItem.isEdited || false; - this.setData(contextItem.data); + if (contextItem.data) { + this.setData(contextItem.data); + } } setIsEdited(isEdited: boolean) { @@ -57,8 +59,8 @@ abstract class ContextProvider< return this.isEdited && this.data ? this.data : this.getDefaultData(); } - setData(data?: S["data"]) { - this.data = data ? Utils.clone.deepClone(data) : undefined; + setData(data: S["data"]) { + this.data = Utils.clone.deepClone(data); } getContextItemData(): S { diff --git a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts index 8652ad67..991affbd 100644 --- a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts @@ -128,7 +128,7 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba return { IBRAV: 0, - RESTART_MODE: job.parent || workflow.hasRelaxation ? "restart" : "from_scratch", + RESTART_MODE: job?.parent || workflow.hasRelaxation ? "restart" : "from_scratch", ATOMIC_SPECIES, ATOMIC_SPECIES_WITH_LABELS, NAT: basis.atomicPositions.length, @@ -141,11 +141,6 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba }; } - private getDataPerMaterial() { - if (!this.materials || this.materials.length <= 1) return {}; - return { perMaterial: this.materials.map((material) => this.buildQEPWXContext(material)) }; - } - getDefaultData() { // the below values are read from PlanewaveDataManager instead // ECUTWFC = 40; @@ -153,7 +148,7 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba return { ...this.buildQEPWXContext(this.material), - ...this.getDataPerMaterial(), + perMaterial: this.materials.map((material) => this.buildQEPWXContext(material)), }; } } diff --git a/src/js/context/providers/index.ts b/src/js/context/providers/index.ts index 6e35680f..46e66976 100644 --- a/src/js/context/providers/index.ts +++ b/src/js/context/providers/index.ts @@ -1,3 +1,5 @@ +import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; + import type { ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; import type { JobExternalContext } from "../mixins/JobContextMixin"; import type { MaterialExternalContext } from "../mixins/MaterialContextMixin"; @@ -65,8 +67,13 @@ export const PROVIDER_REGISTRY = { NWChemInputDataManager, } as const; +export type AssignmentContext = Record< + AssignmentUnitSchema["operand"], + AssignmentUnitSchema["value"] +>; + export type SubworkflowContext = { - subworkflowContext: Record; + subworkflowContext: AssignmentContext; }; /** diff --git a/src/js/standata/README.md b/src/js/standata/README.md deleted file mode 100644 index ee6751e1..00000000 --- a/src/js/standata/README.md +++ /dev/null @@ -1 +0,0 @@ -This must be moved to standata diff --git a/src/js/standata/subworkflows/create.js b/src/js/standata/subworkflows/create.js deleted file mode 100644 index a1907b95..00000000 --- a/src/js/standata/subworkflows/create.js +++ /dev/null @@ -1,221 +0,0 @@ -import { ApplicationRegistry } from "@mat3ra/ade"; -import { - default_methods as MethodConfigs, - default_models as ModelConfigs, - MethodConversionHandler, - MethodFactory, - ModelFactory, -} from "@mat3ra/mode"; -import { ApplicationMethodStandata } from "@mat3ra/standata"; -// eslint-disable-next-line import/no-extraneous-dependencies -import _ from "lodash"; - -import { Subworkflow } from "../../Subworkflow"; -import { UnitFactory } from "../../units"; -import { applyConfig } from "../../workflows/utils"; -import { builders } from "../units/builders"; -import { dynamicSubworkflowsByApp, getSurfaceEnergySubworkflowUnits } from "./dynamic"; - -// NOTE: DFTModel => DFTModelConfig, configs should have the same name as the model/method class + "Config" at the end -function _getConfigFromModelOrMethodName(name, kind) { - const configs = kind === "Model" ? ModelConfigs : MethodConfigs; - if (!configs[`${name}Config`]) { - // eslint-disable-next-line no-param-reassign - name = `Unknown${kind}`; - } - return configs[`${name}Config`]; -} - -/** - * @summary Create model from subworkflow data - * @param config {Object} model config - * @param modelFactoryCls {any} model factory to use - * @returns {DFTModel|Model} - */ -function createModel({ config, modelFactoryCls }) { - const { name, config: modelConfig = {} } = config; - const defaultConfig = _getConfigFromModelOrMethodName(name, "Model"); - return modelFactoryCls.create({ ...defaultConfig, ...modelConfig }); -} - -/** - * @summary Create method from subworkflow data - * @param config {Object} method configuration - * @param methodFactoryCls {any} - * @param applicationConfig {Object} application configuration - * @returns {{method, setSearchText}} - */ -function createMethod({ config, methodFactoryCls, applicationConfig = {} }) { - const { name, setSearchText = null, config: methodConfig = {} } = config; - const defaultConfig = _getConfigFromModelOrMethodName(name, "Method"); - const defaultConfigForApp = - new ApplicationMethodStandata().getDefaultMethodConfigForApplication(applicationConfig); - const defaultConfigForAppSimple = - defaultConfigForApp && defaultConfigForApp.units - ? MethodConversionHandler.convertToSimple(defaultConfigForApp) - : defaultConfigForApp; - const method = methodFactoryCls.create({ - ...defaultConfig, - ...defaultConfigForAppSimple, - ...methodConfig, - }); - return { method, setSearchText }; -} - -/** - * @summary Create top-level objects used in subworkflow initialization - * @param subworkflowData {Object} subworkflow data - * @param AppRegistry - * @param modelFactoryCls {any} model factory class - * @param methodFactoryCls {any} method factory class - * @returns {{application: *, method: *, model: (DFTModel|Model), setSearchText: String|null}} - */ -function createTopLevel({ subworkflowData, modelFactoryCls, methodFactoryCls, AppRegistry }) { - const { application: appConfig, model: modelConfig, method: methodConfig } = subworkflowData; - const application = AppRegistry.createApplication(appConfig); - const model = createModel({ config: modelConfig, modelFactoryCls }); - const { method, setSearchText } = createMethod({ - config: methodConfig, - methodFactoryCls, - applicationConfig: appConfig, - }); - return { - application, - model, - method, - setSearchText, - }; -} - -/** - * @summary Create workflow unit from JSON configuration - * Supports applying functions to the builder prior to building via "functions" - * Supports applying attributes to the builder after building via "attributes" - * @param config {Object} unit config - * @param application {*} application - * @param unitBuilders {Object} workflow unit builders - * @param unitFactoryCls {*} workflow unit class factory - * @returns {*|{head: boolean, preProcessors: [], postProcessors: [], name: *, flowchartId: *, type: *, results: [], monitors: []}} - */ -export function createUnit({ config, application, unitBuilders, unitFactoryCls, cache = [] }) { - const { type, config: unitConfig } = config; - if (type === "executionBuilder") { - const { name, execName, flavorName, flowchartId } = unitConfig; - const builder = new unitBuilders.ExecutionUnitConfigBuilder( - name, - application, - execName, - flavorName, - flowchartId, - cache, - ); - - // config should contain "functions" and "attributes" - const cfg = applyConfig({ obj: builder, config, callBuild: true }); - return unitFactoryCls.create(cfg); - } - - return unitFactoryCls.create({ type, ...unitConfig }); -} - -/** - * @summary Dynamically create subworkflow units - * @param dynamicSubworkflow {String} name of unit creation function - * @param units {Array} configured units to provide to dynamic unit creation - * @param unitBuilders {Object} unit configuration builders - * @param unitFactoryCls {*} unit factory class - * @param application {*} application (optional) - * @returns {*} - */ -function createDynamicUnits({ - dynamicSubworkflow, - units, - unitBuilders, - unitFactoryCls, - application = null, -}) { - const { name, subfolder } = dynamicSubworkflow; - const func = subfolder && _.get(dynamicSubworkflowsByApp, `${subfolder}.${name}`, () => {}); - switch (name) { - case "surfaceEnergy": - // eslint-disable-next-line no-case-declarations - const [scfUnit] = units; - return getSurfaceEnergySubworkflowUnits({ scfUnit, unitBuilders }); - case "getQpointIrrep": - return func({ unitBuilders, unitFactoryCls, application }); - default: - throw new Error(`dynamicSubworkflow=${name} not recognized`); - } -} - -function createSubworkflow({ - subworkflowData, - cache = [], - AppRegistry = ApplicationRegistry, - modelFactoryCls = ModelFactory, - methodFactoryCls = MethodFactory, - subworkflowCls = Subworkflow, - unitFactoryCls = UnitFactory, - unitBuilders = builders, -}) { - const { application, model, method, setSearchText } = createTopLevel({ - subworkflowData, - AppRegistry, - modelFactoryCls, - methodFactoryCls, - }); - - let units = []; - const { name, units: unitConfigs, config = {}, dynamicSubworkflow = null } = subworkflowData; - unitConfigs.forEach((_config) => { - units.push( - createUnit({ - config: _config, - application, - unitBuilders, - unitFactoryCls, - cache, - }), - ); - }); - if (dynamicSubworkflow) { - units = createDynamicUnits({ - dynamicSubworkflow, - units, - unitBuilders, - unitFactoryCls, - application, - }); - } - - let subworkflow = subworkflowCls.fromArguments(application, model, method, name, units, config); - const { functions = {}, attributes = {} } = config; - subworkflow = applyConfig({ obj: subworkflow, config: { functions, attributes } }); - if (setSearchText) subworkflow.model.Method.setSearchText(setSearchText); - return subworkflow; -} - -/** - * @summary Convenience wrapper around createSubworkflow to create by app name and swf name - * @param appName {String} application name - * @param swfName {String} subworkflow name (snake_case.yml) - * @param workflowSubworkflowMapByApplication {Object} object containing all workflow/subworkflow map by application - * @param swArgs {Object} classes for instantiation - * @returns {*} subworkflow object - */ -function createSubworkflowByName({ - appName, - swfName, - workflowSubworkflowMapByApplication, - ...swArgs -}) { - const { subworkflows } = workflowSubworkflowMapByApplication; - const { [appName]: allSubworkflowData } = subworkflows; - const { [swfName]: subworkflowData } = allSubworkflowData; - return createSubworkflow({ - subworkflowData, - ...swArgs, - }); -} - -export { createSubworkflow, createSubworkflowByName }; diff --git a/src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js b/src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js deleted file mode 100644 index 3d3b7580..00000000 --- a/src/js/standata/subworkflows/dynamic/espresso/getQpointIrrep.js +++ /dev/null @@ -1,35 +0,0 @@ -import { UNIT_TYPES } from "../../../../enums"; - -/** - * @summary Get QptIrr units used in phonon map calculations - * @param unitBuilders {Object} unit builders - * @param unitFactoryCls {*} unit factory class - * @param application {*} application instance - * @returns {[{head: boolean, preProcessors: [], postProcessors: [], name: *, flowchartId: *, type: *, results: [], monitors: []},*]} - */ -function getQpointIrrep({ unitBuilders, unitFactoryCls, application }) { - const { ExecutionUnitConfigBuilder } = unitBuilders; - - const pythonUnit = new ExecutionUnitConfigBuilder( - "python", - application, - "python", - "espresso_xml_get_qpt_irr", - ).build(); - - const assignmentUnit = unitFactoryCls.create({ - type: UNIT_TYPES.assignment, - input: [ - { - scope: pythonUnit.flowchartId, - name: "STDOUT", - }, - ], - operand: "Q_POINTS", - value: "json.loads(STDOUT)", - }); - - return [pythonUnit, assignmentUnit]; -} - -export { getQpointIrrep }; diff --git a/src/js/standata/subworkflows/dynamic/index.js b/src/js/standata/subworkflows/dynamic/index.js deleted file mode 100644 index 98303667..00000000 --- a/src/js/standata/subworkflows/dynamic/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import { getQpointIrrep } from "./espresso/getQpointIrrep"; -import { getSurfaceEnergySubworkflowUnits } from "./surfaceEnergy"; - -const dynamicSubworkflowsByApp = { - espresso: { getQpointIrrep }, -}; - -export { getSurfaceEnergySubworkflowUnits, dynamicSubworkflowsByApp }; diff --git a/src/js/standata/subworkflows/dynamic/surfaceEnergy.js b/src/js/standata/subworkflows/dynamic/surfaceEnergy.js deleted file mode 100644 index bf0e118e..00000000 --- a/src/js/standata/subworkflows/dynamic/surfaceEnergy.js +++ /dev/null @@ -1,124 +0,0 @@ -import { Utils } from "@mat3ra/utils"; - -function getIOUnitEndpointOptions(query, projection = "{}") { - return { - params: { - query, - projection, - }, - }; -} - -function getAssignmentUnitInput(unit, name) { - return [ - { - name, - scope: unit.flowchartId, - }, - ]; -} - -function getSurfaceEnergySubworkflowUnits({ scfUnit, unitBuilders }) { - const { IOUnitConfigBuilder, AssignmentUnitConfigBuilder, AssertionUnitConfigBuilder } = - unitBuilders; - - let input, endpointOptions; - endpointOptions = getIOUnitEndpointOptions("{'_id': MATERIAL_ID}"); - const getSlabUnit = new IOUnitConfigBuilder("io-slab", "materials", endpointOptions).build(); - - input = getAssignmentUnitInput(getSlabUnit, "DATA"); - const setSlabUnit = new AssignmentUnitConfigBuilder("slab", "SLAB", "DATA[0]", input).build(); - - endpointOptions = getIOUnitEndpointOptions("{'_id': SLAB.metadata.bulkId}"); - const getBulkUnit = new IOUnitConfigBuilder("io-bulk", "materials", endpointOptions).build(); - - const BULKValue = "DATA[0] if DATA else None"; - input = getAssignmentUnitInput(getBulkUnit, "DATA"); - const setBulkUnit = new AssignmentUnitConfigBuilder("bulk", "BULK", BULKValue, input).build(); - - const assertBulkUnit = new AssertionUnitConfigBuilder( - "assert-bulk", - "BULK != None", - "Bulk material does not exist!", - ).build(); - - const query = Utils.str.removeNewLinesAndExtraSpaces(`{ - 'exabyteId': BULK.exabyteId, - 'data.name': 'total_energy', - 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} - }`); - // Do not confuse `sort` with `$sort`. `sort` is used in meteor collections and `$sort` is used in Mongo queries. - const projection = "{'sort': {'precision.value': -1}, 'limit': 1}"; - endpointOptions = getIOUnitEndpointOptions(query, projection); - const getEBulkUnit = new IOUnitConfigBuilder( - "io-e-bulk", - "refined-properties", - endpointOptions, - ).build(); - - input = getAssignmentUnitInput(getEBulkUnit, "DATA"); - const EBULKValue = "DATA[0].data.value if DATA else None"; - const setEBulkUnit = new AssignmentUnitConfigBuilder( - "e-bulk", - "E_BULK", - EBULKValue, - input, - ).build(); - - const assertEBulkUnit = new AssertionUnitConfigBuilder( - "assert-e-bulk", - "E_BULK != None", - "E_BULK does not exist!", - ).build(); - - const AValue = "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"; - const setSurfaceUnit = new AssignmentUnitConfigBuilder("surface", "A", AValue).build(); - - const setNBulkUnit = new AssignmentUnitConfigBuilder( - "n-bulk", - "N_BULK", - "len(BULK.basis.elements)", - ).build(); - const setNSlabUnit = new AssignmentUnitConfigBuilder( - "n-slab", - "N_SLAB", - "len(SLAB.basis.elements)", - ).build(); - - input = getAssignmentUnitInput(scfUnit, "total_energy"); - const setESlabUnit = new AssignmentUnitConfigBuilder( - "e-slab", - "E_SLAB", - "total_energy", - input, - ).build(); - - const results = [{ name: "surface_energy" }]; - const SEValue = "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"; - const surfaceEnergyUnit = new AssignmentUnitConfigBuilder( - "surface-energy", - "SURFACE_ENERGY", - SEValue, - [], - results, - ).build(); - - return [ - getSlabUnit, - setSlabUnit, - getBulkUnit, - setBulkUnit, - assertBulkUnit, - getEBulkUnit, - setEBulkUnit, - assertEBulkUnit, - setSurfaceUnit, - setNBulkUnit, - setNSlabUnit, - scfUnit, - setESlabUnit, - surfaceEnergyUnit, - ]; -} - -export { getSurfaceEnergySubworkflowUnits }; diff --git a/src/js/standata/units/builders/AssertionUnitConfigBuilder.js b/src/js/standata/units/builders/AssertionUnitConfigBuilder.js deleted file mode 100644 index ffecee10..00000000 --- a/src/js/standata/units/builders/AssertionUnitConfigBuilder.js +++ /dev/null @@ -1,28 +0,0 @@ -import { UNIT_TYPES } from "../../../enums"; -import { UnitConfigBuilder } from "./UnitConfigBuilder"; - -export class AssertionUnitConfigBuilder extends UnitConfigBuilder { - constructor(name, statement, errorMessage) { - super({ name, type: UNIT_TYPES.assertion }); - this._statement = statement; - this._errorMessage = errorMessage; - } - - statement(str) { - this._statement = str; - return this; - } - - errorMessage(str) { - this._errorMessage = str; - return this; - } - - build() { - return { - ...super.build(), - statement: this._statement, - errorMessage: this._errorMessage, - }; - } -} diff --git a/src/js/standata/units/builders/AssignmentUnitConfigBuilder.js b/src/js/standata/units/builders/AssignmentUnitConfigBuilder.js deleted file mode 100644 index 3de282e7..00000000 --- a/src/js/standata/units/builders/AssignmentUnitConfigBuilder.js +++ /dev/null @@ -1,36 +0,0 @@ -import { UNIT_TYPES } from "../../../enums"; -import { UnitConfigBuilder } from "./UnitConfigBuilder"; - -export class AssignmentUnitConfigBuilder extends UnitConfigBuilder { - constructor(name, variableName, variableValue, input = [], results = []) { - super({ name, type: UNIT_TYPES.assignment }); - this._variableName = variableName; - this._variableValue = variableValue; - this._input = input; - this._results = results; - } - - input(arr) { - this._input = arr; - return this; - } - - variableName(str) { - this._variableName = str; - return this; - } - - variableValue(str) { - this._variableValue = str; - return this; - } - - build() { - return { - ...super.build(), - input: this._input, - operand: this._variableName, - value: this._variableValue, - }; - } -} diff --git a/src/js/standata/units/builders/ExecutionUnitConfigBuilder.js b/src/js/standata/units/builders/ExecutionUnitConfigBuilder.js deleted file mode 100644 index f95e1c03..00000000 --- a/src/js/standata/units/builders/ExecutionUnitConfigBuilder.js +++ /dev/null @@ -1,59 +0,0 @@ -/* eslint-disable class-methods-use-this */ -import { ApplicationRegistry } from "@mat3ra/ade"; - -import { UNIT_TYPES } from "../../../enums"; -import { UnitConfigBuilder } from "./UnitConfigBuilder"; - -export class ExecutionUnitConfigBuilder extends UnitConfigBuilder { - constructor(name, application, execName, flavorName, flowchartId, cache = []) { - super({ name, type: UNIT_TYPES.execution, flowchartId, cache }); - - try { - this.initialize(application, execName, flavorName); - } catch (e) { - console.error(`Can't initialize executable/flavor: ${execName}/${flavorName}`); - throw e; - } - - // initialize runtimeItems - this._results = this.flavor.results; - this._monitors = this.flavor.monitors; - this._preProcessors = this.flavor.preProcessors; - this._postProcessors = this.flavor.postProcessors; - } - - initialize(application, execName, flavorName) { - this.application = application; - this.executable = this._createExecutable(this.application, execName); - this.flavor = this._createFlavor(this.executable, flavorName); - } - - build() { - return { - ...super.build(), - application: this.application.toJSON(), - executable: this.executable.toJSON(), - flavor: this.flavor.toJSON(), - }; - } - - /** - * Creates an executable instance. This method is intended to be overridden in subclasses. - * @param {Application} application - The application object - * @param {string} execName - The name of the executable - * @returns {Executable} The created executable instance - */ - _createExecutable(application, execName) { - return ApplicationRegistry.getExecutableByName(application.name, execName); - } - - /** - * Creates a flavor instance. This method is intended to be overridden in subclasses. - * @param {Executable} executable - The executable object - * @param {string} flavorName - The name of the flavor - * @returns {Flavor} The created flavor instance - */ - _createFlavor(executable, flavorName) { - return ApplicationRegistry.getFlavorByName(executable, flavorName); - } -} diff --git a/src/js/standata/units/builders/IOUnitConfigBuilder.js b/src/js/standata/units/builders/IOUnitConfigBuilder.js deleted file mode 100644 index 83089665..00000000 --- a/src/js/standata/units/builders/IOUnitConfigBuilder.js +++ /dev/null @@ -1,53 +0,0 @@ -import { UNIT_TYPES } from "../../../enums"; -import { UnitConfigBuilder } from "./UnitConfigBuilder"; - -export class IOUnitConfigBuilder extends UnitConfigBuilder { - constructor(name, endpointName, endpointOptions) { - super({ name, type: UNIT_TYPES.io }); - this._endpointName = endpointName; - this._endpointOptions = endpointOptions; - this._variableName = "DATA"; - this._subtype = "input"; - this._source = "api"; - } - - endpointName(str) { - this._endpointName = str; - return this; - } - - endpointOptions(options) { - this._endpointOptions = options; - return this; - } - - variableName(str) { - this._variableName = str; - return this; - } - - subtype(str) { - this._subtype = str; - return this; - } - - source(str) { - this._source = str; - return this; - } - - build() { - return { - ...super.build(), - subtype: this._subtype, - source: this._source, - input: [ - { - endpoint: this._endpointName, - endpoint_options: this._endpointOptions, - name: this._variableName, - }, - ], - }; - } -} diff --git a/src/js/standata/units/builders/UnitConfigBuilder.js b/src/js/standata/units/builders/UnitConfigBuilder.js deleted file mode 100644 index a09639d0..00000000 --- a/src/js/standata/units/builders/UnitConfigBuilder.js +++ /dev/null @@ -1,93 +0,0 @@ -import { Utils } from "@mat3ra/utils"; -// eslint-disable-next-line import/no-extraneous-dependencies -import _ from "underscore"; - -export class UnitConfigBuilder { - static usePredefinedIds = false; - - constructor({ name, type, flowchartId, cache = [] }) { - this.type = type; - this._name = name; - this._head = false; - this._results = []; - this._monitors = []; - this._preProcessors = []; - this._postProcessors = []; - this.cache = cache; - const countInCache = this.cache.filter((s) => s === name).length; - this.cache.push(name); - this._flowchartId = flowchartId || this.generateFlowChartId(name, countInCache); - } - - name(str) { - this._name = str; - return this; - } - - head(bool) { - this._head = bool; - return this; - } - - generateFlowChartId(seed, countInCache = 0) { - const suffix = countInCache > 0 ? `-${countInCache}` : ""; - const seedWithSuffix = `${seed}${suffix}`; - if (this.constructor.usePredefinedIds) - return Utils.uuid.getUUIDFromNamespace(seedWithSuffix); - return Utils.uuid.getUUID(); - } - - flowchartId(flowchartId) { - this._flowchartId = flowchartId; - return this; - } - - static _stringArrayToNamedObject(array) { - return array.map((name) => (_.isString(name) ? { name } : name)); - } - - addPreProcessors(preProcessorNames) { - this._preProcessors = _.union( - this.constructor._stringArrayToNamedObject(preProcessorNames), - this._preProcessors, - ); - return this; - } - - addPostProcessors(postProcessorNames) { - this._postProcessors = _.union( - this.constructor._stringArrayToNamedObject(postProcessorNames), - this._postProcessors, - ); - return this; - } - - addResults(resultNames) { - this._results = _.union( - this.constructor._stringArrayToNamedObject(resultNames), - this._results, - ); - return this; - } - - addMonitors(monitorNames) { - this._monitors = _.union( - this.constructor._stringArrayToNamedObject(monitorNames), - this._monitors, - ); - return this; - } - - build() { - return { - type: this.type, - name: this._name, - head: this._head, - results: this._results, - monitors: this._monitors, - flowchartId: this._flowchartId, - preProcessors: this._preProcessors, - postProcessors: this._postProcessors, - }; - } -} diff --git a/src/js/standata/units/builders/index.js b/src/js/standata/units/builders/index.js deleted file mode 100644 index 5d4dc5fb..00000000 --- a/src/js/standata/units/builders/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import { AssertionUnitConfigBuilder } from "./AssertionUnitConfigBuilder"; -import { AssignmentUnitConfigBuilder } from "./AssignmentUnitConfigBuilder"; -import { ExecutionUnitConfigBuilder } from "./ExecutionUnitConfigBuilder"; -import { IOUnitConfigBuilder } from "./IOUnitConfigBuilder"; -import { UnitConfigBuilder } from "./UnitConfigBuilder"; - -const builders = { - UnitConfigBuilder, - AssignmentUnitConfigBuilder, - AssertionUnitConfigBuilder, - ExecutionUnitConfigBuilder, - IOUnitConfigBuilder, -}; - -export { builders }; diff --git a/src/js/standata/utils.ts b/src/js/standata/utils.ts deleted file mode 100644 index 5804e1dc..00000000 --- a/src/js/standata/utils.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; - -/** - * @summary Apply configuration data to an object - * @param obj {*} object / class containing methods or attributes to be set - * @param config { functions: {}, attributes: {} } functions to call and attributes to set - * @param callBuild {boolean} if true; call build between applying functions and attributes - * @returns {*} updated object - */ -export function applyConfig({ - obj, - config = {}, - callBuild = false, -}: { - obj: any; - config: { functions?: Record; attributes?: Record }; - callBuild: boolean; -}) { - const { functions = {}, attributes = {} } = config; - // eslint-disable-next-line no-restricted-syntax - for (const [func, args] of Object.entries(functions)) { - // eslint-disable-next-line no-nested-ternary - if (obj[func]) { - if (args) obj[func](args); - else obj[func](); - } - } - const modified = callBuild ? obj.build() : obj; - // eslint-disable-next-line no-restricted-syntax - for (const [key, values] of Object.entries(attributes)) { - modified[key] = values; - } - return modified; -} - -/** - * @summary Safely extract unit object from subworkflow data - */ -export function findUnit({ - subworkflowData, - index, - type, -}: { - subworkflowData: SubworkflowSchema; - index: number; - type: "assignment" | "condition" | "processing" | "io" | "assertion" | "execution" | "reduce"; -}) { - const unit = subworkflowData.units[index]; - if (unit.type !== type) throw new Error("findUnit() error: unit type does not match!"); - return unit; -} diff --git a/src/js/standata/workflows/create.js b/src/js/standata/workflows/create.js deleted file mode 100644 index 4cdbc5e4..00000000 --- a/src/js/standata/workflows/create.js +++ /dev/null @@ -1,230 +0,0 @@ -import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import schemas from "@mat3ra/esse/dist/js/schemas.json"; - -import { UnitFactory } from "../../units"; -import { defaultMapConfig } from "../../units/MapUnit"; -import { Workflow } from "../../Workflow"; -import { applyConfig, findUnit } from "../../workflows/utils"; -import { createSubworkflow } from "../subworkflows/create"; - -// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` -JSONSchemasInterface.setSchemas(schemas); -/** - * @summary Helper for creating Map units for complex workflows - * @param config {Object} map unit configuration - * @param unitFactoryCls {*} class factory for map unit - * @returns {*} map unit - */ -function createMapUnit({ config, unitFactoryCls = UnitFactory }) { - let { input: defaultInput } = defaultMapConfig; - if (config.input) { - defaultInput = { ...defaultInput, ...config.input }; - } - const unit = unitFactoryCls.create({ ...defaultMapConfig, input: defaultInput }); - return unit; -} - -/** - * @summary Update subworkflow units with patch configuration defined in the workflow config - * @param subworkflowData {Object} subworkflow data - * @param unitConfigs {Array} array of patch configs for subworkflow units - * @returns subworkflowData {Object} subworkflowData with patches applied to units - */ -function updateUnitConfigs({ subworkflowData, unitConfigs }) { - unitConfigs.forEach((config) => { - const { index, type, config: unitConfig } = config; // unitConfig should contain 'attributes' key - const unit = findUnit({ subworkflowData, index, type }); - console.log(` patching ${type} unit ${index} of subworkflow ${subworkflowData.name}`); - unit.config = applyConfig({ obj: unit.config, config: unitConfig }); - return null; - }); - return subworkflowData; -} - -/** - * @summary Use subworkflow.createSubworkflow to create a Subworkflow unit - * @param appName {String} application name - * @param unitData {*} object containing subworkflow configuration data - * @param workflowData {*} object containing all workflow configuration data - * @param swArgs {*} subworkflow classes - * @returns {*} subworkflow object - */ -function createSubworkflowUnit({ appName, unitData, workflowData, cache, ...swArgs }) { - const { name: unitName, unitConfigs, config } = unitData; - const { subworkflows } = workflowData; - const { [appName]: dataByApp } = subworkflows; - let { [unitName]: subworkflowData } = dataByApp; - subworkflowData.config = { ...subworkflowData.config, ...config }; - if (unitConfigs) subworkflowData = updateUnitConfigs({ subworkflowData, unitConfigs }); - return createSubworkflow({ - subworkflowData, - cache, - ...swArgs, - }); -} - -/** - * @summary Create the first workflow object specified in a workflow configuration - * @param workflow {*|null} the workflow (if already initialized, no-op) - * @param unit {*} workflow unit object - * @param type {String} value in ["workflow", "subworkflow"] - * @param workflowCls {*} workflow class - * @returns {Workflow|*} workflow object - */ -function createWorkflowHead({ workflow, unit, type, workflowCls }) { - if (workflow) return workflow; - let wf; - switch (type) { - case "workflow": - wf = unit; - break; - case "subworkflow": - wf = workflowCls.fromSubworkflow(unit); - break; - default: - throw new Error(`workflow type=${type} not understood.`); - } - return wf; -} - -/** - * @summary Combine workflow units together - * @param workflow {*} the workflow object - * @param unit {*} workflow/subworkflow object - * @param config {*} additional configuration for e.g. map units - * @param type {String} value in ["workflow", "subworkflow"] - * @param unitFactoryCls {*} unit factory class for e.g. map units - * @returns {*} modified workflow - */ -function composeWorkflow({ workflow, unit, config, type, unitFactoryCls }) { - /* eslint-disable no-case-declarations */ - switch (type) { - case "workflow": - const { mapUnit: isMapUnit, ...mapUnitConfig } = config; - if (isMapUnit) { - const mapUnit = createMapUnit({ config: mapUnitConfig, unitFactoryCls }); - workflow.addMapUnit(mapUnit, unit); - } else { - console.log("adding workflows directly to workflows is not supported."); - } - break; - case "subworkflow": - workflow.addSubworkflow(unit); - break; - default: - throw new Error(`workflow type=${type} not understood.`); - } - /* eslint-enable no-case-declarations */ - return workflow; -} - -/** - * @summary Convert a flattened array of workflow units to a properly constructed workflow - * @param wfUnits {Array} array of workflow units - * @param workflowCls {*} workflow class - * @param unitFactoryCls {*} unit factory class - * @returns {*} constructed workflow - */ -function createFromWorkflowUnits({ wfUnits, workflowCls, unitFactoryCls }) { - let workflow, unit, config, type; - wfUnits.map((wfUnit) => { - ({ unit, config, type } = wfUnit); - if (!workflow) { - workflow = createWorkflowHead({ - workflow, - unit, - type, - workflowCls, - }); - } else { - workflow = composeWorkflow({ - workflow, - unit, - config, - type, - unitFactoryCls, - }); - } - return null; - }); - return applyConfig({ obj: workflow, config }); -} - -/** - * @summary Creates a flattened array of workflow units from nested workflow/subworkflow - * configuration data comprising a simple or complex workflow - * @param appName - * @param units - * @param swArgs - * @returns {*[]} - */ -function createWorkflowUnits({ - appName, - workflowData, - workflowSubworkflowMapByApplication, - workflowCls, - cache = [], - ...swArgs -}) { - const wfUnits = []; - const { units } = workflowData; - let unit, config; - units.map((unitData) => { - const { type } = unitData; - switch (type) { - case "workflow": - ({ config } = unitData); - unit = createWorkflowUnits({ - appName, - workflowData: unitData, - workflowSubworkflowMapByApplication, - workflowCls, - ...swArgs, - }); - break; - case "subworkflow": - ({ config } = workflowData); - unit = createSubworkflowUnit({ - appName, - unitData, - workflowData: workflowSubworkflowMapByApplication, - cache, - ...swArgs, - }); - break; - default: - break; - } - wfUnits.push({ config, unit, type }); - return null; - }); - return createFromWorkflowUnits({ - wfUnits, - workflowCls, - subworkflowCls: swArgs.subworkflowCls, - unitFactoryCls: swArgs.unitFactoryCls, - }); -} - -export function createWorkflow({ - appName, - workflowData, - workflowSubworkflowMapByApplication, - workflowCls = Workflow, - ...swArgs -}) { - const cache = []; - const { name } = workflowData; - console.log(`wode: creating ${appName} workflow ${name}`); - const wf = createWorkflowUnits({ - appName, - workflowData, - workflowSubworkflowMapByApplication, - workflowCls, - cache, - ...swArgs, - }); - wf.setName(name); - wf.applicationName = appName; - return wf; -} diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index 5a7ca802..eb45f070 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -1,12 +1,14 @@ -import { Application, ApplicationRegistry as AdeRegistry, Executable, Flavor } from "@mat3ra/ade"; +import { Application, Executable, Flavor } from "@mat3ra/ade"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { + ApplicationSchema, ContextItemSchema, ExecutableSchema, ExecutionUnitSchema, FlavorSchema, } from "@mat3ra/esse/dist/js/types"; +import { ApplicationStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; import { type ExternalContext, createProvider } from "../context/providers"; @@ -22,15 +24,14 @@ type Schema = ExecutionUnitSchema; type Base = typeof BaseUnit & Constructor; interface SetApplicationProps { - application: Application; + application: Application | ApplicationSchema; executable?: Executable | ExecutableSchema; flavor?: Flavor | FlavorSchema; } -interface SetExecutableProps { - executable?: Executable | ExecutableSchema; - flavor?: Flavor | FlavorSchema; -} +type SetExecutableProps = Pick; + +const standata = new ApplicationStandata(); class ExecutionUnit extends (BaseUnit as Base) implements Schema { applicationInstance!: Application; @@ -41,7 +42,7 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { inputInstances: ExecutionUnitInput[] = []; - renderingContext: Record = {}; + renderingContext: Partial = {}; declare toJSON: () => Schema & AnyObject; @@ -51,65 +52,50 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { super(config); const { application, executable, flavor } = config; - const applicationInstance = AdeRegistry.createApplication(application); - const executableInstance = AdeRegistry.getExecutableByConfig(application.name, executable); - const flavorInstance = AdeRegistry.getFlavorByConfig(executableInstance, flavor); - - if (!flavorInstance) { - throw new Error("Flavor is not set"); - } - - this.setApplication({ - application: applicationInstance, - executable: executableInstance, - flavor: flavorInstance, - }); + + this.setApplication({ application, executable, flavor }); this.name = this.name || this.flavor?.name || ""; } setApplication({ application, executable, flavor }: SetApplicationProps) { - this.applicationInstance = application; - this.setProp("application", application.toJSON()); + this.applicationInstance = new Application(standata.getApplication(application)); + this.setProp("application", this.applicationInstance.toJSON()); this.setExecutable({ executable, flavor }); } setExecutable({ executable, flavor }: SetExecutableProps) { - const defaultExecutable = AdeRegistry.getExecutableByName(this.application.name); - const instance = - executable instanceof Executable - ? executable - : new Executable(executable ?? defaultExecutable.toJSON()); + const { executable: executablePlain } = standata.getExecutableAndFlavorByName( + this.application.name, + ); - this.allowedResults = instance.results; - this.allowedMonitors = instance.monitors; - this.allowedPostProcessors = instance.postProcessors; + this.executableInstance = new Executable(executable || executablePlain); + this.allowedResults = this.executableInstance.results; + this.allowedMonitors = this.executableInstance.monitors; + this.allowedPostProcessors = this.executableInstance.postProcessors; - this.setProp("executable", instance.toJSON()); + this.setProp("executable", this.executableInstance.toJSON()); this.setFlavor(flavor); } setFlavor(flavor?: Flavor | FlavorSchema) { - const defaultFlavor = AdeRegistry.getFlavorByConfig(this.executableInstance); - const instance = - flavor instanceof Flavor ? flavor : new Flavor(flavor ?? defaultFlavor?.toJSON()); - - if (!instance) { - throw new Error("Flavor is not found for executable"); - } + const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName( + this.application.name, + this.executable.name, + ); - this.flavorInstance = instance; - this.defaultMonitors = instance.monitors; - this.defaultResults = instance.results; - this.defaultPostProcessors = instance.postProcessors; + this.flavorInstance = new Flavor(flavor || defaultFlavor); + this.defaultMonitors = this.flavorInstance.monitors; + this.defaultResults = this.flavorInstance.results; + this.defaultPostProcessors = this.flavorInstance.postProcessors; - this.setProp("flavor", instance.toJSON()); + this.setProp("flavor", this.flavorInstance.toJSON()); this.setRuntimeItemsToDefaultValues(); this.setDefaultInput(); } setDefaultInput() { - const inputs = AdeRegistry.getInput(this.flavorInstance); + const inputs = standata.getInput(this.flavorInstance); this.inputInstances = inputs.map(ExecutionUnitInput.createFromTemplate); } @@ -163,13 +149,13 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { }); } - private saveContext(fullContext: ContextItemSchema[], { subworkflowContext }: ExternalContext) { + private saveContext(fullContext: ContextItemSchema[], externalContext: ExternalContext) { // persistent context this.context = fullContext.filter((c) => c.isEdited); this.renderingContext = { ...Object.fromEntries(fullContext.map((context) => [context.name, context.data])), - subworkflowContext: { ...subworkflowContext }, + ...externalContext, }; } diff --git a/src/js/units/ExecutionUnitInput.ts b/src/js/units/ExecutionUnitInput.ts index 902d01d6..d969f431 100644 --- a/src/js/units/ExecutionUnitInput.ts +++ b/src/js/units/ExecutionUnitInput.ts @@ -4,15 +4,21 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import { setupNunjucksEnvironment } from "@mat3ra/standata"; import nunjucks from "nunjucks"; -import type { ExecutionUnitInputSchemaMixin } from "../generated/ExecutionUnitInputSchemaMixin"; +import { + ExecutionUnitInputSchemaMixin, + executionUnitInputSchemaMixin, +} from "../generated/ExecutionUnitInputSchemaMixin"; type Schema = ExecutionUnitInputSchemaMixin; type JSON = Schema & AnyObject; type Base = typeof InMemoryEntity & Constructor; type ConstructorConfig = Schema | (Omit & { template: Template }); +const env = setupNunjucksEnvironment(new nunjucks.Environment()); + export default class ExecutionUnitInput extends (InMemoryEntity as Base) implements Schema { declare _json: JSON; @@ -44,10 +50,19 @@ export default class ExecutionUnitInput extends (InMemoryEntity as Base) impleme return this; } - const rendered = nunjucks.compile(this.template.content).render(renderingContext); + try { + const rendered = nunjucks.compile(this.template.content, env).render(renderingContext); - this.rendered = rendered || this.template.content; + this.rendered = rendered || this.template.content; - return this; + return this; + } catch (error) { + console.error("Error rendering template", this.template.content); + console.error("Rendering context: ", JSON.stringify(renderingContext)); + console.error("Error", error); + throw error; + } } } + +executionUnitInputSchemaMixin(ExecutionUnitInput.prototype); diff --git a/tests/js/Workflow.test.ts b/tests/js/Workflow.test.ts index f8df5a09..fe06f49c 100644 --- a/tests/js/Workflow.test.ts +++ b/tests/js/Workflow.test.ts @@ -1,8 +1,32 @@ +import { + type InMemoryEntityInSetConstructor, + inMemoryEntityInSetMixin, +} from "@mat3ra/code/dist/js/entity/set/InMemoryEntityInSetMixin"; +import { + type OrderedInMemoryEntityInSet, + type OrderedInMemoryEntityInSetConstructor, + orderedEntityInSetMixin, +} from "@mat3ra/code/dist/js/entity/set/ordered/OrderedInMemoryEntityInSetMixin"; +import type { WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import { Material } from "@mat3ra/made"; +import { WorkflowStandata } from "@mat3ra/standata"; import { expect } from "chai"; +import type { WorkflowRenderContext } from "src/js/Workflow"; import { Subworkflow, Workflow } from "../../src/js"; import { UnitType } from "../../src/js/enums"; +type Base = typeof Material & + InMemoryEntityInSetConstructor & + OrderedInMemoryEntityInSetConstructor; + +class OrderedMaterial extends (Material as Base) implements OrderedInMemoryEntityInSet { + declare static createDefault: () => OrderedMaterial; +} + +inMemoryEntityInSetMixin(OrderedMaterial.prototype); +orderedEntityInSetMixin(OrderedMaterial.prototype); + describe("Workflow", () => { describe("construction", () => { it("creates workflow from default config with name, subworkflows, units, and _id", () => { @@ -28,22 +52,6 @@ describe("Workflow", () => { }); }); - describe("usePredefinedIds", () => { - afterEach(() => { - Workflow.usePredefinedIds = false; - }); - - it("throws when usePredefinedIds is true and config has no applicationName", () => { - Workflow.usePredefinedIds = true; - const config = { ...Workflow.defaultConfig }; - delete (config as { applicationName?: string }).applicationName; - - expect(() => new Workflow(config)).to.throw( - "applicationName is required when usePredefinedIds is true", - ); - }); - }); - describe("fromSubworkflow", () => { it("creates workflow with one subworkflow and one unit matching subworkflow name", () => { const subworkflowConfig = Workflow.defaultConfig.subworkflows[0]; @@ -137,6 +145,46 @@ describe("Workflow", () => { }); }); + describe("render", () => { + it("invokes each subworkflow render with spread context and parent workflow", () => { + const standataWorkflows = new WorkflowStandata().getAll(); + expect(standataWorkflows.length).to.be.above(0); + + const workflows = standataWorkflows.map((standataJson) => { + return new Workflow(standataJson as unknown as WorkflowSchema); + }); + + expect( + workflows.length, + "expected at least one standata workflow from getAll() to construct", + ).to.be.above(0); + + const material = OrderedMaterial.createDefault(); + const context: WorkflowRenderContext = { + material, + materials: [material, material, material], + job: {}, + }; + + workflows.forEach((workflow) => { + workflow.render(context); + + workflow.subworkflowInstances.forEach((subworkflow) => { + subworkflow.unitsInstances + .filter((unit) => unit.type === UnitType.execution) + .forEach((unit) => { + expect(unit.renderingContext).to.deep.include({ ...context }); + expect(unit.renderingContext).to.have.property("methodData"); + expect(unit.renderingContext).to.have.property("application"); + expect(unit.renderingContext).to.have.property("subworkflowContext"); + expect(unit.renderingContext).to.have.property("workflow"); + expect(unit.context).to.be.deep.equal([]); + }); + }); + }); + }); + }); + describe("calculateHash", () => { it("returns a non-empty string", () => { const config = { ...Workflow.defaultConfig }; From e7ce0b2a316129102c8d9d15d1973ad66512c341 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 01:50:14 +0200 Subject: [PATCH 12/30] chore: cleanups --- dist/js/context/mixins/JobContextMixin.d.ts | 1 - dist/js/context/mixins/JobContextMixin.js | 2 -- .../mixins/MethodDataContextMixin.d.ts | 2 -- .../context/mixins/MethodDataContextMixin.js | 2 -- .../context/mixins/WorkflowContextMixin.d.ts | 1 - .../js/context/mixins/WorkflowContextMixin.js | 2 -- .../Hubbard/HubbardUContextManager.js | 2 -- .../providers/MLSettingsDataManager.d.ts | 6 ++-- .../providers/MLSettingsDataManager.js | 3 -- .../MLTrainTestSplitDataManager.d.ts | 6 ++-- .../providers/MLTrainTestSplitDataManager.js | 3 -- .../espresso/QENEBInputDataManager.d.ts | 10 +++--- .../espresso/QENEBInputDataManager.js | 10 +----- .../espresso/QEPWXInputDataManager.d.ts | 1 + .../espresso/QEPWXInputDataManager.js | 1 + .../nwchem/NWChemInputDataManager.d.ts | 8 ++--- .../nwchem/NWChemInputDataManager.js | 10 +----- .../vasp/VASPInputDataManager.d.ts | 8 ++--- .../vasp/VASPInputDataManager.js | 10 +----- .../vasp/VASPNEBInputDataManager.d.ts | 8 ++--- .../vasp/VASPNEBInputDataManager.js | 10 +----- src/js/context/mixins/JobContextMixin.ts | 4 --- .../context/mixins/MethodDataContextMixin.ts | 5 --- src/js/context/mixins/WorkflowContextMixin.ts | 4 --- .../Hubbard/HubbardUContextManager.ts | 3 -- .../providers/MLSettingsDataManager.ts | 13 ++------ .../providers/MLTrainTestSplitDataManager.ts | 13 ++------ .../espresso/QENEBInputDataManager.ts | 28 +++------------- .../espresso/QEPWXInputDataManager.ts | 2 ++ .../nwchem/NWChemInputDataManager.ts | 31 +++--------------- .../vasp/VASPInputDataManager.ts | 32 +++---------------- .../vasp/VASPNEBInputDataManager.ts | 28 ++-------------- 32 files changed, 46 insertions(+), 223 deletions(-) diff --git a/dist/js/context/mixins/JobContextMixin.d.ts b/dist/js/context/mixins/JobContextMixin.d.ts index 62afcb73..1abf564d 100644 --- a/dist/js/context/mixins/JobContextMixin.d.ts +++ b/dist/js/context/mixins/JobContextMixin.d.ts @@ -1,7 +1,6 @@ import type { JobSchema } from "@mat3ra/esse/dist/js/types"; import type ContextProvider from "../providers/base/ContextProvider"; export type JobContextMixin = { - isEdited: boolean; job?: Pick; initJobContextMixin(externalContext: JobExternalContext): void; }; diff --git a/dist/js/context/mixins/JobContextMixin.js b/dist/js/context/mixins/JobContextMixin.js index c19fa9a9..fb144029 100644 --- a/dist/js/context/mixins/JobContextMixin.js +++ b/dist/js/context/mixins/JobContextMixin.js @@ -4,10 +4,8 @@ exports.default = jobContextMixin; function jobContextMixin(item) { // @ts-expect-error const properties = { - isEdited: false, initJobContextMixin(externalContext) { this.job = externalContext.job; - this.isEdited = false; // we always get the `defaultData` (recalculated from scratch, not persistent) }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); diff --git a/dist/js/context/mixins/MethodDataContextMixin.d.ts b/dist/js/context/mixins/MethodDataContextMixin.d.ts index 046bf8e7..eff24906 100644 --- a/dist/js/context/mixins/MethodDataContextMixin.d.ts +++ b/dist/js/context/mixins/MethodDataContextMixin.d.ts @@ -10,12 +10,10 @@ type MethodData = BaseMethod["data"] & { }; export type MethodDataContextMixin = { methodData: MethodData; - isEdited: boolean; initMethodDataContextMixin(externalContext: MethodDataExternalContext): void; }; export type MethodDataExternalContext = { methodData?: MethodData; - isEdited?: boolean; }; export default function methodDataContextMixin(item: ContextProvider): void; export {}; diff --git a/dist/js/context/mixins/MethodDataContextMixin.js b/dist/js/context/mixins/MethodDataContextMixin.js index 7ea27498..ec09d7ad 100644 --- a/dist/js/context/mixins/MethodDataContextMixin.js +++ b/dist/js/context/mixins/MethodDataContextMixin.js @@ -5,10 +5,8 @@ function methodDataContextMixin(item) { // @ts-expect-error const properties = { methodData: {}, - isEdited: false, initMethodDataContextMixin(externalContext) { this.methodData = externalContext.methodData || {}; - this.isEdited = Boolean(externalContext === null || externalContext === void 0 ? void 0 : externalContext.isEdited); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); diff --git a/dist/js/context/mixins/WorkflowContextMixin.d.ts b/dist/js/context/mixins/WorkflowContextMixin.d.ts index 52abb53e..32bee27e 100644 --- a/dist/js/context/mixins/WorkflowContextMixin.d.ts +++ b/dist/js/context/mixins/WorkflowContextMixin.d.ts @@ -1,7 +1,6 @@ import type { Workflow } from "../../Workflow"; import type ContextProvider from "../providers/base/ContextProvider"; export type WorkflowContextMixin = { - isEdited: boolean; workflow: Workflow; initWorkflowContextMixin(externalContext: WorkflowExternalContext): void; }; diff --git a/dist/js/context/mixins/WorkflowContextMixin.js b/dist/js/context/mixins/WorkflowContextMixin.js index d1fa0f25..9b73a0f2 100644 --- a/dist/js/context/mixins/WorkflowContextMixin.js +++ b/dist/js/context/mixins/WorkflowContextMixin.js @@ -4,10 +4,8 @@ exports.default = workflowContextMixin; function workflowContextMixin(item) { // @ts-expect-error const properties = { - isEdited: false, initWorkflowContextMixin(externalContext) { this.workflow = externalContext.workflow; - this.isEdited = false; }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); diff --git a/dist/js/context/providers/Hubbard/HubbardUContextManager.js b/dist/js/context/providers/Hubbard/HubbardUContextManager.js index b9fe3d73..288024f0 100644 --- a/dist/js/context/providers/Hubbard/HubbardUContextManager.js +++ b/dist/js/context/providers/Hubbard/HubbardUContextManager.js @@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const MaterialContextMixin_1 = __importDefault(require("../../mixins/MaterialContextMixin")); const HubbardContextProvider_1 = __importDefault(require("./HubbardContextProvider")); const defaultHubbardConfig = { atomicSpecies: "", @@ -52,4 +51,3 @@ class HubbardUContextManager extends HubbardContextProvider_1.default { } } exports.default = HubbardUContextManager; -(0, MaterialContextMixin_1.default)(HubbardUContextManager.prototype); diff --git a/dist/js/context/providers/MLSettingsDataManager.d.ts b/dist/js/context/providers/MLSettingsDataManager.d.ts index 9dd981ef..64b30306 100644 --- a/dist/js/context/providers/MLSettingsDataManager.d.ts +++ b/dist/js/context/providers/MLSettingsDataManager.d.ts @@ -1,12 +1,10 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { MlSettingsContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Schema = MlSettingsContextItemSchema; -type ExternalContext = JinjaExternalContext & ApplicationExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type ExternalContext = JinjaExternalContext; +type Base = typeof JSONSchemaDataProvider; declare const MLSettingsDataManager_base: Base; export default class MLSettingsDataManager extends MLSettingsDataManager_base { readonly name: "mlSettings"; diff --git a/dist/js/context/providers/MLSettingsDataManager.js b/dist/js/context/providers/MLSettingsDataManager.js index adb56ca6..f8342859 100644 --- a/dist/js/context/providers/MLSettingsDataManager.js +++ b/dist/js/context/providers/MLSettingsDataManager.js @@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = __importDefault(require("../mixins/ApplicationContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/ml-settings-context-provider"; const defaultData = { @@ -26,7 +25,6 @@ class MLSettingsDataManager extends JSONSchemaDataProvider_1.default { problem_category: {}, }; this.extraData = {}; - this.initApplicationContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { target_column_name: { default: defaultData.target_column_name }, problem_category: { default: defaultData.problem_category }, @@ -38,4 +36,3 @@ class MLSettingsDataManager extends JSONSchemaDataProvider_1.default { } } exports.default = MLSettingsDataManager; -(0, ApplicationContextMixin_1.default)(MLSettingsDataManager.prototype); diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts b/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts index 7ad593ea..89a64a4d 100644 --- a/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.d.ts @@ -1,12 +1,10 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { MlTrainTestSplitContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { type ApplicationContextMixin, type ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Schema = MlTrainTestSplitContextItemSchema; -type ExternalContext = JinjaExternalContext & ApplicationExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor; +type ExternalContext = JinjaExternalContext; +type Base = typeof JSONSchemaDataProvider; declare const MLTrainTestSplitDataManager_base: Base; export default class MLTrainTestSplitDataManager extends MLTrainTestSplitDataManager_base { readonly name: "mlTrainTestSplit"; diff --git a/dist/js/context/providers/MLTrainTestSplitDataManager.js b/dist/js/context/providers/MLTrainTestSplitDataManager.js index a6faeb0b..b02f281c 100644 --- a/dist/js/context/providers/MLTrainTestSplitDataManager.js +++ b/dist/js/context/providers/MLTrainTestSplitDataManager.js @@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const ApplicationContextMixin_1 = __importDefault(require("../mixins/ApplicationContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("./base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; const defaultData = { @@ -25,7 +24,6 @@ class MLTrainTestSplitDataManager extends JSONSchemaDataProvider_1.default { problem_category: {}, }; this.extraData = {}; - this.initApplicationContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getPatchedSchemaById(jsonSchemaId, { fraction_held_as_test_set: { default: defaultData.fraction_held_as_test_set }, }); @@ -36,4 +34,3 @@ class MLTrainTestSplitDataManager extends JSONSchemaDataProvider_1.default { } } exports.default = MLTrainTestSplitDataManager; -(0, ApplicationContextMixin_1.default)(MLTrainTestSplitDataManager.prototype); diff --git a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts index c998aedc..04cc8beb 100644 --- a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.d.ts @@ -1,25 +1,25 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { InputContextItemSchema, QENEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; import { type MaterialsSetContextMixin, type MaterialsSetExternalContext } from "../../../mixins/MaterialsSetContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; +import type { MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import type { WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; type Data = QENEBContextProviderSchema; type Schema = InputContextItemSchema & { data: Data; }; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +type ExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor; declare const QENEBInputDataManager_base: Base; export default class QENEBInputDataManager extends QENEBInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QENEBInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; constructor(config: Partial, externalContext: ExternalContext); diff --git a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js index 20c33fee..be1771a1 100644 --- a/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js +++ b/dist/js/context/providers/by_application/espresso/QENEBInputDataManager.js @@ -4,12 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); const MaterialsSetContextMixin_1 = __importDefault(require("../../../mixins/MaterialsSetContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const QEPWXInputDataManager_1 = __importDefault(require("./QEPWXInputDataManager")); const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; @@ -23,10 +20,8 @@ class QENEBInputDataManager extends JSONSchemaDataProvider_1.default { this.name = "input"; this.domain = "executable"; this.entityName = "unit"; - this.initJobContextMixin(externalContext); + this.isEdited = false; this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); this.initMaterialContextMixin(externalContext); this.initMaterialsSetContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); @@ -52,7 +47,4 @@ class QENEBInputDataManager extends JSONSchemaDataProvider_1.default { exports.default = QENEBInputDataManager; (0, MaterialContextMixin_1.default)(QENEBInputDataManager.prototype); (0, MaterialsContextMixin_1.default)(QENEBInputDataManager.prototype); -(0, MethodDataContextMixin_1.default)(QENEBInputDataManager.prototype); -(0, WorkflowContextMixin_1.default)(QENEBInputDataManager.prototype); -(0, JobContextMixin_1.default)(QENEBInputDataManager.prototype); (0, MaterialsSetContextMixin_1.default)(QENEBInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts index 5d934e94..189686f5 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts @@ -19,6 +19,7 @@ export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QEPWXInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; constructor(config: Partial, externalContext: ExternalContext); diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js index 4a705f4e..904e7c43 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js @@ -23,6 +23,7 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { this.name = "input"; this.domain = "executable"; this.entityName = "unit"; + this.isEdited = false; this.initMaterialsContextMixin(externalContext); this.initMethodDataContextMixin(externalContext); this.initWorkflowContextMixin(externalContext); diff --git a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts index b71c6314..587baada 100644 --- a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.d.ts @@ -1,23 +1,21 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { InputContextItemSchema, NWChemTotalEnergyContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; type Data = NWChemTotalEnergyContextProviderSchema; type Schema = InputContextItemSchema & { data: Data; }; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MethodDataExternalContext & MaterialExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor; declare const NWChemInputDataManager_base: Base; export default class NWChemInputDataManager extends NWChemInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): NWChemInputDataManager; readonly contextProviderName: "nwchem-total-energy"; readonly jsonSchema: JSONSchema7 | undefined; diff --git a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js index 13e657f7..1c1b1f7d 100644 --- a/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js +++ b/dist/js/context/providers/by_application/nwchem/NWChemInputDataManager.js @@ -5,10 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const periodic_table_js_1 = require("@exabyte-io/periodic-table.js"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/by-application/nwchem-total-energy-context-provider"; class NWChemInputDataManager extends JSONSchemaDataProvider_1.default { @@ -21,10 +18,8 @@ class NWChemInputDataManager extends JSONSchemaDataProvider_1.default { this.name = "input"; this.domain = "executable"; this.entityName = "unit"; + this.isEdited = false; this.contextProviderName = "nwchem-total-energy"; - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); this.initMaterialContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); } @@ -57,6 +52,3 @@ class NWChemInputDataManager extends JSONSchemaDataProvider_1.default { } exports.default = NWChemInputDataManager; (0, MaterialContextMixin_1.default)(NWChemInputDataManager.prototype); -(0, MethodDataContextMixin_1.default)(NWChemInputDataManager.prototype); -(0, WorkflowContextMixin_1.default)(NWChemInputDataManager.prototype); -(0, JobContextMixin_1.default)(NWChemInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts index 23ec3a73..cc5e1b45 100644 --- a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.d.ts @@ -1,24 +1,22 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { InputContextItemSchema, VASPContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; type Data = VASPContextProviderSchema; type Schema = InputContextItemSchema & { data: Data; }; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; +type ExternalContext = JinjaExternalContext & MaterialExternalContext & MaterialsExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; declare const VASPInputDataManager_base: Base; export default class VASPInputDataManager extends VASPInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): VASPInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; constructor(config: Partial, externalContext: ExternalContext); diff --git a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js index b98a19a0..61d7004b 100644 --- a/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js +++ b/dist/js/context/providers/by_application/vasp/VASPInputDataManager.js @@ -4,11 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/by-application/vasp-context-provider"; class VASPInputDataManager extends JSONSchemaDataProvider_1.default { @@ -21,10 +18,8 @@ class VASPInputDataManager extends JSONSchemaDataProvider_1.default { this.name = "input"; this.domain = "executable"; this.entityName = "unit"; - this.initJobContextMixin(externalContext); + this.isEdited = false; this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); this.initMaterialContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); } @@ -55,6 +50,3 @@ class VASPInputDataManager extends JSONSchemaDataProvider_1.default { exports.default = VASPInputDataManager; (0, MaterialContextMixin_1.default)(VASPInputDataManager.prototype); (0, MaterialsContextMixin_1.default)(VASPInputDataManager.prototype); -(0, MethodDataContextMixin_1.default)(VASPInputDataManager.prototype); -(0, WorkflowContextMixin_1.default)(VASPInputDataManager.prototype); -(0, JobContextMixin_1.default)(VASPInputDataManager.prototype); diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts index a04ad454..ffdd1026 100644 --- a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.d.ts @@ -1,25 +1,23 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { InputContextItemSchema, VASPNEBContextProviderSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import { type JobContextMixin, type JobExternalContext } from "../../../mixins/JobContextMixin"; import { type MaterialContextMixin, type MaterialExternalContext } from "../../../mixins/MaterialContextMixin"; import { type MaterialsContextMixin, type MaterialsExternalContext } from "../../../mixins/MaterialsContextMixin"; import { type MaterialsSetContextMixin, type MaterialsSetExternalContext } from "../../../mixins/MaterialsSetContextMixin"; -import { type MethodDataContextMixin, type MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import { type WorkflowContextMixin, type WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "../../base/JSONSchemaDataProvider"; type Data = VASPNEBContextProviderSchema; type Schema = InputContextItemSchema & { data: Data; }; -type ExternalContext = JinjaExternalContext & WorkflowExternalContext & JobExternalContext & MaterialExternalContext & MethodDataExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +type ExternalContext = JinjaExternalContext & MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor; declare const VASPNEBInputDataManager_base: Base; export default class VASPNEBInputDataManager extends VASPNEBInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): VASPNEBInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; constructor(config: Partial, externalContext: ExternalContext); diff --git a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js index 6f2dd62f..396d597a 100644 --- a/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js +++ b/dist/js/context/providers/by_application/vasp/VASPNEBInputDataManager.js @@ -4,12 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); const MaterialsSetContextMixin_1 = __importDefault(require("../../../mixins/MaterialsSetContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const VASPInputDataManager_1 = __importDefault(require("./VASPInputDataManager")); const jsonSchemaId = "context-providers-directory/by-application/vasp-neb-context-provider"; @@ -23,12 +20,10 @@ class VASPNEBInputDataManager extends JSONSchemaDataProvider_1.default { this.name = "input"; this.domain = "executable"; this.entityName = "unit"; + this.isEdited = false; this.initMaterialContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); this.initMaterialsSetContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); } getDefaultData() { @@ -49,6 +44,3 @@ exports.default = VASPNEBInputDataManager; (0, MaterialContextMixin_1.default)(VASPNEBInputDataManager.prototype); (0, MaterialsContextMixin_1.default)(VASPNEBInputDataManager.prototype); (0, MaterialsSetContextMixin_1.default)(VASPNEBInputDataManager.prototype); -(0, MethodDataContextMixin_1.default)(VASPNEBInputDataManager.prototype); -(0, WorkflowContextMixin_1.default)(VASPNEBInputDataManager.prototype); -(0, JobContextMixin_1.default)(VASPNEBInputDataManager.prototype); diff --git a/src/js/context/mixins/JobContextMixin.ts b/src/js/context/mixins/JobContextMixin.ts index 4fdd5258..94ab0d8e 100644 --- a/src/js/context/mixins/JobContextMixin.ts +++ b/src/js/context/mixins/JobContextMixin.ts @@ -3,7 +3,6 @@ import type { JobSchema } from "@mat3ra/esse/dist/js/types"; import type ContextProvider from "../providers/base/ContextProvider"; export type JobContextMixin = { - isEdited: boolean; job?: Pick; initJobContextMixin(externalContext: JobExternalContext): void; }; @@ -15,11 +14,8 @@ export type JobExternalContext = { export default function jobContextMixin(item: ContextProvider) { // @ts-expect-error const properties: ContextProvider & JobContextMixin = { - isEdited: false, - initJobContextMixin(externalContext: JobExternalContext) { this.job = externalContext.job; - this.isEdited = false; // we always get the `defaultData` (recalculated from scratch, not persistent) }, }; diff --git a/src/js/context/mixins/MethodDataContextMixin.ts b/src/js/context/mixins/MethodDataContextMixin.ts index c9d78a44..7890c909 100644 --- a/src/js/context/mixins/MethodDataContextMixin.ts +++ b/src/js/context/mixins/MethodDataContextMixin.ts @@ -10,13 +10,11 @@ type MethodData = BaseMethod["data"] & { export type MethodDataContextMixin = { methodData: MethodData; - isEdited: boolean; initMethodDataContextMixin(externalContext: MethodDataExternalContext): void; }; export type MethodDataExternalContext = { methodData?: MethodData; - isEdited?: boolean; }; export default function methodDataContextMixin(item: ContextProvider) { @@ -24,11 +22,8 @@ export default function methodDataContextMixin(item: ContextProvider) { const properties: ContextProvider & MethodDataContextMixin = { methodData: {}, - isEdited: false, - initMethodDataContextMixin(externalContext: MethodDataExternalContext) { this.methodData = externalContext.methodData || {}; - this.isEdited = Boolean(externalContext?.isEdited); }, }; diff --git a/src/js/context/mixins/WorkflowContextMixin.ts b/src/js/context/mixins/WorkflowContextMixin.ts index 3cc0307f..08a3779c 100644 --- a/src/js/context/mixins/WorkflowContextMixin.ts +++ b/src/js/context/mixins/WorkflowContextMixin.ts @@ -2,7 +2,6 @@ import type { Workflow } from "../../Workflow"; import type ContextProvider from "../providers/base/ContextProvider"; export type WorkflowContextMixin = { - isEdited: boolean; workflow: Workflow; initWorkflowContextMixin(externalContext: WorkflowExternalContext): void; }; @@ -14,11 +13,8 @@ export type WorkflowExternalContext = { export default function workflowContextMixin(item: ContextProvider) { // @ts-expect-error const properties: ContextProvider & WorkflowContextMixin = { - isEdited: false, - initWorkflowContextMixin(externalContext: WorkflowExternalContext) { this.workflow = externalContext.workflow; - this.isEdited = false; }, }; diff --git a/src/js/context/providers/Hubbard/HubbardUContextManager.ts b/src/js/context/providers/Hubbard/HubbardUContextManager.ts index 8a7099f9..2fd25cae 100644 --- a/src/js/context/providers/Hubbard/HubbardUContextManager.ts +++ b/src/js/context/providers/Hubbard/HubbardUContextManager.ts @@ -5,7 +5,6 @@ import type { } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import materialContextMixin from "../../mixins/MaterialContextMixin"; import type { UnitContext } from "../base/ContextProvider"; import HubbardContextProvider, { type HubbardExternalContext } from "./HubbardContextProvider"; @@ -71,5 +70,3 @@ export default class HubbardUContextManager extends HubbardContextProvider & - Constructor; +type ExternalContext = JinjaExternalContext; +type Base = typeof JSONSchemaDataProvider; const jsonSchemaId = "context-providers-directory/ml-settings-context-provider"; @@ -46,7 +40,6 @@ export default class MLSettingsDataManager extends (JSONSchemaDataProvider as Ba constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); - this.initApplicationContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { target_column_name: { default: defaultData.target_column_name }, @@ -59,5 +52,3 @@ export default class MLSettingsDataManager extends (JSONSchemaDataProvider as Ba return defaultData; } } - -applicationContextMixin(MLSettingsDataManager.prototype); diff --git a/src/js/context/providers/MLTrainTestSplitDataManager.ts b/src/js/context/providers/MLTrainTestSplitDataManager.ts index c2618a95..d4c1a8ec 100644 --- a/src/js/context/providers/MLTrainTestSplitDataManager.ts +++ b/src/js/context/providers/MLTrainTestSplitDataManager.ts @@ -1,19 +1,13 @@ -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { MlTrainTestSplitContextItemSchema } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import applicationContextMixin, { - type ApplicationContextMixin, - type ApplicationExternalContext, -} from "../mixins/ApplicationContextMixin"; import { type UnitContext } from "./base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext } from "./base/JSONSchemaDataProvider"; type Schema = MlTrainTestSplitContextItemSchema; -type ExternalContext = JinjaExternalContext & ApplicationExternalContext; -type Base = typeof JSONSchemaDataProvider & - Constructor; +type ExternalContext = JinjaExternalContext; +type Base = typeof JSONSchemaDataProvider; const jsonSchemaId = "context-providers-directory/ml-train-test-split-context-provider"; @@ -45,7 +39,6 @@ export default class MLTrainTestSplitDataManager extends (JSONSchemaDataProvider constructor(contextItem: Partial, externalContext: ExternalContext) { super(contextItem, externalContext); - this.initApplicationContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface.getPatchedSchemaById(jsonSchemaId, { fraction_held_as_test_set: { default: defaultData.fraction_held_as_test_set }, @@ -57,5 +50,3 @@ export default class MLTrainTestSplitDataManager extends (JSONSchemaDataProvider return defaultData; } } - -applicationContextMixin(MLTrainTestSplitDataManager.prototype); diff --git a/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts index 54ae4fe9..b02bacd9 100644 --- a/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts @@ -6,10 +6,6 @@ import type { } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import jobContextMixin, { - type JobContextMixin, - type JobExternalContext, -} from "../../../mixins/JobContextMixin"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, @@ -22,14 +18,8 @@ import materialsSetContextMixin, { type MaterialsSetContextMixin, type MaterialsSetExternalContext, } from "../../../mixins/MaterialsSetContextMixin"; -import methodDataContextMixin, { - type MethodDataContextMixin, - type MethodDataExternalContext, -} from "../../../mixins/MethodDataContextMixin"; -import workflowContextMixin, { - type WorkflowContextMixin, - type WorkflowExternalContext, -} from "../../../mixins/WorkflowContextMixin"; +import type { MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; +import type { WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, @@ -42,18 +32,14 @@ type Data = QENEBContextProviderSchema; type Schema = InputContextItemSchema & { data: Data }; type ExternalContext = JinjaExternalContext & WorkflowExternalContext & - JobExternalContext & MaterialsExternalContext & MethodDataExternalContext & MaterialsSetExternalContext & MaterialExternalContext; type Base = typeof JSONSchemaDataProvider & - Constructor & Constructor & Constructor & - Constructor & - Constructor & - Constructor; + Constructor; export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Base) { readonly name = "input" as const; @@ -62,6 +48,8 @@ export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Ba readonly entityName = "unit" as const; + isEdited = false; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "input"); @@ -72,10 +60,7 @@ export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Ba constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); - this.initJobContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); this.initMaterialContextMixin(externalContext); this.initMaterialsSetContextMixin(externalContext); @@ -108,7 +93,4 @@ export default class QENEBInputDataManager extends (JSONSchemaDataProvider as Ba materialContextMixin(QENEBInputDataManager.prototype); materialsContextMixin(QENEBInputDataManager.prototype); -methodDataContextMixin(QENEBInputDataManager.prototype); -workflowContextMixin(QENEBInputDataManager.prototype); -jobContextMixin(QENEBInputDataManager.prototype); materialsSetContextMixin(QENEBInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts index 991affbd..d5b16f5a 100644 --- a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts @@ -59,6 +59,8 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba readonly entityName = "unit" as const; + isEdited = false; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "input"); diff --git a/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts b/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts index aff9b3bf..78118d10 100644 --- a/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts +++ b/src/js/context/providers/by_application/nwchem/NWChemInputDataManager.ts @@ -7,22 +7,10 @@ import type { } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import jobContextMixin, { - type JobContextMixin, - type JobExternalContext, -} from "../../../mixins/JobContextMixin"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, } from "../../../mixins/MaterialContextMixin"; -import methodDataContextMixin, { - type MethodDataContextMixin, - type MethodDataExternalContext, -} from "../../../mixins/MethodDataContextMixin"; -import workflowContextMixin, { - type WorkflowContextMixin, - type WorkflowExternalContext, -} from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, @@ -30,16 +18,9 @@ import JSONSchemaDataProvider, { type Data = NWChemTotalEnergyContextProviderSchema; type Schema = InputContextItemSchema & { data: Data }; -type ExternalContext = JinjaExternalContext & - WorkflowExternalContext & - JobExternalContext & - MethodDataExternalContext & - MaterialExternalContext; +type ExternalContext = JinjaExternalContext & MaterialExternalContext; type Base = typeof JSONSchemaDataProvider & - Constructor & - Constructor & - Constructor & - Constructor; + Constructor; const jsonSchemaId = "context-providers-directory/by-application/nwchem-total-energy-context-provider"; @@ -51,6 +32,8 @@ export default class NWChemInputDataManager extends (JSONSchemaDataProvider as B readonly entityName = "unit" as const; + isEdited = false; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "input"); @@ -63,9 +46,6 @@ export default class NWChemInputDataManager extends (JSONSchemaDataProvider as B constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); this.initMaterialContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface.getSchemaById(jsonSchemaId); @@ -103,6 +83,3 @@ export default class NWChemInputDataManager extends (JSONSchemaDataProvider as B } materialContextMixin(NWChemInputDataManager.prototype); -methodDataContextMixin(NWChemInputDataManager.prototype); -workflowContextMixin(NWChemInputDataManager.prototype); -jobContextMixin(NWChemInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts b/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts index 28097f35..52228322 100644 --- a/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts +++ b/src/js/context/providers/by_application/vasp/VASPInputDataManager.ts @@ -4,10 +4,6 @@ import type { InputContextItemSchema, VASPContextProviderSchema } from "@mat3ra/ import type { Material } from "@mat3ra/made"; import type { JSONSchema7 } from "json-schema"; -import jobContextMixin, { - type JobContextMixin, - type JobExternalContext, -} from "../../../mixins/JobContextMixin"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, @@ -16,14 +12,6 @@ import materialsContextMixin, { type MaterialsContextMixin, type MaterialsExternalContext, } from "../../../mixins/MaterialsContextMixin"; -import methodDataContextMixin, { - type MethodDataContextMixin, - type MethodDataExternalContext, -} from "../../../mixins/MethodDataContextMixin"; -import workflowContextMixin, { - type WorkflowContextMixin, - type WorkflowExternalContext, -} from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, @@ -31,18 +19,10 @@ import JSONSchemaDataProvider, { type Data = VASPContextProviderSchema; type Schema = InputContextItemSchema & { data: Data }; -type ExternalContext = JinjaExternalContext & - WorkflowExternalContext & - JobExternalContext & - MaterialExternalContext & - MethodDataExternalContext & - MaterialsExternalContext; +type ExternalContext = JinjaExternalContext & MaterialExternalContext & MaterialsExternalContext; type Base = typeof JSONSchemaDataProvider & - Constructor & Constructor & - Constructor & - Constructor & - Constructor; + Constructor; const jsonSchemaId = "context-providers-directory/by-application/vasp-context-provider"; @@ -53,6 +33,8 @@ export default class VASPInputDataManager extends (JSONSchemaDataProvider as Bas readonly entityName = "unit" as const; + isEdited = false; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "input"); @@ -63,10 +45,7 @@ export default class VASPInputDataManager extends (JSONSchemaDataProvider as Bas constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); - this.initJobContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); this.initMaterialContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface.getSchemaById(jsonSchemaId); @@ -102,6 +81,3 @@ export default class VASPInputDataManager extends (JSONSchemaDataProvider as Bas materialContextMixin(VASPInputDataManager.prototype); materialsContextMixin(VASPInputDataManager.prototype); -methodDataContextMixin(VASPInputDataManager.prototype); -workflowContextMixin(VASPInputDataManager.prototype); -jobContextMixin(VASPInputDataManager.prototype); diff --git a/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts b/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts index b1a3056d..5dd3321e 100644 --- a/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts +++ b/src/js/context/providers/by_application/vasp/VASPNEBInputDataManager.ts @@ -6,10 +6,6 @@ import type { } from "@mat3ra/esse/dist/js/types"; import type { JSONSchema7 } from "json-schema"; -import jobContextMixin, { - type JobContextMixin, - type JobExternalContext, -} from "../../../mixins/JobContextMixin"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, @@ -22,14 +18,6 @@ import materialsSetContextMixin, { type MaterialsSetContextMixin, type MaterialsSetExternalContext, } from "../../../mixins/MaterialsSetContextMixin"; -import methodDataContextMixin, { - type MethodDataContextMixin, - type MethodDataExternalContext, -} from "../../../mixins/MethodDataContextMixin"; -import workflowContextMixin, { - type WorkflowContextMixin, - type WorkflowExternalContext, -} from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, @@ -39,19 +27,13 @@ import VASPInputDataManager from "./VASPInputDataManager"; type Data = VASPNEBContextProviderSchema; type Schema = InputContextItemSchema & { data: Data }; type ExternalContext = JinjaExternalContext & - WorkflowExternalContext & - JobExternalContext & MaterialExternalContext & - MethodDataExternalContext & MaterialsExternalContext & MaterialsSetExternalContext; type Base = typeof JSONSchemaDataProvider & - Constructor & Constructor & Constructor & - Constructor & - Constructor & - Constructor; + Constructor; const jsonSchemaId = "context-providers-directory/by-application/vasp-neb-context-provider"; @@ -62,6 +44,8 @@ export default class VASPNEBInputDataManager extends (JSONSchemaDataProvider as readonly entityName = "unit" as const; + isEdited = false; + static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "input"); @@ -75,9 +59,6 @@ export default class VASPNEBInputDataManager extends (JSONSchemaDataProvider as this.initMaterialContextMixin(externalContext); this.initMaterialsContextMixin(externalContext); this.initMaterialsSetContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); this.jsonSchema = JSONSchemasInterface.getSchemaById(jsonSchemaId); } @@ -101,6 +82,3 @@ export default class VASPNEBInputDataManager extends (JSONSchemaDataProvider as materialContextMixin(VASPNEBInputDataManager.prototype); materialsContextMixin(VASPNEBInputDataManager.prototype); materialsSetContextMixin(VASPNEBInputDataManager.prototype); -methodDataContextMixin(VASPNEBInputDataManager.prototype); -workflowContextMixin(VASPNEBInputDataManager.prototype); -jobContextMixin(VASPNEBInputDataManager.prototype); From 280701afd07b992824b0447ce7ecb50436b125a7 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 02:04:50 +0200 Subject: [PATCH 13/30] chore: cleanups --- dist/js/Subworkflow.d.ts | 3 +- dist/js/Workflow.d.ts | 4 +- dist/js/context/mixins/JobContextMixin.d.ts | 10 ---- dist/js/context/mixins/JobContextMixin.js | 12 ---- .../mixins/MethodDataContextMixin.d.ts | 19 ------- .../context/mixins/MethodDataContextMixin.js | 13 ----- .../context/mixins/WorkflowContextMixin.d.ts | 10 ---- .../js/context/mixins/WorkflowContextMixin.js | 12 ---- .../PointsGridFormDataProvider.d.ts | 15 +++-- .../espresso/QENEBInputDataManager.d.ts | 3 +- .../espresso/QEPWXInputDataManager.d.ts | 28 ++++++++-- .../espresso/QEPWXInputDataManager.js | 15 ++--- dist/js/context/providers/index.d.ts | 5 +- src/js/Subworkflow.ts | 6 +- src/js/Workflow.ts | 2 +- src/js/context/mixins/JobContextMixin.ts | 23 -------- .../context/mixins/MethodDataContextMixin.ts | 31 ---------- src/js/context/mixins/WorkflowContextMixin.ts | 22 -------- .../espresso/QENEBInputDataManager.ts | 7 ++- .../espresso/QEPWXInputDataManager.ts | 56 +++++++++++-------- src/js/context/providers/index.ts | 9 +-- 21 files changed, 93 insertions(+), 212 deletions(-) delete mode 100644 dist/js/context/mixins/JobContextMixin.d.ts delete mode 100644 dist/js/context/mixins/JobContextMixin.js delete mode 100644 dist/js/context/mixins/MethodDataContextMixin.d.ts delete mode 100644 dist/js/context/mixins/MethodDataContextMixin.js delete mode 100644 dist/js/context/mixins/WorkflowContextMixin.d.ts delete mode 100644 dist/js/context/mixins/WorkflowContextMixin.js delete mode 100644 src/js/context/mixins/JobContextMixin.ts delete mode 100644 src/js/context/mixins/MethodDataContextMixin.ts delete mode 100644 src/js/context/mixins/WorkflowContextMixin.ts diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index 91e50a06..634e8d2d 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -6,11 +6,10 @@ import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ApplicationSchema, BaseMethod, BaseModel, JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; import { type Method, Model, ModelFactory } from "@mat3ra/mode"; -import type { JobExternalContext } from "./context/mixins/JobContextMixin"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; -import type { WorkflowExternalContext } from "./context/mixins/WorkflowContextMixin"; +import type { JobExternalContext, WorkflowExternalContext } from "./context/providers/by_application/espresso/QEPWXInputDataManager"; import { type SubworkflowSchemaMixin } from "./generated/SubworkflowSchemaMixin"; import { SubworkflowUnit } from "./units"; import type { AnySubworkflowUnit } from "./units/factory"; diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index 4b3eccab..e3745c5c 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -4,10 +4,10 @@ import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; -import type { JobExternalContext } from "./context/mixins/JobContextMixin"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; +import type { JobExternalContext } from "./context/providers/by_application/espresso/QEPWXInputDataManager"; import { UnitType } from "./enums"; import { type WorkflowSchemaMixin } from "./generated/WorkflowSchemaMixin"; import Subworkflow from "./Subworkflow"; @@ -38,7 +38,7 @@ export declare class Workflow extends Workflow_base { get usedApplicationNames(): string[]; get usedApplicationVersions(): string[]; get usedApplicationNamesWithVersions(): string[]; - get usedModels(): ("dft" | "ml" | "unknown")[]; + get usedModels(): ("unknown" | "dft" | "ml")[]; get humanReadableUsedModels(): string[]; toJSON(): WorkflowSchema & AnyObject; get properties(): string[]; diff --git a/dist/js/context/mixins/JobContextMixin.d.ts b/dist/js/context/mixins/JobContextMixin.d.ts deleted file mode 100644 index 1abf564d..00000000 --- a/dist/js/context/mixins/JobContextMixin.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { JobSchema } from "@mat3ra/esse/dist/js/types"; -import type ContextProvider from "../providers/base/ContextProvider"; -export type JobContextMixin = { - job?: Pick; - initJobContextMixin(externalContext: JobExternalContext): void; -}; -export type JobExternalContext = { - job?: Pick; -}; -export default function jobContextMixin(item: ContextProvider): void; diff --git a/dist/js/context/mixins/JobContextMixin.js b/dist/js/context/mixins/JobContextMixin.js deleted file mode 100644 index fb144029..00000000 --- a/dist/js/context/mixins/JobContextMixin.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = jobContextMixin; -function jobContextMixin(item) { - // @ts-expect-error - const properties = { - initJobContextMixin(externalContext) { - this.job = externalContext.job; - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/dist/js/context/mixins/MethodDataContextMixin.d.ts b/dist/js/context/mixins/MethodDataContextMixin.d.ts deleted file mode 100644 index eff24906..00000000 --- a/dist/js/context/mixins/MethodDataContextMixin.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { BaseMethod } from "@mat3ra/esse/dist/js/types"; -import type { AtomicElementValue } from "@mat3ra/made/dist/js/basis/elements"; -import type ContextProvider from "../providers/base/ContextProvider"; -type MethodData = BaseMethod["data"] & { - pseudo?: { - element: AtomicElementValue; - filename?: string; - path?: string; - }[]; -}; -export type MethodDataContextMixin = { - methodData: MethodData; - initMethodDataContextMixin(externalContext: MethodDataExternalContext): void; -}; -export type MethodDataExternalContext = { - methodData?: MethodData; -}; -export default function methodDataContextMixin(item: ContextProvider): void; -export {}; diff --git a/dist/js/context/mixins/MethodDataContextMixin.js b/dist/js/context/mixins/MethodDataContextMixin.js deleted file mode 100644 index ec09d7ad..00000000 --- a/dist/js/context/mixins/MethodDataContextMixin.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = methodDataContextMixin; -function methodDataContextMixin(item) { - // @ts-expect-error - const properties = { - methodData: {}, - initMethodDataContextMixin(externalContext) { - this.methodData = externalContext.methodData || {}; - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/dist/js/context/mixins/WorkflowContextMixin.d.ts b/dist/js/context/mixins/WorkflowContextMixin.d.ts deleted file mode 100644 index 32bee27e..00000000 --- a/dist/js/context/mixins/WorkflowContextMixin.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Workflow } from "../../Workflow"; -import type ContextProvider from "../providers/base/ContextProvider"; -export type WorkflowContextMixin = { - workflow: Workflow; - initWorkflowContextMixin(externalContext: WorkflowExternalContext): void; -}; -export type WorkflowExternalContext = { - workflow: Workflow; -}; -export default function workflowContextMixin(item: ContextProvider): void; diff --git a/dist/js/context/mixins/WorkflowContextMixin.js b/dist/js/context/mixins/WorkflowContextMixin.js deleted file mode 100644 index 9b73a0f2..00000000 --- a/dist/js/context/mixins/WorkflowContextMixin.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = workflowContextMixin; -function workflowContextMixin(item) { - // @ts-expect-error - const properties = { - initWorkflowContextMixin(externalContext) { - this.workflow = externalContext.workflow; - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts index a5195542..36df3fbf 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts @@ -28,13 +28,20 @@ export default abstract class PointsGridFormDataProvider, externalContext: ExternalContext); private initInstanceFields; private getDefaultGridMetricValue; - getDefaultData(): PointsGridDataProviderSchema; + getDefaultData(): { + dimensions: [number, number, number] | [string, string, string]; + shifts?: [number, number, number]; + reciprocalVectorRatios?: [number, number, number]; + gridMetricType: "KPPRA" | "spacing"; + gridMetricValue: number; + preferGridMetric?: boolean; + }; protected get jsonSchemaPatchConfig(): { dimensions: { default?: any[] | undefined; type: string; items: { - default?: string | number | readonly number[] | readonly string[] | undefined; + default?: string | number | readonly string[] | readonly number[] | undefined; type: string; }; minItems: number; @@ -44,7 +51,7 @@ export default abstract class PointsGridFormDataProvider; +}; +export type WorkflowExternalContext = { + workflow: Workflow; +}; type Data = QEPwxContextProviderSchema; type Schema = InputContextItemSchema & { data: Data; }; type ExternalContext = JinjaExternalContext & WorkflowExternalContext & MaterialExternalContext & JobExternalContext & MethodDataExternalContext & MaterialsExternalContext; -type Base = typeof JSONSchemaDataProvider & Constructor & Constructor & Constructor & Constructor & Constructor; +type Base = typeof JSONSchemaDataProvider & Constructor & Constructor; declare const QEPWXInputDataManager_base: Base; export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + methodData?: MethodData; + job?: Pick; + workflow: Workflow; isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QEPWXInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js index 904e7c43..82dcdb84 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.js @@ -6,11 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const periodic_table_js_1 = require("@exabyte-io/periodic-table.js"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const path_1 = __importDefault(require("path")); -const JobContextMixin_1 = __importDefault(require("../../../mixins/JobContextMixin")); const MaterialContextMixin_1 = __importDefault(require("../../../mixins/MaterialContextMixin")); const MaterialsContextMixin_1 = __importDefault(require("../../../mixins/MaterialsContextMixin")); -const MethodDataContextMixin_1 = __importDefault(require("../../../mixins/MethodDataContextMixin")); -const WorkflowContextMixin_1 = __importDefault(require("../../../mixins/WorkflowContextMixin")); const JSONSchemaDataProvider_1 = __importDefault(require("../../base/JSONSchemaDataProvider")); const jsonSchemaId = "context-providers-directory/by-application/qe-pwx-context-provider"; class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { @@ -25,10 +22,10 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { this.entityName = "unit"; this.isEdited = false; this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); this.initMaterialContextMixin(externalContext); + this.methodData = externalContext.methodData || {}; + this.job = externalContext.job; + this.workflow = externalContext.workflow; this.jsonSchema = JSONSchemasInterface_1.default.getSchemaById(jsonSchemaId); } buildQEPWXContext(material) { @@ -98,6 +95,6 @@ class QEPWXInputDataManager extends JSONSchemaDataProvider_1.default { exports.default = QEPWXInputDataManager; (0, MaterialContextMixin_1.default)(QEPWXInputDataManager.prototype); (0, MaterialsContextMixin_1.default)(QEPWXInputDataManager.prototype); -(0, MethodDataContextMixin_1.default)(QEPWXInputDataManager.prototype); -(0, WorkflowContextMixin_1.default)(QEPWXInputDataManager.prototype); -(0, JobContextMixin_1.default)(QEPWXInputDataManager.prototype); +// methodDataContextMixin(QEPWXInputDataManager.prototype); +// workflowContextMixin(QEPWXInputDataManager.prototype); +// jobContextMixin(QEPWXInputDataManager.prototype); diff --git a/dist/js/context/providers/index.d.ts b/dist/js/context/providers/index.d.ts index dd4c9b88..21a60a45 100644 --- a/dist/js/context/providers/index.d.ts +++ b/dist/js/context/providers/index.d.ts @@ -1,16 +1,13 @@ import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; import type { ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; -import type { JobExternalContext } from "../mixins/JobContextMixin"; import type { MaterialExternalContext } from "../mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "../mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "../mixins/MaterialsSetContextMixin"; -import type { MethodDataExternalContext } from "../mixins/MethodDataContextMixin"; -import type { WorkflowExternalContext } from "../mixins/WorkflowContextMixin"; import type { UnitContext } from "./base/ContextProvider"; import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import BoundaryConditionsFormDataManager from "./BoundaryConditionsFormDataManager"; import QENEBInputDataManager from "./by_application/espresso/QENEBInputDataManager"; -import QEPWXInputDataManager from "./by_application/espresso/QEPWXInputDataManager"; +import QEPWXInputDataManager, { type JobExternalContext, type MethodDataExternalContext, type WorkflowExternalContext } from "./by_application/espresso/QEPWXInputDataManager"; import NWChemInputDataManager from "./by_application/nwchem/NWChemInputDataManager"; import VASPInputDataManager from "./by_application/vasp/VASPInputDataManager"; import VASPNEBInputDataManager from "./by_application/vasp/VASPNEBInputDataManager"; diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index f6cdcaf3..bf5e36db 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -20,12 +20,14 @@ import type { import { type Method, Model, ModelFactory } from "@mat3ra/mode"; import { Utils } from "@mat3ra/utils"; -import type { JobExternalContext } from "./context/mixins/JobContextMixin"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; -import type { WorkflowExternalContext } from "./context/mixins/WorkflowContextMixin"; import type { AssignmentContext, ExternalContext } from "./context/providers"; +import type { + JobExternalContext, + WorkflowExternalContext, +} from "./context/providers/by_application/espresso/QEPWXInputDataManager"; import { createConvergenceParameter } from "./convergence/factory"; import { UnitTag, UnitType } from "./enums"; import { diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index de1e86b4..999ad8b3 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -20,10 +20,10 @@ import { SubworkflowStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; import slugify from "slugify"; -import type { JobExternalContext } from "./context/mixins/JobContextMixin"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; +import type { JobExternalContext } from "./context/providers/by_application/espresso/QEPWXInputDataManager"; import { UnitType } from "./enums"; import { type WorkflowSchemaMixin, workflowSchemaMixin } from "./generated/WorkflowSchemaMixin"; import Subworkflow from "./Subworkflow"; diff --git a/src/js/context/mixins/JobContextMixin.ts b/src/js/context/mixins/JobContextMixin.ts deleted file mode 100644 index 94ab0d8e..00000000 --- a/src/js/context/mixins/JobContextMixin.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { JobSchema } from "@mat3ra/esse/dist/js/types"; - -import type ContextProvider from "../providers/base/ContextProvider"; - -export type JobContextMixin = { - job?: Pick; - initJobContextMixin(externalContext: JobExternalContext): void; -}; - -export type JobExternalContext = { - job?: Pick; -}; - -export default function jobContextMixin(item: ContextProvider) { - // @ts-expect-error - const properties: ContextProvider & JobContextMixin = { - initJobContextMixin(externalContext: JobExternalContext) { - this.job = externalContext.job; - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/src/js/context/mixins/MethodDataContextMixin.ts b/src/js/context/mixins/MethodDataContextMixin.ts deleted file mode 100644 index 7890c909..00000000 --- a/src/js/context/mixins/MethodDataContextMixin.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { BaseMethod } from "@mat3ra/esse/dist/js/types"; -import type { AtomicElementValue } from "@mat3ra/made/dist/js/basis/elements"; - -import type ContextProvider from "../providers/base/ContextProvider"; - -// TODO: create a task to define correct type for MethodData -type MethodData = BaseMethod["data"] & { - pseudo?: { element: AtomicElementValue; filename?: string; path?: string }[]; -}; - -export type MethodDataContextMixin = { - methodData: MethodData; - initMethodDataContextMixin(externalContext: MethodDataExternalContext): void; -}; - -export type MethodDataExternalContext = { - methodData?: MethodData; -}; - -export default function methodDataContextMixin(item: ContextProvider) { - // @ts-expect-error - const properties: ContextProvider & MethodDataContextMixin = { - methodData: {}, - - initMethodDataContextMixin(externalContext: MethodDataExternalContext) { - this.methodData = externalContext.methodData || {}; - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/src/js/context/mixins/WorkflowContextMixin.ts b/src/js/context/mixins/WorkflowContextMixin.ts deleted file mode 100644 index 08a3779c..00000000 --- a/src/js/context/mixins/WorkflowContextMixin.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Workflow } from "../../Workflow"; -import type ContextProvider from "../providers/base/ContextProvider"; - -export type WorkflowContextMixin = { - workflow: Workflow; - initWorkflowContextMixin(externalContext: WorkflowExternalContext): void; -}; - -export type WorkflowExternalContext = { - workflow: Workflow; -}; - -export default function workflowContextMixin(item: ContextProvider) { - // @ts-expect-error - const properties: ContextProvider & WorkflowContextMixin = { - initWorkflowContextMixin(externalContext: WorkflowExternalContext) { - this.workflow = externalContext.workflow; - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} diff --git a/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts index b02bacd9..df86528f 100644 --- a/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QENEBInputDataManager.ts @@ -18,13 +18,14 @@ import materialsSetContextMixin, { type MaterialsSetContextMixin, type MaterialsSetExternalContext, } from "../../../mixins/MaterialsSetContextMixin"; -import type { MethodDataExternalContext } from "../../../mixins/MethodDataContextMixin"; -import type { WorkflowExternalContext } from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; -import QEPWXInputDataManager from "./QEPWXInputDataManager"; +import QEPWXInputDataManager, { + type MethodDataExternalContext, + type WorkflowExternalContext, +} from "./QEPWXInputDataManager"; const jsonSchemaId = "context-providers-directory/by-application/qe-neb-context-provider"; diff --git a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts index d5b16f5a..6f151219 100644 --- a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts @@ -2,18 +2,17 @@ import { PERIODIC_TABLE } from "@exabyte-io/periodic-table.js"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { + BaseMethod, InputContextItemSchema, + JobSchema, QEPwxContextProviderSchema, } from "@mat3ra/esse/dist/js/types"; import type { Material } from "@mat3ra/made"; import type { AtomicElementValue } from "@mat3ra/made/dist/js/basis/elements"; import type { JSONSchema7 } from "json-schema"; import path from "path"; +import type { Workflow } from "src/js/Workflow"; -import jobContextMixin, { - type JobContextMixin, - type JobExternalContext, -} from "../../../mixins/JobContextMixin"; import materialContextMixin, { type MaterialContextMixin, type MaterialExternalContext, @@ -22,19 +21,28 @@ import materialsContextMixin, { type MaterialsContextMixin, type MaterialsExternalContext, } from "../../../mixins/MaterialsContextMixin"; -import methodDataContextMixin, { - type MethodDataContextMixin, - type MethodDataExternalContext, -} from "../../../mixins/MethodDataContextMixin"; -import workflowContextMixin, { - type WorkflowContextMixin, - type WorkflowExternalContext, -} from "../../../mixins/WorkflowContextMixin"; import type { UnitContext } from "../../base/ContextProvider"; import JSONSchemaDataProvider, { type JinjaExternalContext, } from "../../base/JSONSchemaDataProvider"; +// TODO: create a task to define correct type for MethodData +type MethodData = BaseMethod["data"] & { + pseudo?: { element: AtomicElementValue; filename?: string; path?: string }[]; +}; + +export type MethodDataExternalContext = { + methodData?: MethodData; +}; + +export type JobExternalContext = { + job?: Pick; +}; + +export type WorkflowExternalContext = { + workflow: Workflow; +}; + type Data = QEPwxContextProviderSchema; type Schema = InputContextItemSchema & { data: Data }; type ExternalContext = JinjaExternalContext & @@ -44,11 +52,8 @@ type ExternalContext = JinjaExternalContext & MethodDataExternalContext & MaterialsExternalContext; type Base = typeof JSONSchemaDataProvider & - Constructor & Constructor & - Constructor & - Constructor & - Constructor; + Constructor; const jsonSchemaId = "context-providers-directory/by-application/qe-pwx-context-provider"; @@ -59,6 +64,12 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba readonly entityName = "unit" as const; + methodData?: MethodData; + + job?: Pick; + + workflow: Workflow; + isEdited = false; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { @@ -72,11 +83,12 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba constructor(config: Partial, externalContext: ExternalContext) { super(config, externalContext); this.initMaterialsContextMixin(externalContext); - this.initMethodDataContextMixin(externalContext); - this.initWorkflowContextMixin(externalContext); - this.initJobContextMixin(externalContext); this.initMaterialContextMixin(externalContext); + this.methodData = externalContext.methodData || {}; + this.job = externalContext.job; + this.workflow = externalContext.workflow; + this.jsonSchema = JSONSchemasInterface.getSchemaById(jsonSchemaId); } @@ -157,6 +169,6 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba materialContextMixin(QEPWXInputDataManager.prototype); materialsContextMixin(QEPWXInputDataManager.prototype); -methodDataContextMixin(QEPWXInputDataManager.prototype); -workflowContextMixin(QEPWXInputDataManager.prototype); -jobContextMixin(QEPWXInputDataManager.prototype); +// methodDataContextMixin(QEPWXInputDataManager.prototype); +// workflowContextMixin(QEPWXInputDataManager.prototype); +// jobContextMixin(QEPWXInputDataManager.prototype); diff --git a/src/js/context/providers/index.ts b/src/js/context/providers/index.ts index 46e66976..e5b74e36 100644 --- a/src/js/context/providers/index.ts +++ b/src/js/context/providers/index.ts @@ -1,17 +1,18 @@ import type { AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; import type { ApplicationExternalContext } from "../mixins/ApplicationContextMixin"; -import type { JobExternalContext } from "../mixins/JobContextMixin"; import type { MaterialExternalContext } from "../mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "../mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "../mixins/MaterialsSetContextMixin"; -import type { MethodDataExternalContext } from "../mixins/MethodDataContextMixin"; -import type { WorkflowExternalContext } from "../mixins/WorkflowContextMixin"; import type { UnitContext } from "./base/ContextProvider"; import type { JinjaExternalContext } from "./base/JSONSchemaDataProvider"; import BoundaryConditionsFormDataManager from "./BoundaryConditionsFormDataManager"; import QENEBInputDataManager from "./by_application/espresso/QENEBInputDataManager"; -import QEPWXInputDataManager from "./by_application/espresso/QEPWXInputDataManager"; +import QEPWXInputDataManager, { + type JobExternalContext, + type MethodDataExternalContext, + type WorkflowExternalContext, +} from "./by_application/espresso/QEPWXInputDataManager"; import NWChemInputDataManager from "./by_application/nwchem/NWChemInputDataManager"; import VASPInputDataManager from "./by_application/vasp/VASPInputDataManager"; import VASPNEBInputDataManager from "./by_application/vasp/VASPNEBInputDataManager"; From e2b1d8f77effcec5ecbd8c897796d4a8766b55a0 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 02:05:37 +0200 Subject: [PATCH 14/30] chore: cleanups --- .../by_application/espresso/QEPWXInputDataManager.d.ts | 2 +- .../by_application/espresso/QEPWXInputDataManager.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts index d214c373..7ec7ed07 100644 --- a/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts +++ b/dist/js/context/providers/by_application/espresso/QEPWXInputDataManager.d.ts @@ -34,10 +34,10 @@ export default class QEPWXInputDataManager extends QEPWXInputDataManager_base { readonly name: "input"; readonly domain: "executable"; readonly entityName: "unit"; + isEdited: boolean; methodData?: MethodData; job?: Pick; workflow: Workflow; - isEdited: boolean; static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext): QEPWXInputDataManager; readonly jsonSchema: JSONSchema7 | undefined; constructor(config: Partial, externalContext: ExternalContext); diff --git a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts index 6f151219..5f91d14f 100644 --- a/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts +++ b/src/js/context/providers/by_application/espresso/QEPWXInputDataManager.ts @@ -64,14 +64,14 @@ export default class QEPWXInputDataManager extends (JSONSchemaDataProvider as Ba readonly entityName = "unit" as const; + isEdited = false; + methodData?: MethodData; job?: Pick; workflow: Workflow; - isEdited = false; - static createFromUnitContext(unitContext: UnitContext, externalContext: ExternalContext) { const contextItem = this.findContextItem(unitContext, "input"); From 827ecfba22169aef1cf372cfc741f503d5790cf0 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 17:53:02 +0200 Subject: [PATCH 15/30] chore: use setUnitLinks from standata --- dist/js/Subworkflow.js | 4 ++-- dist/js/Workflow.js | 3 +-- package-lock.json | 6 +++--- package.json | 2 +- src/js/Subworkflow.ts | 4 ++-- src/js/Workflow.ts | 5 ++--- src/js/workflows/utils.ts | 33 --------------------------------- 7 files changed, 11 insertions(+), 46 deletions(-) delete mode 100644 src/js/workflows/utils.ts diff --git a/dist/js/Subworkflow.js b/dist/js/Subworkflow.js index 951192b6..174b39c0 100644 --- a/dist/js/Subworkflow.js +++ b/dist/js/Subworkflow.js @@ -5,12 +5,12 @@ const entity_1 = require("@mat3ra/code/dist/js/entity"); const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const mode_1 = require("@mat3ra/mode"); +const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); const factory_1 = require("./convergence/factory"); const enums_1 = require("./enums"); const SubworkflowSchemaMixin_1 = require("./generated/SubworkflowSchemaMixin"); const units_1 = require("./units"); -const utils_2 = require("./workflows/utils"); class Subworkflow extends entity_1.InMemoryEntity { constructor(config, _ModelFactory = mode_1.ModelFactory) { super(config); @@ -155,7 +155,7 @@ class Subworkflow extends entity_1.InMemoryEntity { } setUnits(units) { // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer - this.unitsInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(units)); + this.unitsInstances = (0, standata_1.setUnitLinks)(units); this.units = units.map((x) => x.toJSON()); this.properties = units.map((x) => x.resultNames).flat(); } diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index 5e8badf9..71394088 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -18,7 +18,6 @@ const Subworkflow_1 = __importDefault(require("./Subworkflow")); const units_1 = require("./units"); const factory_1 = require("./units/factory"); const default_1 = __importDefault(require("./workflows/default")); -const utils_2 = require("./workflows/utils"); const { MODEL_NAMES } = mode_1.tree; class Workflow extends entity_1.InMemoryEntity { static get jsonSchema() { @@ -69,7 +68,7 @@ class Workflow extends entity_1.InMemoryEntity { } } setUnits(arr) { - this.unitInstances = (0, utils_2.setNextLinks)((0, utils_2.setUnitsHead)(arr)); + this.unitInstances = (0, standata_1.setUnitLinks)(arr); } render(context) { this.subworkflowInstances.forEach((sw) => { diff --git a/package-lock.json b/package-lock.json index 968a2dd1..9961e7e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#381d4b30de2d807c9b7fa2bdf4dcadc54da04576", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#e8342d4d87a7a6c0774c43c259535481182933e7", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "@types/nunjucks": "^3.2.6", @@ -3435,8 +3435,8 @@ }, "node_modules/@mat3ra/standata": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#381d4b30de2d807c9b7fa2bdf4dcadc54da04576", - "integrity": "sha512-3CSQpVpvuTOBy/MSnX6+dYyrJ+ay81yaxFGQV35zfvc0Ng9kULpvbi0qusWrgEU7XJh2e2nrUukYC/SN+1paOg==", + "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#e8342d4d87a7a6c0774c43c259535481182933e7", + "integrity": "sha512-kRLClk4Yn46yXwa00BSYLgI5GaVyda96/lo+HvxSVXqh/1lwNm3H3xp5sOa/GlwQUq/5EohCVxzXt/jhMVnnrg==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 296fc0a6..d83d7c02 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#381d4b30de2d807c9b7fa2bdf4dcadc54da04576", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#e8342d4d87a7a6c0774c43c259535481182933e7", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "chai": "^4.3.4", diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index bf5e36db..61021b1d 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -18,6 +18,7 @@ import type { SubworkflowSchema, } from "@mat3ra/esse/dist/js/types"; import { type Method, Model, ModelFactory } from "@mat3ra/mode"; +import { setUnitLinks } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; @@ -36,7 +37,6 @@ import { } from "./generated/SubworkflowSchemaMixin"; import { AssignmentUnit, ConditionUnit, SubworkflowUnit, UnitFactory } from "./units"; import type { AnySubworkflowUnit } from "./units/factory"; -import { setNextLinks, setUnitsHead } from "./workflows/utils"; type ConvergenceConfig = { parameter: "N_k" | "N_k_nonuniform"; @@ -255,7 +255,7 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub private setUnits(units: AnySubworkflowUnit[]) { // TODO: remove the setNextLinks and setUnitsHead and handle the logic via flowchart designer - this.unitsInstances = setNextLinks(setUnitsHead(units)); + this.unitsInstances = setUnitLinks(units); this.units = units.map((x) => x.toJSON()); this.properties = units.map((x) => x.resultNames).flat(); } diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 999ad8b3..90a2c152 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -16,7 +16,7 @@ import type { WorkflowSchema, } from "@mat3ra/esse/dist/js/types"; import { tree } from "@mat3ra/mode"; -import { SubworkflowStandata } from "@mat3ra/standata"; +import { setUnitLinks, SubworkflowStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; import slugify from "slugify"; @@ -30,7 +30,6 @@ import Subworkflow from "./Subworkflow"; import { MapUnit } from "./units"; import { type AnyWorkflowUnit, UnitFactory } from "./units/factory"; import defaultWorkflowConfig from "./workflows/default"; -import { setNextLinks, setUnitsHead } from "./workflows/utils"; const { MODEL_NAMES } = tree; @@ -112,7 +111,7 @@ export class Workflow extends (InMemoryEntity as Base) { } setUnits(arr: AnyWorkflowUnit[]) { - this.unitInstances = setNextLinks(setUnitsHead(arr)); + this.unitInstances = setUnitLinks(arr); } render(context: WorkflowRenderContext) { diff --git a/src/js/workflows/utils.ts b/src/js/workflows/utils.ts deleted file mode 100644 index bbc93259..00000000 --- a/src/js/workflows/utils.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; - -/** - * @summary set the head of an array of units - */ -export function setUnitsHead(units: T[]) { - if (units.length > 0) { - units[0].head = true; - for (let i = 1; i < units.length; i++) { - units[i].head = false; - } - } - return units; -} - -// TODO: fix setNextLinks on unit removal and convergence logic. -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -export function setNextLinks(units: T[]) { - const flowchartIds = units.map((u) => u.flowchartId); - for (let i = 0; i < units.length - 1; i++) { - if (!units[i].next) { - // newly added units don't have next set yet => set it - units[i].next = units[i + 1].flowchartId; - if (i > 0) units[i - 1].next = units[i].flowchartId; - } else if (!flowchartIds.includes(units[i].next ?? "")) { - // newly removed units may create broken next links => fix it - units[i].next = units[i + 1].flowchartId; - } - } - return units; -} From 811f1899dfa6c57f36328b9452c48f7944840e9e Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 17:57:11 +0200 Subject: [PATCH 16/30] chore: remove usePredefinedIds usage --- dist/js/Subworkflow.d.ts | 7 ++-- dist/js/Subworkflow.js | 41 +-------------------- dist/js/Workflow.d.ts | 1 - dist/js/Workflow.js | 1 - dist/js/units/BaseUnit.d.ts | 2 -- dist/js/units/BaseUnit.js | 11 ++---- src/js/Subworkflow.ts | 72 ++----------------------------------- src/js/Workflow.ts | 2 -- src/js/units/BaseUnit.ts | 13 ++----- 9 files changed, 10 insertions(+), 140 deletions(-) diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index 634e8d2d..fd57b90e 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -4,8 +4,8 @@ import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/ import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ApplicationSchema, BaseMethod, BaseModel, JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; -import { type Method, Model, ModelFactory } from "@mat3ra/mode"; +import type { JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; +import { Model, ModelFactory } from "@mat3ra/mode"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; @@ -29,7 +29,6 @@ type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & Named type SubworkflowExternalContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & WorkflowExternalContext & JobExternalContext; declare const Subworkflow_base: Base; export default class Subworkflow extends Subworkflow_base implements SubworkflowSchema { - static usePredefinedIds: boolean; private ModelFactory; private applicationInstance; unitsInstances: AnySubworkflowUnit[]; @@ -38,7 +37,6 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow static createDefault: () => Subworkflow; toJSON: () => SubworkflowSchema & AnyObject; constructor(config: SubworkflowSchema, _ModelFactory?: typeof ModelFactory); - static generateSubworkflowId(name: string, application?: ApplicationSchema, model?: BaseModel, method?: BaseMethod): any; static get defaultConfig(): { _id: any; name: string; @@ -55,7 +53,6 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow units: never[]; }; getAsUnit(): SubworkflowUnit; - static fromArguments(application: ApplicationSchema, model: Model, method: Method, name: string, units?: SubworkflowSchema["units"], config?: {}): Subworkflow; setApplication(application: Application): void; setModel(model: Model): void; private buildExternalContext; diff --git a/dist/js/Subworkflow.js b/dist/js/Subworkflow.js index 174b39c0..65870cbf 100644 --- a/dist/js/Subworkflow.js +++ b/dist/js/Subworkflow.js @@ -23,19 +23,10 @@ class Subworkflow extends entity_1.InMemoryEntity { }); this.setUnits(this.units.map((cfg) => units_1.UnitFactory.createInSubworkflow(cfg))); } - static generateSubworkflowId(name, application, model, method) { - const appName = (application === null || application === void 0 ? void 0 : application.name) || ""; - const modelInfo = model ? `${model.type}-${model.subtype || ""}` : ""; - const methodInfo = method ? `${method.type}-${method.subtype || ""}` : ""; - const seed = [`subworkflow-${name}`, appName, modelInfo, methodInfo] - .filter((p) => p) - .join("-"); - return this.usePredefinedIds ? utils_1.Utils.uuid.getUUIDFromNamespace(seed) : utils_1.Utils.uuid.getUUID(); - } static get defaultConfig() { const defaultName = "New Subworkflow"; return { - _id: this.generateSubworkflowId(defaultName), + _id: utils_1.Utils.uuid.getUUID(), name: defaultName, application: ade_1.Application.defaultConfig, model: mode_1.Model.defaultConfig, @@ -55,35 +46,6 @@ class Subworkflow extends entity_1.InMemoryEntity { flowchartId: "", }); } - /* - * @summary Used to generate initial application tree, therefore omit setting application. - */ - static fromArguments(application, model, method, name, units = [], config = {}) { - var _a; - // TODO: move to standata and fix types - // @ts-ignore - const nameForIdGeneration = ((_a = config.attributes) === null || _a === void 0 ? void 0 : _a.name) || name; - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { functions: _functions, attributes: _attributes, ...cleanConfig } = config; - // Set the method on the model so it can be properly serialized - model.setMethod(method); - return new Subworkflow({ - ...cleanConfig, - _id: Subworkflow.generateSubworkflowId(nameForIdGeneration, application, model, method), - name, - application, - properties: Array.from(new Set(units - .map((x) => { var _a; return ((_a = x.results) === null || _a === void 0 ? void 0 : _a.map((r) => r.name)) || []; }) - .flat() - .sort())), - model: { - ...model.toJSON(), - method: method.toJSON(), - }, - units, - }); - } setApplication(application) { // TODO: adjust the logic above to take into account whether units need re-rendering after version change etc. // reset units if application name changes @@ -369,7 +331,6 @@ class Subworkflow extends entity_1.InMemoryEntity { nextStep.next = unitForConvergence.flowchartId; } } -Subworkflow.usePredefinedIds = false; exports.default = Subworkflow; (0, NamedEntityMixin_1.namedEntityMixin)(Subworkflow.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Subworkflow); diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index e3745c5c..be2e17b8 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -18,7 +18,6 @@ type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & Named export type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & JobExternalContext; declare const Workflow_base: Base; export declare class Workflow extends Workflow_base { - static usePredefinedIds: boolean; static readonly defaultConfig: WorkflowSchema; static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; subworkflowInstances: Subworkflow[]; diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index 71394088..b5bbf85e 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -250,7 +250,6 @@ class Workflow extends entity_1.InMemoryEntity { } } exports.Workflow = Workflow; -Workflow.usePredefinedIds = false; Workflow.defaultConfig = default_1.default; (0, NamedEntityMixin_1.namedEntityMixin)(Workflow.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Workflow); diff --git a/dist/js/units/BaseUnit.d.ts b/dist/js/units/BaseUnit.d.ts index 8f6be42d..19fddaac 100644 --- a/dist/js/units/BaseUnit.d.ts +++ b/dist/js/units/BaseUnit.d.ts @@ -16,8 +16,6 @@ type Base = typeof InMemoryEntity & Constructor & Constructor extends BaseUnit_base implements Schema { - static usePredefinedIds: boolean; - static generateFlowChartId(name: string): any; toJSON: () => Schema & AnyObject; defaultResults: NameResultSchema[]; defaultMonitors: NameResultSchema[]; diff --git a/dist/js/units/BaseUnit.js b/dist/js/units/BaseUnit.js index 4a0e2cc2..9025d2a3 100644 --- a/dist/js/units/BaseUnit.js +++ b/dist/js/units/BaseUnit.js @@ -13,12 +13,6 @@ const BaseUnitSchemaMixin_1 = require("../generated/BaseUnitSchemaMixin"); const StatusSchemaMixin_1 = require("../generated/StatusSchemaMixin"); const RuntimeItemsUILogicMixin_1 = require("./mixins/RuntimeItemsUILogicMixin"); class BaseUnit extends entity_1.InMemoryEntity { - static generateFlowChartId(name) { - if (this.usePredefinedIds) { - return utils_1.Utils.uuid.getUUIDFromNamespace(`flowchart-${name}`); - } - return utils_1.Utils.uuid.getUUID(); - } constructor(config) { super({ results: [], @@ -28,7 +22,7 @@ class BaseUnit extends entity_1.InMemoryEntity { ...config, status: config.status || enums_1.UnitStatus.idle, statusTrack: config.statusTrack || [], - flowchartId: config.flowchartId || BaseUnit.generateFlowChartId(config.name), + flowchartId: config.flowchartId || utils_1.Utils.uuid.getUUID(), tags: config.tags || [], }); this.defaultResults = []; @@ -53,13 +47,12 @@ class BaseUnit extends entity_1.InMemoryEntity { } clone(extraContext) { const flowchartIDOverrideConfigAsExtraContext = { - flowchartId: BaseUnit.generateFlowChartId(this.name), + flowchartId: utils_1.Utils.uuid.getUUID(), ...extraContext, }; return super.clone(flowchartIDOverrideConfigAsExtraContext); } } -BaseUnit.usePredefinedIds = false; (0, TaggableMixin_1.taggableMixin)(BaseUnit.prototype); (0, HashedEntityMixin_1.hashedEntityMixin)(BaseUnit.prototype); (0, HasRepetitionMixin_1.hasRepetitionMixin)(BaseUnit.prototype); diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index 61021b1d..d9ab34c3 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -10,14 +10,8 @@ import { } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { - ApplicationSchema, - BaseMethod, - BaseModel, - JobSchema, - SubworkflowSchema, -} from "@mat3ra/esse/dist/js/types"; -import { type Method, Model, ModelFactory } from "@mat3ra/mode"; +import type { JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; +import { Model, ModelFactory } from "@mat3ra/mode"; import { setUnitLinks } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; @@ -63,8 +57,6 @@ type SubworkflowExternalContext = MaterialExternalContext & JobExternalContext; export default class Subworkflow extends (InMemoryEntity as Base) implements SubworkflowSchema { - static usePredefinedIds = false; - private ModelFactory: typeof ModelFactory; private applicationInstance: Application; @@ -91,26 +83,10 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub this.setUnits(this.units.map((cfg) => UnitFactory.createInSubworkflow(cfg))); } - static generateSubworkflowId( - name: string, - application?: ApplicationSchema, - model?: BaseModel, - method?: BaseMethod, - ) { - const appName = application?.name || ""; - const modelInfo = model ? `${model.type}-${model.subtype || ""}` : ""; - const methodInfo = method ? `${method.type}-${method.subtype || ""}` : ""; - const seed = [`subworkflow-${name}`, appName, modelInfo, methodInfo] - .filter((p) => p) - .join("-"); - - return this.usePredefinedIds ? Utils.uuid.getUUIDFromNamespace(seed) : Utils.uuid.getUUID(); - } - static get defaultConfig() { const defaultName = "New Subworkflow"; return { - _id: this.generateSubworkflowId(defaultName), + _id: Utils.uuid.getUUID(), name: defaultName, application: Application.defaultConfig, model: Model.defaultConfig, @@ -132,48 +108,6 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub }); } - /* - * @summary Used to generate initial application tree, therefore omit setting application. - */ - static fromArguments( - application: ApplicationSchema, - model: Model, - method: Method, - name: string, - units: SubworkflowSchema["units"] = [], - config = {}, - ) { - // TODO: move to standata and fix types - // @ts-ignore - const nameForIdGeneration = config.attributes?.name || name; - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { functions: _functions, attributes: _attributes, ...cleanConfig } = config; - - // Set the method on the model so it can be properly serialized - model.setMethod(method); - - return new Subworkflow({ - ...cleanConfig, - _id: Subworkflow.generateSubworkflowId(nameForIdGeneration, application, model, method), - name, - application, - properties: Array.from( - new Set( - units - .map((x) => x.results?.map((r) => r.name) || []) - .flat() - .sort(), - ), - ), - model: { - ...model.toJSON(), - method: method.toJSON(), - }, - units, - }); - } - setApplication(application: Application) { // TODO: adjust the logic above to take into account whether units need re-rendering after version change etc. // reset units if application name changes diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 90a2c152..153d3d70 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -45,8 +45,6 @@ export type WorkflowRenderContext = MaterialExternalContext & JobExternalContext; export class Workflow extends (InMemoryEntity as Base) { - static usePredefinedIds = false; - static readonly defaultConfig = defaultWorkflowConfig; static get jsonSchema() { diff --git a/src/js/units/BaseUnit.ts b/src/js/units/BaseUnit.ts index 1ab90f6b..eda45e4d 100644 --- a/src/js/units/BaseUnit.ts +++ b/src/js/units/BaseUnit.ts @@ -48,15 +48,6 @@ type Base = typeof InMemoryEntity & type Schema = WorkflowBaseUnitSchema; class BaseUnit extends (InMemoryEntity as Base) implements Schema { - static usePredefinedIds = false; - - static generateFlowChartId(name: string) { - if (this.usePredefinedIds) { - return Utils.uuid.getUUIDFromNamespace(`flowchart-${name}`); - } - return Utils.uuid.getUUID(); - } - declare toJSON: () => Schema & AnyObject; defaultResults: NameResultSchema[] = []; @@ -82,7 +73,7 @@ class BaseUnit extends (InMemoryEntity as Base) imple ...config, status: config.status || UnitStatus.idle, statusTrack: config.statusTrack || [], - flowchartId: config.flowchartId || BaseUnit.generateFlowChartId(config.name), + flowchartId: config.flowchartId || Utils.uuid.getUUID(), tags: config.tags || [], }); @@ -107,7 +98,7 @@ class BaseUnit extends (InMemoryEntity as Base) imple clone(extraContext: object) { const flowchartIDOverrideConfigAsExtraContext = { - flowchartId: BaseUnit.generateFlowChartId(this.name), + flowchartId: Utils.uuid.getUUID(), ...extraContext, }; return super.clone(flowchartIDOverrideConfigAsExtraContext); From 883c28bfe0cef77241441efddfc94573e98af5e6 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 22:08:22 +0200 Subject: [PATCH 17/30] chore: cleanup --- dist/js/Workflow.js | 2 +- src/js/Workflow.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index b5bbf85e..03406830 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -32,7 +32,7 @@ class Workflow extends entity_1.InMemoryEntity { applicationName: subworkflow.application.name, workflows: [], }; - return new Workflow(config); + return new this(config); } constructor(config) { var _a; diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 153d3d70..fb47f13f 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -66,7 +66,7 @@ export class Workflow extends (InMemoryEntity as Base) { applicationName: subworkflow.application.name, workflows: [] as WorkflowSchema[], }; - return new Workflow(config); + return new this(config); } constructor(config: WorkflowSchema & { applicationName?: string }) { From a15b0d6a98ffa33dc90e99428a8971aa92d04646 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 25 Mar 2026 13:40:15 +0200 Subject: [PATCH 18/30] chore: cleanups --- dist/js/Subworkflow.d.ts | 8 +-- dist/js/Subworkflow.js | 5 ++ dist/js/Workflow.d.ts | 4 ++ dist/js/Workflow.js | 11 ++++ dist/js/units/BaseUnit.d.ts | 5 +- dist/js/units/BaseUnit.js | 10 ++- dist/js/units/ExecutionUnit.d.ts | 88 ++++++++++++++++++++------ dist/js/units/ExecutionUnit.js | 68 ++++++++++---------- package-lock.json | 80 ++++++++++++++++++++---- package.json | 6 +- src/js/Subworkflow.ts | 7 +++ src/js/Workflow.ts | 15 +++++ src/js/units/BaseUnit.ts | 19 +++--- src/js/units/ExecutionUnit.ts | 104 +++++++++++++------------------ 14 files changed, 282 insertions(+), 148 deletions(-) diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index fd57b90e..477d695e 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -34,6 +34,7 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow unitsInstances: AnySubworkflowUnit[]; modelInstance: Model; properties: string[]; + repetition: number; static createDefault: () => Subworkflow; toJSON: () => SubworkflowSchema & AnyObject; constructor(config: SubworkflowSchema, _ModelFactory?: typeof ModelFactory); @@ -52,6 +53,7 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow properties: never[]; units: never[]; }; + setRepetition(repetition: number): void; getAsUnit(): SubworkflowUnit; setApplication(application: Application): void; setModel(model: Model): void; @@ -259,6 +261,8 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow schemaVersion?: string; name: string; isDefault?: boolean; + applicationName: string; + hasAdvancedComputeOptions?: boolean; preProcessors: { name: string; }[]; @@ -268,10 +272,6 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow monitors: { name: string; }[]; - results: { - name: string; - }[]; - hasAdvancedComputeOptions?: boolean; }; flavor: { _id?: string; diff --git a/dist/js/Subworkflow.js b/dist/js/Subworkflow.js index 65870cbf..6edf99b7 100644 --- a/dist/js/Subworkflow.js +++ b/dist/js/Subworkflow.js @@ -15,6 +15,7 @@ class Subworkflow extends entity_1.InMemoryEntity { constructor(config, _ModelFactory = mode_1.ModelFactory) { super(config); this.properties = []; + this.repetition = 0; this.ModelFactory = _ModelFactory; this.applicationInstance = new ade_1.Application(this.application); this.modelInstance = this.ModelFactory.create({ @@ -34,6 +35,10 @@ class Subworkflow extends entity_1.InMemoryEntity { units: [], }; } + setRepetition(repetition) { + this.repetition = repetition; + this.unitsInstances.forEach((u) => u.setRepetition(repetition)); + } getAsUnit() { return new units_1.SubworkflowUnit({ type: enums_1.UnitType.subworkflow, diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index be2e17b8..fb7004b3 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -23,6 +23,10 @@ export declare class Workflow extends Workflow_base { subworkflowInstances: Subworkflow[]; private unitInstances; private workflowInstances; + repetition: number; + totalRepetitions: number; + setTotalRepetitions(totalRepetition: number): void; + setRepetition(repetition: number): void; static fromSubworkflow(subworkflow: Subworkflow): Workflow; constructor(config: WorkflowSchema & { applicationName?: string; diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index 03406830..aef68597 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -23,6 +23,15 @@ class Workflow extends entity_1.InMemoryEntity { static get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("workflow"); } + setTotalRepetitions(totalRepetition) { + this.totalRepetitions = totalRepetition; + } + setRepetition(repetition) { + this.repetition = repetition; + this.unitInstances.forEach((u) => u.setRepetition(repetition)); + this.subworkflowInstances.forEach((sw) => sw.setRepetition(repetition)); + this.workflowInstances.forEach((wf) => wf.setRepetition(repetition)); + } static fromSubworkflow(subworkflow) { const config = { name: subworkflow.name, @@ -40,6 +49,8 @@ class Workflow extends entity_1.InMemoryEntity { ...config, _id: config._id || utils_1.Utils.uuid.getUUID(), }); + this.repetition = 0; + this.totalRepetitions = 1; this.subworkflowInstances = this.subworkflows.map((x) => new Subworkflow_1.default(x)); this.workflowInstances = ((_a = this.workflows) === null || _a === void 0 ? void 0 : _a.map((x) => new Workflow(x))) || []; this.setUnits(this.units.map((unit) => factory_1.UnitFactory.createInWorkflow(unit))); diff --git a/dist/js/units/BaseUnit.d.ts b/dist/js/units/BaseUnit.d.ts index 19fddaac..fb557680 100644 --- a/dist/js/units/BaseUnit.d.ts +++ b/dist/js/units/BaseUnit.d.ts @@ -1,7 +1,6 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { type Defaultable } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; import { HashedEntity } from "@mat3ra/code/dist/js/entity/mixins/HashedEntityMixin"; -import { HasRepetition } from "@mat3ra/code/dist/js/entity/mixins/HasRepetitionMixin"; import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import { type RuntimeItems } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import { Taggable } from "@mat3ra/code/dist/js/entity/mixins/TaggableMixin"; @@ -12,7 +11,7 @@ import type { StatusSchema, WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/ import { type BaseUnitSchemaMixin } from "../generated/BaseUnitSchemaMixin"; import { type StatusSchemaMixin } from "../generated/StatusSchemaMixin"; import { type RuntimeItemsUILogic } from "./mixins/RuntimeItemsUILogicMixin"; -type Base = typeof InMemoryEntity & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; +type Base = typeof InMemoryEntity & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor & Constructor; type Schema = WorkflowBaseUnitSchema; declare const BaseUnit_base: Base; declare class BaseUnit extends BaseUnit_base implements Schema { @@ -24,6 +23,7 @@ declare class BaseUnit extends BaseUnit_base implemen allowedResults: NameResultSchema[]; allowedMonitors: NameResultSchema[]; allowedPostProcessors: NameResultSchema[]; + repetition: number; constructor(config: Partial & Pick); get lastStatusUpdate(): { trackedAt: number; @@ -33,5 +33,6 @@ declare class BaseUnit extends BaseUnit_base implemen getHashObject(): object; isInStatus(status: StatusSchema["status"]): boolean; clone(extraContext: object): this; + setRepetition(repetition: number): void; } export default BaseUnit; diff --git a/dist/js/units/BaseUnit.js b/dist/js/units/BaseUnit.js index 9025d2a3..7345f276 100644 --- a/dist/js/units/BaseUnit.js +++ b/dist/js/units/BaseUnit.js @@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); const HashedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/HashedEntityMixin"); -const HasRepetitionMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/HasRepetitionMixin"); const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); const TaggableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/TaggableMixin"); @@ -32,10 +31,13 @@ class BaseUnit extends entity_1.InMemoryEntity { this.allowedResults = []; this.allowedMonitors = []; this.allowedPostProcessors = []; + this.repetition = 0; this._initRuntimeItems(config); } get lastStatusUpdate() { - const statusTrack = (this.statusTrack || []).filter((s) => (s.repetition || 0) === this.repetition); + const statusTrack = (this.statusTrack || []).filter((s) => { + return (s.repetition || 0) === this.repetition; + }); const sortedStatusTrack = statusTrack.sort((a, b) => a.trackedAt - b.trackedAt); // lodash.sortBy(statusTrack, (x) => x.trackedAt); return sortedStatusTrack[sortedStatusTrack.length - 1]; } @@ -52,10 +54,12 @@ class BaseUnit extends entity_1.InMemoryEntity { }; return super.clone(flowchartIDOverrideConfigAsExtraContext); } + setRepetition(repetition) { + this.repetition = repetition; + } } (0, TaggableMixin_1.taggableMixin)(BaseUnit.prototype); (0, HashedEntityMixin_1.hashedEntityMixin)(BaseUnit.prototype); -(0, HasRepetitionMixin_1.hasRepetitionMixin)(BaseUnit.prototype); (0, RuntimeItemsMixin_1.runtimeItemsMixin)(BaseUnit.prototype); (0, RuntimeItemsUILogicMixin_1.runtimeItemsUILogicMixin)(BaseUnit.prototype); (0, BaseUnitSchemaMixin_1.baseUnitSchemaMixin)(BaseUnit.prototype); diff --git a/dist/js/units/ExecutionUnit.d.ts b/dist/js/units/ExecutionUnit.d.ts index e35257df..10034099 100644 --- a/dist/js/units/ExecutionUnit.d.ts +++ b/dist/js/units/ExecutionUnit.d.ts @@ -1,7 +1,7 @@ -import { Application, Executable, Flavor } from "@mat3ra/ade"; +import { Flavor } from "@mat3ra/ade"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ApplicationSchema, ExecutableSchema, ExecutionUnitSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; +import type { ExecutionUnitSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type ExternalContext } from "../context/providers"; import type ConvergenceParameter from "../convergence/ConvergenceParameter"; import { type ExecutionUnitSchemaMixin } from "../generated/ExecutionUnitSchemaMixin"; @@ -9,38 +9,86 @@ import BaseUnit from "./BaseUnit"; import ExecutionUnitInput from "./ExecutionUnitInput"; type Schema = ExecutionUnitSchema; type Base = typeof BaseUnit & Constructor; -interface SetApplicationProps { - application: Application | ApplicationSchema; - executable?: Executable | ExecutableSchema; - flavor?: Flavor | FlavorSchema; -} -type SetExecutableProps = Pick; +type ExecutionUnitConfig = Omit & SetExecutableProps; +type SetApplicationProps = Pick & SetExecutableProps; +type SetExecutableProps = Partial>; declare const ExecutionUnit_base: Base; declare class ExecutionUnit extends ExecutionUnit_base implements Schema { - applicationInstance: Application; - executableInstance: Executable; - flavorInstance: Flavor; inputInstances: ExecutionUnitInput[]; renderingContext: Partial; toJSON: () => Schema & AnyObject; _json: Schema & AnyObject; - constructor(config: Schema); + constructor(config: ExecutionUnitConfig); setApplication({ application, executable, flavor }: SetApplicationProps): void; setExecutable({ executable, flavor }: SetExecutableProps): void; setFlavor(flavor?: Flavor | FlavorSchema): void; setDefaultInput(): void; + render(externalContext: ExternalContext): void; getContextProvidersInstances(externalContext: ExternalContext): import("../context/providers").AnyContextProvider[]; addConvergenceContext(parameter: ConvergenceParameter, externalContext: ExternalContext): void; - render(externalContext: ExternalContext): void; private saveContext; - /** - * @summary Calculates hash on unit-specific fields. - * The meaningful fields of processing unit are operation, flavor and input at the moment. - */ getHashObject(): { - application: {}; - executable: {}; - flavor: {} | undefined; + application: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + shortName: string; + summary: string; + version: string; + build: string; + hasAdvancedComputeOptions?: boolean; + isLicensed?: boolean; + }; + executable: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + applicationName: string; + hasAdvancedComputeOptions?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + }; + flavor: { + _id?: string; + slug?: string; + systemName?: string; + schemaVersion?: string; + name: string; + isDefault?: boolean; + preProcessors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + executableName?: string; + applicationName?: string; + input: { + templateId?: string; + templateName?: string; + name?: string; + }[]; + supportedApplicationVersions?: string[]; + }; input: string; }; } diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index 2b4dca14..e8d11788 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -const ade_1 = require("@mat3ra/ade"); const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); const providers_1 = require("../context/providers"); @@ -22,36 +21,46 @@ class ExecutionUnit extends BaseUnit_1.default { this.name = this.name || ((_a = this.flavor) === null || _a === void 0 ? void 0 : _a.name) || ""; } setApplication({ application, executable, flavor }) { - this.applicationInstance = new ade_1.Application(standata.getApplication(application)); - this.setProp("application", this.applicationInstance.toJSON()); + this.setProp("application", application); this.setExecutable({ executable, flavor }); } setExecutable({ executable, flavor }) { const { executable: executablePlain } = standata.getExecutableAndFlavorByName(this.application.name); - this.executableInstance = new ade_1.Executable(executable || executablePlain); - this.allowedResults = this.executableInstance.results; - this.allowedMonitors = this.executableInstance.monitors; - this.allowedPostProcessors = this.executableInstance.postProcessors; - this.setProp("executable", this.executableInstance.toJSON()); + const finalExecutable = executable || executablePlain; + // TODO: clirify how allowed results should work + // this.allowedResults = finalExecutable.results; + this.allowedMonitors = finalExecutable.monitors; + this.allowedPostProcessors = finalExecutable.postProcessors; + this.setProp("executable", finalExecutable); this.setFlavor(flavor); } setFlavor(flavor) { - const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName(this.application.name, this.executable.name); - this.flavorInstance = new ade_1.Flavor(flavor || defaultFlavor); - this.defaultMonitors = this.flavorInstance.monitors; - this.defaultResults = this.flavorInstance.results; - this.defaultPostProcessors = this.flavorInstance.postProcessors; - this.setProp("flavor", this.flavorInstance.toJSON()); + const { executable, application } = this; + const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName(application.name, executable.name); + const finalFlavor = flavor || defaultFlavor; + this.defaultMonitors = finalFlavor.monitors; + this.defaultResults = finalFlavor.results; + this.defaultPostProcessors = finalFlavor.postProcessors; + this.setProp("flavor", finalFlavor); this.setRuntimeItemsToDefaultValues(); this.setDefaultInput(); } setDefaultInput() { - const inputs = standata.getInput(this.flavorInstance); - this.inputInstances = inputs.map(ExecutionUnitInput_1.default.createFromTemplate); + this.inputInstances = standata + .getInput(this.flavor) + .map(ExecutionUnitInput_1.default.createFromTemplate); + } + render(externalContext) { + const contextProviders = this.getContextProvidersInstances(externalContext); + const fullContext = contextProviders.map((provider) => provider.getContextItemData()); + this.saveContext(fullContext, externalContext); + this.input = this.inputInstances.map((input) => { + return input.render(this.renderingContext).toJSON(); + }); } getContextProvidersInstances(externalContext) { const uniqueContextProviderNames = [ - ...new Set(this.inputInstances + ...new Set(this.input .map((input) => { return input.template.contextProviders.map((provider) => { return provider.name; @@ -80,14 +89,6 @@ class ExecutionUnit extends BaseUnit_1.default { }); this.saveContext(fullContext, externalContext); } - render(externalContext) { - const contextProviders = this.getContextProvidersInstances(externalContext); - const fullContext = contextProviders.map((provider) => provider.getContextItemData()); - this.saveContext(fullContext, externalContext); - this.input = this.inputInstances.map((input) => { - return input.render(this.renderingContext).toJSON(); - }); - } saveContext(fullContext, externalContext) { // persistent context this.context = fullContext.filter((c) => c.isEdited); @@ -96,20 +97,15 @@ class ExecutionUnit extends BaseUnit_1.default { ...externalContext, }; } - /** - * @summary Calculates hash on unit-specific fields. - * The meaningful fields of processing unit are operation, flavor and input at the moment. - */ getHashObject() { + const { application, executable, flavor, input } = this.toJSON(); return { ...super.getHashObject(), - application: utils_1.Utils.specific.removeTimestampableKeysFromConfig(this.applicationInstance.toJSON()), - executable: utils_1.Utils.specific.removeTimestampableKeysFromConfig(this.executableInstance.toJSON()), - flavor: this.flavorInstance - ? utils_1.Utils.specific.removeTimestampableKeysFromConfig(this.flavorInstance.toJSON()) - : undefined, - input: utils_1.Utils.hash.calculateHashFromObject(this.input.map((i) => { - return utils_1.Utils.str.removeEmptyLinesFromString(utils_1.Utils.str.removeCommentsFromSourceCode(i.template.content)); + application, + executable, + flavor, + input: utils_1.Utils.hash.calculateHashFromObject(input.map(({ template }) => { + return utils_1.Utils.str.removeEmptyLinesFromString(utils_1.Utils.str.removeCommentsFromSourceCode(template.content)); })), }; } diff --git a/package-lock.json b/package-lock.json index 9961e7e5..3923fdde 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,11 +18,11 @@ "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#b0f35365bdc76c284730f17cbc786fdb43726c0a", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#e8342d4d87a7a6c0774c43c259535481182933e7", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "@types/nunjucks": "^3.2.6", @@ -2437,8 +2437,8 @@ }, "node_modules/@mat3ra/code": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#b0f35365bdc76c284730f17cbc786fdb43726c0a", - "integrity": "sha512-M1Cd5r2KWHcpQ7Lw6drqvyrSQhQtATDegdakqrbzEJ5+V4n2XAHxyutVI5qQ+kYhdFuU19gXmkwz8X/SSwENFQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", + "integrity": "sha512-FLGHrGSba7qj1FnOnvDIaevDPGRJ2xVODFrDvsnF2Qqj/GRER+pb+e4DTBaBK7+CvtJapq2wJ6yU6BMtVabMtw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2475,8 +2475,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#66ac7dcfd993cc492644e158b0b422b2ddbdacec", - "integrity": "sha512-MlG1UccCt4e1o3UK4wO5fg5hlgwekDdXwMtMnWw3n+ICNfyTzIS2xpkP/GhxZhS/JagxsGxah9YNcr7MZaN8MA==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "integrity": "sha512-qQl96uFmRcA1bP7fxQjSIbt5YtAJ5tcWQEQLgtcPXb1k6COrrc/HqkI5a8QyMxC8NclNosIAzM9myj5sQ+AK0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2489,7 +2489,7 @@ "@babel/preset-typescript": "^7.27.0", "@babel/register": "^7.25.9", "@babel/runtime-corejs3": "^7.27.0", - "@mat3ra/utils": "^2025.11.20-0", + "@mat3ra/utils": "2026.3.7-0", "@types/chai": "^4.3.20", "@types/js-yaml": "^4.0.9", "@types/json-schema-merge-allof": "^0.6.5", @@ -2749,7 +2749,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils": { - "version": "2025.11.20-0", + "version": "2026.3.7-0", + "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2026.3.7-0.tgz", + "integrity": "sha512-qUxsyzo4s1G8MjHYbF+QHdXq0KgymJ3ey3x+dswCak69WiB0w8OuO5IOqyXS0RWoEB2mj7Ccm4ZN7uTSWZLHxw==", "dev": true, "license": "ISC", "dependencies": { @@ -2779,6 +2781,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli": { "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", + "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2807,11 +2811,15 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli/node_modules/convert-source-map": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, "license": "MIT" }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core": { "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2841,6 +2849,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -2849,6 +2859,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser": { "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", + "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2866,6 +2878,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -2874,6 +2888,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, "license": "MIT", "dependencies": { @@ -2890,6 +2906,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -2898,6 +2916,9 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "license": "MIT", "dependencies": { @@ -2913,6 +2934,9 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, "license": "MIT", "dependencies": { @@ -2930,6 +2954,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env": { "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", "dev": true, "license": "MIT", "dependencies": { @@ -3017,6 +3043,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3025,6 +3053,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-modules": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", "dev": true, "license": "MIT", "dependencies": { @@ -3040,6 +3070,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-react": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "dev": true, "license": "MIT", "dependencies": { @@ -3059,6 +3091,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/runtime-corejs3": { "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", + "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -3071,6 +3105,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3084,6 +3120,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3092,6 +3130,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs3": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "dev": true, "license": "MIT", "dependencies": { @@ -3104,6 +3144,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "license": "MIT", "dependencies": { @@ -3115,6 +3157,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/commander": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", "engines": { @@ -3122,7 +3166,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/semver": { - "version": "7.7.3", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3178,6 +3224,8 @@ }, "node_modules/@mat3ra/esse/node_modules/complex.js": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", + "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", "dev": true, "license": "MIT", "engines": { @@ -3195,6 +3243,8 @@ }, "node_modules/@mat3ra/esse/node_modules/fraction.js": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", "dev": true, "license": "MIT", "engines": { @@ -3207,6 +3257,8 @@ }, "node_modules/@mat3ra/esse/node_modules/mathjs": { "version": "12.4.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", + "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3229,6 +3281,8 @@ }, "node_modules/@mat3ra/esse/node_modules/typed-function": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", "dev": true, "license": "MIT", "engines": { @@ -3237,6 +3291,8 @@ }, "node_modules/@mat3ra/esse/node_modules/typescript": { "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3435,8 +3491,8 @@ }, "node_modules/@mat3ra/standata": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#e8342d4d87a7a6c0774c43c259535481182933e7", - "integrity": "sha512-kRLClk4Yn46yXwa00BSYLgI5GaVyda96/lo+HvxSVXqh/1lwNm3H3xp5sOa/GlwQUq/5EohCVxzXt/jhMVnnrg==", + "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", + "integrity": "sha512-Kl2E6lm1DhVQ01d5z8+FlJpnIrzP1iYZ/rpRBE9IM+X4SvW6VRYWWAS+u2TFMrGrNSBiGxE0mwlwLimD45X8pw==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index d83d7c02..872b179f 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ "@types/nunjucks": "^3.2.6", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#b0f35365bdc76c284730f17cbc786fdb43726c0a", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#66ac7dcfd993cc492644e158b0b422b2ddbdacec", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#e8342d4d87a7a6c0774c43c259535481182933e7", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "chai": "^4.3.4", diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index d9ab34c3..cb51562d 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -67,6 +67,8 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub properties: string[] = []; + repetition = 0; + declare static createDefault: () => Subworkflow; declare toJSON: () => SubworkflowSchema & AnyObject; @@ -95,6 +97,11 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub }; } + setRepetition(repetition: number) { + this.repetition = repetition; + this.unitsInstances.forEach((u) => u.setRepetition(repetition)); + } + getAsUnit() { return new SubworkflowUnit({ type: UnitType.subworkflow, diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index fb47f13f..3a701665 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -57,6 +57,21 @@ export class Workflow extends (InMemoryEntity as Base) { private workflowInstances: Workflow[]; + repetition = 0; + + totalRepetitions = 1; + + setTotalRepetitions(totalRepetition: number) { + this.totalRepetitions = totalRepetition; + } + + setRepetition(repetition: number) { + this.repetition = repetition; + this.unitInstances.forEach((u) => u.setRepetition(repetition)); + this.subworkflowInstances.forEach((sw) => sw.setRepetition(repetition)); + this.workflowInstances.forEach((wf) => wf.setRepetition(repetition)); + } + static fromSubworkflow(subworkflow: Subworkflow) { const config = { name: subworkflow.name, diff --git a/src/js/units/BaseUnit.ts b/src/js/units/BaseUnit.ts index eda45e4d..274fc09e 100644 --- a/src/js/units/BaseUnit.ts +++ b/src/js/units/BaseUnit.ts @@ -7,10 +7,6 @@ import { HashedEntity, hashedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/HashedEntityMixin"; -import { - HasRepetition, - hasRepetitionMixin, -} from "@mat3ra/code/dist/js/entity/mixins/HasRepetitionMixin"; import { type NamedEntity, namedEntityMixin, @@ -37,7 +33,7 @@ import { type Base = typeof InMemoryEntity & Constructor & Constructor & - Constructor & + // Constructor & Constructor & Constructor & Constructor & @@ -64,6 +60,8 @@ class BaseUnit extends (InMemoryEntity as Base) imple allowedPostProcessors: NameResultSchema[] = []; + repetition = 0; + constructor(config: Partial & Pick) { super({ results: [], @@ -81,9 +79,9 @@ class BaseUnit extends (InMemoryEntity as Base) imple } get lastStatusUpdate() { - const statusTrack = (this.statusTrack || []).filter( - (s) => (s.repetition || 0) === this.repetition, - ); + const statusTrack = (this.statusTrack || []).filter((s) => { + return (s.repetition || 0) === this.repetition; + }); const sortedStatusTrack = statusTrack.sort((a, b) => a.trackedAt - b.trackedAt); // lodash.sortBy(statusTrack, (x) => x.trackedAt); return sortedStatusTrack[sortedStatusTrack.length - 1]; } @@ -103,11 +101,14 @@ class BaseUnit extends (InMemoryEntity as Base) imple }; return super.clone(flowchartIDOverrideConfigAsExtraContext); } + + setRepetition(repetition: number) { + this.repetition = repetition; + } } taggableMixin(BaseUnit.prototype); hashedEntityMixin(BaseUnit.prototype); -hasRepetitionMixin(BaseUnit.prototype); runtimeItemsMixin(BaseUnit.prototype); runtimeItemsUILogicMixin(BaseUnit.prototype); baseUnitSchemaMixin(BaseUnit.prototype); diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index eb45f070..c34bb38a 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -1,10 +1,8 @@ -import { Application, Executable, Flavor } from "@mat3ra/ade"; +import { Flavor } from "@mat3ra/ade"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { - ApplicationSchema, ContextItemSchema, - ExecutableSchema, ExecutionUnitSchema, FlavorSchema, } from "@mat3ra/esse/dist/js/types"; @@ -23,23 +21,15 @@ import ExecutionUnitInput from "./ExecutionUnitInput"; type Schema = ExecutionUnitSchema; type Base = typeof BaseUnit & Constructor; -interface SetApplicationProps { - application: Application | ApplicationSchema; - executable?: Executable | ExecutableSchema; - flavor?: Flavor | FlavorSchema; -} +type ExecutionUnitConfig = Omit & SetExecutableProps; + +type SetApplicationProps = Pick & SetExecutableProps; -type SetExecutableProps = Pick; +type SetExecutableProps = Partial>; const standata = new ApplicationStandata(); class ExecutionUnit extends (BaseUnit as Base) implements Schema { - applicationInstance!: Application; - - executableInstance!: Executable; - - flavorInstance!: Flavor; - inputInstances: ExecutionUnitInput[] = []; renderingContext: Partial = {}; @@ -48,7 +38,7 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { declare _json: Schema & AnyObject; - constructor(config: Schema) { + constructor(config: ExecutionUnitConfig) { super(config); const { application, executable, flavor } = config; @@ -59,8 +49,7 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { } setApplication({ application, executable, flavor }: SetApplicationProps) { - this.applicationInstance = new Application(standata.getApplication(application)); - this.setProp("application", this.applicationInstance.toJSON()); + this.setProp("application", application); this.setExecutable({ executable, flavor }); } @@ -69,40 +58,56 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { this.application.name, ); - this.executableInstance = new Executable(executable || executablePlain); - this.allowedResults = this.executableInstance.results; - this.allowedMonitors = this.executableInstance.monitors; - this.allowedPostProcessors = this.executableInstance.postProcessors; + const finalExecutable = executable || executablePlain; - this.setProp("executable", this.executableInstance.toJSON()); + // TODO: clirify how allowed results should work + // this.allowedResults = finalExecutable.results; + this.allowedMonitors = finalExecutable.monitors; + this.allowedPostProcessors = finalExecutable.postProcessors; + + this.setProp("executable", finalExecutable); this.setFlavor(flavor); } setFlavor(flavor?: Flavor | FlavorSchema) { + const { executable, application } = this; const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName( - this.application.name, - this.executable.name, + application.name, + executable.name, ); - this.flavorInstance = new Flavor(flavor || defaultFlavor); - this.defaultMonitors = this.flavorInstance.monitors; - this.defaultResults = this.flavorInstance.results; - this.defaultPostProcessors = this.flavorInstance.postProcessors; + const finalFlavor = flavor || defaultFlavor; - this.setProp("flavor", this.flavorInstance.toJSON()); + this.defaultMonitors = finalFlavor.monitors; + this.defaultResults = finalFlavor.results; + this.defaultPostProcessors = finalFlavor.postProcessors; + + this.setProp("flavor", finalFlavor); this.setRuntimeItemsToDefaultValues(); this.setDefaultInput(); } setDefaultInput() { - const inputs = standata.getInput(this.flavorInstance); - this.inputInstances = inputs.map(ExecutionUnitInput.createFromTemplate); + this.inputInstances = standata + .getInput(this.flavor) + .map(ExecutionUnitInput.createFromTemplate); + } + + render(externalContext: ExternalContext) { + const contextProviders = this.getContextProvidersInstances(externalContext); + const fullContext = contextProviders.map((provider) => provider.getContextItemData()); + + this.saveContext(fullContext, externalContext); + + this.input = this.inputInstances.map((input) => { + return input.render(this.renderingContext).toJSON(); + }); } getContextProvidersInstances(externalContext: ExternalContext) { const uniqueContextProviderNames = [ ...new Set( - this.inputInstances + this.input .map((input) => { return input.template.contextProviders.map((provider) => { return provider.name; @@ -138,17 +143,6 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { this.saveContext(fullContext, externalContext); } - render(externalContext: ExternalContext) { - const contextProviders = this.getContextProvidersInstances(externalContext); - const fullContext = contextProviders.map((provider) => provider.getContextItemData()); - - this.saveContext(fullContext, externalContext); - - this.input = this.inputInstances.map((input) => { - return input.render(this.renderingContext).toJSON(); - }); - } - private saveContext(fullContext: ContextItemSchema[], externalContext: ExternalContext) { // persistent context this.context = fullContext.filter((c) => c.isEdited); @@ -159,26 +153,18 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { }; } - /** - * @summary Calculates hash on unit-specific fields. - * The meaningful fields of processing unit are operation, flavor and input at the moment. - */ getHashObject() { + const { application, executable, flavor, input } = this.toJSON(); + return { ...super.getHashObject(), - application: Utils.specific.removeTimestampableKeysFromConfig( - this.applicationInstance.toJSON(), - ), - executable: Utils.specific.removeTimestampableKeysFromConfig( - this.executableInstance.toJSON(), - ), - flavor: this.flavorInstance - ? Utils.specific.removeTimestampableKeysFromConfig(this.flavorInstance.toJSON()) - : undefined, + application, + executable, + flavor, input: Utils.hash.calculateHashFromObject( - this.input.map((i) => { + input.map(({ template }) => { return Utils.str.removeEmptyLinesFromString( - Utils.str.removeCommentsFromSourceCode(i.template.content), + Utils.str.removeCommentsFromSourceCode(template.content), ); }), ), From a659ac4d48b64bdbca4ab1d7c787baf2192c9be9 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 25 Mar 2026 16:24:48 +0200 Subject: [PATCH 19/30] chore: update deps --- dist/js/workflows/utils.d.ts | 9 -- dist/js/workflows/utils.js | 37 ------- package-lock.json | 190 +++++++++++++++++++++++++++++++++-- package.json | 6 +- 4 files changed, 182 insertions(+), 60 deletions(-) delete mode 100644 dist/js/workflows/utils.d.ts delete mode 100644 dist/js/workflows/utils.js diff --git a/dist/js/workflows/utils.d.ts b/dist/js/workflows/utils.d.ts deleted file mode 100644 index 39cb2afc..00000000 --- a/dist/js/workflows/utils.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; -/** - * @summary set the head of an array of units - */ -export declare function setUnitsHead(units: T[]): T[]; -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -export declare function setNextLinks(units: T[]): T[]; diff --git a/dist/js/workflows/utils.js b/dist/js/workflows/utils.js deleted file mode 100644 index 48d5d7b9..00000000 --- a/dist/js/workflows/utils.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.setUnitsHead = setUnitsHead; -exports.setNextLinks = setNextLinks; -/** - * @summary set the head of an array of units - */ -function setUnitsHead(units) { - if (units.length > 0) { - units[0].head = true; - for (let i = 1; i < units.length; i++) { - units[i].head = false; - } - } - return units; -} -// TODO: fix setNextLinks on unit removal and convergence logic. -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -function setNextLinks(units) { - var _a; - const flowchartIds = units.map((u) => u.flowchartId); - for (let i = 0; i < units.length - 1; i++) { - if (!units[i].next) { - // newly added units don't have next set yet => set it - units[i].next = units[i + 1].flowchartId; - if (i > 0) - units[i - 1].next = units[i].flowchartId; - } - else if (!flowchartIds.includes((_a = units[i].next) !== null && _a !== void 0 ? _a : "")) { - // newly removed units may create broken next links => fix it - units[i].next = units[i + 1].flowchartId; - } - } - return units; -} diff --git a/package-lock.json b/package-lock.json index 3923fdde..5a352a8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,11 @@ }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", + "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#0099ff1695e122c7c95183413ddf42aed809c7e4", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", - "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", - "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", + "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", @@ -2417,8 +2417,8 @@ }, "node_modules/@mat3ra/ade": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", - "integrity": "sha512-6c0/WS3y8i1Su1PDiIQKWkAktlFlJN8etFHGVUmYBWEwb7yFlg4fGccvOpLAhqga5Yk/SPcA7NEuMB+BwnpyXQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/ade.git#0099ff1695e122c7c95183413ddf42aed809c7e4", + "integrity": "sha512-FrIeaxKP6fHKtFsiuxguX2scf4EHIqdhiMpkQd1Bj+LElNek9U52k2DZprp8tUWCU3ABVHOD/pcC5sAzAe5KDw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3305,8 +3305,8 @@ }, "node_modules/@mat3ra/made": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", - "integrity": "sha512-07+f5AUKW1SpkftRqr84/s/KSP114PmuT5cAH30Pn+V3OTIfQrvf5vBWuRjYuoDg/HK2UZzqmv2FE/dY43gfTw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", + "integrity": "sha512-jnMwm1Nx61jlD1MDKxnfblN6rriYSn+UEcqxSW7EjOUB+2wJUoGyeda0pA8jfdoKHmO5JvdyPMsokt3Ngmck8g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3455,8 +3455,8 @@ }, "node_modules/@mat3ra/mode": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", - "integrity": "sha512-UqkOxMT4q3BrhiTanNggifYtj9aLiD2W0VArUZoE64/65CwQjXHQfw369TunOGUX0RUTaN7TTBchyEgbSNBfbw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", + "integrity": "sha512-tQspvF/q/pUYxbpKcZaDbW1Um0REF4MUdtEaWvZuiOwt17iRi++Q98S8VSFCOIbyiJg9ibdbzoSedo9Mus4wIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3468,6 +3468,7 @@ "@babel/preset-react": "7.16.7", "@babel/register": "^7.16.0", "@babel/runtime-corejs3": "7.16.8", + "@mat3ra/utils": "^2026.3.2-0", "@types/lodash": "^4.14.202", "@types/node": "^20.11.30", "@types/underscore": "^1.11.14", @@ -3485,8 +3486,175 @@ }, "peerDependencies": { "@mat3ra/code": "*", - "@mat3ra/esse": "*", - "@mat3ra/standata": "*" + "@mat3ra/esse": "*" + } + }, + "node_modules/@mat3ra/mode/node_modules/@mat3ra/utils": { + "version": "2026.3.2-0", + "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2026.3.2-0.tgz", + "integrity": "sha512-lZcG/gsiA35wqGTqGiXcZCwfEG3hqoIVHNhSquKO2aPhmJfne4CJEg+J/QpaO2zbgOXB+hA+L36HcTkpLQCs0A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@babel/cli": "7.16.0", + "@babel/core": "7.24.1", + "@babel/eslint-parser": "7.16.3", + "@babel/plugin-proposal-class-properties": "7.16.0", + "@babel/preset-env": "7.16.4", + "@babel/preset-react": "7.16.7", + "@babel/preset-typescript": "^7.22.5", + "@babel/register": "^7.16.0", + "@babel/runtime-corejs3": "7.16.8", + "crypto-js": "^4.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "mathjs": "12.4.1", + "semver": "^7.5.3", + "ts-node": "^10.9.1", + "typescript": "^4.5.5", + "underscore": "^1.13.3", + "underscore.string": "^3.3.4", + "uuid": "8.3.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mat3ra/mode/node_modules/@mat3ra/utils/node_modules/@babel/core": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mat3ra/mode/node_modules/@mat3ra/utils/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/mode/node_modules/@mat3ra/utils/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mat3ra/mode/node_modules/@mat3ra/utils/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@mat3ra/mode/node_modules/complex.js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", + "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@mat3ra/mode/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@mat3ra/mode/node_modules/fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@mat3ra/mode/node_modules/mathjs": { + "version": "12.4.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", + "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.24.0", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mat3ra/mode/node_modules/typed-function": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" } }, "node_modules/@mat3ra/standata": { diff --git a/package.json b/package.json index 872b179f..8708a84f 100644 --- a/package.json +++ b/package.json @@ -41,11 +41,11 @@ "devDependencies": { "@types/nunjucks": "^3.2.6", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", + "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#0099ff1695e122c7c95183413ddf42aed809c7e4", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", - "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", - "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", + "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", From c9e2a0f3f9d8092e4480dd7d0c964931ad798f2a Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 25 Mar 2026 20:32:13 +0200 Subject: [PATCH 20/30] chore: improve types --- dist/js/Workflow.d.ts | 6 +++--- dist/js/Workflow.js | 2 +- src/js/Workflow.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index fb7004b3..6af66a91 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -17,7 +17,7 @@ type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & Named /** Context passed to Workflow.render() before workflow reference is injected for subworkflows. */ export type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalContext & MaterialsSetExternalContext & JobExternalContext; declare const Workflow_base: Base; -export declare class Workflow extends Workflow_base { +export declare class Workflow extends Workflow_base implements WorkflowSchema { static readonly defaultConfig: WorkflowSchema; static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; subworkflowInstances: Subworkflow[]; @@ -31,8 +31,8 @@ export declare class Workflow extends Workflow_base { constructor(config: WorkflowSchema & { applicationName?: string; }); - get workflows(): WorkflowSchema[] | undefined; - set workflows(value: WorkflowSchema[] | undefined); + get workflows(): WorkflowSchema[]; + set workflows(value: WorkflowSchema[]); addSubworkflow(subworkflow: Subworkflow, head?: boolean, index?: number): void; removeSubworkflow(id: string): void; setUnits(arr: AnyWorkflowUnit[]): void; diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index aef68597..a8f43c45 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -56,7 +56,7 @@ class Workflow extends entity_1.InMemoryEntity { this.setUnits(this.units.map((unit) => factory_1.UnitFactory.createInWorkflow(unit))); } get workflows() { - return this.prop("workflows"); + return this.requiredProp("workflows"); } set workflows(value) { this.setProp("workflows", value); diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 3a701665..388efb38 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -44,7 +44,7 @@ export type WorkflowRenderContext = MaterialExternalContext & MaterialsSetExternalContext & JobExternalContext; -export class Workflow extends (InMemoryEntity as Base) { +export class Workflow extends (InMemoryEntity as Base) implements WorkflowSchema { static readonly defaultConfig = defaultWorkflowConfig; static get jsonSchema() { @@ -96,10 +96,10 @@ export class Workflow extends (InMemoryEntity as Base) { } get workflows() { - return this.prop("workflows"); + return this.requiredProp("workflows"); } - set workflows(value: WorkflowSchema[] | undefined) { + set workflows(value: WorkflowSchema[]) { this.setProp("workflows", value); } From b6fc703638f9e083454cc987a0460d7327488dd7 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 26 Mar 2026 15:28:09 +0200 Subject: [PATCH 21/30] chore: remove allowed* properties --- dist/js/units/BaseUnit.d.ts | 3 --- dist/js/units/BaseUnit.js | 3 --- dist/js/units/ExecutionUnit.js | 4 ---- src/js/units/BaseUnit.ts | 6 ------ src/js/units/ExecutionUnit.ts | 5 ----- 5 files changed, 21 deletions(-) diff --git a/dist/js/units/BaseUnit.d.ts b/dist/js/units/BaseUnit.d.ts index fb557680..f5720e1b 100644 --- a/dist/js/units/BaseUnit.d.ts +++ b/dist/js/units/BaseUnit.d.ts @@ -20,9 +20,6 @@ declare class BaseUnit extends BaseUnit_base implemen defaultMonitors: NameResultSchema[]; defaultPostProcessors: NameResultSchema[]; defaultPreProcessors: NameResultSchema[]; - allowedResults: NameResultSchema[]; - allowedMonitors: NameResultSchema[]; - allowedPostProcessors: NameResultSchema[]; repetition: number; constructor(config: Partial & Pick); get lastStatusUpdate(): { diff --git a/dist/js/units/BaseUnit.js b/dist/js/units/BaseUnit.js index 7345f276..af44917b 100644 --- a/dist/js/units/BaseUnit.js +++ b/dist/js/units/BaseUnit.js @@ -28,9 +28,6 @@ class BaseUnit extends entity_1.InMemoryEntity { this.defaultMonitors = []; this.defaultPostProcessors = []; this.defaultPreProcessors = []; - this.allowedResults = []; - this.allowedMonitors = []; - this.allowedPostProcessors = []; this.repetition = 0; this._initRuntimeItems(config); } diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index e8d11788..5b643518 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -27,10 +27,6 @@ class ExecutionUnit extends BaseUnit_1.default { setExecutable({ executable, flavor }) { const { executable: executablePlain } = standata.getExecutableAndFlavorByName(this.application.name); const finalExecutable = executable || executablePlain; - // TODO: clirify how allowed results should work - // this.allowedResults = finalExecutable.results; - this.allowedMonitors = finalExecutable.monitors; - this.allowedPostProcessors = finalExecutable.postProcessors; this.setProp("executable", finalExecutable); this.setFlavor(flavor); } diff --git a/src/js/units/BaseUnit.ts b/src/js/units/BaseUnit.ts index 274fc09e..ab7d9fac 100644 --- a/src/js/units/BaseUnit.ts +++ b/src/js/units/BaseUnit.ts @@ -54,12 +54,6 @@ class BaseUnit extends (InMemoryEntity as Base) imple defaultPreProcessors: NameResultSchema[] = []; - allowedResults: NameResultSchema[] = []; - - allowedMonitors: NameResultSchema[] = []; - - allowedPostProcessors: NameResultSchema[] = []; - repetition = 0; constructor(config: Partial & Pick) { diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index c34bb38a..4fe73081 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -60,11 +60,6 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { const finalExecutable = executable || executablePlain; - // TODO: clirify how allowed results should work - // this.allowedResults = finalExecutable.results; - this.allowedMonitors = finalExecutable.monitors; - this.allowedPostProcessors = finalExecutable.postProcessors; - this.setProp("executable", finalExecutable); this.setFlavor(flavor); } From e416b1cc661d3b9e5149613b3a8e82672c550012 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 1 Apr 2026 18:02:59 +0300 Subject: [PATCH 22/30] chore: update standata --- dist/js/units/ExecutionUnit.js | 11 +++++++++-- package-lock.json | 6 +++--- package.json | 2 +- src/js/units/ExecutionUnit.ts | 16 +++++++++------- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index 5b643518..051177e1 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -25,14 +25,21 @@ class ExecutionUnit extends BaseUnit_1.default { this.setExecutable({ executable, flavor }); } setExecutable({ executable, flavor }) { - const { executable: executablePlain } = standata.getExecutableAndFlavorByName(this.application.name); + const { executable: executablePlain } = standata.getExecutableAndFlavorByName({ + appName: this.application.name, + appVersion: this.application.version, + }); const finalExecutable = executable || executablePlain; this.setProp("executable", finalExecutable); this.setFlavor(flavor); } setFlavor(flavor) { const { executable, application } = this; - const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName(application.name, executable.name); + const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName({ + appName: application.name, + appVersion: application.version, + execName: executable.name, + }); const finalFlavor = flavor || defaultFlavor; this.defaultMonitors = finalFlavor.monitors; this.defaultResults = finalFlavor.results; diff --git a/package-lock.json b/package-lock.json index 5a352a8c..fe24a24a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "@types/nunjucks": "^3.2.6", @@ -3659,8 +3659,8 @@ }, "node_modules/@mat3ra/standata": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", - "integrity": "sha512-Kl2E6lm1DhVQ01d5z8+FlJpnIrzP1iYZ/rpRBE9IM+X4SvW6VRYWWAS+u2TFMrGrNSBiGxE0mwlwLimD45X8pw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", + "integrity": "sha512-+eF1HCYK3XPtYO09yysbLL6XMITVU0GIB0AHIrnVnCosWR5hkwvHWr/GpfpW7r/GR8M2B01gW84HvGMPS1T6BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 8708a84f..7dcac8cd 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", - "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "chai": "^4.3.4", diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index 4fe73081..937a2a68 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -54,9 +54,10 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { } setExecutable({ executable, flavor }: SetExecutableProps) { - const { executable: executablePlain } = standata.getExecutableAndFlavorByName( - this.application.name, - ); + const { executable: executablePlain } = standata.getExecutableAndFlavorByName({ + appName: this.application.name, + appVersion: this.application.version, + }); const finalExecutable = executable || executablePlain; @@ -66,10 +67,11 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { setFlavor(flavor?: Flavor | FlavorSchema) { const { executable, application } = this; - const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName( - application.name, - executable.name, - ); + const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName({ + appName: application.name, + appVersion: application.version, + execName: executable.name, + }); const finalFlavor = flavor || defaultFlavor; From 9fbef4a6ad630459d6edc790029d8910735c3d17 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 1 Apr 2026 22:14:02 +0300 Subject: [PATCH 23/30] chore: update esse --- dist/js/generated/WorkflowSchemaMixin.js | 20 +- package-lock.json | 610 ++++++++++++++--------- package.json | 2 +- src/js/generated/WorkflowSchemaMixin.ts | 20 +- 4 files changed, 420 insertions(+), 232 deletions(-) diff --git a/dist/js/generated/WorkflowSchemaMixin.js b/dist/js/generated/WorkflowSchemaMixin.js index c4115838..b0ca0f49 100644 --- a/dist/js/generated/WorkflowSchemaMixin.js +++ b/dist/js/generated/WorkflowSchemaMixin.js @@ -16,6 +16,12 @@ function workflowSchemaMixin(item) { set isUsingDataset(value) { this.setProp("isUsingDataset", value); }, + get isMultiMaterial() { + return this.prop("isMultiMaterial"); + }, + set isMultiMaterial(value) { + this.setProp("isMultiMaterial", value); + }, get subworkflows() { return this.requiredProp("subworkflows"); }, @@ -28,11 +34,17 @@ function workflowSchemaMixin(item) { set units(value) { this.setProp("units", value); }, - get isMultiMaterial() { - return this.prop("isMultiMaterial"); + get application() { + return this.prop("application"); }, - set isMultiMaterial(value) { - this.setProp("isMultiMaterial", value); + set application(value) { + this.setProp("application", value); + }, + get tags() { + return this.prop("tags"); + }, + set tags(value) { + this.setProp("tags", value); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); diff --git a/package-lock.json b/package-lock.json index fe24a24a..9d6248ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#0099ff1695e122c7c95183413ddf42aed809c7e4", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c2077b5f7d0f394422926db4b914a5c3b77dd918", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", @@ -117,10 +117,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -129,7 +131,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -180,11 +184,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -204,10 +210,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -218,15 +226,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.5", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -295,23 +305,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -331,7 +345,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -353,12 +369,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -412,11 +430,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -493,10 +513,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -507,6 +529,8 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -522,6 +546,8 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { @@ -563,12 +589,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -850,11 +878,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -864,11 +894,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1003,6 +1035,8 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", "dependencies": { @@ -1030,13 +1064,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1046,11 +1082,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -1074,10 +1112,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1087,12 +1127,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1102,12 +1144,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1117,15 +1161,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1135,11 +1181,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1163,11 +1211,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1190,12 +1240,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1206,6 +1258,8 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { @@ -1219,12 +1273,14 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1234,10 +1290,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1248,6 +1306,8 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1290,11 +1350,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1317,11 +1379,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1358,11 +1422,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1372,13 +1438,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1402,11 +1470,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1429,11 +1499,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1443,11 +1515,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1457,15 +1531,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1489,11 +1565,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1503,10 +1581,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1530,12 +1610,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1545,13 +1627,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1635,10 +1719,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1648,12 +1734,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1689,10 +1777,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1773,12 +1863,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1802,12 +1894,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1954,7 +2048,9 @@ } }, "node_modules/@babel/register": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz", + "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==", "dev": true, "license": "MIT", "dependencies": { @@ -1992,27 +2088,31 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -2020,7 +2120,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2475,40 +2577,42 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", - "integrity": "sha512-qQl96uFmRcA1bP7fxQjSIbt5YtAJ5tcWQEQLgtcPXb1k6COrrc/HqkI5a8QyMxC8NclNosIAzM9myj5sQ+AK0w==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#c2077b5f7d0f394422926db4b914a5c3b77dd918", + "integrity": "sha512-0u9Ns+oCMlcrd3gBRXMyv0/zEwxka1Xd2eNq4dt8Uu5F0tzmk54y6gWEz2tA+k7YQRzCA9WVMle5xWnPMQE6lQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/cli": "^7.27.0", - "@babel/core": "^7.26.10", - "@babel/eslint-parser": "^7.27.0", + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/preset-env": "^7.26.9", - "@babel/preset-react": "^7.26.3", - "@babel/preset-typescript": "^7.27.0", - "@babel/register": "^7.25.9", - "@babel/runtime-corejs3": "^7.27.0", + "@babel/preset-env": "^7.29.0", + "@babel/preset-react": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", + "@babel/register": "^7.28.6", + "@babel/runtime-corejs3": "^7.29.0", "@mat3ra/utils": "2026.3.7-0", "@types/chai": "^4.3.20", "@types/js-yaml": "^4.0.9", "@types/json-schema-merge-allof": "^0.6.5", "@types/mocha": "^10.0.10", - "ajv": "^8.17.1", + "ajv": "^8.18.0", "ajv-formats": "^2.1.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "json-schema": "^0.4.0", "json-schema-deref-sync": "0.14.0", "json-schema-merge-allof": "^0.8.1", "json-schema-to-typescript": "^15.0.4", - "lodash": "4.17.21" + "lodash": "4.17.23" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@mat3ra/esse/node_modules/@babel/cli": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", + "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2536,19 +2640,21 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/core": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -2565,7 +2671,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/eslint-parser": { - "version": "7.28.5", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", + "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -2582,15 +2690,17 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2613,6 +2723,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "license": "MIT", "engines": { @@ -2623,79 +2735,81 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-env": { - "version": "7.28.5", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", + "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.5", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.4", - "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.4", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -2707,6 +2821,8 @@ }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "license": "MIT", "dependencies": { @@ -2738,11 +2854,13 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/runtime-corejs3": { - "version": "7.28.4", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.2.tgz", + "integrity": "sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==", "dev": true, "license": "MIT", "dependencies": { - "core-js-pure": "^3.43.0" + "core-js-pure": "^3.48.0" }, "engines": { "node": ">=6.9.0" @@ -3179,12 +3297,14 @@ } }, "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { @@ -3192,23 +3312,27 @@ } }, "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3216,6 +3340,8 @@ }, "node_modules/@mat3ra/esse/node_modules/commander": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "license": "MIT", "engines": { @@ -3255,6 +3381,19 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/@mat3ra/esse/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@mat3ra/esse/node_modules/mathjs": { "version": "12.4.1", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", @@ -3840,6 +3979,8 @@ }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", "dependencies": { @@ -4310,7 +4451,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -4656,10 +4799,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.24", + "version": "2.10.13", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.13.tgz", + "integrity": "sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/binary-extensions": { @@ -4698,7 +4846,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.27.0", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "funding": [ { "type": "opencollective", @@ -4715,11 +4865,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", - "update-browserslist-db": "^1.1.4" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -4820,7 +4970,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001753", + "version": "1.0.30001784", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz", + "integrity": "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==", "funding": [ { "type": "opencollective", @@ -5090,10 +5242,12 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.46.0", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "license": "MIT", "dependencies": { - "browserslist": "^4.26.3" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -5101,7 +5255,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.46.0", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.49.0.tgz", + "integrity": "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5354,7 +5510,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.245", + "version": "1.5.330", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.330.tgz", + "integrity": "sha512-jFNydB5kFtYUobh4IkWUnXeyDbjf/r9gcUEXe1xcrcUxIGfTdzPXA+ld6zBRbwvgIGVzDll/LTIiDztEtckSnA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7917,7 +8075,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -8369,7 +8529,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.27", + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", "license": "MIT" }, "node_modules/normalize-path": { @@ -10454,7 +10616,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", diff --git a/package.json b/package.json index 7dcac8cd..f744ebc5 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#0099ff1695e122c7c95183413ddf42aed809c7e4", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c2077b5f7d0f394422926db4b914a5c3b77dd918", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", diff --git a/src/js/generated/WorkflowSchemaMixin.ts b/src/js/generated/WorkflowSchemaMixin.ts index c03848b6..67e4e3f5 100644 --- a/src/js/generated/WorkflowSchemaMixin.ts +++ b/src/js/generated/WorkflowSchemaMixin.ts @@ -22,6 +22,12 @@ export function workflowSchemaMixin( set isUsingDataset(value: BaseWorkflowSchema["isUsingDataset"]) { this.setProp("isUsingDataset", value); }, + get isMultiMaterial() { + return this.prop("isMultiMaterial"); + }, + set isMultiMaterial(value: BaseWorkflowSchema["isMultiMaterial"]) { + this.setProp("isMultiMaterial", value); + }, get subworkflows() { return this.requiredProp("subworkflows"); }, @@ -34,11 +40,17 @@ export function workflowSchemaMixin( set units(value: BaseWorkflowSchema["units"]) { this.setProp("units", value); }, - get isMultiMaterial() { - return this.prop("isMultiMaterial"); + get application() { + return this.prop("application"); }, - set isMultiMaterial(value: BaseWorkflowSchema["isMultiMaterial"]) { - this.setProp("isMultiMaterial", value); + set application(value: BaseWorkflowSchema["application"]) { + this.setProp("application", value); + }, + get tags() { + return this.prop("tags"); + }, + set tags(value: BaseWorkflowSchema["tags"]) { + this.setProp("tags", value); }, }; From 871a86d66cb8eb362ce4872c43179cc2e2cdfa3c Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 2 Apr 2026 00:54:42 +0300 Subject: [PATCH 24/30] chore: add workflow utils --- dist/js/Workflow.d.ts | 12 ++++---- dist/js/Workflow.js | 46 ++++++++++------------------- dist/js/index.d.ts | 3 +- dist/js/index.js | 37 ++++++++++++++++++++++- dist/js/utils/index.d.ts | 1 + dist/js/utils/index.js | 37 +++++++++++++++++++++++ dist/js/utils/workflow.d.ts | 8 +++++ dist/js/utils/workflow.js | 52 ++++++++++++++++++++++++++++++++ src/js/Workflow.ts | 59 +++++++++++++++---------------------- src/js/index.ts | 2 ++ src/js/utils/index.ts | 1 + src/js/utils/workflow.ts | 53 +++++++++++++++++++++++++++++++++ tests/js/Workflow.test.ts | 10 +++---- 13 files changed, 241 insertions(+), 80 deletions(-) create mode 100644 dist/js/utils/index.d.ts create mode 100644 dist/js/utils/index.js create mode 100644 dist/js/utils/workflow.d.ts create mode 100644 dist/js/utils/workflow.js create mode 100644 src/js/utils/index.ts create mode 100644 src/js/utils/workflow.ts diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index 6af66a91..6b74c866 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -41,13 +41,13 @@ export declare class Workflow extends Workflow_base implements WorkflowSchema { get usedApplicationNames(): string[]; get usedApplicationVersions(): string[]; get usedApplicationNamesWithVersions(): string[]; - get usedModels(): ("unknown" | "dft" | "ml")[]; - get humanReadableUsedModels(): string[]; + getUsedModels(): ("dft" | "ml" | "unknown")[]; + getHumanReadableUsedModels(): string[]; toJSON(): WorkflowSchema & AnyObject; - get properties(): string[]; - get humanReadableProperties(): string[]; - get systemName(): string; - get defaultDescription(): string; + getHumanReadableProperties(): string[]; + getProperties(): string[]; + getSystemName(): string; + getDefaultDescription(): string; private addUnit; private removeUnit; addUnitType(type: UnitType, head?: boolean, index?: number): void; diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index a8f43c45..e1922f55 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -8,17 +8,15 @@ const entity_1 = require("@mat3ra/code/dist/js/entity"); const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const mode_1 = require("@mat3ra/mode"); const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); -const slugify_1 = __importDefault(require("slugify")); const enums_1 = require("./enums"); const WorkflowSchemaMixin_1 = require("./generated/WorkflowSchemaMixin"); const Subworkflow_1 = __importDefault(require("./Subworkflow")); const units_1 = require("./units"); const factory_1 = require("./units/factory"); +const workflow_1 = require("./utils/workflow"); const default_1 = __importDefault(require("./workflows/default")); -const { MODEL_NAMES } = mode_1.tree; class Workflow extends entity_1.InMemoryEntity { static get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("workflow"); @@ -90,15 +88,7 @@ class Workflow extends entity_1.InMemoryEntity { }); } get usedApplications() { - const swApplications = this.subworkflows.map((sw) => sw.application); - const wfApplications = this.workflowInstances.map((w) => w.usedApplications).flat(); - const usedApplications = [...swApplications, ...wfApplications].reduce((acc, app) => { - if (!acc.some((a) => a.name === app.name)) { - acc.push(app); - } - return acc; - }, []); - return usedApplications; + return (0, workflow_1.getUsedApplications)(this); } // return application names get usedApplicationNames() { @@ -110,39 +100,33 @@ class Workflow extends entity_1.InMemoryEntity { get usedApplicationNamesWithVersions() { return this.usedApplications.map((a) => `${a.name} ${a.version}`); } - get usedModels() { - return Array.from(new Set(this.subworkflows.map((sw) => sw.model.type))); + getUsedModels() { + return (0, workflow_1.getUsedModels)(this); } - get humanReadableUsedModels() { - return this.usedModels.filter((m) => m !== "unknown").map((m) => MODEL_NAMES[m]); + getHumanReadableUsedModels() { + return (0, workflow_1.getHumanReadableUsedModels)(this); } toJSON() { return { ...super.toJSON(), name: this.name, - properties: this.properties, + properties: (0, workflow_1.getProperties)(this), units: this.unitInstances.map((x) => x.toJSON()), subworkflows: this.subworkflowInstances.map((x) => x.toJSON()), workflows: this.workflowInstances.map((x) => x.toJSON()), }; } - get properties() { - return [...new Set(this.subworkflows.map((x) => x.properties || []).flat())]; + getHumanReadableProperties() { + return (0, workflow_1.getHumanReadableProperties)(this); } - get humanReadableProperties() { - return this.properties.map((name) => name - .split("_") - .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) - .join(" ")); + getProperties() { + return (0, workflow_1.getProperties)(this); } - get systemName() { - const applicationNames = this.usedApplications.map((a) => a.name); - return (0, slugify_1.default)(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); + getSystemName() { + return (0, workflow_1.getSystemName)(this); } - get defaultDescription() { - return `${this.usedModels.join(", ").toUpperCase()} workflow using ${this.usedApplications - .map((a) => a.name) - .join(", ")}.`; + getDefaultDescription() { + return (0, workflow_1.getDefaultDescription)(this); } addUnit(unit, head = false, index = -1) { const [...unitInstances] = this.unitInstances; diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index 635759d4..c95b776b 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -5,5 +5,6 @@ import Subworkflow from "./Subworkflow"; import { AssertionUnit, AssignmentUnit, BaseUnit, ConditionUnit, ExecutionUnit, IOUnit, MapUnit, ReduceUnit, SubworkflowUnit } from "./units"; import { UnitFactory } from "./units/factory"; import { defaultMapConfig } from "./units/MapUnit"; +import * as utils from "./utils"; import { Workflow } from "./Workflow"; -export { Subworkflow, Workflow, UnitFactory, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, BaseUnit, ExecutionUnit, AssertionUnit, AssignmentUnit, ConditionUnit, IOUnit, MapUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, PointsPathFormDataProvider, globalSettings, }; +export { Subworkflow, Workflow, UnitFactory, TAB_NAVIGATION_CONFIG, UNIT_NAME_INVALID_CHARS, WORKFLOW_STATUSES, BaseUnit, ExecutionUnit, AssertionUnit, AssignmentUnit, ConditionUnit, IOUnit, MapUnit, ReduceUnit, SubworkflowUnit, defaultMapConfig, PointsPathFormDataProvider, globalSettings, utils, }; diff --git a/dist/js/index.js b/dist/js/index.js index 822d65e3..b02d7773 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -1,9 +1,42 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.globalSettings = exports.PointsPathFormDataProvider = exports.defaultMapConfig = exports.SubworkflowUnit = exports.ReduceUnit = exports.MapUnit = exports.IOUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.ExecutionUnit = exports.BaseUnit = exports.WORKFLOW_STATUSES = exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.UnitFactory = exports.Workflow = exports.Subworkflow = void 0; +exports.utils = exports.globalSettings = exports.PointsPathFormDataProvider = exports.defaultMapConfig = exports.SubworkflowUnit = exports.ReduceUnit = exports.MapUnit = exports.IOUnit = exports.ConditionUnit = exports.AssignmentUnit = exports.AssertionUnit = exports.ExecutionUnit = exports.BaseUnit = exports.WORKFLOW_STATUSES = exports.UNIT_NAME_INVALID_CHARS = exports.TAB_NAVIGATION_CONFIG = exports.UnitFactory = exports.Workflow = exports.Subworkflow = void 0; const PointsPathFormDataProvider_1 = __importDefault(require("./context/providers/PointsPath/PointsPathFormDataProvider")); exports.PointsPathFormDataProvider = PointsPathFormDataProvider_1.default; const settings_1 = require("./context/providers/settings"); @@ -28,5 +61,7 @@ const factory_1 = require("./units/factory"); Object.defineProperty(exports, "UnitFactory", { enumerable: true, get: function () { return factory_1.UnitFactory; } }); const MapUnit_1 = require("./units/MapUnit"); Object.defineProperty(exports, "defaultMapConfig", { enumerable: true, get: function () { return MapUnit_1.defaultMapConfig; } }); +const utils = __importStar(require("./utils")); +exports.utils = utils; const Workflow_1 = require("./Workflow"); Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return Workflow_1.Workflow; } }); diff --git a/dist/js/utils/index.d.ts b/dist/js/utils/index.d.ts new file mode 100644 index 00000000..7551e979 --- /dev/null +++ b/dist/js/utils/index.d.ts @@ -0,0 +1 @@ +export * as workflow from "./workflow"; diff --git a/dist/js/utils/index.js b/dist/js/utils/index.js new file mode 100644 index 00000000..28fd23b7 --- /dev/null +++ b/dist/js/utils/index.js @@ -0,0 +1,37 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.workflow = void 0; +exports.workflow = __importStar(require("./workflow")); diff --git a/dist/js/utils/workflow.d.ts b/dist/js/utils/workflow.d.ts new file mode 100644 index 00000000..8844da80 --- /dev/null +++ b/dist/js/utils/workflow.d.ts @@ -0,0 +1,8 @@ +import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +export declare function getUsedApplications(workflow: WorkflowSchema): ApplicationSchema[]; +export declare function getSystemName(workflow: WorkflowSchema): string; +export declare function getUsedModels(workflow: WorkflowSchema): ("dft" | "ml" | "unknown")[]; +export declare function getDefaultDescription(workflow: WorkflowSchema): string; +export declare function getProperties(workflow: WorkflowSchema): string[]; +export declare function getHumanReadableProperties(workflow: WorkflowSchema): string[]; +export declare function getHumanReadableUsedModels(workflow: WorkflowSchema): string[]; diff --git a/dist/js/utils/workflow.js b/dist/js/utils/workflow.js new file mode 100644 index 00000000..7ee01c51 --- /dev/null +++ b/dist/js/utils/workflow.js @@ -0,0 +1,52 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getUsedApplications = getUsedApplications; +exports.getSystemName = getSystemName; +exports.getUsedModels = getUsedModels; +exports.getDefaultDescription = getDefaultDescription; +exports.getProperties = getProperties; +exports.getHumanReadableProperties = getHumanReadableProperties; +exports.getHumanReadableUsedModels = getHumanReadableUsedModels; +const tree_1 = require("@mat3ra/mode/dist/js/tree"); +const slugify_1 = __importDefault(require("slugify")); +function getUsedApplications(workflow) { + const swApplications = workflow.subworkflows.map((sw) => sw.application); + const nestedWorkflows = workflow.workflows; + const wfApplications = nestedWorkflows.map(getUsedApplications).flat(); + return [...swApplications, ...wfApplications].reduce((acc, app) => { + if (!acc.some((a) => a.name === app.name)) { + acc.push(app); + } + return acc; + }, []); +} +function getSystemName(workflow) { + const applicationNames = getUsedApplications(workflow).map((a) => a.name); + return (0, slugify_1.default)(`${applicationNames.join(":")}-${workflow.name.toLowerCase()}`); +} +function getUsedModels(workflow) { + return workflow.subworkflows.map((sw) => sw.model.type); +} +function getDefaultDescription(workflow) { + const applicationNames = getUsedApplications(workflow).map((a) => a.name); + return `${getUsedModels(workflow) + .join(", ") + .toUpperCase()} workflow using ${applicationNames.join(", ")}.`; +} +function getProperties(workflow) { + return [...new Set(workflow.subworkflows.map((sw) => sw.properties || []).flat())]; +} +function getHumanReadableProperties(workflow) { + return getProperties(workflow).map((name) => name + .split("_") + .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) + .join(" ")); +} +function getHumanReadableUsedModels(workflow) { + return getUsedModels(workflow) + .filter((m) => m !== "unknown") + .map((m) => tree_1.MODEL_NAMES[m]); +} diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 388efb38..9be66ce5 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -15,10 +15,8 @@ import type { SubworkflowSchema, WorkflowSchema, } from "@mat3ra/esse/dist/js/types"; -import { tree } from "@mat3ra/mode"; import { setUnitLinks, SubworkflowStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; -import slugify from "slugify"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; @@ -29,10 +27,17 @@ import { type WorkflowSchemaMixin, workflowSchemaMixin } from "./generated/Workf import Subworkflow from "./Subworkflow"; import { MapUnit } from "./units"; import { type AnyWorkflowUnit, UnitFactory } from "./units/factory"; +import { + getDefaultDescription, + getHumanReadableProperties, + getHumanReadableUsedModels, + getProperties, + getSystemName, + getUsedApplications, + getUsedModels, +} from "./utils/workflow"; import defaultWorkflowConfig from "./workflows/default"; -const { MODEL_NAMES } = tree; - type Base = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & @@ -137,17 +142,7 @@ export class Workflow extends (InMemoryEntity as Base) implements WorkflowSchema } get usedApplications(): ApplicationSchema[] { - const swApplications = this.subworkflows.map((sw) => sw.application); - const wfApplications = this.workflowInstances.map((w) => w.usedApplications).flat(); - - const usedApplications = [...swApplications, ...wfApplications].reduce((acc, app) => { - if (!acc.some((a) => a.name === app.name)) { - acc.push(app); - } - return acc; - }, [] as ApplicationSchema[]); - - return usedApplications; + return getUsedApplications(this); } // return application names @@ -163,47 +158,39 @@ export class Workflow extends (InMemoryEntity as Base) implements WorkflowSchema return this.usedApplications.map((a) => `${a.name} ${a.version}`); } - get usedModels() { - return Array.from(new Set(this.subworkflows.map((sw) => sw.model.type))); + getUsedModels() { + return getUsedModels(this); } - get humanReadableUsedModels() { - return this.usedModels.filter((m) => m !== "unknown").map((m) => MODEL_NAMES[m]); + getHumanReadableUsedModels() { + return getHumanReadableUsedModels(this); } toJSON(): WorkflowSchema & AnyObject { return { ...super.toJSON(), name: this.name, - properties: this.properties, + properties: getProperties(this), units: this.unitInstances.map((x) => x.toJSON()), subworkflows: this.subworkflowInstances.map((x) => x.toJSON()), workflows: this.workflowInstances.map((x) => x.toJSON()), }; } - get properties() { - return [...new Set(this.subworkflows.map((x) => x.properties || []).flat())]; + getHumanReadableProperties() { + return getHumanReadableProperties(this); } - get humanReadableProperties() { - return this.properties.map((name) => - name - .split("_") - .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) - .join(" "), - ); + getProperties() { + return getProperties(this); } - get systemName() { - const applicationNames = this.usedApplications.map((a) => a.name); - return slugify(`${applicationNames.join(":")}-${this.name.toLowerCase()}`); + getSystemName() { + return getSystemName(this); } - get defaultDescription() { - return `${this.usedModels.join(", ").toUpperCase()} workflow using ${this.usedApplications - .map((a) => a.name) - .join(", ")}.`; + getDefaultDescription() { + return getDefaultDescription(this); } private addUnit(unit: AnyWorkflowUnit, head = false, index = -1) { diff --git a/src/js/index.ts b/src/js/index.ts index 14033608..29db36b6 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -15,6 +15,7 @@ import { } from "./units"; import { UnitFactory } from "./units/factory"; import { defaultMapConfig } from "./units/MapUnit"; +import * as utils from "./utils"; import { Workflow } from "./Workflow"; export { @@ -36,4 +37,5 @@ export { defaultMapConfig, PointsPathFormDataProvider, globalSettings, + utils, }; diff --git a/src/js/utils/index.ts b/src/js/utils/index.ts new file mode 100644 index 00000000..7551e979 --- /dev/null +++ b/src/js/utils/index.ts @@ -0,0 +1 @@ +export * as workflow from "./workflow"; diff --git a/src/js/utils/workflow.ts b/src/js/utils/workflow.ts new file mode 100644 index 00000000..3ef5c165 --- /dev/null +++ b/src/js/utils/workflow.ts @@ -0,0 +1,53 @@ +import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import { MODEL_NAMES } from "@mat3ra/mode/dist/js/tree"; +import slugify from "slugify"; + +export function getUsedApplications(workflow: WorkflowSchema): ApplicationSchema[] { + const swApplications = workflow.subworkflows.map((sw) => sw.application); + const nestedWorkflows = workflow.workflows as WorkflowSchema[]; + const wfApplications = nestedWorkflows.map(getUsedApplications).flat(); + + return [...swApplications, ...wfApplications].reduce((acc, app) => { + if (!acc.some((a) => a.name === app.name)) { + acc.push(app); + } + return acc; + }, []); +} + +export function getSystemName(workflow: WorkflowSchema): string { + const applicationNames = getUsedApplications(workflow).map((a) => a.name); + + return slugify(`${applicationNames.join(":")}-${workflow.name.toLowerCase()}`); +} + +export function getUsedModels(workflow: WorkflowSchema) { + return workflow.subworkflows.map((sw) => sw.model.type); +} + +export function getDefaultDescription(workflow: WorkflowSchema): string { + const applicationNames = getUsedApplications(workflow).map((a) => a.name); + + return `${getUsedModels(workflow) + .join(", ") + .toUpperCase()} workflow using ${applicationNames.join(", ")}.`; +} + +export function getProperties(workflow: WorkflowSchema) { + return [...new Set(workflow.subworkflows.map((sw) => sw.properties || []).flat())]; +} + +export function getHumanReadableProperties(workflow: WorkflowSchema) { + return getProperties(workflow).map((name) => + name + .split("_") + .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) + .join(" "), + ); +} + +export function getHumanReadableUsedModels(workflow: WorkflowSchema) { + return getUsedModels(workflow) + .filter((m) => m !== "unknown") + .map((m) => MODEL_NAMES[m]); +} diff --git a/tests/js/Workflow.test.ts b/tests/js/Workflow.test.ts index fe06f49c..5f7af683 100644 --- a/tests/js/Workflow.test.ts +++ b/tests/js/Workflow.test.ts @@ -84,11 +84,11 @@ describe("Workflow", () => { expect(workflow.usedApplications).to.be.an("array"); expect(workflow.usedApplicationNames).to.be.an("array"); - expect(workflow.properties).to.be.an("array"); - expect(workflow.systemName).to.be.a("string"); - expect(workflow.systemName.length).to.be.above(0); - expect(workflow.defaultDescription).to.be.a("string"); - expect(workflow.defaultDescription.length).to.be.above(0); + expect(workflow.getProperties()).to.be.an("array"); + expect(workflow.getSystemName()).to.be.a("string"); + expect(workflow.getSystemName().length).to.be.above(0); + expect(workflow.getDefaultDescription()).to.be.a("string"); + expect(workflow.getDefaultDescription().length).to.be.above(0); }); }); From d320f08d44ac9c24380c66213e2d0d818a833135 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 3 Apr 2026 15:05:16 +0300 Subject: [PATCH 25/30] fix: systemName --- dist/js/utils/underscoreStringSlugify.d.ts | 6 ++++ dist/js/utils/underscoreStringSlugify.js | 32 ++++++++++++++++++++++ dist/js/utils/workflow.js | 4 +-- package-lock.json | 12 +------- package.json | 2 +- src/js/utils/workflow.ts | 5 ++-- 6 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 dist/js/utils/underscoreStringSlugify.d.ts create mode 100644 dist/js/utils/underscoreStringSlugify.js diff --git a/dist/js/utils/underscoreStringSlugify.d.ts b/dist/js/utils/underscoreStringSlugify.d.ts new file mode 100644 index 00000000..d39498a8 --- /dev/null +++ b/dist/js/utils/underscoreStringSlugify.d.ts @@ -0,0 +1,6 @@ +/** + * Same behavior as `underscore.string` slugify (v3.3.x): cleanDiacritics, replace + * non-word chars except whitespace and hyphen, lowercase, dasherize, trim hyphens. + * @see https://github.com/esamattis/underscore.string/blob/master/slugify.js + */ +export declare function underscoreStringSlugify(value: unknown): string; diff --git a/dist/js/utils/underscoreStringSlugify.js b/dist/js/utils/underscoreStringSlugify.js new file mode 100644 index 00000000..f3cbf44f --- /dev/null +++ b/dist/js/utils/underscoreStringSlugify.js @@ -0,0 +1,32 @@ +"use strict"; +/** + * Same behavior as `underscore.string` slugify (v3.3.x): cleanDiacritics, replace + * non-word chars except whitespace and hyphen, lowercase, dasherize, trim hyphens. + * @see https://github.com/esamattis/underscore.string/blob/master/slugify.js + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.underscoreStringSlugify = underscoreStringSlugify; +function cleanDiacritics(str) { + let from = "ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșşšŝťțţŭùúüűûñÿýçżźž"; + let to = "aaaaaaaaaccceeeeeghiiiijllnnoooooooossssstttuuuuuunyyczzz"; + from += from.toUpperCase(); + to += to.toUpperCase(); + const toChars = to.split(""); + from += "ß"; + toChars.push("ss"); + return str.replace(/./g, (ch) => { + const i = from.indexOf(ch); + return i === -1 ? ch : toChars[i]; + }); +} +function dasherize(str) { + return str + .trim() + .replace(/([A-Z])/g, "-$1") + .replace(/[-_\s]+/g, "-") + .toLowerCase(); +} +function underscoreStringSlugify(value) { + const str = value == null ? "" : String(value); + return dasherize(cleanDiacritics(str).replace(/[^\w\s-]/g, "-").toLowerCase()).replace(/^-+|-+$/g, ""); +} diff --git a/dist/js/utils/workflow.js b/dist/js/utils/workflow.js index 7ee01c51..e79dadce 100644 --- a/dist/js/utils/workflow.js +++ b/dist/js/utils/workflow.js @@ -11,7 +11,7 @@ exports.getProperties = getProperties; exports.getHumanReadableProperties = getHumanReadableProperties; exports.getHumanReadableUsedModels = getHumanReadableUsedModels; const tree_1 = require("@mat3ra/mode/dist/js/tree"); -const slugify_1 = __importDefault(require("slugify")); +const underscore_string_1 = __importDefault(require("underscore.string")); function getUsedApplications(workflow) { const swApplications = workflow.subworkflows.map((sw) => sw.application); const nestedWorkflows = workflow.workflows; @@ -25,7 +25,7 @@ function getUsedApplications(workflow) { } function getSystemName(workflow) { const applicationNames = getUsedApplications(workflow).map((a) => a.name); - return (0, slugify_1.default)(`${applicationNames.join(":")}-${workflow.name.toLowerCase()}`); + return underscore_string_1.default.slugify(`${applicationNames.join(":")}-${workflow.name}`); } function getUsedModels(workflow) { return workflow.subworkflows.map((sw) => sw.model.type); diff --git a/package-lock.json b/package-lock.json index 9d6248ff..57b2d403 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@types/json-schema": "^7.0.15", "@types/react-jsonschema-form": "^1.7.13", "nunjucks": "^3.2.4", - "slugify": "^1.6.6" + "underscore.string": "^3.3.6" }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", @@ -9839,13 +9839,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slugify": { - "version": "1.6.6", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/source-map": { "version": "0.5.7", "license": "BSD-3-Clause", @@ -9919,7 +9912,6 @@ }, "node_modules/sprintf-js": { "version": "1.1.3", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/stop-iteration-iterator": { @@ -10568,7 +10560,6 @@ }, "node_modules/underscore.string": { "version": "3.3.6", - "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "^1.1.1", @@ -10654,7 +10645,6 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/uuid": { diff --git a/package.json b/package.json index f744ebc5..2946df49 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@types/json-schema": "^7.0.15", "@types/react-jsonschema-form": "^1.7.13", "nunjucks": "^3.2.4", - "slugify": "^1.6.6" + "underscore.string": "^3.3.6" }, "devDependencies": { "@types/nunjucks": "^3.2.6", diff --git a/src/js/utils/workflow.ts b/src/js/utils/workflow.ts index 3ef5c165..d731f98a 100644 --- a/src/js/utils/workflow.ts +++ b/src/js/utils/workflow.ts @@ -1,6 +1,6 @@ import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; import { MODEL_NAMES } from "@mat3ra/mode/dist/js/tree"; -import slugify from "slugify"; +import s from "underscore.string"; export function getUsedApplications(workflow: WorkflowSchema): ApplicationSchema[] { const swApplications = workflow.subworkflows.map((sw) => sw.application); @@ -17,8 +17,7 @@ export function getUsedApplications(workflow: WorkflowSchema): ApplicationSchema export function getSystemName(workflow: WorkflowSchema): string { const applicationNames = getUsedApplications(workflow).map((a) => a.name); - - return slugify(`${applicationNames.join(":")}-${workflow.name.toLowerCase()}`); + return s.slugify(`${applicationNames.join(":")}-${workflow.name}`); } export function getUsedModels(workflow: WorkflowSchema) { From e6fb98514d8b27c5b78bbc2caad72711922708a1 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 7 Apr 2026 22:53:44 +0300 Subject: [PATCH 26/30] chore: improve types --- dist/js/Subworkflow.d.ts | 9 --------- dist/js/units/ExecutionUnit.d.ts | 9 --------- package-lock.json | 6 +++--- package.json | 2 +- 4 files changed, 4 insertions(+), 22 deletions(-) diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index 477d695e..1ac67b39 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -263,15 +263,6 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow isDefault?: boolean; applicationName: string; hasAdvancedComputeOptions?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; }; flavor: { _id?: string; diff --git a/dist/js/units/ExecutionUnit.d.ts b/dist/js/units/ExecutionUnit.d.ts index 10034099..56073b46 100644 --- a/dist/js/units/ExecutionUnit.d.ts +++ b/dist/js/units/ExecutionUnit.d.ts @@ -51,15 +51,6 @@ declare class ExecutionUnit extends ExecutionUnit_base implements Schema { isDefault?: boolean; applicationName: string; hasAdvancedComputeOptions?: boolean; - preProcessors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; }; flavor: { _id?: string; diff --git a/package-lock.json b/package-lock.json index 57b2d403..619ca012 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#0099ff1695e122c7c95183413ddf42aed809c7e4", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c2077b5f7d0f394422926db4b914a5c3b77dd918", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#fa6f8dcd343e73d9193c945a01a546c1e4acdd9b", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", @@ -2577,8 +2577,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#c2077b5f7d0f394422926db4b914a5c3b77dd918", - "integrity": "sha512-0u9Ns+oCMlcrd3gBRXMyv0/zEwxka1Xd2eNq4dt8Uu5F0tzmk54y6gWEz2tA+k7YQRzCA9WVMle5xWnPMQE6lQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#fa6f8dcd343e73d9193c945a01a546c1e4acdd9b", + "integrity": "sha512-hN/ChQqe1+jbW5Z5F1vbykSKoeBD7k4CYVMUbS0Z/H7Xza+MxCthRKs/vXYcS/1lJUKfVyocFsRhLZ7dqZassg==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 2946df49..e05389bb 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#0099ff1695e122c7c95183413ddf42aed809c7e4", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c2077b5f7d0f394422926db4b914a5c3b77dd918", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#fa6f8dcd343e73d9193c945a01a546c1e4acdd9b", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", From 3b39cc198438d3c74f5b4621a63f331182cef6e2 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 8 Apr 2026 15:03:07 +0300 Subject: [PATCH 27/30] chore: wode applications driver --- dist/js/context/providers/settings.d.ts | 17 ++++++----- dist/js/context/providers/settings.js | 24 ++++++--------- dist/js/units/ExecutionUnit.js | 14 +++++---- src/js/context/providers/settings.ts | 39 ++++++++++++------------- src/js/units/ExecutionUnit.ts | 29 +++++++++--------- tests/js/Workflow.test.ts | 5 ++-- 6 files changed, 64 insertions(+), 64 deletions(-) diff --git a/dist/js/context/providers/settings.d.ts b/dist/js/context/providers/settings.d.ts index a900c581..eca5b3eb 100644 --- a/dist/js/context/providers/settings.d.ts +++ b/dist/js/context/providers/settings.d.ts @@ -1,15 +1,16 @@ -import { Application } from "@mat3ra/ade"; -import { Made } from "@mat3ra/made"; +import type { ApplicationStandata } from "@mat3ra/standata"; +type Instance = InstanceType; +type ApplicationsDriver = { + getExecutableAndFlavorByName: Instance["getExecutableAndFlavorByName"]; + getInput: Instance["getInput"]; +}; declare class GlobalSettings { "PointsGridFormDataProvider.defaultKPPRA": number; - Material: typeof import("@mat3ra/made").Material; - Application: typeof Application; - constructor(); get defaultKPPRA(): number; - setApplication(application: typeof Application): void; - setMaterial(material: typeof Made.Material): void; setDefaultKPPRA(kppra: number): void; - resetDefaults(): void; + private applicationsDriver; + setupApplicationsDriver(driver: ApplicationsDriver): void; + getApplicationsDriver(): ApplicationsDriver; } export declare const globalSettings: GlobalSettings; export {}; diff --git a/dist/js/context/providers/settings.js b/dist/js/context/providers/settings.js index 6ed19f81..2219508f 100644 --- a/dist/js/context/providers/settings.js +++ b/dist/js/context/providers/settings.js @@ -1,31 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.globalSettings = void 0; -const ade_1 = require("@mat3ra/ade"); -const made_1 = require("@mat3ra/made"); class GlobalSettings { constructor() { this["PointsGridFormDataProvider.defaultKPPRA"] = 5; - this.Material = made_1.Made.Material; - this.Application = ade_1.Application; - this.resetDefaults(); + this.applicationsDriver = null; } get defaultKPPRA() { return this["PointsGridFormDataProvider.defaultKPPRA"]; } - setApplication(application) { - this.Application = application; - } - setMaterial(material) { - this.Material = material; - } setDefaultKPPRA(kppra) { this["PointsGridFormDataProvider.defaultKPPRA"] = kppra; } - resetDefaults() { - this.Material = made_1.Made.Material; - this.Application = ade_1.Application; - this["PointsGridFormDataProvider.defaultKPPRA"] = 5; + setupApplicationsDriver(driver) { + this.applicationsDriver = driver; + } + getApplicationsDriver() { + if (!this.applicationsDriver) { + throw new Error("Wode Applications driver not set"); + } + return this.applicationsDriver; } } exports.globalSettings = new GlobalSettings(); diff --git a/dist/js/units/ExecutionUnit.js b/dist/js/units/ExecutionUnit.js index 051177e1..5e3fcf8e 100644 --- a/dist/js/units/ExecutionUnit.js +++ b/dist/js/units/ExecutionUnit.js @@ -3,13 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -const standata_1 = require("@mat3ra/standata"); const utils_1 = require("@mat3ra/utils"); const providers_1 = require("../context/providers"); +const settings_1 = require("../context/providers/settings"); const ExecutionUnitSchemaMixin_1 = require("../generated/ExecutionUnitSchemaMixin"); const BaseUnit_1 = __importDefault(require("./BaseUnit")); const ExecutionUnitInput_1 = __importDefault(require("./ExecutionUnitInput")); -const standata = new standata_1.ApplicationStandata(); class ExecutionUnit extends BaseUnit_1.default { constructor(config) { var _a; @@ -25,7 +24,9 @@ class ExecutionUnit extends BaseUnit_1.default { this.setExecutable({ executable, flavor }); } setExecutable({ executable, flavor }) { - const { executable: executablePlain } = standata.getExecutableAndFlavorByName({ + const { executable: executablePlain } = settings_1.globalSettings + .getApplicationsDriver() + .getExecutableAndFlavorByName({ appName: this.application.name, appVersion: this.application.version, }); @@ -35,7 +36,9 @@ class ExecutionUnit extends BaseUnit_1.default { } setFlavor(flavor) { const { executable, application } = this; - const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName({ + const { flavor: defaultFlavor } = settings_1.globalSettings + .getApplicationsDriver() + .getExecutableAndFlavorByName({ appName: application.name, appVersion: application.version, execName: executable.name, @@ -49,7 +52,8 @@ class ExecutionUnit extends BaseUnit_1.default { this.setDefaultInput(); } setDefaultInput() { - this.inputInstances = standata + this.inputInstances = settings_1.globalSettings + .getApplicationsDriver() .getInput(this.flavor) .map(ExecutionUnitInput_1.default.createFromTemplate); } diff --git a/src/js/context/providers/settings.ts b/src/js/context/providers/settings.ts index ccb19e9f..2ddf6bc1 100644 --- a/src/js/context/providers/settings.ts +++ b/src/js/context/providers/settings.ts @@ -1,37 +1,34 @@ -import { Application } from "@mat3ra/ade"; -import { Made } from "@mat3ra/made"; +import type { ApplicationStandata } from "@mat3ra/standata"; -class GlobalSettings { - "PointsGridFormDataProvider.defaultKPPRA" = 5; - - Material = Made.Material; +type Instance = InstanceType; - Application = Application; +type ApplicationsDriver = { + getExecutableAndFlavorByName: Instance["getExecutableAndFlavorByName"]; + getInput: Instance["getInput"]; +}; - constructor() { - this.resetDefaults(); - } +class GlobalSettings { + "PointsGridFormDataProvider.defaultKPPRA" = 5; get defaultKPPRA() { return this["PointsGridFormDataProvider.defaultKPPRA"]; } - setApplication(application: typeof Application) { - this.Application = application; + setDefaultKPPRA(kppra: number) { + this["PointsGridFormDataProvider.defaultKPPRA"] = kppra; } - setMaterial(material: typeof Made.Material) { - this.Material = material; - } + private applicationsDriver: ApplicationsDriver | null = null; - setDefaultKPPRA(kppra: number) { - this["PointsGridFormDataProvider.defaultKPPRA"] = kppra; + setupApplicationsDriver(driver: ApplicationsDriver) { + this.applicationsDriver = driver; } - resetDefaults() { - this.Material = Made.Material; - this.Application = Application; - this["PointsGridFormDataProvider.defaultKPPRA"] = 5; + getApplicationsDriver() { + if (!this.applicationsDriver) { + throw new Error("Wode Applications driver not set"); + } + return this.applicationsDriver; } } diff --git a/src/js/units/ExecutionUnit.ts b/src/js/units/ExecutionUnit.ts index 937a2a68..6994af33 100644 --- a/src/js/units/ExecutionUnit.ts +++ b/src/js/units/ExecutionUnit.ts @@ -6,10 +6,10 @@ import type { ExecutionUnitSchema, FlavorSchema, } from "@mat3ra/esse/dist/js/types"; -import { ApplicationStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; import { type ExternalContext, createProvider } from "../context/providers"; +import { globalSettings } from "../context/providers/settings"; import type ConvergenceParameter from "../convergence/ConvergenceParameter"; import { type ExecutionUnitSchemaMixin, @@ -27,8 +27,6 @@ type SetApplicationProps = Pick & SetExecutableProps; type SetExecutableProps = Partial>; -const standata = new ApplicationStandata(); - class ExecutionUnit extends (BaseUnit as Base) implements Schema { inputInstances: ExecutionUnitInput[] = []; @@ -54,10 +52,12 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { } setExecutable({ executable, flavor }: SetExecutableProps) { - const { executable: executablePlain } = standata.getExecutableAndFlavorByName({ - appName: this.application.name, - appVersion: this.application.version, - }); + const { executable: executablePlain } = globalSettings + .getApplicationsDriver() + .getExecutableAndFlavorByName({ + appName: this.application.name, + appVersion: this.application.version, + }); const finalExecutable = executable || executablePlain; @@ -67,11 +67,13 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { setFlavor(flavor?: Flavor | FlavorSchema) { const { executable, application } = this; - const { flavor: defaultFlavor } = standata.getExecutableAndFlavorByName({ - appName: application.name, - appVersion: application.version, - execName: executable.name, - }); + const { flavor: defaultFlavor } = globalSettings + .getApplicationsDriver() + .getExecutableAndFlavorByName({ + appName: application.name, + appVersion: application.version, + execName: executable.name, + }); const finalFlavor = flavor || defaultFlavor; @@ -85,7 +87,8 @@ class ExecutionUnit extends (BaseUnit as Base) implements Schema { } setDefaultInput() { - this.inputInstances = standata + this.inputInstances = globalSettings + .getApplicationsDriver() .getInput(this.flavor) .map(ExecutionUnitInput.createFromTemplate); } diff --git a/tests/js/Workflow.test.ts b/tests/js/Workflow.test.ts index 5f7af683..e05b8d93 100644 --- a/tests/js/Workflow.test.ts +++ b/tests/js/Workflow.test.ts @@ -9,11 +9,11 @@ import { } from "@mat3ra/code/dist/js/entity/set/ordered/OrderedInMemoryEntityInSetMixin"; import type { WorkflowSchema } from "@mat3ra/esse/dist/js/types"; import { Material } from "@mat3ra/made"; -import { WorkflowStandata } from "@mat3ra/standata"; +import { ApplicationStandata, WorkflowStandata } from "@mat3ra/standata"; import { expect } from "chai"; import type { WorkflowRenderContext } from "src/js/Workflow"; -import { Subworkflow, Workflow } from "../../src/js"; +import { globalSettings, Subworkflow, Workflow } from "../../src/js"; import { UnitType } from "../../src/js/enums"; type Base = typeof Material & @@ -147,6 +147,7 @@ describe("Workflow", () => { describe("render", () => { it("invokes each subworkflow render with spread context and parent workflow", () => { + globalSettings.setupApplicationsDriver(new ApplicationStandata()); const standataWorkflows = new WorkflowStandata().getAll(); expect(standataWorkflows.length).to.be.above(0); From 472cdae730d0698096c70df142d38560b681f69e Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 8 Apr 2026 15:42:27 +0300 Subject: [PATCH 28/30] chore: export ApplicationsDriver interface --- dist/js/context/providers/settings.d.ts | 4 ++-- src/js/context/providers/settings.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/js/context/providers/settings.d.ts b/dist/js/context/providers/settings.d.ts index eca5b3eb..fa6b391a 100644 --- a/dist/js/context/providers/settings.d.ts +++ b/dist/js/context/providers/settings.d.ts @@ -1,9 +1,9 @@ import type { ApplicationStandata } from "@mat3ra/standata"; type Instance = InstanceType; -type ApplicationsDriver = { +export interface ApplicationsDriver { getExecutableAndFlavorByName: Instance["getExecutableAndFlavorByName"]; getInput: Instance["getInput"]; -}; +} declare class GlobalSettings { "PointsGridFormDataProvider.defaultKPPRA": number; get defaultKPPRA(): number; diff --git a/src/js/context/providers/settings.ts b/src/js/context/providers/settings.ts index 2ddf6bc1..ee6b2497 100644 --- a/src/js/context/providers/settings.ts +++ b/src/js/context/providers/settings.ts @@ -2,10 +2,10 @@ import type { ApplicationStandata } from "@mat3ra/standata"; type Instance = InstanceType; -type ApplicationsDriver = { +export interface ApplicationsDriver { getExecutableAndFlavorByName: Instance["getExecutableAndFlavorByName"]; getInput: Instance["getInput"]; -}; +} class GlobalSettings { "PointsGridFormDataProvider.defaultKPPRA" = 5; From 3c3edc66f3b9bb6b65157d07cd067bc0c8536cbe Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 10 Apr 2026 16:23:55 +0300 Subject: [PATCH 29/30] update: add updateMethodData --- dist/js/Subworkflow.d.ts | 3 + dist/js/Subworkflow.js | 48 +++++++++++++++ dist/js/Workflow.d.ts | 3 + dist/js/Workflow.js | 5 ++ .../PointsGridFormDataProvider.d.ts | 9 +-- package-lock.json | 46 ++++++++++++-- package.json | 3 +- src/js/Subworkflow.ts | 61 ++++++++++++++++++- src/js/Workflow.ts | 8 +++ 9 files changed, 172 insertions(+), 14 deletions(-) diff --git a/dist/js/Subworkflow.d.ts b/dist/js/Subworkflow.d.ts index 1ac67b39..dc2193ae 100644 --- a/dist/js/Subworkflow.d.ts +++ b/dist/js/Subworkflow.d.ts @@ -5,7 +5,9 @@ import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; +import type { Material } from "@mat3ra/made"; import { Model, ModelFactory } from "@mat3ra/mode"; +import type { MetaPropertyHolder } from "@mat3ra/prode"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; @@ -671,6 +673,7 @@ export default class Subworkflow extends Subworkflow_base implements Subworkflow param: any; y: any; }[]; + updateMethodData(materials: Material[], metaProperties: MetaPropertyHolder[]): void; addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, externalContext, }: ConvergenceConfig): void; } export {}; diff --git a/dist/js/Subworkflow.js b/dist/js/Subworkflow.js index 6edf99b7..d6955d0f 100644 --- a/dist/js/Subworkflow.js +++ b/dist/js/Subworkflow.js @@ -226,6 +226,54 @@ class Subworkflow extends entity_1.InMemoryEntity { }; }); } + updateMethodData(materials, metaProperties) { + const method = this.modelInstance.Method; + const { model } = this; + const uniqueElements = [...new Set(materials.map((m) => m.uniqueElements).flat())]; + const appName = this.application.name; + const methodDataItems = metaProperties + .filter((metaProperty) => { + return ( + // @ts-ignore TODO: fix types + uniqueElements.includes(metaProperty.data.element) && + metaProperty.data.apps.includes(appName)); + }) + .map((metaProperty) => metaProperty.property); + if (!(method instanceof mode_1.PseudopotentialMethod) || !methodDataItems.length) { + return; + } + const filters = { + appName, + exchangeCorrelation: { + approximation: model.subtype, + functional: "functional" in model ? model.functional : undefined, + }, + }; + // We cycle materials in reverse order below b/c of render(), + // since the default state index is zero, the last material thus corresponds to index 0. + // Without reversing, context providers in workflow consider material as changed when any update to the workflow + // is triggered. + // TODO: figure out how to simplify or remove the need for the above + (materials || []) + .concat() + .reverse() + .forEach((material) => { + // updates methodData & overwrites method in subworkflow.model + method.updateMethodDataByApplicationAndMaterials(methodDataItems, { + elements: material.uniqueElements, + ...filters, + }); + this.modelInstance.setMethod(method); + }); + // TODO: Try if/else instead of running both + if (materials.length > 1) { + method.updateMethodDataByApplicationAndMaterials(methodDataItems, { + elements: uniqueElements, + ...filters, + }); + this.modelInstance.setMethod(method); + } + } addConvergence({ parameter, parameterInitial, parameterIncrement, result, resultInitial, condition, operator, tolerance, maxOccurrences, externalContext, }) { // Find unit to converge: should contain passed result in its results list // TODO: make user to select unit for convergence explicitly diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index 6b74c866..81f26613 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -4,6 +4,8 @@ import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ApplicationSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types"; +import type { Material } from "@mat3ra/made"; +import type { MetaPropertyHolder } from "@mat3ra/prode"; import type { MaterialExternalContext } from "./context/mixins/MaterialContextMixin"; import type { MaterialsExternalContext } from "./context/mixins/MaterialsContextMixin"; import type { MaterialsSetExternalContext } from "./context/mixins/MaterialsSetContextMixin"; @@ -34,6 +36,7 @@ export declare class Workflow extends Workflow_base implements WorkflowSchema { get workflows(): WorkflowSchema[]; set workflows(value: WorkflowSchema[]); addSubworkflow(subworkflow: Subworkflow, head?: boolean, index?: number): void; + updateMethodData(materials: Material[], metaProperties: MetaPropertyHolder[]): void; removeSubworkflow(id: string): void; setUnits(arr: AnyWorkflowUnit[]): void; render(context: WorkflowRenderContext): void; diff --git a/dist/js/Workflow.js b/dist/js/Workflow.js index e1922f55..905346a2 100644 --- a/dist/js/Workflow.js +++ b/dist/js/Workflow.js @@ -70,6 +70,11 @@ class Workflow extends entity_1.InMemoryEntity { this.addUnit(subworkflowUnit, head, index); } } + updateMethodData(materials, metaProperties) { + this.subworkflowInstances.forEach((sw) => { + sw.updateMethodData(materials, metaProperties); + }); + } removeSubworkflow(id) { const subworkflowUnit = this.unitInstances.find((u) => u.id === id); if (subworkflowUnit) { diff --git a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts index 36df3fbf..a08c303a 100644 --- a/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts +++ b/dist/js/context/providers/PointsGrid/PointsGridFormDataProvider.d.ts @@ -28,14 +28,7 @@ export default abstract class PointsGridFormDataProvider, externalContext: ExternalContext); private initInstanceFields; private getDefaultGridMetricValue; - getDefaultData(): { - dimensions: [number, number, number] | [string, string, string]; - shifts?: [number, number, number]; - reciprocalVectorRatios?: [number, number, number]; - gridMetricType: "KPPRA" | "spacing"; - gridMetricValue: number; - preferGridMetric?: boolean; - }; + getDefaultData(): PointsGridDataProviderSchema; protected get jsonSchemaPatchConfig(): { dimensions: { default?: any[] | undefined; diff --git a/package-lock.json b/package-lock.json index 619ca012..b38867bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,8 @@ "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#fa6f8dcd343e73d9193c945a01a546c1e4acdd9b", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", - "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#5b0c40080fed20429496e5e60c69c162147c31f6", + "@mat3ra/prode": "git+https://github.com/Exabyte-io/prode.git#beac801b06ccd70c09301e240eaa739c208e6bd1", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", @@ -3594,8 +3595,8 @@ }, "node_modules/@mat3ra/mode": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", - "integrity": "sha512-tQspvF/q/pUYxbpKcZaDbW1Um0REF4MUdtEaWvZuiOwt17iRi++Q98S8VSFCOIbyiJg9ibdbzoSedo9Mus4wIw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/mode.git#5b0c40080fed20429496e5e60c69c162147c31f6", + "integrity": "sha512-J2ivB8KsBE80TX1+sPM3noYI0FQXJJJpoixhBtnxczpQFEgJtWjFS5Mx1oVEmjB3WjRnkYZzQZsWqGDytYFf+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3625,7 +3626,8 @@ }, "peerDependencies": { "@mat3ra/code": "*", - "@mat3ra/esse": "*" + "@mat3ra/esse": "*", + "@mat3ra/prode": "*" } }, "node_modules/@mat3ra/mode/node_modules/@mat3ra/utils": { @@ -3796,6 +3798,25 @@ "node": ">= 18" } }, + "node_modules/@mat3ra/prode": { + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/prode.git#beac801b06ccd70c09301e240eaa739c208e6bd1", + "integrity": "sha512-VaQ31TRDSJlJwEK2V0kzrvBvnvMG7g2gUG2LGgQlLwLakd34hlbPplL9G+78PsyP/yCWleqtoGt8U7y/V3AQyQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/highcharts": "^5.0.44", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@mat3ra/code": "*", + "@mat3ra/esse": "*", + "@mat3ra/made": "*" + } + }, "node_modules/@mat3ra/standata": { "version": "0.0.0", "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", @@ -4067,6 +4088,23 @@ "@types/chai": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/highcharts": { + "version": "5.0.44", + "resolved": "https://registry.npmjs.org/@types/highcharts/-/highcharts-5.0.44.tgz", + "integrity": "sha512-Rby1gj3GbK7zzsbK/g9T9hoybUfM+x0sBIXrOlTnj25TIvuTkLend3nKRLLz2upvLJNo36GntO6KmTFoVQXWZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/js-yaml": { "version": "4.0.9", "dev": true, diff --git a/package.json b/package.json index e05389bb..d5351951 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,9 @@ "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#fa6f8dcd343e73d9193c945a01a546c1e4acdd9b", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#75f9a788a20decc18570d6db68e6d83068fab37f", - "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#6947554976aab835a89e92b98cc2261d1a825539", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#5b0c40080fed20429496e5e60c69c162147c31f6", "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#03f6861665ec72045ade00c4d5c91b7d5ab97c24", + "@mat3ra/prode": "git+https://github.com/Exabyte-io/prode.git#beac801b06ccd70c09301e240eaa739c208e6bd1", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", "chai": "^4.3.4", diff --git a/src/js/Subworkflow.ts b/src/js/Subworkflow.ts index cb51562d..10a76323 100644 --- a/src/js/Subworkflow.ts +++ b/src/js/Subworkflow.ts @@ -11,7 +11,9 @@ import { import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { JobSchema, SubworkflowSchema } from "@mat3ra/esse/dist/js/types"; -import { Model, ModelFactory } from "@mat3ra/mode"; +import type { Material } from "@mat3ra/made"; +import { Model, ModelFactory, PseudopotentialMethod } from "@mat3ra/mode"; +import type { MetaPropertyHolder } from "@mat3ra/prode"; import { setUnitLinks } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; @@ -319,6 +321,63 @@ export default class Subworkflow extends (InMemoryEntity as Base) implements Sub }); } + updateMethodData(materials: Material[], metaProperties: MetaPropertyHolder[]) { + const method = this.modelInstance.Method; + const { model } = this; + const uniqueElements = [...new Set(materials.map((m) => m.uniqueElements).flat())]; + const appName = this.application.name; + + const methodDataItems = metaProperties + .filter((metaProperty) => { + return ( + // @ts-ignore TODO: fix types + uniqueElements.includes(metaProperty.data.element) && + metaProperty.data.apps.includes(appName) + ); + }) + .map((metaProperty) => metaProperty.property); + + if (!(method instanceof PseudopotentialMethod) || !methodDataItems.length) { + return; + } + + const filters = { + appName, + exchangeCorrelation: { + approximation: model.subtype, + functional: "functional" in model ? model.functional : undefined, + }, + }; + + // We cycle materials in reverse order below b/c of render(), + // since the default state index is zero, the last material thus corresponds to index 0. + // Without reversing, context providers in workflow consider material as changed when any update to the workflow + // is triggered. + // TODO: figure out how to simplify or remove the need for the above + (materials || []) + .concat() + .reverse() + .forEach((material) => { + // updates methodData & overwrites method in subworkflow.model + method.updateMethodDataByApplicationAndMaterials(methodDataItems, { + elements: material.uniqueElements, + ...filters, + }); + + this.modelInstance.setMethod(method); + }); + + // TODO: Try if/else instead of running both + if (materials.length > 1) { + method.updateMethodDataByApplicationAndMaterials(methodDataItems, { + elements: uniqueElements, + ...filters, + }); + + this.modelInstance.setMethod(method); + } + } + addConvergence({ parameter, parameterInitial, diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 9be66ce5..2e54c0be 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -15,6 +15,8 @@ import type { SubworkflowSchema, WorkflowSchema, } from "@mat3ra/esse/dist/js/types"; +import type { Material } from "@mat3ra/made"; +import type { MetaPropertyHolder } from "@mat3ra/prode"; import { setUnitLinks, SubworkflowStandata } from "@mat3ra/standata"; import { Utils } from "@mat3ra/utils"; @@ -120,6 +122,12 @@ export class Workflow extends (InMemoryEntity as Base) implements WorkflowSchema } } + updateMethodData(materials: Material[], metaProperties: MetaPropertyHolder[]) { + this.subworkflowInstances.forEach((sw) => { + sw.updateMethodData(materials, metaProperties); + }); + } + removeSubworkflow(id: string) { const subworkflowUnit = this.unitInstances.find((u) => u.id === id); From 1c1a8a929a4f28dbe0b7d92242951d1d1d92b3b4 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Sat, 11 Apr 2026 00:35:51 +0300 Subject: [PATCH 30/30] chore: improve types --- dist/js/Workflow.d.ts | 1 + src/js/Workflow.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/dist/js/Workflow.d.ts b/dist/js/Workflow.d.ts index 81f26613..290ab8b1 100644 --- a/dist/js/Workflow.d.ts +++ b/dist/js/Workflow.d.ts @@ -21,6 +21,7 @@ export type WorkflowRenderContext = MaterialExternalContext & MaterialsExternalC declare const Workflow_base: Base; export declare class Workflow extends Workflow_base implements WorkflowSchema { static readonly defaultConfig: WorkflowSchema; + _json: WorkflowSchema & AnyObject; static get jsonSchema(): import("json-schema").JSONSchema7 | undefined; subworkflowInstances: Subworkflow[]; private unitInstances; diff --git a/src/js/Workflow.ts b/src/js/Workflow.ts index 2e54c0be..54056f24 100644 --- a/src/js/Workflow.ts +++ b/src/js/Workflow.ts @@ -54,6 +54,8 @@ export type WorkflowRenderContext = MaterialExternalContext & export class Workflow extends (InMemoryEntity as Base) implements WorkflowSchema { static readonly defaultConfig = defaultWorkflowConfig; + declare _json: WorkflowSchema & AnyObject; + static get jsonSchema() { return JSONSchemasInterface.getSchemaById("workflow"); }