diff --git a/dist/js/constants.d.ts b/dist/js/constants.d.ts index a2041a4d..eb129258 100644 --- a/dist/js/constants.d.ts +++ b/dist/js/constants.d.ts @@ -1,3 +1,29 @@ +export declare enum Units { + bohr = "bohr", + angstrom = "angstrom", + degree = "degree", + radian = "radian", + alat = "alat" +} +/** + * @summary Coordinates units for a material's basis. + */ +export declare enum AtomicCoordinateUnits { + crystal = "crystal", + cartesian = "cartesian" +} +export declare enum Tolerance { + length = 0.01, + lengthAngstrom = 0.001, + pointsDistance = 0.001 +} +export declare enum Coefficients { + EV_TO_RY = 0.0734986176, + BOHR_TO_ANGSTROM = 0.52917721092, + ANGSTROM_TO_BOHR = 1.8897261245650618, + EV_A_TO_RY_BOHR = 0.03889379346800142 +} +export declare const HASH_TOLERANCE: 3; export declare const coefficients: { EV_TO_RY: number; BOHR_TO_ANGSTROM: number; @@ -23,7 +49,6 @@ export declare const ATOMIC_COORD_UNITS: { crystal: string; cartesian: string; }; -export declare const HASH_TOLERANCE = 3; declare const _default: { coefficients: { EV_TO_RY: number; diff --git a/dist/js/constants.js b/dist/js/constants.js index fe53999a..faf3bc3d 100644 --- a/dist/js/constants.js +++ b/dist/js/constants.js @@ -1,6 +1,39 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.HASH_TOLERANCE = exports.ATOMIC_COORD_UNITS = exports.units = exports.tolerance = exports.coefficients = void 0; +exports.ATOMIC_COORD_UNITS = exports.units = exports.tolerance = exports.coefficients = exports.HASH_TOLERANCE = exports.Coefficients = exports.Tolerance = exports.AtomicCoordinateUnits = exports.Units = void 0; +var Units; +(function (Units) { + Units["bohr"] = "bohr"; + Units["angstrom"] = "angstrom"; + Units["degree"] = "degree"; + Units["radian"] = "radian"; + Units["alat"] = "alat"; +})(Units || (exports.Units = Units = {})); +/** + * @summary Coordinates units for a material's basis. + */ +var AtomicCoordinateUnits; +(function (AtomicCoordinateUnits) { + AtomicCoordinateUnits["crystal"] = "crystal"; + AtomicCoordinateUnits["cartesian"] = "cartesian"; +})(AtomicCoordinateUnits || (exports.AtomicCoordinateUnits = AtomicCoordinateUnits = {})); +// in crystal coordinates +var Tolerance; +(function (Tolerance) { + Tolerance[Tolerance["length"] = 0.01] = "length"; + Tolerance[Tolerance["lengthAngstrom"] = 0.001] = "lengthAngstrom"; + Tolerance[Tolerance["pointsDistance"] = 0.001] = "pointsDistance"; +})(Tolerance || (exports.Tolerance = Tolerance = {})); +var Coefficients; +(function (Coefficients) { + Coefficients[Coefficients["EV_TO_RY"] = 0.0734986176] = "EV_TO_RY"; + Coefficients[Coefficients["BOHR_TO_ANGSTROM"] = 0.52917721092] = "BOHR_TO_ANGSTROM"; + Coefficients[Coefficients["ANGSTROM_TO_BOHR"] = 1.8897261245650618] = "ANGSTROM_TO_BOHR"; + Coefficients[Coefficients["EV_A_TO_RY_BOHR"] = 0.03889379346800142] = "EV_A_TO_RY_BOHR"; +})(Coefficients || (exports.Coefficients = Coefficients = {})); +// Only 3 digits will be considered for lattice and basis params on hashing +exports.HASH_TOLERANCE = 3; +// TODO: remove everything below this line exports.coefficients = { EV_TO_RY: 0.0734986176, BOHR_TO_ANGSTROM: 0.52917721092, @@ -27,8 +60,6 @@ exports.ATOMIC_COORD_UNITS = { crystal: "crystal", cartesian: "cartesian", }; -// Only 3 digits will be considered for lattice and basis params on hashing -exports.HASH_TOLERANCE = 3; exports.default = { coefficients: exports.coefficients, tolerance: exports.tolerance, diff --git a/dist/js/entity/index.d.ts b/dist/js/entity/index.d.ts index 2f14d49d..dd92a8de 100644 --- a/dist/js/entity/index.d.ts +++ b/dist/js/entity/index.d.ts @@ -1,14 +1,10 @@ import { InMemoryEntity } from "./in_memory"; -import { ContextAndRenderFieldsMixin } from "./mixins/context"; import { RuntimeContextFieldMixin } from "./mixins/context_runtime"; -import { FlowchartEntityMixin, FlowchartItemMixin } from "./mixins/flowchart"; -import { HasScopeTrackMixin } from "./mixins/props"; -import { RuntimeItemsMixin } from "./mixins/runtime_items"; -import { DefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, NamedDefaultableRepetitionContextAndRenderInMemoryEntity, NamedDefaultableRepetitionImportantSettingsInMemoryEntity, NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity, NamedInMemoryEntity } from "./other"; +import { DefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, NamedInMemoryEntity } from "./other"; import { InMemoryEntitySet } from "./set"; import { ENTITY_SET_TYPES } from "./set/enums"; import { constructEntitySetFactoryByConfig } from "./set/factory"; import { InMemoryEntityInSetMixin, InMemoryEntitySetMixin } from "./set/mixins"; import { OrderedInMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin } from "./set/ordered/mixins"; import * as selectorsForEntitySet from "./set/selectors"; -export { InMemoryEntity, NamedInMemoryEntity, DefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, NamedDefaultableRepetitionContextAndRenderInMemoryEntity, NamedDefaultableRepetitionImportantSettingsInMemoryEntity, NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, HasScopeTrackMixin, RuntimeItemsMixin, RuntimeContextFieldMixin, InMemoryEntitySet, ENTITY_SET_TYPES, constructEntitySetFactoryByConfig, selectorsForEntitySet, InMemoryEntitySetMixin, InMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin, OrderedInMemoryEntityInSetMixin, ContextAndRenderFieldsMixin, FlowchartEntityMixin, FlowchartItemMixin, }; +export { InMemoryEntity, NamedInMemoryEntity, DefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, RuntimeContextFieldMixin, InMemoryEntitySet, ENTITY_SET_TYPES, constructEntitySetFactoryByConfig, selectorsForEntitySet, InMemoryEntitySetMixin, InMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin, OrderedInMemoryEntityInSetMixin, }; diff --git a/dist/js/entity/index.js b/dist/js/entity/index.js index 3cc2997e..3ff147b3 100644 --- a/dist/js/entity/index.js +++ b/dist/js/entity/index.js @@ -33,28 +33,17 @@ var __importStar = (this && this.__importStar) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -exports.FlowchartItemMixin = exports.FlowchartEntityMixin = exports.ContextAndRenderFieldsMixin = exports.OrderedInMemoryEntityInSetMixin = exports.OrderedInMemoryEntitySetMixin = exports.InMemoryEntityInSetMixin = exports.InMemoryEntitySetMixin = exports.selectorsForEntitySet = exports.constructEntitySetFactoryByConfig = exports.ENTITY_SET_TYPES = exports.InMemoryEntitySet = exports.RuntimeContextFieldMixin = exports.RuntimeItemsMixin = exports.HasScopeTrackMixin = exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity = exports.NamedDefaultableRepetitionImportantSettingsInMemoryEntity = exports.NamedDefaultableRepetitionContextAndRenderInMemoryEntity = exports.HasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableInMemoryEntity = exports.DefaultableInMemoryEntity = exports.NamedInMemoryEntity = exports.InMemoryEntity = void 0; +exports.OrderedInMemoryEntityInSetMixin = exports.OrderedInMemoryEntitySetMixin = exports.InMemoryEntityInSetMixin = exports.InMemoryEntitySetMixin = exports.selectorsForEntitySet = exports.constructEntitySetFactoryByConfig = exports.ENTITY_SET_TYPES = exports.InMemoryEntitySet = exports.RuntimeContextFieldMixin = exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = exports.HasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableInMemoryEntity = exports.DefaultableInMemoryEntity = exports.NamedInMemoryEntity = exports.InMemoryEntity = void 0; const in_memory_1 = require("./in_memory"); Object.defineProperty(exports, "InMemoryEntity", { enumerable: true, get: function () { return in_memory_1.InMemoryEntity; } }); -const context_1 = require("./mixins/context"); -Object.defineProperty(exports, "ContextAndRenderFieldsMixin", { enumerable: true, get: function () { return context_1.ContextAndRenderFieldsMixin; } }); const context_runtime_1 = require("./mixins/context_runtime"); Object.defineProperty(exports, "RuntimeContextFieldMixin", { enumerable: true, get: function () { return context_runtime_1.RuntimeContextFieldMixin; } }); -const flowchart_1 = require("./mixins/flowchart"); -Object.defineProperty(exports, "FlowchartEntityMixin", { enumerable: true, get: function () { return flowchart_1.FlowchartEntityMixin; } }); -Object.defineProperty(exports, "FlowchartItemMixin", { enumerable: true, get: function () { return flowchart_1.FlowchartItemMixin; } }); -const props_1 = require("./mixins/props"); -Object.defineProperty(exports, "HasScopeTrackMixin", { enumerable: true, get: function () { return props_1.HasScopeTrackMixin; } }); -const runtime_items_1 = require("./mixins/runtime_items"); -Object.defineProperty(exports, "RuntimeItemsMixin", { enumerable: true, get: function () { return runtime_items_1.RuntimeItemsMixin; } }); +// import { RuntimeItemsMixin } from "./mixins/runtime_items"; const other_1 = require("./other"); Object.defineProperty(exports, "DefaultableInMemoryEntity", { enumerable: true, get: function () { return other_1.DefaultableInMemoryEntity; } }); Object.defineProperty(exports, "HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity", { enumerable: true, get: function () { return other_1.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity; } }); Object.defineProperty(exports, "HasMetadataNamedDefaultableInMemoryEntity", { enumerable: true, get: function () { return other_1.HasMetadataNamedDefaultableInMemoryEntity; } }); Object.defineProperty(exports, "NamedDefaultableInMemoryEntity", { enumerable: true, get: function () { return other_1.NamedDefaultableInMemoryEntity; } }); -Object.defineProperty(exports, "NamedDefaultableRepetitionContextAndRenderInMemoryEntity", { enumerable: true, get: function () { return other_1.NamedDefaultableRepetitionContextAndRenderInMemoryEntity; } }); -Object.defineProperty(exports, "NamedDefaultableRepetitionImportantSettingsInMemoryEntity", { enumerable: true, get: function () { return other_1.NamedDefaultableRepetitionImportantSettingsInMemoryEntity; } }); -Object.defineProperty(exports, "NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity", { enumerable: true, get: function () { return other_1.NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity; } }); Object.defineProperty(exports, "NamedInMemoryEntity", { enumerable: true, get: function () { return other_1.NamedInMemoryEntity; } }); const set_1 = require("./set"); Object.defineProperty(exports, "InMemoryEntitySet", { enumerable: true, get: function () { return set_1.InMemoryEntitySet; } }); diff --git a/dist/js/entity/mixins/ContextAndRenderFieldsMixin.d.ts b/dist/js/entity/mixins/ContextAndRenderFieldsMixin.d.ts new file mode 100644 index 00000000..2e41bca9 --- /dev/null +++ b/dist/js/entity/mixins/ContextAndRenderFieldsMixin.d.ts @@ -0,0 +1,15 @@ +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { InMemoryEntity } from "../in_memory"; +export type Context = AnyObject; +export type ContextAndRenderFields = { + context?: Context; + updateContext(ctx: Context): void; + getPersistentContext(): Context | undefined; + updatePersistentContext(ctx: Context): void; + getCombinedContext(): Context; +}; +type AbstractBase = { + render(ctx: Context): void; +}; +export declare function contextAndRenderFieldsMixin(item: T): asserts item is T & ContextAndRenderFields; +export {}; diff --git a/dist/js/entity/mixins/ContextAndRenderFieldsMixin.js b/dist/js/entity/mixins/ContextAndRenderFieldsMixin.js new file mode 100644 index 00000000..7fe3a434 --- /dev/null +++ b/dist/js/entity/mixins/ContextAndRenderFieldsMixin.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.contextAndRenderFieldsMixin = contextAndRenderFieldsMixin; +function contextAndRenderFieldsMixin(item) { + // @ts-expect-error + const properties = { + updateContext(ctx) { + this.context = { ...this.context, ...ctx }; + }, + getPersistentContext() { + return this.prop("context"); + }, + updatePersistentContext(ctx) { + this.setProp("context", { ...ctx }); + }, + getCombinedContext() { + return { ...this.getPersistentContext(), ...this.context }; + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/entity/mixins/DefaultableMixin.d.ts b/dist/js/entity/mixins/DefaultableMixin.d.ts index 17976383..ccc28681 100644 --- a/dist/js/entity/mixins/DefaultableMixin.d.ts +++ b/dist/js/entity/mixins/DefaultableMixin.d.ts @@ -1,13 +1,9 @@ -import type { Constructor } from "../../utils/types"; +import { type DefaultableSchemaMixin } from "../../generated/DefaultableSchemaMixin"; +import type { AbstractConstructor, Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export declare function defaultableEntityMixin(item: T): InMemoryEntity & DefaultableInMemoryEntity; -export declare function defaultableEntityStaticMixin(Item: Constructor): DefaultableInMemoryStaticEntity & Constructor & Constructor & { - defaultConfig?: object | null; -}; -export type DefaultableInMemoryEntity = { - isDefault: boolean; -}; +export type Defaultable = DefaultableSchemaMixin; export type DefaultableInMemoryStaticEntity = { - createDefault: () => InMemoryEntity & DefaultableInMemoryEntity; + createDefault: () => InMemoryEntity & Defaultable; }; -export type DefaultableInMemoryEntityConstructor = Constructor & DefaultableInMemoryStaticEntity; +export type DefaultableInMemoryEntityConstructor = Constructor & DefaultableInMemoryStaticEntity; +export declare function defaultableEntityMixin(Item: AbstractConstructor): void; diff --git a/dist/js/entity/mixins/DefaultableMixin.js b/dist/js/entity/mixins/DefaultableMixin.js index afd926e4..af808ac6 100644 --- a/dist/js/entity/mixins/DefaultableMixin.js +++ b/dist/js/entity/mixins/DefaultableMixin.js @@ -2,20 +2,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultableEntityMixin = defaultableEntityMixin; -exports.defaultableEntityStaticMixin = defaultableEntityStaticMixin; -function defaultableEntityMixin(item) { - // @ts-expect-error - const properties = { - get isDefault() { - return this.prop("isDefault", false); - }, - set isDefault(isDefault) { - this.setProp("isDefault", isDefault); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; -} +const DefaultableSchemaMixin_1 = require("../../generated/DefaultableSchemaMixin"); function defaultableEntityStaticMixin(Item) { // @ts-expect-error const staticProperties = { @@ -26,3 +13,7 @@ function defaultableEntityStaticMixin(Item) { Object.defineProperties(Item, Object.getOwnPropertyDescriptors(staticProperties)); return staticProperties; } +function defaultableEntityMixin(Item) { + (0, DefaultableSchemaMixin_1.defaultableSchemaMixin)(Item.prototype); + defaultableEntityStaticMixin(Item); +} diff --git a/dist/js/entity/mixins/HasConsistencyChecksMixin.d.ts b/dist/js/entity/mixins/HasConsistencyChecksMixin.d.ts index be7326c1..2aa7725a 100644 --- a/dist/js/entity/mixins/HasConsistencyChecksMixin.d.ts +++ b/dist/js/entity/mixins/HasConsistencyChecksMixin.d.ts @@ -1,9 +1,11 @@ import type { ConsistencyCheck } from "@mat3ra/esse/dist/js/types"; +import { type HasConsistencyChecksSchemaMixin } from "../../generated/HasConsistencyChecksSchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export declare function hasConsistencyChecksMixin(item: T): InMemoryEntity & HasConsistencyChecksInMemoryEntity; -export type HasConsistencyChecksInMemoryEntity = { - consistencyChecks: ConsistencyCheck[]; +type HasConsistencyChecksProperties = { addConsistencyChecks: (array: ConsistencyCheck[]) => void; }; -export type HasConsistencyChecksInMemoryEntityConstructor = Constructor; +export type HasConsistencyChecks = HasConsistencyChecksSchemaMixin & HasConsistencyChecksProperties; +export type HasConsistencyChecksInMemoryEntityConstructor = Constructor; +export declare function hasConsistencyChecksMixin(item: T): asserts item is T & HasConsistencyChecks; +export {}; diff --git a/dist/js/entity/mixins/HasConsistencyChecksMixin.js b/dist/js/entity/mixins/HasConsistencyChecksMixin.js index f71cb3e9..1e4d7889 100644 --- a/dist/js/entity/mixins/HasConsistencyChecksMixin.js +++ b/dist/js/entity/mixins/HasConsistencyChecksMixin.js @@ -1,19 +1,14 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasConsistencyChecksMixin = hasConsistencyChecksMixin; +const HasConsistencyChecksSchemaMixin_1 = require("../../generated/HasConsistencyChecksSchemaMixin"); function hasConsistencyChecksMixin(item) { + (0, HasConsistencyChecksSchemaMixin_1.hasConsistencyChecksSchemaMixin)(item); // @ts-expect-error const properties = { - get consistencyChecks() { - return this.prop("consistencyChecks", []); - }, - set consistencyChecks(array) { - this.setProp("consistencyChecks", array); - }, addConsistencyChecks(array) { this.consistencyChecks = [...(this.consistencyChecks || []), ...array]; }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; } diff --git a/dist/js/entity/mixins/HasDescriptionMixin.d.ts b/dist/js/entity/mixins/HasDescriptionMixin.d.ts index 520fe15a..4744e53a 100644 --- a/dist/js/entity/mixins/HasDescriptionMixin.d.ts +++ b/dist/js/entity/mixins/HasDescriptionMixin.d.ts @@ -1,9 +1,3 @@ -import type { DescriptionSchema } from "@mat3ra/esse/dist/js/types"; -import type { Constructor } from "../../utils/types"; -import { InMemoryEntity } from "../in_memory"; -export declare function hasDescriptionMixin(item: T): InMemoryEntity & HasDescriptionInMemoryEntity; -export type HasDescriptionInMemoryEntity = { - description: string; - descriptionObject: DescriptionSchema["descriptionObject"]; -}; -export type HasDescriptionInMemoryEntityConstructor = Constructor; +import { type HasDescriptionSchemaMixin, hasDescriptionSchemaMixin } from "../../generated/HasDescriptionSchemaMixin"; +export type HasDescription = HasDescriptionSchemaMixin; +export declare const hasDescriptionPropertiesMixin: typeof hasDescriptionSchemaMixin; diff --git a/dist/js/entity/mixins/HasDescriptionMixin.js b/dist/js/entity/mixins/HasDescriptionMixin.js index ce240947..926b8fd5 100644 --- a/dist/js/entity/mixins/HasDescriptionMixin.js +++ b/dist/js/entity/mixins/HasDescriptionMixin.js @@ -1,22 +1,5 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.hasDescriptionMixin = hasDescriptionMixin; -function hasDescriptionMixin(item) { - // @ts-expect-error - const properties = { - get description() { - return this.prop("description", ""); - }, - set description(string) { - this.setProp("description", string); - }, - get descriptionObject() { - return this.prop("descriptionObject"); - }, - set descriptionObject(obj) { - this.setProp("descriptionObject", obj); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; -} +exports.hasDescriptionPropertiesMixin = void 0; +const HasDescriptionSchemaMixin_1 = require("../../generated/HasDescriptionSchemaMixin"); +exports.hasDescriptionPropertiesMixin = HasDescriptionSchemaMixin_1.hasDescriptionSchemaMixin; diff --git a/dist/js/entity/mixins/HasMetadataMixin.d.ts b/dist/js/entity/mixins/HasMetadataMixin.d.ts index 097d45aa..49273f34 100644 --- a/dist/js/entity/mixins/HasMetadataMixin.d.ts +++ b/dist/js/entity/mixins/HasMetadataMixin.d.ts @@ -1,8 +1,11 @@ +import type { MetadataSchema } from "@mat3ra/esse/dist/js/types"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export declare function hasMetadataMixin(item: T): InMemoryEntity & HasMetadataInMemoryEntity; -export type HasMetadataInMemoryEntity = { - metadata: object; - updateMetadata: (object: object) => void; +type Metadata = MetadataSchema["metadata"]; +export type HasMetadata = { + metadata?: T; + updateMetadata: (object: Partial) => void; }; -export type HasMetadataInMemoryEntityConstructor = Constructor; +export type HasMetadataInMemoryEntityConstructor = Constructor>; +export declare function hasMetadataMixin(item: T): asserts item is T & HasMetadata; +export {}; diff --git a/dist/js/entity/mixins/HasMetadataMixin.js b/dist/js/entity/mixins/HasMetadataMixin.js index a513f28c..cb9338b4 100644 --- a/dist/js/entity/mixins/HasMetadataMixin.js +++ b/dist/js/entity/mixins/HasMetadataMixin.js @@ -1,19 +1,21 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasMetadataMixin = hasMetadataMixin; -function hasMetadataMixin(item) { +function hasMetadataPropertiesMixin(item) { // @ts-expect-error const properties = { get metadata() { - return this.prop("metadata", {}); + return this.prop("metadata"); }, - set metadata(object) { - this.setProp("metadata", object); + set metadata(value) { + this.setProp("metadata", value); }, updateMetadata(object) { - this.metadata = { ...this.metadata, ...object }; + this.setProp("metadata", { ...this.metadata, ...object }); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; +} +function hasMetadataMixin(item) { + hasMetadataPropertiesMixin(item); } diff --git a/dist/js/entity/mixins/HasRepetitionMixin.d.ts b/dist/js/entity/mixins/HasRepetitionMixin.d.ts new file mode 100644 index 00000000..671178a0 --- /dev/null +++ b/dist/js/entity/mixins/HasRepetitionMixin.d.ts @@ -0,0 +1,10 @@ +import type { InMemoryEntity } from "../in_memory"; +export interface HasRepetition { + _repetition: number; + _totalRepetitions: number; + repetition: number; + totalRepetitions: number; + setRepetition: (repetition: number) => void; + setTotalRepetitions: (totalRepetition: number) => void; +} +export declare function hasRepetitionMixin(item: T): asserts item is T & HasRepetition; diff --git a/dist/js/entity/mixins/HasRepetitionMixin.js b/dist/js/entity/mixins/HasRepetitionMixin.js new file mode 100644 index 00000000..5d13ab78 --- /dev/null +++ b/dist/js/entity/mixins/HasRepetitionMixin.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hasRepetitionMixin = hasRepetitionMixin; +function hasRepetitionMixin(item) { + // @ts-expect-error + const properties = { + _repetition: 0, + _totalRepetitions: 0, + get repetition() { + return this._repetition; + }, + set repetition(repetition) { + this._repetition = repetition; + }, + get totalRepetitions() { + return this._totalRepetitions || 1; + }, + setRepetition(repetition) { + this.repetition = repetition; + // if (["Subworkflow", "Workflow"].find((n) => this.constructor.name === n)) { + // this.units.forEach((u) => u.setRepetition(repetition)); + // } + // if (this.constructor.name === "Workflow") { + // this.subworkflows.forEach((sw) => sw.setRepetition(repetition)); + // this.workflows.forEach((wf) => wf.setRepetition(repetition)); + // } + }, + setTotalRepetitions(totalRepetition) { + this._totalRepetitions = totalRepetition; + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/entity/mixins/HasScopeTrackMixin.d.ts b/dist/js/entity/mixins/HasScopeTrackMixin.d.ts deleted file mode 100644 index ca217a15..00000000 --- a/dist/js/entity/mixins/HasScopeTrackMixin.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Constructor } from "../../utils/types"; -import { InMemoryEntity, InMemoryEntityConstructor } from "../in_memory"; -export declare function hasScopeTrackMixin(item: InMemoryEntity): { - scopeTrack: unknown[]; -}; -export type HasScopeTrackInMemoryEntity = ReturnType; -export type HasScopeTrackInMemoryEntityConstructor = Constructor; -export default function HasScopeTrackMixin(superclass: S): S & HasScopeTrackInMemoryEntityConstructor; diff --git a/dist/js/entity/mixins/HasScopeTrackMixin.js b/dist/js/entity/mixins/HasScopeTrackMixin.js deleted file mode 100644 index 2d5d1bd9..00000000 --- a/dist/js/entity/mixins/HasScopeTrackMixin.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.hasScopeTrackMixin = hasScopeTrackMixin; -exports.default = HasScopeTrackMixin; -function schemaMixin(item) { - const schema = { - get scopeTrack() { - return item.prop("scopeTrack", []); - }, - set scopeTrack(array) { - item.setProp("scopeTrack", array); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(schema)); - return schema; -} -function hasScopeTrackMixin(item) { - return schemaMixin(item); -} -function HasScopeTrackMixin(superclass) { - class HasScopeTrackMixin extends superclass { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...args) { - super(...args); - hasScopeTrackMixin(this); - } - } - return HasScopeTrackMixin; -} diff --git a/dist/js/entity/mixins/HashedEntityMixin.d.ts b/dist/js/entity/mixins/HashedEntityMixin.d.ts new file mode 100644 index 00000000..178b857b --- /dev/null +++ b/dist/js/entity/mixins/HashedEntityMixin.d.ts @@ -0,0 +1,8 @@ +import type { Constructor } from "../../utils/types"; +import { InMemoryEntity } from "../in_memory"; +export type HashedEntity = { + calculateHash(): string; + getHashObject?(): object; +}; +export type HashedInMemoryEntityConstructor = Constructor; +export declare function hashedEntityMixin(item: T): asserts item is T & HashedEntity; diff --git a/dist/js/entity/mixins/hash.js b/dist/js/entity/mixins/HashedEntityMixin.js similarity index 50% rename from dist/js/entity/mixins/hash.js rename to dist/js/entity/mixins/HashedEntityMixin.js index 2963706e..d365abc1 100644 --- a/dist/js/entity/mixins/hash.js +++ b/dist/js/entity/mixins/HashedEntityMixin.js @@ -1,24 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.HashedEntityMixin = HashedEntityMixin; +exports.hashedEntityMixin = hashedEntityMixin; const hash_1 = require("../../utils/hash"); -function HashedEntityMixin(superclass) { - return class extends superclass { - /* - * @summary Returns an object based on meaningful fields for this unit, that will be used to calculate the hash - * Must be overridden. - */ - // eslint-disable-next-line class-methods-use-this - getHashObject() { - return {}; - } +function hashedEntityMixin(item) { + // @ts-expect-error + const properties = { /** * @summary Calculates hash based on meaningful fields and unit-specific fields. Unit-specific fields are * separated into _typeSpecificHash function which can be overwritten by child classes. * head and next are also important but not considered since they are included in subworkflow hash. */ calculateHash() { - return (0, hash_1.calculateHashFromObject)(this.getHashObject()); - } + var _a, _b; + return (0, hash_1.calculateHashFromObject)((_b = (_a = this.getHashObject) === null || _a === void 0 ? void 0 : _a.call(this)) !== null && _b !== void 0 ? _b : {}); + }, }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); } diff --git a/dist/js/entity/mixins/ImportantSettingsProviderMixin.d.ts b/dist/js/entity/mixins/ImportantSettingsProviderMixin.d.ts new file mode 100644 index 00000000..9cb5ce49 --- /dev/null +++ b/dist/js/entity/mixins/ImportantSettingsProviderMixin.d.ts @@ -0,0 +1,17 @@ +import type { Constructor } from "../../utils/types"; +import type { InMemoryEntity } from "../in_memory"; +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/entity/mixins/ImportantSettingsProviderMixin.js b/dist/js/entity/mixins/ImportantSettingsProviderMixin.js new file mode 100644 index 00000000..b4477d54 --- /dev/null +++ b/dist/js/entity/mixins/ImportantSettingsProviderMixin.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.importantSettingsProviderMixin = importantSettingsProviderMixin; +const clone_1 = require("../../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 importantSettingsProviders() { + return this.contextProviders.filter((p) => p.domain === "important"); + }, + 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/entity/mixins/NamedEntityMixin.d.ts b/dist/js/entity/mixins/NamedEntityMixin.d.ts index 4ffdc6b8..e11a74f2 100644 --- a/dist/js/entity/mixins/NamedEntityMixin.d.ts +++ b/dist/js/entity/mixins/NamedEntityMixin.d.ts @@ -1,8 +1,10 @@ +import { type NamedEntitySchemaMixin } from "../../generated/NamedEntitySchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export declare function namedEntityMixin(item: T): InMemoryEntity & NamedInMemoryEntity; -export type NamedInMemoryEntity = { - name: string; +type NamedEntityProperties = { setName: (name: string) => void; }; -export type NamedInMemoryEntityConstructor = Constructor; +export type NamedEntity = NamedEntitySchemaMixin & NamedEntityProperties; +export type NamedInMemoryEntityConstructor = Constructor; +export declare function namedEntityMixin(item: T): asserts item is T & NamedEntity; +export {}; diff --git a/dist/js/entity/mixins/NamedEntityMixin.js b/dist/js/entity/mixins/NamedEntityMixin.js index 1b153663..8884807d 100644 --- a/dist/js/entity/mixins/NamedEntityMixin.js +++ b/dist/js/entity/mixins/NamedEntityMixin.js @@ -1,19 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.namedEntityMixin = namedEntityMixin; -function namedEntityMixin(item) { +const NamedEntitySchemaMixin_1 = require("../../generated/NamedEntitySchemaMixin"); +function namedEntityPropertiesMixin(item) { // @ts-expect-error const properties = { - get name() { - return this.prop("name", ""); - }, - set name(name) { - this.setProp("name", name); - }, setName(name) { this.setProp("name", name); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; +} +function namedEntityMixin(item) { + (0, NamedEntitySchemaMixin_1.namedEntitySchemaMixin)(item); + namedEntityPropertiesMixin(item); } diff --git a/dist/js/entity/mixins/RuntimeItemsMixin.d.ts b/dist/js/entity/mixins/RuntimeItemsMixin.d.ts index 91521250..9bf97071 100644 --- a/dist/js/entity/mixins/RuntimeItemsMixin.d.ts +++ b/dist/js/entity/mixins/RuntimeItemsMixin.d.ts @@ -1,35 +1,14 @@ -import type { NameResultSchema } from "@mat3ra/esse/dist/js/types"; +import { type RuntimeItemsSchemaMixin } from "../../generated/RuntimeItemsSchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export declare enum ItemKey { - results = "results", - monitors = "monitors", - preProcessors = "preProcessors", - postProcessors = "postProcessors" -} -export type BaseRuntimeItemsInMemoryEntity = InMemoryEntity & { - _json: { - results?: NameResultSchema[]; - monitors?: NameResultSchema[]; - preProcessors?: NameResultSchema[]; - postProcessors?: NameResultSchema[]; - }; - defaultResults?: NameResultSchema[]; - defaultMonitors?: NameResultSchema[]; - defaultPreProcessors?: NameResultSchema[]; - defaultPostProcessors?: NameResultSchema[]; -}; -export declare function runtimeItemsMixin(item: BaseRuntimeItemsInMemoryEntity): void; -export type RuntimeItemsInMemoryEntity = { - results: NameResultSchema[]; - monitors: NameResultSchema[]; - preProcessors: NameResultSchema[]; - postProcessors: NameResultSchema[]; +type RuntimeItemsProperties = { hashObjectFromRuntimeItems: { - results: NameResultSchema[]; - preProcessors: NameResultSchema[]; - postProcessors: NameResultSchema[]; + results: RuntimeItemsSchemaMixin["results"]; + preProcessors: RuntimeItemsSchemaMixin["preProcessors"]; + postProcessors: RuntimeItemsSchemaMixin["postProcessors"]; }; }; -export type RuntimeItemsInMemoryEntityConstructor = Constructor; -export default function RuntimeItemsMixin>(superclass: S): S & RuntimeItemsInMemoryEntityConstructor; +export type RuntimeItems = RuntimeItemsSchemaMixin & RuntimeItemsProperties; +export type RuntimeItemsInMemoryEntityConstructor = Constructor; +export declare function runtimeItemsMixin(item: T): asserts item is T & RuntimeItems; +export {}; diff --git a/dist/js/entity/mixins/RuntimeItemsMixin.js b/dist/js/entity/mixins/RuntimeItemsMixin.js index 1634358b..28ebc9cf 100644 --- a/dist/js/entity/mixins/RuntimeItemsMixin.js +++ b/dist/js/entity/mixins/RuntimeItemsMixin.js @@ -1,41 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ItemKey = void 0; exports.runtimeItemsMixin = runtimeItemsMixin; -exports.default = RuntimeItemsMixin; -const object_1 = require("../../utils/object"); -var ItemKey; -(function (ItemKey) { - ItemKey["results"] = "results"; - ItemKey["monitors"] = "monitors"; - ItemKey["preProcessors"] = "preProcessors"; - ItemKey["postProcessors"] = "postProcessors"; -})(ItemKey || (exports.ItemKey = ItemKey = {})); -/* - * @summary Contains runtime items: results, monitors, pre/postProcessors - * Is meant to work with Entity, InMemoryEntity b/c of `prop` extraction from `_json`. - */ -function runtimeItemsMixin(item) { - // @ts-expect-error - this is a hack to get the properties of the item +const RuntimeItemsSchemaMixin_1 = require("../../generated/RuntimeItemsSchemaMixin"); +function runtimeItemsPropertiesMixin(item) { + // @ts-expect-error const properties = { - get results() { - var _a; - return this.prop("results", (_a = this.defaultResults) !== null && _a !== void 0 ? _a : []).map(object_1.safeMakeObject); - }, - get monitors() { - var _a; - return this.prop("monitors", (_a = this.defaultMonitors) !== null && _a !== void 0 ? _a : []).map(object_1.safeMakeObject); - }, - get preProcessors() { - var _a; - // TODO: safeMakeObject could return null. Should we throw an error here? - return this.prop("preProcessors", (_a = this.defaultPreProcessors) !== null && _a !== void 0 ? _a : []).map(object_1.safeMakeObject); - }, - get postProcessors() { - var _a; - // TODO: safeMakeObject could return null. Should we throw an error here? - return this.prop("postProcessors", (_a = this.defaultPostProcessors) !== null && _a !== void 0 ? _a : []).map(object_1.safeMakeObject); - }, get hashObjectFromRuntimeItems() { return { results: this.results, @@ -46,9 +15,7 @@ function runtimeItemsMixin(item) { }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); } -function RuntimeItemsMixin(superclass) { - class RuntimeItemsMixin extends superclass { - } - runtimeItemsMixin(RuntimeItemsMixin.prototype); - return RuntimeItemsMixin; +function runtimeItemsMixin(item) { + (0, RuntimeItemsSchemaMixin_1.runtimeItemsSchemaMixin)(item); + runtimeItemsPropertiesMixin(item); } diff --git a/dist/js/entity/mixins/TaggableMixin.d.ts b/dist/js/entity/mixins/TaggableMixin.d.ts index 55e7b0aa..a8b7cff5 100644 --- a/dist/js/entity/mixins/TaggableMixin.d.ts +++ b/dist/js/entity/mixins/TaggableMixin.d.ts @@ -1,8 +1,10 @@ +import { type TaggableSchemaMixin } from "../../generated/TaggableSchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export declare function taggableMixin(item: T): InMemoryEntity & TaggableInMemoryEntity; -export type TaggableInMemoryEntity = { - tags: string[]; +type TaggableProperties = { setTags: (array: string[]) => void; }; -export type TaggableInMemoryEntityConstructor = Constructor; +export type Taggable = TaggableSchemaMixin & TaggableProperties; +export type TaggableInMemoryEntityConstructor = Constructor; +export declare function taggableMixin(item: T): asserts item is T & Taggable; +export {}; diff --git a/dist/js/entity/mixins/TaggableMixin.js b/dist/js/entity/mixins/TaggableMixin.js index eb3df3e6..a8bf3ab3 100644 --- a/dist/js/entity/mixins/TaggableMixin.js +++ b/dist/js/entity/mixins/TaggableMixin.js @@ -1,19 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.taggableMixin = taggableMixin; -function taggableMixin(item) { +const TaggableSchemaMixin_1 = require("../../generated/TaggableSchemaMixin"); +function taggablePropertiesMixin(item) { // @ts-expect-error const properties = { - get tags() { - return this.prop("tags", []); - }, - set tags(array) { - this.setProp("tags", array); - }, setTags(array) { this.tags = array.filter((value, index, self) => self.indexOf(value) === index); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; +} +function taggableMixin(item) { + (0, TaggableSchemaMixin_1.taggableSchemaMixin)(item); + taggablePropertiesMixin(item); } diff --git a/dist/js/entity/mixins/context.d.ts b/dist/js/entity/mixins/context.d.ts deleted file mode 100644 index 64e2333b..00000000 --- a/dist/js/entity/mixins/context.d.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import { InMemoryEntityConstructor } from "../in_memory"; -export type Context = AnyObject; -export declare function ContextAndRenderFieldsMixin(superclass: T): { - new (...params: any[]): { - _context: Context; - context: AnyObject; - updateContext(ctx?: {}, executeRender?: boolean): void; - getPersistentContext(): object | undefined; - updatePersistentContext(ctx?: object): void; - getCombinedContext(): { - [x: string]: unknown; - }; - render(_context?: AnyObject): void; - _json: AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): AnyObject; - toJSONSafe(exclude?: string[]): AnyObject; - toJSONQuick(exclude?: string[]): AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: AnyObject): AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; -export interface ContextProvider { - domain: string; -} -export declare function DomainContextProviderMixin(superclass: T): { - new (...args: any[]): { - _contextProviders: ContextProvider[]; - readonly contextProviders: ContextProvider[]; - _json: AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): AnyObject; - toJSONSafe(exclude?: string[]): AnyObject; - toJSONQuick(exclude?: string[]): AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: AnyObject): AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; -export declare function ImportantSettingsProviderMixin(superclass: T): { - new (...args: any[]): { - readonly important: any; - setImportant(key: string, value: unknown): void; - readonly importantSettingsProviders: ContextProvider[]; - isImportantEdited: boolean | undefined; - _contextProviders: ContextProvider[]; - readonly contextProviders: ContextProvider[]; - _json: AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): AnyObject; - toJSONSafe(exclude?: string[]): AnyObject; - toJSONQuick(exclude?: string[]): AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: AnyObject): AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; diff --git a/dist/js/entity/mixins/context.js b/dist/js/entity/mixins/context.js deleted file mode 100644 index 76d2bd5b..00000000 --- a/dist/js/entity/mixins/context.js +++ /dev/null @@ -1,84 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ContextAndRenderFieldsMixin = ContextAndRenderFieldsMixin; -exports.DomainContextProviderMixin = DomainContextProviderMixin; -exports.ImportantSettingsProviderMixin = ImportantSettingsProviderMixin; -const clone_1 = require("../../utils/clone"); -function ContextAndRenderFieldsMixin(superclass) { - return class extends superclass { - /** - * @see https://stackoverflow.com/questions/64396668/why-do-typescript-mixins-require-a-constructor-with-a-single-rest-parameter-any - * */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params) { - super(...params); - this._context = params[0].context || {}; - } - // in-memory, or "volatile" context that is reset when the `parent` object is destroyed - get context() { - return this._context; - } - set context(newContext) { - this._context = newContext; - } - updateContext(ctx = {}, executeRender = false) { - this._context = { ...this.context, ...ctx }; - if (executeRender) - this.render(); - } - // to get "persistent" context, that is stored in database and further should be provided to constructor - // when the `parent` object is re-created - getPersistentContext() { - return this.prop("context"); - } - // to make context persistent in `_json` - updatePersistentContext(ctx = {}) { - this.setProp("context", { ...ctx }); - } - // to get persistent and volatile context combined - getCombinedContext() { - return { ...this.getPersistentContext(), ...this.context }; - } - // override in subclasses - // eslint-disable-next-line @typescript-eslint/no-unused-vars - render(_context = this.context) { - throw new Error("RenderInitMixin: render not implemented in derived class"); - } - }; -} -/* - * @summary Handles logic for domain-specific context, eg. "important settings". - * Important settings are stored inside "important" property and have context providers associated with it. - */ -function DomainContextProviderMixin(superclass) { - return class extends superclass { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...args) { - super(...args); - this._contextProviders = []; - } - get contextProviders() { - // override in children - return this._contextProviders; - } - }; -} -function ImportantSettingsProviderMixin(superclass) { - return class extends DomainContextProviderMixin(superclass) { - get important() { - return (0, clone_1.deepClone)(this._json.important || {}); - } - 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"); - } - set isImportantEdited(bool) { - this.setProp("important", Object.assign(this.important, { isEdited: bool })); - } - }; -} diff --git a/dist/js/entity/mixins/flowchart.d.ts b/dist/js/entity/mixins/flowchart.d.ts deleted file mode 100644 index c6f9d797..00000000 --- a/dist/js/entity/mixins/flowchart.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { UnitEntity } from "../../utils/graph"; -import { InMemoryEntityConstructor } from "../in_memory"; -export declare function FlowchartItemMixin(superclass: T): { - new (...params: any[]): { - readonly flowchartId: string; - head: boolean; - next: string | undefined; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; -export declare function FlowchartEntityMixin(superclass: T): { - new (...params: any[]): { - _units: UnitEntity[]; - readonly units: UnitEntity[]; - setUnits(units: UnitEntity[]): void; - addUnit(unit: UnitEntity, index?: number): void; - removeUnit(flowchartId: string): void; - replaceUnit(unit: UnitEntity, index: number): void; - getUnit(flowchartId: string): UnitEntity | undefined; - getUnitIndexByFlowchartId(flowchartId: string): number; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; diff --git a/dist/js/entity/mixins/flowchart.js b/dist/js/entity/mixins/flowchart.js deleted file mode 100644 index e2710de6..00000000 --- a/dist/js/entity/mixins/flowchart.js +++ /dev/null @@ -1,69 +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.FlowchartItemMixin = FlowchartItemMixin; -exports.FlowchartEntityMixin = FlowchartEntityMixin; -const findIndex_1 = __importDefault(require("lodash/findIndex")); -const utils_1 = require("../../utils"); -function FlowchartItemMixin(superclass) { - return class extends superclass { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params) { - super(...params); - const config = params[0]; - if (!(config === null || config === void 0 ? void 0 : config.flowchartId)) { - this.setProp("flowchartId", (0, utils_1.getUUID)()); - } - } - get flowchartId() { - return this.prop("flowchartId", ""); - } - get head() { - return this.prop("head", false); - } - set head(bool) { - this.setProp("head", bool); - } - get next() { - return this.prop("next"); - } - set next(flowchartId) { - this.setProp("next", flowchartId); - } - }; -} -function FlowchartEntityMixin(superclass) { - return class extends superclass { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params) { - var _a; - super(...params); - this._units = ((_a = params[0]) === null || _a === void 0 ? void 0 : _a.units) || []; - } - get units() { - return this._units; - } - setUnits(units) { - this._units = units; - } - addUnit(unit, index = -1) { - this._units = (0, utils_1.addUnit)(this.units, unit, index); - } - removeUnit(flowchartId) { - this._units = (0, utils_1.removeUnit)(this.units, flowchartId); - } - replaceUnit(unit, index) { - this._units = (0, utils_1.replaceUnit)(this.units, unit, index); - } - getUnit(flowchartId) { - return this.units.find((x) => x.flowchartId === flowchartId); - } - getUnitIndexByFlowchartId(flowchartId) { - return (0, findIndex_1.default)(this.units, (unit) => { - return unit.flowchartId === flowchartId; - }); - } - }; -} diff --git a/dist/js/entity/mixins/hash.d.ts b/dist/js/entity/mixins/hash.d.ts deleted file mode 100644 index 2bd9bc90..00000000 --- a/dist/js/entity/mixins/hash.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { InMemoryEntityConstructor } from "../in_memory"; -export declare function HashedEntityMixin(superclass: T): { - new (...args: any[]): { - getHashObject(): {}; - /** - * @summary Calculates hash based on meaningful fields and unit-specific fields. Unit-specific fields are - * separated into _typeSpecificHash function which can be overwritten by child classes. - * head and next are also important but not considered since they are included in subworkflow hash. - */ - calculateHash(): string; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; diff --git a/dist/js/entity/mixins/props.d.ts b/dist/js/entity/mixins/props.d.ts deleted file mode 100644 index 5cea781e..00000000 --- a/dist/js/entity/mixins/props.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import HasScopeTrackMixin from "./HasScopeTrackMixin"; -export { HasScopeTrackMixin }; diff --git a/dist/js/entity/mixins/props.js b/dist/js/entity/mixins/props.js deleted file mode 100644 index d8e7ae1c..00000000 --- a/dist/js/entity/mixins/props.js +++ /dev/null @@ -1,8 +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.HasScopeTrackMixin = void 0; -const HasScopeTrackMixin_1 = __importDefault(require("./HasScopeTrackMixin")); -exports.HasScopeTrackMixin = HasScopeTrackMixin_1.default; diff --git a/dist/js/entity/mixins/repetition.d.ts b/dist/js/entity/mixins/repetition.d.ts deleted file mode 100644 index 60d71b43..00000000 --- a/dist/js/entity/mixins/repetition.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { InMemoryEntityConstructor } from "../in_memory"; -export interface HasRepetition { - setRepetition: (repetition: number) => void; -} -type Units = HasRepetition[]; -type Workflows = HasRepetition[]; -type Subworkflows = HasRepetition[]; -export declare function HasRepetitionMixin(superclass: T): { - new (...args: any[]): { - _repetition: number; - _totalRepetitions: number; - units: Units; - workflows: Workflows; - subworkflows: Subworkflows; - readonly repetition: number; - setRepetition(repetition: number): void; - readonly totalRepetitions: number; - setTotalRepetitions(totalRepetition: number): void; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; -export {}; diff --git a/dist/js/entity/mixins/repetition.js b/dist/js/entity/mixins/repetition.js deleted file mode 100644 index cb93c0ad..00000000 --- a/dist/js/entity/mixins/repetition.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HasRepetitionMixin = HasRepetitionMixin; -function HasRepetitionMixin(superclass) { - return class extends superclass { - constructor() { - super(...arguments); - this._repetition = 0; - this._totalRepetitions = 0; - } - get repetition() { - return this._repetition || 0; - } - // TODO: make abstract and move to workflow/subworkflow classes? - setRepetition(repetition) { - this._repetition = repetition; - if (["Subworkflow", "Workflow"].find((n) => this.constructor.name === n)) { - this.units.forEach((u) => u.setRepetition(repetition)); - } - if (this.constructor.name === "Workflow") { - this.subworkflows.forEach((sw) => sw.setRepetition(repetition)); - this.workflows.forEach((wf) => wf.setRepetition(repetition)); - } - } - get totalRepetitions() { - return this._totalRepetitions || 1; - } - setTotalRepetitions(totalRepetition) { - this._totalRepetitions = totalRepetition; - } - }; -} diff --git a/dist/js/entity/mixins/runtime_items.d.ts b/dist/js/entity/mixins/runtime_items.d.ts deleted file mode 100644 index edb54feb..00000000 --- a/dist/js/entity/mixins/runtime_items.d.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import { NameResultSchema, RuntimeItemSchema } from "@mat3ra/esse/dist/js/types"; -import type { Constructor } from "src/js/utils/types"; -import { InMemoryEntityConstructor } from "../in_memory"; -import RuntimeItemsMixin, { type BaseRuntimeItemsInMemoryEntity, ItemKey } from "./RuntimeItemsMixin"; -export { RuntimeItemsMixin, ItemKey }; -export interface RuntimeItemsUILogicJSON extends AnyObject { - results?: NameResultSchema[]; - monitors?: NameResultSchema[]; - preProcessors?: NameResultSchema[]; - postProcessors?: NameResultSchema[]; -} -export declare function RuntimeItemsUILogicMixin>(superclass: T): { - new (...params: any): { - _json: RuntimeItemsUILogicJSON; - getDefaultsByKey(key: ItemKey): NameResultSchema[] | undefined; - setRuntimeItemsToDefaultValues(): void; - /** - * @summary Must pass config for subclasses to override and use initialization logic - * @private - */ - _initRuntimeItems(keys: ItemKey[], _config: object): void; - _addRuntimeItem(key: ItemKey | undefined, config: RuntimeItemSchema): void; - _removeRuntimeItem(key: ItemKey | undefined, config: RuntimeItemSchema): void; - _removeRuntimeItemByName(key: ItemKey, name: string): void; - _toggleRuntimeItem(key: ItemKey | undefined, data: RuntimeItemSchema, isAdding: boolean): void; - toggleResult(data: RuntimeItemSchema, isAdding: boolean): void; - toggleMonitor(data: RuntimeItemSchema, isAdding: boolean): void; - togglePreProcessor(data: RuntimeItemSchema, isAdding: boolean): void; - togglePostProcessor(data: RuntimeItemSchema, isAdding: boolean): void; - readonly resultNames: string[]; - readonly monitorNames: string[]; - readonly postProcessorNames: string[]; - readonly preProcessorNames: string[]; - getResultByName(name: string): NameResultSchema | undefined; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): AnyObject; - toJSONSafe(exclude?: string[]): AnyObject; - toJSONQuick(exclude?: string[]): AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: AnyObject): AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - defaultResults?: NameResultSchema[]; - defaultMonitors?: NameResultSchema[]; - defaultPreProcessors?: NameResultSchema[]; - defaultPostProcessors?: NameResultSchema[]; - results: NameResultSchema[]; - monitors: NameResultSchema[]; - preProcessors: NameResultSchema[]; - postProcessors: NameResultSchema[]; - hashObjectFromRuntimeItems: { - results: NameResultSchema[]; - preProcessors: NameResultSchema[]; - postProcessors: NameResultSchema[]; - }; - }; -} & T; -export declare function RuntimeItemsUIAllowedMixin(superclass: T): { - new (...args: any[]): { - readonly allowedResults: never[]; - readonly allowedMonitors: never[]; - readonly allowedPostProcessors: never[]; - _json: AnyObject; - prop(name: string, defaultValue: T_1): T_1; - prop(name: string): T_1 | undefined; - requiredProp(name: string): T_1; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): AnyObject; - toJSONSafe(exclude?: string[]): AnyObject; - toJSONQuick(exclude?: string[]): AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: AnyObject): AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & T; diff --git a/dist/js/entity/mixins/runtime_items.js b/dist/js/entity/mixins/runtime_items.js deleted file mode 100644 index 83e5fe83..00000000 --- a/dist/js/entity/mixins/runtime_items.js +++ /dev/null @@ -1,157 +0,0 @@ -"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.ItemKey = exports.RuntimeItemsMixin = void 0; -exports.RuntimeItemsUILogicMixin = RuntimeItemsUILogicMixin; -exports.RuntimeItemsUIAllowedMixin = RuntimeItemsUIAllowedMixin; -const object_1 = require("../../utils/object"); -const RuntimeItemsMixin_1 = __importStar(require("./RuntimeItemsMixin")); -exports.RuntimeItemsMixin = RuntimeItemsMixin_1.default; -Object.defineProperty(exports, "ItemKey", { enumerable: true, get: function () { return RuntimeItemsMixin_1.ItemKey; } }); -const allKeys = [ - RuntimeItemsMixin_1.ItemKey.results, - RuntimeItemsMixin_1.ItemKey.monitors, - RuntimeItemsMixin_1.ItemKey.postProcessors, - RuntimeItemsMixin_1.ItemKey.preProcessors, -]; -function RuntimeItemsUILogicMixin(superclass) { - return class extends (0, RuntimeItemsMixin_1.default)(superclass) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params) { - super(...params); - const config = params[0]; - this._initRuntimeItems(allKeys, config); - } - getDefaultsByKey(key) { - if (key === RuntimeItemsMixin_1.ItemKey.results) { - return this.defaultResults; - } - if (key === RuntimeItemsMixin_1.ItemKey.monitors) { - return this.defaultMonitors; - } - if (key === RuntimeItemsMixin_1.ItemKey.preProcessors) { - return this.defaultPreProcessors; - } - return this.defaultPostProcessors; - } - setRuntimeItemsToDefaultValues() { - allKeys.forEach((name) => this.setProp(name, this.getDefaultsByKey(name))); - } - /** - * @summary Must pass config for subclasses to override and use initialization logic - * @private - */ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _initRuntimeItems(keys, _config) { - // keeping this separate from constructor so that it can be overridden in mixing (eg. in `ExecutionUnit`) - // eslint-disable-next-line @typescript-eslint/no-this-alias - const me = this; - keys.forEach((key) => { - if (!me._json[key]) { - me._json[key] = me.getDefaultsByKey(key); - } - }); - } - // eslint-disable-next-line default-param-last - _addRuntimeItem(key = RuntimeItemsMixin_1.ItemKey.results, config) { - const runtimeItems = this._json[key]; - if (!runtimeItems) { - throw new Error("not found"); - } - runtimeItems.push((0, object_1.safeMakeObject)(config)); - } - // eslint-disable-next-line default-param-last - _removeRuntimeItem(key = RuntimeItemsMixin_1.ItemKey.results, config) { - const newConfig = (0, object_1.safeMakeObject)(config); - this._removeRuntimeItemByName(key, (newConfig === null || newConfig === void 0 ? void 0 : newConfig.name) || ""); - } - _removeRuntimeItemByName(key, name) { - this._json[key] = this._json[key].filter((x) => x.name !== name); - } - _toggleRuntimeItem( - // eslint-disable-next-line default-param-last - key = RuntimeItemsMixin_1.ItemKey.results, data, isAdding) { - if (isAdding) { - this._addRuntimeItem(key, data); - } - else { - this._removeRuntimeItem(key, data); - } - } - toggleResult(data, isAdding) { - this._toggleRuntimeItem(RuntimeItemsMixin_1.ItemKey.results, data, isAdding); - } - toggleMonitor(data, isAdding) { - this._toggleRuntimeItem(RuntimeItemsMixin_1.ItemKey.monitors, data, isAdding); - } - togglePreProcessor(data, isAdding) { - this._toggleRuntimeItem(RuntimeItemsMixin_1.ItemKey.preProcessors, data, isAdding); - } - togglePostProcessor(data, isAdding) { - this._toggleRuntimeItem(RuntimeItemsMixin_1.ItemKey.postProcessors, data, isAdding); - } - get resultNames() { - return this.results.map((r) => { - return r && r.name; - }); - } - get monitorNames() { - return this.monitors.map((r) => r === null || r === void 0 ? void 0 : r.name); - } - get postProcessorNames() { - return this.postProcessors.map((r) => r === null || r === void 0 ? void 0 : r.name); - } - get preProcessorNames() { - return this.preProcessors.map((r) => r === null || r === void 0 ? void 0 : r.name); - } - getResultByName(name) { - return this.results.find((r) => (r === null || r === void 0 ? void 0 : r.name) === name); - } - }; -} -// "Placeholder" mixin. Used to indicate the presence of the fields in parent class. -function RuntimeItemsUIAllowedMixin(superclass) { - return class extends superclass { - get allowedResults() { - return []; - } - get allowedMonitors() { - return []; - } - get allowedPostProcessors() { - return []; - } - }; -} diff --git a/dist/js/entity/other.d.ts b/dist/js/entity/other.d.ts index 2632604d..73c0ac32 100644 --- a/dist/js/entity/other.d.ts +++ b/dist/js/entity/other.d.ts @@ -7,7 +7,7 @@ type DefaultableBase = typeof InMemoryEntity & DefaultableInMemoryEntityConstruc type NamedBase = typeof InMemoryEntity & NamedInMemoryEntityConstructor; type NamedDefaultableBase = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor; type HasMetadataNamedDefaultableBase = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & HasMetadataInMemoryEntityConstructor; -type HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase = typeof HasMetadataNamedDefaultableInMemoryEntity & HasConsistencyChecksInMemoryEntityConstructor; +type HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor & NamedInMemoryEntityConstructor & HasConsistencyChecksInMemoryEntityConstructor; declare const DefaultableInMemoryEntity_base: DefaultableBase; export declare class DefaultableInMemoryEntity extends DefaultableInMemoryEntity_base { } @@ -23,398 +23,4 @@ export declare class HasMetadataNamedDefaultableInMemoryEntity extends HasMetada declare const HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity_base: HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase; export declare class HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity extends HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity_base { } -export declare const NamedDefaultableRepetitionImportantSettingsInMemoryEntity: { - new (...args: any[]): { - readonly important: any; - setImportant(key: string, value: unknown): void; - readonly importantSettingsProviders: import("./mixins/context").ContextProvider[]; - isImportantEdited: boolean | undefined; - _contextProviders: import("./mixins/context").ContextProvider[]; - readonly contextProviders: import("./mixins/context").ContextProvider[]; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & { - new (...args: any[]): { - _repetition: number; - _totalRepetitions: number; - units: import("./mixins/repetition").HasRepetition[]; - workflows: import("./mixins/repetition").HasRepetition[]; - subworkflows: import("./mixins/repetition").HasRepetition[]; - readonly repetition: number; - setRepetition(repetition: number): void; - readonly totalRepetitions: number; - setTotalRepetitions(totalRepetition: number): void; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & typeof NamedDefaultableInMemoryEntity; -export declare const NamedDefaultableRepetitionContextAndRenderInMemoryEntity: { - new (...params: any[]): { - _context: import("./mixins/context").Context; - context: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - updateContext(ctx?: {}, executeRender?: boolean): void; - getPersistentContext(): object | undefined; - updatePersistentContext(ctx?: object): void; - getCombinedContext(): { - [x: string]: unknown; - }; - render(_context?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): void; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & { - new (...args: any[]): { - _repetition: number; - _totalRepetitions: number; - units: import("./mixins/repetition").HasRepetition[]; - workflows: import("./mixins/repetition").HasRepetition[]; - subworkflows: import("./mixins/repetition").HasRepetition[]; - readonly repetition: number; - setRepetition(repetition: number): void; - readonly totalRepetitions: number; - setTotalRepetitions(totalRepetition: number): void; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & typeof NamedDefaultableInMemoryEntity; -export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity: { - new (...args: any[]): { - getHashObject(): {}; - calculateHash(): string; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & { - new (...params: any[]): { - _context: import("./mixins/context").Context; - context: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - updateContext(ctx?: {}, executeRender?: boolean): void; - getPersistentContext(): object | undefined; - updatePersistentContext(ctx?: object): void; - getCombinedContext(): { - [x: string]: unknown; - }; - render(_context?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): void; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & { - new (...args: any[]): { - readonly important: any; - setImportant(key: string, value: unknown): void; - readonly importantSettingsProviders: import("./mixins/context").ContextProvider[]; - isImportantEdited: boolean | undefined; - _contextProviders: import("./mixins/context").ContextProvider[]; - readonly contextProviders: import("./mixins/context").ContextProvider[]; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & { - new (...args: any[]): { - readonly allowedResults: never[]; - readonly allowedMonitors: never[]; - readonly allowedPostProcessors: never[]; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & { - new (...params: any): { - _json: import("./mixins/runtime_items").RuntimeItemsUILogicJSON; - getDefaultsByKey(key: import("./mixins/RuntimeItemsMixin").ItemKey): import("@mat3ra/esse/dist/js/types").NameResultSchema[] | undefined; - setRuntimeItemsToDefaultValues(): void; - _initRuntimeItems(keys: import("./mixins/RuntimeItemsMixin").ItemKey[], _config: object): void; - _addRuntimeItem(key: import("./mixins/RuntimeItemsMixin").ItemKey | undefined, config: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema): void; - _removeRuntimeItem(key: import("./mixins/RuntimeItemsMixin").ItemKey | undefined, config: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema): void; - _removeRuntimeItemByName(key: import("./mixins/RuntimeItemsMixin").ItemKey, name: string): void; - _toggleRuntimeItem(key: import("./mixins/RuntimeItemsMixin").ItemKey | undefined, data: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema, isAdding: boolean): void; - toggleResult(data: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema, isAdding: boolean): void; - toggleMonitor(data: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema, isAdding: boolean): void; - togglePreProcessor(data: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema, isAdding: boolean): void; - togglePostProcessor(data: import("@mat3ra/esse/dist/js/types").RuntimeItemSchema, isAdding: boolean): void; - readonly resultNames: string[]; - readonly monitorNames: string[]; - readonly postProcessorNames: string[]; - readonly preProcessorNames: string[]; - getResultByName(name: string): import("@mat3ra/esse/dist/js/types").NameResultSchema | undefined; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - defaultResults?: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - defaultMonitors?: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - defaultPreProcessors?: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - defaultPostProcessors?: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - results: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - monitors: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - preProcessors: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - postProcessors: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - hashObjectFromRuntimeItems: { - results: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - preProcessors: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - postProcessors: import("@mat3ra/esse/dist/js/types").NameResultSchema[]; - }; - }; -} & { - new (...args: any[]): { - _repetition: number; - _totalRepetitions: number; - units: import("./mixins/repetition").HasRepetition[]; - workflows: import("./mixins/repetition").HasRepetition[]; - subworkflows: import("./mixins/repetition").HasRepetition[]; - readonly repetition: number; - setRepetition(repetition: number): void; - readonly totalRepetitions: number; - setTotalRepetitions(totalRepetition: number): void; - _json: import("@mat3ra/esse/dist/js/esse/types").AnyObject; - prop(name: string, defaultValue: T): T; - prop(name: string): T | undefined; - requiredProp(name: string): T; - setProp(name: string, value: unknown): void; - unsetProp(name: string): void; - setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any; - toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - clone(extraContext?: object): /*elided*/ any; - validate(): void; - clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject; - isValid(): boolean; - readonly cls: string; - getClsName(): string; - getAsEntityReference(byIdOnly: true): { - _id: string; - }; - getAsEntityReference(byIdOnly?: false): Required; - getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity; - id: string; - _id: string; - schemaVersion: string; - systemName: string; - readonly slug: string; - readonly isSystemEntity: boolean; - }; -} & typeof NamedDefaultableInMemoryEntity; export {}; diff --git a/dist/js/entity/other.js b/dist/js/entity/other.js index 7ef78a29..c37b2165 100644 --- a/dist/js/entity/other.js +++ b/dist/js/entity/other.js @@ -1,36 +1,49 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity = exports.NamedDefaultableRepetitionContextAndRenderInMemoryEntity = exports.NamedDefaultableRepetitionImportantSettingsInMemoryEntity = exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = exports.HasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableInMemoryEntity = exports.NamedInMemoryEntity = exports.DefaultableInMemoryEntity = void 0; +exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = exports.HasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableInMemoryEntity = exports.NamedInMemoryEntity = exports.DefaultableInMemoryEntity = void 0; const in_memory_1 = require("./in_memory"); -const context_1 = require("./mixins/context"); const DefaultableMixin_1 = require("./mixins/DefaultableMixin"); const HasConsistencyChecksMixin_1 = require("./mixins/HasConsistencyChecksMixin"); -const hash_1 = require("./mixins/hash"); const HasMetadataMixin_1 = require("./mixins/HasMetadataMixin"); const NamedEntityMixin_1 = require("./mixins/NamedEntityMixin"); -const repetition_1 = require("./mixins/repetition"); -const runtime_items_1 = require("./mixins/runtime_items"); class DefaultableInMemoryEntity extends in_memory_1.InMemoryEntity { } exports.DefaultableInMemoryEntity = DefaultableInMemoryEntity; -(0, DefaultableMixin_1.defaultableEntityMixin)(DefaultableInMemoryEntity.prototype); -(0, DefaultableMixin_1.defaultableEntityStaticMixin)(DefaultableInMemoryEntity); +(0, DefaultableMixin_1.defaultableEntityMixin)(DefaultableInMemoryEntity); class NamedInMemoryEntity extends in_memory_1.InMemoryEntity { } exports.NamedInMemoryEntity = NamedInMemoryEntity; (0, NamedEntityMixin_1.namedEntityMixin)(NamedInMemoryEntity.prototype); -class NamedDefaultableInMemoryEntity extends DefaultableInMemoryEntity { +class NamedDefaultableInMemoryEntity extends in_memory_1.InMemoryEntity { } exports.NamedDefaultableInMemoryEntity = NamedDefaultableInMemoryEntity; (0, NamedEntityMixin_1.namedEntityMixin)(NamedDefaultableInMemoryEntity.prototype); -class HasMetadataNamedDefaultableInMemoryEntity extends NamedDefaultableInMemoryEntity { +(0, DefaultableMixin_1.defaultableEntityMixin)(NamedDefaultableInMemoryEntity); +class HasMetadataNamedDefaultableInMemoryEntity extends in_memory_1.InMemoryEntity { } exports.HasMetadataNamedDefaultableInMemoryEntity = HasMetadataNamedDefaultableInMemoryEntity; +(0, NamedEntityMixin_1.namedEntityMixin)(HasMetadataNamedDefaultableInMemoryEntity.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(HasMetadataNamedDefaultableInMemoryEntity); (0, HasMetadataMixin_1.hasMetadataMixin)(HasMetadataNamedDefaultableInMemoryEntity.prototype); -class HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity extends HasMetadataNamedDefaultableInMemoryEntity { +class HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity extends in_memory_1.InMemoryEntity { } exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity; +(0, NamedEntityMixin_1.namedEntityMixin)(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity); +(0, HasMetadataMixin_1.hasMetadataMixin)(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity.prototype); (0, HasConsistencyChecksMixin_1.hasConsistencyChecksMixin)(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity.prototype); -exports.NamedDefaultableRepetitionImportantSettingsInMemoryEntity = (0, context_1.ImportantSettingsProviderMixin)((0, repetition_1.HasRepetitionMixin)(NamedDefaultableInMemoryEntity)); -exports.NamedDefaultableRepetitionContextAndRenderInMemoryEntity = (0, context_1.ContextAndRenderFieldsMixin)((0, repetition_1.HasRepetitionMixin)(NamedDefaultableInMemoryEntity)); -exports.NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity = (0, hash_1.HashedEntityMixin)((0, context_1.ContextAndRenderFieldsMixin)((0, context_1.ImportantSettingsProviderMixin)((0, runtime_items_1.RuntimeItemsUIAllowedMixin)((0, runtime_items_1.RuntimeItemsUILogicMixin)((0, repetition_1.HasRepetitionMixin)(NamedDefaultableInMemoryEntity)))))); +// export const NamedDefaultableRepetitionImportantSettingsInMemoryEntity = +// ImportantSettingsProviderMixin(HasRepetitionMixin(NamedDefaultableInMemoryEntity)); +// export const NamedDefaultableRepetitionContextAndRenderInMemoryEntity = ContextAndRenderFieldsMixin( +// HasRepetitionMixin(NamedDefaultableInMemoryEntity), +// ); +// export const NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity = +// HashedEntityMixin( +// ContextAndRenderFieldsMixin( +// ImportantSettingsProviderMixin( +// RuntimeItemsUIAllowedMixin( +// RuntimeItemsUILogicMixin(HasRepetitionMixin(NamedDefaultableInMemoryEntity)), +// ), +// ), +// ), +// ); diff --git a/dist/js/generateSchemaMixin.d.ts b/dist/js/generateSchemaMixin.d.ts index ddb4f4fa..09714f4c 100644 --- a/dist/js/generateSchemaMixin.d.ts +++ b/dist/js/generateSchemaMixin.d.ts @@ -6,9 +6,10 @@ import type { JSONSchema7 } from "json-schema"; * @param outputPaths - Object mapping schema IDs to output file paths * @param skipFields - Array of field names to skip during generation * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Object with success and error counts */ -declare function generateShemaMixin(schemas: JSONSchema7[], outputPaths: Record, skipFields?: string[], from?: string): { +declare function generateShemaMixin(schemas: JSONSchema7[], outputPaths: Record, skipFields?: string[], from?: string, entityFrom?: string): { successCount: number; errorCount: number; }; diff --git a/dist/js/generateSchemaMixin.js b/dist/js/generateSchemaMixin.js index d65c0612..06774519 100644 --- a/dist/js/generateSchemaMixin.js +++ b/dist/js/generateSchemaMixin.js @@ -68,9 +68,10 @@ function extractSchemaProperties(schema) { * @param entityTypeName - Name of the entity type * @param skipFields - Array of field names to skip * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Generated TypeScript code */ -function generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName, skipFields = [], from = "@mat3ra/esse/dist/js/types") { +function generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName, skipFields = [], from = "@mat3ra/esse/dist/js/types", entityFrom = "@mat3ra/code/dist/js/entity") { // Convert mixin type name to camelCase for function name const functionName = mixinTypeName.charAt(0).toLowerCase() + mixinTypeName.slice(1); // Extract properties, handling allOf if present @@ -80,14 +81,21 @@ function generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName } // Filter out skip fields const propertyEntries = Object.entries(properties).filter(([propertyName]) => !skipFields.includes(propertyName)); - let code = `import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity";\n`; + let code = `import type { InMemoryEntity } from "${entityFrom}";\n`; code += `import type { ${schemaName} } from "${from}";\n\n`; - // Generate the mixin type using Omit utility - const skipFieldNames = skipFields.map((field) => `"${field}"`).join(" | "); - code += `export type ${mixinTypeName} = Omit<${schemaName}, ${skipFieldNames}>;\n\n`; + // Generate the mixin type - only use Omit if skipFields has values + if (skipFields && skipFields.length > 0) { + const skipFieldNames = skipFields.map((field) => `"${field}"`).join(" | "); + code += `export type ${mixinTypeName} = Omit<${schemaName}, ${skipFieldNames}>;\n\n`; + } + else { + code += `export type ${mixinTypeName} = ${schemaName};\n\n`; + } // Generate the entity type code += `export type ${entityTypeName} = InMemoryEntity & ${mixinTypeName};\n\n`; - code += `export function ${functionName}(item: InMemoryEntity) {\n`; + code += `export function ${functionName}(\n`; + code += ` item: InMemoryEntity,\n`; + code += `): asserts item is T & ${mixinTypeName} {\n`; code += ` // @ts-expect-error\n`; code += ` const properties: InMemoryEntity & ${mixinTypeName} = {\n`; for (let i = 0; i < propertyEntries.length; i++) { @@ -97,6 +105,9 @@ function generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName const typeAnnotation = generateTypeAnnotation(propertyName, schemaName); code += `get ${propertyName}() {\n`; code += `return this.${methodName}<${typeAnnotation}>("${propertyName}");\n`; + code += `},\n`; + code += `set ${propertyName}(value: ${typeAnnotation}) {\n`; + code += `this.setProp("${propertyName}", value);\n`; code += `}`; // Add comma for all properties except the last one if (i < propertyEntries.length - 1) { @@ -117,9 +128,10 @@ function generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName * @param outputPath - The output file path * @param skipFields - Array of field names to skip * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Generated TypeScript code */ -function generateMixinFromSchemaId(schemaId, outputPath, skipFields = [], from = "@mat3ra/esse/dist/js/types") { +function generateMixinFromSchemaId(schemaId, outputPath, skipFields = [], from = "@mat3ra/esse/dist/js/types", entityFrom = "@mat3ra/code/dist/js/entity") { var _a, _b; // Get the resolved schema by ID const schema = JSONSchemasInterface_1.default.getSchemaById(schemaId); @@ -151,7 +163,7 @@ function generateMixinFromSchemaId(schemaId, outputPath, skipFields = [], from = const mixinTypeName = fileName; const entityTypeName = fileName.replace("SchemaMixin", "InMemoryEntity"); // Generate the complete mixin function - return generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName, skipFields, from); + return generateMixinFunction(schema, schemaName, mixinTypeName, entityTypeName, skipFields, from, entityFrom); } /** * Runs ESLint autofix on generated files @@ -177,9 +189,10 @@ function runESLintAutofix(filePaths) { * @param outputPaths - Object mapping schema IDs to output file paths * @param skipFields - Array of field names to skip during generation * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Object with success and error counts */ -function generateShemaMixin(schemas, outputPaths, skipFields = [], from = "@mat3ra/esse/dist/js/types") { +function generateShemaMixin(schemas, outputPaths, skipFields = [], from = "@mat3ra/esse/dist/js/types", entityFrom = "@mat3ra/code/dist/js/entity") { // Setup schemas JSONSchemasInterface_1.default.setSchemas(schemas); console.log("Generating mixin properties for all schemas..."); @@ -194,7 +207,7 @@ function generateShemaMixin(schemas, outputPaths, skipFields = [], from = "@mat3 if (!outputPath) { throw new Error(`No output path defined for schema: ${schemaId}`); } - const generatedCode = generateMixinFromSchemaId(schemaId, outputPath, skipFields, from); + const generatedCode = generateMixinFromSchemaId(schemaId, outputPath, skipFields, from, entityFrom); // Ensure the directory exists const dir = outputPath.substring(0, outputPath.lastIndexOf("/")); if (!fs_1.default.existsSync(dir)) { diff --git a/dist/js/generated/DefaultableSchemaMixin.d.ts b/dist/js/generated/DefaultableSchemaMixin.d.ts new file mode 100644 index 00000000..e254e5c4 --- /dev/null +++ b/dist/js/generated/DefaultableSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { DefaultableEntitySchema } from "@mat3ra/esse/dist/js/types"; +import type { InMemoryEntity } from "../entity/in_memory"; +export type DefaultableSchemaMixin = DefaultableEntitySchema; +export type DefaultableInMemoryEntity = InMemoryEntity & DefaultableSchemaMixin; +export declare function defaultableSchemaMixin(item: InMemoryEntity): asserts item is T & DefaultableSchemaMixin; diff --git a/dist/js/generated/DefaultableSchemaMixin.js b/dist/js/generated/DefaultableSchemaMixin.js new file mode 100644 index 00000000..c9c276f1 --- /dev/null +++ b/dist/js/generated/DefaultableSchemaMixin.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defaultableSchemaMixin = defaultableSchemaMixin; +function defaultableSchemaMixin(item) { + // @ts-expect-error + const properties = { + get isDefault() { + return this.prop("isDefault"); + }, + set isDefault(value) { + this.setProp("isDefault", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/HasConsistencyChecksSchemaMixin.d.ts b/dist/js/generated/HasConsistencyChecksSchemaMixin.d.ts new file mode 100644 index 00000000..9266913b --- /dev/null +++ b/dist/js/generated/HasConsistencyChecksSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { HasConsistencyCheckSchema } from "@mat3ra/esse/dist/js/types"; +import type { InMemoryEntity } from "../entity/in_memory"; +export type HasConsistencyChecksSchemaMixin = HasConsistencyCheckSchema; +export type HasConsistencyChecksInMemoryEntity = InMemoryEntity & HasConsistencyChecksSchemaMixin; +export declare function hasConsistencyChecksSchemaMixin(item: InMemoryEntity): asserts item is T & HasConsistencyChecksSchemaMixin; diff --git a/dist/js/generated/HasConsistencyChecksSchemaMixin.js b/dist/js/generated/HasConsistencyChecksSchemaMixin.js new file mode 100644 index 00000000..5db5cf1e --- /dev/null +++ b/dist/js/generated/HasConsistencyChecksSchemaMixin.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hasConsistencyChecksSchemaMixin = hasConsistencyChecksSchemaMixin; +function hasConsistencyChecksSchemaMixin(item) { + // @ts-expect-error + const properties = { + get consistencyChecks() { + return this.prop("consistencyChecks"); + }, + set consistencyChecks(value) { + this.setProp("consistencyChecks", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/HasDescriptionSchemaMixin.d.ts b/dist/js/generated/HasDescriptionSchemaMixin.d.ts new file mode 100644 index 00000000..5fbec77d --- /dev/null +++ b/dist/js/generated/HasDescriptionSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { DescriptionSchema } from "@mat3ra/esse/dist/js/types"; +import type { InMemoryEntity } from "../entity/in_memory"; +export type HasDescriptionSchemaMixin = DescriptionSchema; +export type HasDescriptionInMemoryEntity = InMemoryEntity & HasDescriptionSchemaMixin; +export declare function hasDescriptionSchemaMixin(item: InMemoryEntity): asserts item is T & HasDescriptionSchemaMixin; diff --git a/dist/js/generated/HasDescriptionSchemaMixin.js b/dist/js/generated/HasDescriptionSchemaMixin.js new file mode 100644 index 00000000..78f97154 --- /dev/null +++ b/dist/js/generated/HasDescriptionSchemaMixin.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hasDescriptionSchemaMixin = hasDescriptionSchemaMixin; +function hasDescriptionSchemaMixin(item) { + // @ts-expect-error + const properties = { + get description() { + return this.prop("description"); + }, + set description(value) { + this.setProp("description", value); + }, + get descriptionObject() { + return this.prop("descriptionObject"); + }, + set descriptionObject(value) { + this.setProp("descriptionObject", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/NamedEntitySchemaMixin.d.ts b/dist/js/generated/NamedEntitySchemaMixin.d.ts new file mode 100644 index 00000000..441041c5 --- /dev/null +++ b/dist/js/generated/NamedEntitySchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { NameEntitySchema } from "@mat3ra/esse/dist/js/types"; +import type { InMemoryEntity } from "../entity/in_memory"; +export type NamedEntitySchemaMixin = NameEntitySchema; +export type NamedEntityInMemoryEntity = InMemoryEntity & NamedEntitySchemaMixin; +export declare function namedEntitySchemaMixin(item: InMemoryEntity): asserts item is T & NamedEntitySchemaMixin; diff --git a/dist/js/generated/NamedEntitySchemaMixin.js b/dist/js/generated/NamedEntitySchemaMixin.js new file mode 100644 index 00000000..6b701eb9 --- /dev/null +++ b/dist/js/generated/NamedEntitySchemaMixin.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.namedEntitySchemaMixin = namedEntitySchemaMixin; +function namedEntitySchemaMixin(item) { + // @ts-expect-error + const properties = { + get name() { + return this.requiredProp("name"); + }, + set name(value) { + this.setProp("name", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/RuntimeItemsSchemaMixin.d.ts b/dist/js/generated/RuntimeItemsSchemaMixin.d.ts new file mode 100644 index 00000000..7de1b3d1 --- /dev/null +++ b/dist/js/generated/RuntimeItemsSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { RuntimeItemsSchema } from "@mat3ra/esse/dist/js/types"; +import type { InMemoryEntity } from "../entity/in_memory"; +export type RuntimeItemsSchemaMixin = RuntimeItemsSchema; +export type RuntimeItemsInMemoryEntity = InMemoryEntity & RuntimeItemsSchemaMixin; +export declare function runtimeItemsSchemaMixin(item: InMemoryEntity): asserts item is T & RuntimeItemsSchemaMixin; diff --git a/dist/js/generated/RuntimeItemsSchemaMixin.js b/dist/js/generated/RuntimeItemsSchemaMixin.js new file mode 100644 index 00000000..88ea0b29 --- /dev/null +++ b/dist/js/generated/RuntimeItemsSchemaMixin.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.runtimeItemsSchemaMixin = runtimeItemsSchemaMixin; +function runtimeItemsSchemaMixin(item) { + // @ts-expect-error + const properties = { + get preProcessors() { + return this.requiredProp("preProcessors"); + }, + set preProcessors(value) { + this.setProp("preProcessors", value); + }, + get postProcessors() { + return this.requiredProp("postProcessors"); + }, + set postProcessors(value) { + this.setProp("postProcessors", value); + }, + get monitors() { + return this.requiredProp("monitors"); + }, + set monitors(value) { + this.setProp("monitors", value); + }, + get results() { + return this.requiredProp("results"); + }, + set results(value) { + this.setProp("results", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/TaggableSchemaMixin.d.ts b/dist/js/generated/TaggableSchemaMixin.d.ts new file mode 100644 index 00000000..a2ced7e6 --- /dev/null +++ b/dist/js/generated/TaggableSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { EntityTagsSchema } from "@mat3ra/esse/dist/js/types"; +import type { InMemoryEntity } from "../entity/in_memory"; +export type TaggableSchemaMixin = EntityTagsSchema; +export type TaggableInMemoryEntity = InMemoryEntity & TaggableSchemaMixin; +export declare function taggableSchemaMixin(item: InMemoryEntity): asserts item is T & TaggableSchemaMixin; diff --git a/dist/js/generated/TaggableSchemaMixin.js b/dist/js/generated/TaggableSchemaMixin.js new file mode 100644 index 00000000..86018a67 --- /dev/null +++ b/dist/js/generated/TaggableSchemaMixin.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.taggableSchemaMixin = taggableSchemaMixin; +function taggableSchemaMixin(item) { + // @ts-expect-error + const properties = { + get tags() { + return this.prop("tags"); + }, + set tags(value) { + this.setProp("tags", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/utils/object.d.ts b/dist/js/utils/object.d.ts index 64eece16..ec2bde55 100644 --- a/dist/js/utils/object.d.ts +++ b/dist/js/utils/object.d.ts @@ -1,4 +1,6 @@ -import { NameResultSchema } from "@mat3ra/esse/dist/js/types"; +export type NameResultSchema = { + name: string; +}; /** * @summary Safely convert input to { name: str } if it is not already * @param name {String|Object} the input to convert diff --git a/package-lock.json b/package-lock.json index 90876478..f11afb16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@babel/register": "^7.25.7", "@babel/runtime-corejs3": "^7.25.7", "@exabyte-io/eslint-config": "^2025.1.15-0", - "@mat3ra/esse": "2025.10.8-0", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#ca7bfd433dd1612fe27f2b8d39853c755359836d", "@mat3ra/tsconfig": "2024.6.3-0", "@types/chai": "^4.3.20", "@types/crypto-js": "^4.2.2", @@ -365,6 +365,19 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", @@ -658,6 +671,26 @@ "@babel/core": "^7.0.0" } }, + "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.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", @@ -675,26 +708,35 @@ "@babel/core": "^7.0.0-0" } }, - "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==", + "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.", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -703,14 +745,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -719,14 +763,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -735,14 +781,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -751,30 +799,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "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==", + "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.", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -783,16 +835,19 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -801,16 +856,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -819,14 +874,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -835,14 +893,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -851,16 +911,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "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", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, "engines": { "node": ">=6.9.0" }, @@ -868,69 +923,58 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "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.", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -939,60 +983,52 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "license": "MIT", "dependencies": { @@ -1005,26 +1041,23 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "license": "MIT", "dependencies": { @@ -1037,97 +1070,92 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1136,15 +1164,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1153,14 +1180,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1170,33 +1196,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "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": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1206,31 +1228,34 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1239,10 +1264,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1255,10 +1280,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-numeric-separator": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, "license": "MIT", "dependencies": { @@ -1271,16 +1296,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-rest-spread": { + "node_modules/@babel/plugin-transform-class-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1289,31 +1313,36 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" @@ -1322,15 +1351,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-optional-chaining": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1339,10 +1368,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1355,14 +1384,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-private-methods": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1372,15 +1401,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-private-property-in-object": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1390,26 +1417,27 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "dev": true, "license": "MIT", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { + "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, "license": "MIT", "dependencies": { @@ -1422,18 +1450,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1442,14 +1466,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { + "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1458,15 +1482,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1475,15 +1499,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "license": "MIT", "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1492,27 +1517,26 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1525,10 +1549,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1541,15 +1565,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1558,13 +1581,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "dev": true, "license": "MIT", "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1574,14 +1598,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1590,14 +1615,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1606,18 +1634,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", - "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.27.0", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1626,30 +1651,30 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "dev": true, "license": "MIT", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1659,15 +1684,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1676,99 +1700,32 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", - "semver": "^6.3.1" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1777,42 +1734,48 @@ "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1821,18 +1784,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-typescript": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", - "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-typescript": "^7.27.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1841,18 +1800,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register": { + "node_modules/@babel/plugin-transform-private-methods": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", - "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "dev": true, "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1861,237 +1817,726 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "dev": true, "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.0.tgz", - "integrity": "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "dev": true, "license": "MIT", "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" - } + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/plugin-transform-react-jsx": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", - "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", "dev": true, "license": "MIT", "dependencies": { - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~4.1.0" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": ">=16" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, + "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, "engines": { - "node": ">= 4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@babel/helper-plugin-utils": "^7.25.9" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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==", - "dev": true - }, - "node_modules/@exabyte-io/eslint-config": { - "version": "2025.1.15-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/eslint-config/-/eslint-config-2025.1.15-0.tgz", - "integrity": "sha512-qQ/K/7HxjhTIOMWpRCo/40CbBF4BjtawGZlD5vcdPFhm/fmbzOodLYJv12ax5PzAf7LVApzDhHvpmr+SmVedaw==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=12.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/eslint-parser": "^7.16.3", + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "bin": { + "semver": "bin/semver.js" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", + "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.0.tgz", + "integrity": "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", + "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "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, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "dev": true + }, + "node_modules/@exabyte-io/eslint-config": { + "version": "2025.1.15-0", + "resolved": "https://registry.npmjs.org/@exabyte-io/eslint-config/-/eslint-config-2025.1.15-0.tgz", + "integrity": "sha512-qQ/K/7HxjhTIOMWpRCo/40CbBF4BjtawGZlD5vcdPFhm/fmbzOodLYJv12ax5PzAf7LVApzDhHvpmr+SmVedaw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@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", @@ -2114,262 +2559,773 @@ "eslint-plugin-simple-import-sort": "^7.0.0" } }, - "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", + "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", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "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, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@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, + "engines": { + "node": ">=8" + } + }, + "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 + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.0.0" } }, - "node_modules/@humanwhocodes/object-schema": { + "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==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { "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", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, - "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==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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" + }, + "node_modules/@mat3ra/esse": { + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#ca7bfd433dd1612fe27f2b8d39853c755359836d", + "integrity": "sha512-t3Rbx0Wwi3pZCeD8WrvQPxNadBCCQVMjB7PCbFCcLsJofN/K1VevS8g0Ax0v7OPzTAOtDwQ0Mk/T/+1+ZdpuXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/cli": "^7.27.0", + "@babel/core": "^7.26.10", + "@babel/eslint-parser": "^7.27.0", + "@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", + "@mat3ra/utils": "^2025.11.20-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-formats": "^2.1.1", + "js-yaml": "^4.1.0", + "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" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@mat3ra/esse/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==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@mat3ra/esse/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@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, + "engines": { + "node": ">=14.0.0" + } + }, + "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": { + "@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/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": { + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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/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/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/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": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@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": { + "semver": "bin/semver.js" + } + }, + "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": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "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==", + "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, - "dependencies": { - "sprintf-js": "~1.0.2" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "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": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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": { - "js-yaml": "bin/js-yaml.js" + "semver": "bin/semver.js" } }, - "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==", + "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": { - "p-locate": "^4.1.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "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==", + "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": { - "p-limit": "^2.2.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "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": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "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==", + "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, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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 + "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": { + "semver": "bin/semver.js" + } }, - "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==", + "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, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "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": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/helper-define-polyfill-provider": "^0.3.1" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "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": { - "node": ">=6.0.0" + "node": ">= 6" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@mat3ra/utils/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": ">=6.0.0" + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "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": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "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": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@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/@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==", + "node_modules/@mat3ra/utils/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/@mat3ra/esse": { - "version": "2025.10.8-0", - "resolved": "https://registry.npmjs.org/@mat3ra/esse/-/esse-2025.10.8-0.tgz", - "integrity": "sha512-JwHWF0nXdcv9pceYePNpAixnjIkQLPtlB2fm4MatRXiH9CqrPrHBRH+t/0v5O1Em2uM5jsnqA+EYB0toOMHOVw==", + "node_modules/@mat3ra/utils/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/cli": "^7.27.0", - "@babel/core": "^7.26.10", - "@babel/eslint-parser": "^7.27.0", - "@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", - "@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-formats": "^2.1.1", - "js-yaml": "^4.1.0", - "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" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=14.0.0" + "node": ">=0.10.0" } }, - "node_modules/@mat3ra/esse/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==", + "node_modules/@mat3ra/utils/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, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "license": "MIT", + "engines": { + "node": ">= 18" } }, - "node_modules/@mat3ra/esse/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@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==", + "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": ">=14.0.0" + "node": ">=4.2.0" } }, "node_modules/@nicolo-ribaudo/chokidar-2": { @@ -8606,6 +9562,13 @@ "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==" }, + "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": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", diff --git a/package.json b/package.json index b8022f83..732a1fc7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "prepare": "husky install", "prettier": "prettier --check src/js tests/js", "test": "nyc --reporter=text mocha --recursive --bail tests/js", - "transpile": "tsc -p tsconfig-transpile.json" + "transpile": "tsc -p tsconfig-transpile.json", + "generate-mixins": "ts-node scripts/generate-mixins.ts" }, "repository": { "type": "git", @@ -54,7 +55,7 @@ "@babel/register": "^7.25.7", "@babel/runtime-corejs3": "^7.25.7", "@exabyte-io/eslint-config": "^2025.1.15-0", - "@mat3ra/esse": "2025.10.8-0", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#ca7bfd433dd1612fe27f2b8d39853c755359836d", "@mat3ra/tsconfig": "2024.6.3-0", "@types/chai": "^4.3.20", "@types/crypto-js": "^4.2.2", diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts new file mode 100644 index 00000000..4adab4d4 --- /dev/null +++ b/scripts/generate-mixins.ts @@ -0,0 +1,51 @@ +#!/usr/bin/env node + +/** + * Script to generate mixin properties from JSON schema + * + * This script generates mixin functions for property/holder, property/meta_holder, + * and property/proto_holder schemas automatically. + * + * Usage: + * npx ts-node scripts/generate-mixin-properties.ts + */ + +import allSchemas from "@mat3ra/esse/dist/js/schemas.json"; +import type { JSONSchema7 } from "json-schema"; + +import generateSchemaMixin from "../dist/js/generateSchemaMixin"; + +/** + * Fields to skip during generation + */ +const SKIP_FIELDS: string[] = []; + +/** + * Output file paths for each schema + */ +const OUTPUT_PATHS = { + "system/defaultable": "src/js/generated/DefaultableSchemaMixin.ts", + "system/has-consistency-check": "src/js/generated/HasConsistencyChecksSchemaMixin.ts", + "system/description": "src/js/generated/HasDescriptionSchemaMixin.ts", + "system/name": "src/js/generated/NamedEntitySchemaMixin.ts", + "system/tags": "src/js/generated/TaggableSchemaMixin.ts", + "system/runtime-items": "src/js/generated/RuntimeItemsSchemaMixin.ts", +}; + +function main() { + // Type assertion to handle schema compatibility - the schemas from esse may have slightly different types + const result = generateSchemaMixin( + allSchemas as JSONSchema7[], + OUTPUT_PATHS, + SKIP_FIELDS, + undefined, + "../entity/in_memory", + ); + + if (result.errorCount > 0) { + process.exit(1); + } +} + +// Run the script if it's executed directly +main(); diff --git a/src/js/constants.ts b/src/js/constants.ts index dbd0d50e..94a33b45 100644 --- a/src/js/constants.ts +++ b/src/js/constants.ts @@ -1,3 +1,38 @@ +export enum Units { + bohr = "bohr", + angstrom = "angstrom", + degree = "degree", + radian = "radian", + alat = "alat", +} + +/** + * @summary Coordinates units for a material's basis. + */ +export enum AtomicCoordinateUnits { + crystal = "crystal", + cartesian = "cartesian", +} + +// in crystal coordinates +export enum Tolerance { + length = 0.01, + lengthAngstrom = 0.001, + pointsDistance = 0.001, +} + +export enum Coefficients { + EV_TO_RY = 0.0734986176, + BOHR_TO_ANGSTROM = 0.52917721092, + ANGSTROM_TO_BOHR = 1 / 0.52917721092, + EV_A_TO_RY_BOHR = 1 / 25.71104309541616, +} + +// Only 3 digits will be considered for lattice and basis params on hashing +export const HASH_TOLERANCE = 3 as const; + +// TODO: remove everything below this line + export const coefficients = { EV_TO_RY: 0.0734986176, BOHR_TO_ANGSTROM: 0.52917721092, @@ -28,9 +63,6 @@ export const ATOMIC_COORD_UNITS = { cartesian: "cartesian", }; -// Only 3 digits will be considered for lattice and basis params on hashing -export const HASH_TOLERANCE = 3; - export default { coefficients, tolerance, diff --git a/src/js/entity/index.ts b/src/js/entity/index.ts index f2185839..4bc9370b 100644 --- a/src/js/entity/index.ts +++ b/src/js/entity/index.ts @@ -1,18 +1,15 @@ import { InMemoryEntity } from "./in_memory"; -import { ContextAndRenderFieldsMixin } from "./mixins/context"; import { RuntimeContextFieldMixin } from "./mixins/context_runtime"; -import { FlowchartEntityMixin, FlowchartItemMixin } from "./mixins/flowchart"; -import { HasScopeTrackMixin } from "./mixins/props"; -import { RuntimeItemsMixin } from "./mixins/runtime_items"; +// import { RuntimeItemsMixin } from "./mixins/runtime_items"; import { DefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, - NamedDefaultableRepetitionContextAndRenderInMemoryEntity, - NamedDefaultableRepetitionImportantSettingsInMemoryEntity, - NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity, NamedInMemoryEntity, + // NamedDefaultableRepetitionContextAndRenderInMemoryEntity, + // NamedDefaultableRepetitionImportantSettingsInMemoryEntity, + // NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity, } from "./other"; import { InMemoryEntitySet } from "./set"; import { ENTITY_SET_TYPES } from "./set/enums"; @@ -30,12 +27,11 @@ export { DefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, - NamedDefaultableRepetitionContextAndRenderInMemoryEntity, - NamedDefaultableRepetitionImportantSettingsInMemoryEntity, - NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity, + // NamedDefaultableRepetitionContextAndRenderInMemoryEntity, + // NamedDefaultableRepetitionImportantSettingsInMemoryEntity, + // NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, - HasScopeTrackMixin, - RuntimeItemsMixin, + // RuntimeItemsMixin, RuntimeContextFieldMixin, InMemoryEntitySet, ENTITY_SET_TYPES, @@ -45,7 +41,4 @@ export { InMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin, OrderedInMemoryEntityInSetMixin, - ContextAndRenderFieldsMixin, - FlowchartEntityMixin, - FlowchartItemMixin, }; diff --git a/src/js/entity/mixins/ContextAndRenderFieldsMixin.ts b/src/js/entity/mixins/ContextAndRenderFieldsMixin.ts new file mode 100644 index 00000000..442064fc --- /dev/null +++ b/src/js/entity/mixins/ContextAndRenderFieldsMixin.ts @@ -0,0 +1,39 @@ +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; + +import type { InMemoryEntity } from "../in_memory"; + +export type Context = AnyObject; + +export type ContextAndRenderFields = { + context?: Context; + updateContext(ctx: Context): void; + getPersistentContext(): Context | undefined; + updatePersistentContext(ctx: Context): void; + getCombinedContext(): Context; +}; + +type AbstractBase = { + render(ctx: Context): void; +}; + +export function contextAndRenderFieldsMixin( + item: T, +): asserts item is T & ContextAndRenderFields { + // @ts-expect-error + const properties: InMemoryEntity & ContextAndRenderFields = { + updateContext(ctx: Context) { + this.context = { ...this.context, ...ctx }; + }, + getPersistentContext() { + return this.prop("context"); + }, + updatePersistentContext(ctx: Context) { + this.setProp("context", { ...ctx }); + }, + getCombinedContext() { + return { ...this.getPersistentContext(), ...this.context }; + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/entity/mixins/DefaultableMixin.ts b/src/js/entity/mixins/DefaultableMixin.ts index 50e7cd9c..43faf9a5 100644 --- a/src/js/entity/mixins/DefaultableMixin.ts +++ b/src/js/entity/mixins/DefaultableMixin.ts @@ -1,29 +1,26 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { Constructor } from "../../utils/types"; +import { + type DefaultableSchemaMixin, + defaultableSchemaMixin, +} from "../../generated/DefaultableSchemaMixin"; +import type { AbstractConstructor, Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export function defaultableEntityMixin(item: T) { - // @ts-expect-error - const properties: InMemoryEntity & DefaultableInMemoryEntity = { - get isDefault() { - return this.prop("isDefault", false); - }, - set isDefault(isDefault: boolean) { - this.setProp("isDefault", isDefault); - }, - }; +export type Defaultable = DefaultableSchemaMixin; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +export type DefaultableInMemoryStaticEntity = { + createDefault: () => InMemoryEntity & Defaultable; +}; - return properties; -} +export type DefaultableInMemoryEntityConstructor = Constructor & + DefaultableInMemoryStaticEntity; -export function defaultableEntityStaticMixin(Item: Constructor) { +function defaultableEntityStaticMixin(Item: AbstractConstructor) { // @ts-expect-error const staticProperties: DefaultableInMemoryStaticEntity & Constructor & - Constructor & { + Constructor & { defaultConfig?: object | null; } = { createDefault() { @@ -36,13 +33,7 @@ export function defaultableEntityStaticMixin(Item: Constructor) return staticProperties; } -export type DefaultableInMemoryEntity = { - isDefault: boolean; -}; - -export type DefaultableInMemoryStaticEntity = { - createDefault: () => InMemoryEntity & DefaultableInMemoryEntity; -}; - -export type DefaultableInMemoryEntityConstructor = Constructor & - DefaultableInMemoryStaticEntity; +export function defaultableEntityMixin(Item: AbstractConstructor) { + defaultableSchemaMixin(Item.prototype); + defaultableEntityStaticMixin(Item); +} diff --git a/src/js/entity/mixins/HasConsistencyChecksMixin.ts b/src/js/entity/mixins/HasConsistencyChecksMixin.ts index 9dd09960..99b8cf58 100644 --- a/src/js/entity/mixins/HasConsistencyChecksMixin.ts +++ b/src/js/entity/mixins/HasConsistencyChecksMixin.ts @@ -1,31 +1,31 @@ import type { ConsistencyCheck } from "@mat3ra/esse/dist/js/types"; +import { + type HasConsistencyChecksSchemaMixin, + hasConsistencyChecksSchemaMixin, +} from "../../generated/HasConsistencyChecksSchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export function hasConsistencyChecksMixin(item: T) { +type HasConsistencyChecksProperties = { + addConsistencyChecks: (array: ConsistencyCheck[]) => void; +}; + +export type HasConsistencyChecks = HasConsistencyChecksSchemaMixin & HasConsistencyChecksProperties; + +export type HasConsistencyChecksInMemoryEntityConstructor = Constructor; + +export function hasConsistencyChecksMixin( + item: T, +): asserts item is T & HasConsistencyChecks { + hasConsistencyChecksSchemaMixin(item); + // @ts-expect-error - const properties: InMemoryEntity & HasConsistencyChecksInMemoryEntity = { - get consistencyChecks(): ConsistencyCheck[] { - return this.prop("consistencyChecks", []); - }, - set consistencyChecks(array: ConsistencyCheck[]) { - this.setProp("consistencyChecks", array); - }, + const properties: InMemoryEntity & HasConsistencyChecks = { addConsistencyChecks(array: ConsistencyCheck[]) { this.consistencyChecks = [...(this.consistencyChecks || []), ...array]; }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; } - -export type HasConsistencyChecksInMemoryEntity = { - consistencyChecks: ConsistencyCheck[]; - addConsistencyChecks: (array: ConsistencyCheck[]) => void; -}; - -export type HasConsistencyChecksInMemoryEntityConstructor = - Constructor; diff --git a/src/js/entity/mixins/HasDescriptionMixin.ts b/src/js/entity/mixins/HasDescriptionMixin.ts index cb6768f3..1c4ba046 100644 --- a/src/js/entity/mixins/HasDescriptionMixin.ts +++ b/src/js/entity/mixins/HasDescriptionMixin.ts @@ -1,33 +1,8 @@ -import type { DescriptionSchema } from "@mat3ra/esse/dist/js/types"; +import { + type HasDescriptionSchemaMixin, + hasDescriptionSchemaMixin, +} from "../../generated/HasDescriptionSchemaMixin"; -import type { Constructor } from "../../utils/types"; -import { InMemoryEntity } from "../in_memory"; +export type HasDescription = HasDescriptionSchemaMixin; -export function hasDescriptionMixin(item: T) { - // @ts-expect-error - const properties: InMemoryEntity & HasDescriptionInMemoryEntity = { - get description(): string { - return this.prop("description", ""); - }, - set description(string: string) { - this.setProp("description", string); - }, - get descriptionObject() { - return this.prop("descriptionObject"); - }, - set descriptionObject(obj: DescriptionSchema["descriptionObject"]) { - this.setProp("descriptionObject", obj); - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; -} - -export type HasDescriptionInMemoryEntity = { - description: string; - descriptionObject: DescriptionSchema["descriptionObject"]; -}; - -export type HasDescriptionInMemoryEntityConstructor = Constructor; +export const hasDescriptionPropertiesMixin = hasDescriptionSchemaMixin; diff --git a/src/js/entity/mixins/HasMetadataMixin.ts b/src/js/entity/mixins/HasMetadataMixin.ts index 359efb80..02cbaedc 100644 --- a/src/js/entity/mixins/HasMetadataMixin.ts +++ b/src/js/entity/mixins/HasMetadataMixin.ts @@ -1,28 +1,39 @@ +import type { MetadataSchema } from "@mat3ra/esse/dist/js/types"; + import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export function hasMetadataMixin(item: T) { +type Metadata = MetadataSchema["metadata"]; + +export type HasMetadata = { + metadata?: T; + updateMetadata: (object: Partial) => void; +}; + +export type HasMetadataInMemoryEntityConstructor = Constructor< + HasMetadata +>; + +function hasMetadataPropertiesMixin( + item: T, +): asserts item is T & HasMetadata { // @ts-expect-error - const properties: InMemoryEntity & HasMetadataInMemoryEntity = { - get metadata(): object { - return this.prop("metadata", {}); + const properties: InMemoryEntity & HasMetadata = { + get metadata() { + return this.prop("metadata"); }, - set metadata(object: object) { - this.setProp("metadata", object); + set metadata(value: M | undefined) { + this.setProp("metadata", value); }, - updateMetadata(object: object) { - this.metadata = { ...this.metadata, ...object }; + updateMetadata(object: Partial) { + this.setProp("metadata", { ...this.metadata, ...object }); }, }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; } -export type HasMetadataInMemoryEntity = { - metadata: object; - updateMetadata: (object: object) => void; -}; - -export type HasMetadataInMemoryEntityConstructor = Constructor; +export function hasMetadataMixin( + item: T, +): asserts item is T & HasMetadata { + hasMetadataPropertiesMixin(item); +} diff --git a/src/js/entity/mixins/HasRepetitionMixin.ts b/src/js/entity/mixins/HasRepetitionMixin.ts new file mode 100644 index 00000000..e4d834ff --- /dev/null +++ b/src/js/entity/mixins/HasRepetitionMixin.ts @@ -0,0 +1,46 @@ +import type { InMemoryEntity } from "../in_memory"; + +export interface HasRepetition { + _repetition: number; + _totalRepetitions: number; + repetition: number; + totalRepetitions: number; + setRepetition: (repetition: number) => void; + setTotalRepetitions: (totalRepetition: number) => void; +} + +export function hasRepetitionMixin( + item: T, +): asserts item is T & HasRepetition { + // @ts-expect-error + const properties: InMemoryEntity & HasRepetition = { + _repetition: 0, + + _totalRepetitions: 0, + + get repetition() { + return this._repetition; + }, + set repetition(repetition: number) { + this._repetition = repetition; + }, + get totalRepetitions() { + return this._totalRepetitions || 1; + }, + setRepetition(repetition: number) { + this.repetition = repetition; + // if (["Subworkflow", "Workflow"].find((n) => this.constructor.name === n)) { + // this.units.forEach((u) => u.setRepetition(repetition)); + // } + + // if (this.constructor.name === "Workflow") { + // this.subworkflows.forEach((sw) => sw.setRepetition(repetition)); + // this.workflows.forEach((wf) => wf.setRepetition(repetition)); + // } + }, + setTotalRepetitions(totalRepetition: number) { + this._totalRepetitions = totalRepetition; + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/entity/mixins/HasScopeTrackMixin.ts b/src/js/entity/mixins/HasScopeTrackMixin.ts deleted file mode 100644 index 195602bb..00000000 --- a/src/js/entity/mixins/HasScopeTrackMixin.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { Constructor } from "../../utils/types"; -import { InMemoryEntity, InMemoryEntityConstructor } from "../in_memory"; - -function schemaMixin(item: InMemoryEntity) { - const schema = { - get scopeTrack(): unknown[] { - return item.prop("scopeTrack", []); - }, - set scopeTrack(array: unknown[]) { - item.setProp("scopeTrack", array); - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(schema)); - - return schema; -} - -export function hasScopeTrackMixin(item: InMemoryEntity) { - return schemaMixin(item); -} - -export type HasScopeTrackInMemoryEntity = ReturnType; -export type HasScopeTrackInMemoryEntityConstructor = Constructor; - -export default function HasScopeTrackMixin(superclass: S) { - class HasScopeTrackMixin extends superclass { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...args: any[]) { - super(...args); - hasScopeTrackMixin(this); - } - } - - return HasScopeTrackMixin as S & HasScopeTrackInMemoryEntityConstructor; -} diff --git a/src/js/entity/mixins/HashedEntityMixin.ts b/src/js/entity/mixins/HashedEntityMixin.ts new file mode 100644 index 00000000..7aed5a06 --- /dev/null +++ b/src/js/entity/mixins/HashedEntityMixin.ts @@ -0,0 +1,28 @@ +import { calculateHashFromObject } from "../../utils/hash"; +import type { Constructor } from "../../utils/types"; +import { InMemoryEntity } from "../in_memory"; + +export type HashedEntity = { + calculateHash(): string; + getHashObject?(): object; +}; + +export type HashedInMemoryEntityConstructor = Constructor; + +export function hashedEntityMixin( + item: T, +): asserts item is T & HashedEntity { + // @ts-expect-error + const properties: InMemoryEntity & HashedEntity = { + /** + * @summary Calculates hash based on meaningful fields and unit-specific fields. Unit-specific fields are + * separated into _typeSpecificHash function which can be overwritten by child classes. + * head and next are also important but not considered since they are included in subworkflow hash. + */ + calculateHash() { + return calculateHashFromObject(this.getHashObject?.() ?? {}); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/entity/mixins/ImportantSettingsProviderMixin.ts b/src/js/entity/mixins/ImportantSettingsProviderMixin.ts new file mode 100644 index 00000000..0ea00155 --- /dev/null +++ b/src/js/entity/mixins/ImportantSettingsProviderMixin.ts @@ -0,0 +1,50 @@ +import { deepClone } from "../../utils/clone"; +import type { Constructor } from "../../utils/types"; +import type { InMemoryEntity } from "../in_memory"; + +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( + 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 importantSettingsProviders() { + return this.contextProviders.filter((p) => p.domain === "important"); + }, + + 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/entity/mixins/NamedEntityMixin.ts b/src/js/entity/mixins/NamedEntityMixin.ts index 1410281e..e3e115b8 100644 --- a/src/js/entity/mixins/NamedEntityMixin.ts +++ b/src/js/entity/mixins/NamedEntityMixin.ts @@ -1,28 +1,34 @@ +import { + type NamedEntitySchemaMixin, + namedEntitySchemaMixin, +} from "../../generated/NamedEntitySchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export function namedEntityMixin(item: T) { +type NamedEntityProperties = { + setName: (name: string) => void; +}; + +export type NamedEntity = NamedEntitySchemaMixin & NamedEntityProperties; + +export type NamedInMemoryEntityConstructor = Constructor; + +function namedEntityPropertiesMixin( + item: T, +): asserts item is T & NamedEntity { // @ts-expect-error - const properties: InMemoryEntity & NamedInMemoryEntity = { - get name(): string { - return this.prop("name", ""); - }, - set name(name: string) { - this.setProp("name", name); - }, + const properties: InMemoryEntity & NamedEntity = { setName(name: string) { this.setProp("name", name); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; } -export type NamedInMemoryEntity = { - name: string; - setName: (name: string) => void; -}; - -export type NamedInMemoryEntityConstructor = Constructor; +export function namedEntityMixin( + item: T, +): asserts item is T & NamedEntity { + namedEntitySchemaMixin(item); + namedEntityPropertiesMixin(item); +} diff --git a/src/js/entity/mixins/RuntimeItemsMixin.ts b/src/js/entity/mixins/RuntimeItemsMixin.ts index 6f1dfbf5..432acb33 100644 --- a/src/js/entity/mixins/RuntimeItemsMixin.ts +++ b/src/js/entity/mixins/RuntimeItemsMixin.ts @@ -1,56 +1,27 @@ -import type { NameResultSchema } from "@mat3ra/esse/dist/js/types"; - -import { safeMakeObject } from "../../utils/object"; +import { + type RuntimeItemsSchemaMixin, + runtimeItemsSchemaMixin, +} from "../../generated/RuntimeItemsSchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export enum ItemKey { - results = "results", - monitors = "monitors", - preProcessors = "preProcessors", - postProcessors = "postProcessors", -} - -export type BaseRuntimeItemsInMemoryEntity = InMemoryEntity & { - _json: { - results?: NameResultSchema[]; - monitors?: NameResultSchema[]; - preProcessors?: NameResultSchema[]; - postProcessors?: NameResultSchema[]; +type RuntimeItemsProperties = { + hashObjectFromRuntimeItems: { + results: RuntimeItemsSchemaMixin["results"]; + preProcessors: RuntimeItemsSchemaMixin["preProcessors"]; + postProcessors: RuntimeItemsSchemaMixin["postProcessors"]; }; - defaultResults?: NameResultSchema[]; - defaultMonitors?: NameResultSchema[]; - defaultPreProcessors?: NameResultSchema[]; - defaultPostProcessors?: NameResultSchema[]; }; -/* - * @summary Contains runtime items: results, monitors, pre/postProcessors - * Is meant to work with Entity, InMemoryEntity b/c of `prop` extraction from `_json`. - */ -export function runtimeItemsMixin(item: BaseRuntimeItemsInMemoryEntity) { - // @ts-expect-error - this is a hack to get the properties of the item - const properties: BaseRuntimeItemsInMemoryEntity & RuntimeItemsInMemoryEntity = { - get results(): NameResultSchema[] { - return this.prop("results", this.defaultResults ?? []).map(safeMakeObject); - }, +export type RuntimeItems = RuntimeItemsSchemaMixin & RuntimeItemsProperties; - get monitors(): NameResultSchema[] { - return this.prop("monitors", this.defaultMonitors ?? []).map(safeMakeObject); - }, - - get preProcessors(): NameResultSchema[] { - // TODO: safeMakeObject could return null. Should we throw an error here? - return this.prop("preProcessors", this.defaultPreProcessors ?? []).map(safeMakeObject); - }, - - get postProcessors(): NameResultSchema[] { - // TODO: safeMakeObject could return null. Should we throw an error here? - return this.prop("postProcessors", this.defaultPostProcessors ?? []).map( - safeMakeObject, - ); - }, +export type RuntimeItemsInMemoryEntityConstructor = Constructor; +function runtimeItemsPropertiesMixin( + item: T, +): asserts item is T & RuntimeItems { + // @ts-expect-error + const properties: InMemoryEntity & RuntimeItemsNameObject = { get hashObjectFromRuntimeItems() { return { results: this.results, @@ -63,26 +34,9 @@ export function runtimeItemsMixin(item: BaseRuntimeItemsInMemoryEntity) { Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); } -export type RuntimeItemsInMemoryEntity = { - results: NameResultSchema[]; - monitors: NameResultSchema[]; - preProcessors: NameResultSchema[]; - postProcessors: NameResultSchema[]; - hashObjectFromRuntimeItems: { - results: NameResultSchema[]; - preProcessors: NameResultSchema[]; - postProcessors: NameResultSchema[]; - }; -}; - -export type RuntimeItemsInMemoryEntityConstructor = Constructor; - -export default function RuntimeItemsMixin>( - superclass: S, -) { - class RuntimeItemsMixin extends superclass {} - - runtimeItemsMixin(RuntimeItemsMixin.prototype); - - return RuntimeItemsMixin as S & RuntimeItemsInMemoryEntityConstructor; +export function runtimeItemsMixin( + item: T, +): asserts item is T & RuntimeItems { + runtimeItemsSchemaMixin(item); + runtimeItemsPropertiesMixin(item); } diff --git a/src/js/entity/mixins/TaggableMixin.ts b/src/js/entity/mixins/TaggableMixin.ts index 76375f0e..2d5effb5 100644 --- a/src/js/entity/mixins/TaggableMixin.ts +++ b/src/js/entity/mixins/TaggableMixin.ts @@ -1,28 +1,27 @@ +import { type TaggableSchemaMixin, taggableSchemaMixin } from "../../generated/TaggableSchemaMixin"; import type { Constructor } from "../../utils/types"; import { InMemoryEntity } from "../in_memory"; -export function taggableMixin(item: T) { +type TaggableProperties = { + setTags: (array: string[]) => void; +}; + +export type Taggable = TaggableSchemaMixin & TaggableProperties; + +export type TaggableInMemoryEntityConstructor = Constructor; + +function taggablePropertiesMixin(item: T): asserts item is T & Taggable { // @ts-expect-error - const properties: InMemoryEntity & TaggableInMemoryEntity = { - get tags(): string[] { - return this.prop("tags", []); - }, - set tags(array: string[]) { - this.setProp("tags", array); - }, + const properties: InMemoryEntity & Taggable = { setTags(array: string[]) { this.tags = array.filter((value, index, self) => self.indexOf(value) === index); }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; } -export type TaggableInMemoryEntity = { - tags: string[]; - setTags: (array: string[]) => void; -}; - -export type TaggableInMemoryEntityConstructor = Constructor; +export function taggableMixin(item: T): asserts item is T & Taggable { + taggableSchemaMixin(item); + taggablePropertiesMixin(item); +} diff --git a/src/js/entity/mixins/context.ts b/src/js/entity/mixins/context.ts deleted file mode 100644 index f2f2bac5..00000000 --- a/src/js/entity/mixins/context.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; - -import { deepClone } from "../../utils/clone"; -import { InMemoryEntityConstructor } from "../in_memory"; - -// TODO: clarify interface -export type Context = AnyObject; - -export function ContextAndRenderFieldsMixin(superclass: T) { - return class extends superclass { - _context: Context; - - /** - * @see https://stackoverflow.com/questions/64396668/why-do-typescript-mixins-require-a-constructor-with-a-single-rest-parameter-any - * */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params: any[]) { - super(...params); - - this._context = params[0].context || {}; - } - - // in-memory, or "volatile" context that is reset when the `parent` object is destroyed - get context() { - return this._context; - } - - set context(newContext) { - this._context = newContext; - } - - updateContext(ctx = {}, executeRender = false) { - this._context = { ...this.context, ...ctx }; - if (executeRender) this.render(); - } - - // to get "persistent" context, that is stored in database and further should be provided to constructor - // when the `parent` object is re-created - getPersistentContext() { - return this.prop("context"); - } - - // to make context persistent in `_json` - updatePersistentContext(ctx: object = {}) { - this.setProp("context", { ...ctx }); - } - - // to get persistent and volatile context combined - getCombinedContext() { - return { ...this.getPersistentContext(), ...this.context }; - } - - // override in subclasses - // eslint-disable-next-line @typescript-eslint/no-unused-vars - render(_context = this.context) { - throw new Error("RenderInitMixin: render not implemented in derived class"); - } - }; -} - -export interface ContextProvider { - domain: string; -} - -/* - * @summary Handles logic for domain-specific context, eg. "important settings". - * Important settings are stored inside "important" property and have context providers associated with it. - */ -export function DomainContextProviderMixin(superclass: T) { - return class extends superclass { - _contextProviders: ContextProvider[]; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...args: any[]) { - super(...args); - this._contextProviders = []; - } - - get contextProviders() { - // override in children - return this._contextProviders; - } - }; -} - -export function ImportantSettingsProviderMixin(superclass: T) { - return class extends DomainContextProviderMixin(superclass) { - get important() { - return deepClone(this._json.important || {}); - } - - setImportant(key: string, value: unknown) { - this.setProp("important", { [key]: value }); - } - - get importantSettingsProviders() { - return this.contextProviders.filter((p) => p.domain === "important"); - } - - get isImportantEdited() { - return this.prop("important.isEdited"); - } - - set isImportantEdited(bool) { - this.setProp("important", Object.assign(this.important, { isEdited: bool })); - } - }; -} diff --git a/src/js/entity/mixins/flowchart.ts b/src/js/entity/mixins/flowchart.ts deleted file mode 100644 index 951f783c..00000000 --- a/src/js/entity/mixins/flowchart.ts +++ /dev/null @@ -1,83 +0,0 @@ -import findIndex from "lodash/findIndex"; - -import { addUnit, getUUID, removeUnit, replaceUnit } from "../../utils"; -import { UnitEntity } from "../../utils/graph"; -import { InMemoryEntityConstructor } from "../in_memory"; - -export function FlowchartItemMixin(superclass: T) { - return class extends superclass implements UnitEntity { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params: any[]) { - super(...params); - - const config = params[0]; - - if (!config?.flowchartId) { - this.setProp("flowchartId", getUUID()); - } - } - - get flowchartId(): string { - return this.prop("flowchartId", ""); - } - - get head(): boolean { - return this.prop("head", false); - } - - set head(bool) { - this.setProp("head", bool); - } - - get next() { - return this.prop("next"); - } - - set next(flowchartId: string | undefined) { - this.setProp("next", flowchartId); - } - }; -} - -export function FlowchartEntityMixin(superclass: T) { - return class extends superclass { - _units: UnitEntity[]; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params: any[]) { - super(...params); - - this._units = params[0]?.units || []; - } - - get units() { - return this._units; - } - - setUnits(units: UnitEntity[]) { - this._units = units; - } - - addUnit(unit: UnitEntity, index = -1) { - this._units = addUnit(this.units, unit, index); - } - - removeUnit(flowchartId: string) { - this._units = removeUnit(this.units, flowchartId); - } - - replaceUnit(unit: UnitEntity, index: number) { - this._units = replaceUnit(this.units, unit, index); - } - - getUnit(flowchartId: string) { - return this.units.find((x) => x.flowchartId === flowchartId); - } - - getUnitIndexByFlowchartId(flowchartId: string) { - return findIndex(this.units, (unit) => { - return unit.flowchartId === flowchartId; - }); - } - }; -} diff --git a/src/js/entity/mixins/hash.ts b/src/js/entity/mixins/hash.ts deleted file mode 100644 index 6a62b741..00000000 --- a/src/js/entity/mixins/hash.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { calculateHashFromObject } from "../../utils/hash"; -import { InMemoryEntityConstructor } from "../in_memory"; - -export function HashedEntityMixin(superclass: T) { - return class extends superclass { - /* - * @summary Returns an object based on meaningful fields for this unit, that will be used to calculate the hash - * Must be overridden. - */ - // eslint-disable-next-line class-methods-use-this - getHashObject() { - return {}; - } - - /** - * @summary Calculates hash based on meaningful fields and unit-specific fields. Unit-specific fields are - * separated into _typeSpecificHash function which can be overwritten by child classes. - * head and next are also important but not considered since they are included in subworkflow hash. - */ - calculateHash() { - return calculateHashFromObject(this.getHashObject()); - } - }; -} diff --git a/src/js/entity/mixins/props.ts b/src/js/entity/mixins/props.ts deleted file mode 100644 index cc83669e..00000000 --- a/src/js/entity/mixins/props.ts +++ /dev/null @@ -1,3 +0,0 @@ -import HasScopeTrackMixin from "./HasScopeTrackMixin"; - -export { HasScopeTrackMixin }; diff --git a/src/js/entity/mixins/repetition.ts b/src/js/entity/mixins/repetition.ts deleted file mode 100644 index 5de0f653..00000000 --- a/src/js/entity/mixins/repetition.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { InMemoryEntityConstructor } from "../in_memory"; - -export interface HasRepetition { - setRepetition: (repetition: number) => void; -} - -type Units = HasRepetition[]; -type Workflows = HasRepetition[]; -type Subworkflows = HasRepetition[]; - -export function HasRepetitionMixin(superclass: T) { - return class extends superclass { - _repetition = 0; - - _totalRepetitions = 0; - - // TODO: has to be moved somewhere - declare units: Units; - - declare workflows: Workflows; - - declare subworkflows: Subworkflows; - - get repetition() { - return this._repetition || 0; - } - - // TODO: make abstract and move to workflow/subworkflow classes? - setRepetition(repetition: number) { - this._repetition = repetition; - - if (["Subworkflow", "Workflow"].find((n) => this.constructor.name === n)) { - this.units.forEach((u) => u.setRepetition(repetition)); - } - - if (this.constructor.name === "Workflow") { - this.subworkflows.forEach((sw) => sw.setRepetition(repetition)); - this.workflows.forEach((wf) => wf.setRepetition(repetition)); - } - } - - get totalRepetitions() { - return this._totalRepetitions || 1; - } - - setTotalRepetitions(totalRepetition: number) { - this._totalRepetitions = totalRepetition; - } - }; -} diff --git a/src/js/entity/mixins/runtime_items.ts b/src/js/entity/mixins/runtime_items.ts deleted file mode 100644 index 3ea5facb..00000000 --- a/src/js/entity/mixins/runtime_items.ts +++ /dev/null @@ -1,166 +0,0 @@ -/* eslint-disable class-methods-use-this */ -import { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import { NameResultSchema, RuntimeItemSchema } from "@mat3ra/esse/dist/js/types"; -import type { Constructor } from "src/js/utils/types"; - -import { safeMakeObject } from "../../utils/object"; -import { InMemoryEntityConstructor } from "../in_memory"; -import RuntimeItemsMixin, { - type BaseRuntimeItemsInMemoryEntity, - ItemKey, -} from "./RuntimeItemsMixin"; - -export { RuntimeItemsMixin, ItemKey }; - -export interface RuntimeItemsUILogicJSON extends AnyObject { - results?: NameResultSchema[]; - monitors?: NameResultSchema[]; - preProcessors?: NameResultSchema[]; - postProcessors?: NameResultSchema[]; -} - -const allKeys: ItemKey[] = [ - ItemKey.results, - ItemKey.monitors, - ItemKey.postProcessors, - ItemKey.preProcessors, -]; - -export function RuntimeItemsUILogicMixin>( - superclass: T, -) { - return class extends RuntimeItemsMixin(superclass) { - declare _json: RuntimeItemsUILogicJSON; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor(...params: any) { - super(...params); - - const config = params[0]; - - this._initRuntimeItems(allKeys, config); - } - - getDefaultsByKey(key: ItemKey) { - if (key === ItemKey.results) { - return this.defaultResults; - } - if (key === ItemKey.monitors) { - return this.defaultMonitors; - } - if (key === ItemKey.preProcessors) { - return this.defaultPreProcessors; - } - return this.defaultPostProcessors; - } - - setRuntimeItemsToDefaultValues() { - allKeys.forEach((name) => this.setProp(name, this.getDefaultsByKey(name))); - } - - /** - * @summary Must pass config for subclasses to override and use initialization logic - * @private - */ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _initRuntimeItems(keys: ItemKey[], _config: object) { - // keeping this separate from constructor so that it can be overridden in mixing (eg. in `ExecutionUnit`) - // eslint-disable-next-line @typescript-eslint/no-this-alias - const me = this; - keys.forEach((key) => { - if (!me._json[key]) { - me._json[key] = me.getDefaultsByKey(key); - } - }); - } - - // eslint-disable-next-line default-param-last - _addRuntimeItem(key: ItemKey = ItemKey.results, config: RuntimeItemSchema) { - const runtimeItems = this._json[key]; - if (!runtimeItems) { - throw new Error("not found"); - } - runtimeItems.push(safeMakeObject(config)); - } - - // eslint-disable-next-line default-param-last - _removeRuntimeItem(key: ItemKey = ItemKey.results, config: RuntimeItemSchema) { - const newConfig = safeMakeObject(config); - this._removeRuntimeItemByName(key, newConfig?.name || ""); - } - - _removeRuntimeItemByName(key: ItemKey, name: string) { - this._json[key] = (this._json[key] as NameResultSchema[]).filter( - (x) => x.name !== name, - ); - } - - _toggleRuntimeItem( - // eslint-disable-next-line default-param-last - key: ItemKey = ItemKey.results, - data: RuntimeItemSchema, - isAdding: boolean, - ) { - if (isAdding) { - this._addRuntimeItem(key, data); - } else { - this._removeRuntimeItem(key, data); - } - } - - toggleResult(data: RuntimeItemSchema, isAdding: boolean) { - this._toggleRuntimeItem(ItemKey.results, data, isAdding); - } - - toggleMonitor(data: RuntimeItemSchema, isAdding: boolean) { - this._toggleRuntimeItem(ItemKey.monitors, data, isAdding); - } - - togglePreProcessor(data: RuntimeItemSchema, isAdding: boolean) { - this._toggleRuntimeItem(ItemKey.preProcessors, data, isAdding); - } - - togglePostProcessor(data: RuntimeItemSchema, isAdding: boolean) { - this._toggleRuntimeItem(ItemKey.postProcessors, data, isAdding); - } - - get resultNames() { - return this.results.map((r) => { - return r && r.name; - }); - } - - get monitorNames() { - return this.monitors.map((r) => r?.name); - } - - get postProcessorNames() { - return this.postProcessors.map((r) => r?.name); - } - - get preProcessorNames() { - return this.preProcessors.map((r) => r?.name); - } - - getResultByName(name: string) { - return this.results.find((r) => r?.name === name); - } - }; -} - -// "Placeholder" mixin. Used to indicate the presence of the fields in parent class. -export function RuntimeItemsUIAllowedMixin(superclass: T) { - return class extends superclass { - get allowedResults() { - return []; - } - - get allowedMonitors() { - return []; - } - - get allowedPostProcessors() { - return []; - } - }; -} diff --git a/src/js/entity/other.ts b/src/js/entity/other.ts index a15e8dac..2ce52c8f 100644 --- a/src/js/entity/other.ts +++ b/src/js/entity/other.ts @@ -1,22 +1,17 @@ import { InMemoryEntity } from "./in_memory"; -import { ContextAndRenderFieldsMixin, ImportantSettingsProviderMixin } from "./mixins/context"; import { type DefaultableInMemoryEntityConstructor, defaultableEntityMixin, - defaultableEntityStaticMixin, } from "./mixins/DefaultableMixin"; import { type HasConsistencyChecksInMemoryEntityConstructor, hasConsistencyChecksMixin, } from "./mixins/HasConsistencyChecksMixin"; -import { HashedEntityMixin } from "./mixins/hash"; import { type HasMetadataInMemoryEntityConstructor, hasMetadataMixin, } from "./mixins/HasMetadataMixin"; import { type NamedInMemoryEntityConstructor, namedEntityMixin } from "./mixins/NamedEntityMixin"; -import { HasRepetitionMixin } from "./mixins/repetition"; -import { RuntimeItemsUIAllowedMixin, RuntimeItemsUILogicMixin } from "./mixins/runtime_items"; type DefaultableBase = typeof InMemoryEntity & DefaultableInMemoryEntityConstructor; @@ -31,40 +26,46 @@ type HasMetadataNamedDefaultableBase = typeof InMemoryEntity & NamedInMemoryEntityConstructor & HasMetadataInMemoryEntityConstructor; -type HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase = - typeof HasMetadataNamedDefaultableInMemoryEntity & - HasConsistencyChecksInMemoryEntityConstructor; +type HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase = typeof InMemoryEntity & + DefaultableInMemoryEntityConstructor & + NamedInMemoryEntityConstructor & + HasConsistencyChecksInMemoryEntityConstructor; export class DefaultableInMemoryEntity extends (InMemoryEntity as DefaultableBase) {} -defaultableEntityMixin(DefaultableInMemoryEntity.prototype); -defaultableEntityStaticMixin(DefaultableInMemoryEntity); +defaultableEntityMixin(DefaultableInMemoryEntity); export class NamedInMemoryEntity extends (InMemoryEntity as NamedBase) {} namedEntityMixin(NamedInMemoryEntity.prototype); -export class NamedDefaultableInMemoryEntity extends (DefaultableInMemoryEntity as NamedDefaultableBase) {} +export class NamedDefaultableInMemoryEntity extends (InMemoryEntity as NamedDefaultableBase) {} namedEntityMixin(NamedDefaultableInMemoryEntity.prototype); +defaultableEntityMixin(NamedDefaultableInMemoryEntity); -export class HasMetadataNamedDefaultableInMemoryEntity extends (NamedDefaultableInMemoryEntity as HasMetadataNamedDefaultableBase) {} +export class HasMetadataNamedDefaultableInMemoryEntity extends (InMemoryEntity as HasMetadataNamedDefaultableBase) {} +namedEntityMixin(HasMetadataNamedDefaultableInMemoryEntity.prototype); +defaultableEntityMixin(HasMetadataNamedDefaultableInMemoryEntity); hasMetadataMixin(HasMetadataNamedDefaultableInMemoryEntity.prototype); -export class HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity extends (HasMetadataNamedDefaultableInMemoryEntity as HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase) {} +export class HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity extends (InMemoryEntity as HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntityBase) {} +namedEntityMixin(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity.prototype); +defaultableEntityMixin(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity); +hasMetadataMixin(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity.prototype); hasConsistencyChecksMixin(HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity.prototype); -export const NamedDefaultableRepetitionImportantSettingsInMemoryEntity = - ImportantSettingsProviderMixin(HasRepetitionMixin(NamedDefaultableInMemoryEntity)); +// export const NamedDefaultableRepetitionImportantSettingsInMemoryEntity = +// ImportantSettingsProviderMixin(HasRepetitionMixin(NamedDefaultableInMemoryEntity)); -export const NamedDefaultableRepetitionContextAndRenderInMemoryEntity = ContextAndRenderFieldsMixin( - HasRepetitionMixin(NamedDefaultableInMemoryEntity), -); +// export const NamedDefaultableRepetitionContextAndRenderInMemoryEntity = ContextAndRenderFieldsMixin( +// HasRepetitionMixin(NamedDefaultableInMemoryEntity), +// ); -export const NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity = - HashedEntityMixin( - ContextAndRenderFieldsMixin( - ImportantSettingsProviderMixin( - RuntimeItemsUIAllowedMixin( - RuntimeItemsUILogicMixin(HasRepetitionMixin(NamedDefaultableInMemoryEntity)), - ), - ), - ), - ); +// export const NamedDefaultableRepetitionRuntimeItemsImportantSettingsContextAndRenderHashedInMemoryEntity = +// HashedEntityMixin( +// ContextAndRenderFieldsMixin( +// ImportantSettingsProviderMixin( +// RuntimeItemsUIAllowedMixin( +// RuntimeItemsUILogicMixin(HasRepetitionMixin(NamedDefaultableInMemoryEntity)), +// ), +// ), +// ), +// ); diff --git a/src/js/generateSchemaMixin.ts b/src/js/generateSchemaMixin.ts index 704de982..17dd90da 100644 --- a/src/js/generateSchemaMixin.ts +++ b/src/js/generateSchemaMixin.ts @@ -76,6 +76,7 @@ function extractSchemaProperties(schema: JSONSchema7): { * @param entityTypeName - Name of the entity type * @param skipFields - Array of field names to skip * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Generated TypeScript code */ function generateMixinFunction( @@ -85,6 +86,7 @@ function generateMixinFunction( entityTypeName: string, skipFields: string[] = [], from = "@mat3ra/esse/dist/js/types", + entityFrom = "@mat3ra/code/dist/js/entity", ): string { // Convert mixin type name to camelCase for function name const functionName = mixinTypeName.charAt(0).toLowerCase() + mixinTypeName.slice(1); @@ -101,17 +103,23 @@ function generateMixinFunction( ([propertyName]) => !skipFields.includes(propertyName), ); - let code = `import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity";\n`; + let code = `import type { InMemoryEntity } from "${entityFrom}";\n`; code += `import type { ${schemaName} } from "${from}";\n\n`; - // Generate the mixin type using Omit utility - const skipFieldNames = skipFields.map((field) => `"${field}"`).join(" | "); - code += `export type ${mixinTypeName} = Omit<${schemaName}, ${skipFieldNames}>;\n\n`; + // Generate the mixin type - only use Omit if skipFields has values + if (skipFields && skipFields.length > 0) { + const skipFieldNames = skipFields.map((field) => `"${field}"`).join(" | "); + code += `export type ${mixinTypeName} = Omit<${schemaName}, ${skipFieldNames}>;\n\n`; + } else { + code += `export type ${mixinTypeName} = ${schemaName};\n\n`; + } // Generate the entity type code += `export type ${entityTypeName} = InMemoryEntity & ${mixinTypeName};\n\n`; - code += `export function ${functionName}(item: InMemoryEntity) {\n`; + code += `export function ${functionName}(\n`; + code += ` item: InMemoryEntity,\n`; + code += `): asserts item is T & ${mixinTypeName} {\n`; code += ` // @ts-expect-error\n`; code += ` const properties: InMemoryEntity & ${mixinTypeName} = {\n`; @@ -123,6 +131,9 @@ function generateMixinFunction( code += `get ${propertyName}() {\n`; code += `return this.${methodName}<${typeAnnotation}>("${propertyName}");\n`; + code += `},\n`; + code += `set ${propertyName}(value: ${typeAnnotation}) {\n`; + code += `this.setProp("${propertyName}", value);\n`; code += `}`; // Add comma for all properties except the last one @@ -146,6 +157,7 @@ function generateMixinFunction( * @param outputPath - The output file path * @param skipFields - Array of field names to skip * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Generated TypeScript code */ function generateMixinFromSchemaId( @@ -153,6 +165,7 @@ function generateMixinFromSchemaId( outputPath: string, skipFields: string[] = [], from = "@mat3ra/esse/dist/js/types", + entityFrom = "@mat3ra/code/dist/js/entity", ): string { // Get the resolved schema by ID const schema = JSONSchemasInterface.getSchemaById(schemaId); @@ -195,6 +208,7 @@ function generateMixinFromSchemaId( entityTypeName, skipFields, from, + entityFrom, ); } @@ -225,6 +239,7 @@ function runESLintAutofix(filePaths: string[]): void { * @param outputPaths - Object mapping schema IDs to output file paths * @param skipFields - Array of field names to skip during generation * @param from - Import path for the schema type (default: "@mat3ra/esse/dist/js/types") + * @param entityFrom - Import path for the entity type (default: "@mat3ra/code/dist/js/entity") * @returns - Object with success and error counts */ function generateShemaMixin( @@ -232,6 +247,7 @@ function generateShemaMixin( outputPaths: Record, skipFields: string[] = [], from = "@mat3ra/esse/dist/js/types", + entityFrom = "@mat3ra/code/dist/js/entity", ) { // Setup schemas JSONSchemasInterface.setSchemas(schemas); @@ -252,7 +268,13 @@ function generateShemaMixin( throw new Error(`No output path defined for schema: ${schemaId}`); } - const generatedCode = generateMixinFromSchemaId(schemaId, outputPath, skipFields, from); + const generatedCode = generateMixinFromSchemaId( + schemaId, + outputPath, + skipFields, + from, + entityFrom, + ); // Ensure the directory exists const dir = outputPath.substring(0, outputPath.lastIndexOf("/")); diff --git a/src/js/generated/DefaultableSchemaMixin.ts b/src/js/generated/DefaultableSchemaMixin.ts new file mode 100644 index 00000000..cfde55d1 --- /dev/null +++ b/src/js/generated/DefaultableSchemaMixin.ts @@ -0,0 +1,23 @@ +import type { DefaultableEntitySchema } from "@mat3ra/esse/dist/js/types"; + +import type { InMemoryEntity } from "../entity/in_memory"; + +export type DefaultableSchemaMixin = DefaultableEntitySchema; + +export type DefaultableInMemoryEntity = InMemoryEntity & DefaultableSchemaMixin; + +export function defaultableSchemaMixin( + item: InMemoryEntity, +): asserts item is T & DefaultableSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & DefaultableSchemaMixin = { + get isDefault() { + return this.prop("isDefault"); + }, + set isDefault(value: DefaultableEntitySchema["isDefault"]) { + this.setProp("isDefault", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/HasConsistencyChecksSchemaMixin.ts b/src/js/generated/HasConsistencyChecksSchemaMixin.ts new file mode 100644 index 00000000..4dbba886 --- /dev/null +++ b/src/js/generated/HasConsistencyChecksSchemaMixin.ts @@ -0,0 +1,23 @@ +import type { HasConsistencyCheckSchema } from "@mat3ra/esse/dist/js/types"; + +import type { InMemoryEntity } from "../entity/in_memory"; + +export type HasConsistencyChecksSchemaMixin = HasConsistencyCheckSchema; + +export type HasConsistencyChecksInMemoryEntity = InMemoryEntity & HasConsistencyChecksSchemaMixin; + +export function hasConsistencyChecksSchemaMixin( + item: InMemoryEntity, +): asserts item is T & HasConsistencyChecksSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & HasConsistencyChecksSchemaMixin = { + get consistencyChecks() { + return this.prop("consistencyChecks"); + }, + set consistencyChecks(value: HasConsistencyCheckSchema["consistencyChecks"]) { + this.setProp("consistencyChecks", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/HasDescriptionSchemaMixin.ts b/src/js/generated/HasDescriptionSchemaMixin.ts new file mode 100644 index 00000000..6fc6983f --- /dev/null +++ b/src/js/generated/HasDescriptionSchemaMixin.ts @@ -0,0 +1,29 @@ +import type { DescriptionSchema } from "@mat3ra/esse/dist/js/types"; + +import type { InMemoryEntity } from "../entity/in_memory"; + +export type HasDescriptionSchemaMixin = DescriptionSchema; + +export type HasDescriptionInMemoryEntity = InMemoryEntity & HasDescriptionSchemaMixin; + +export function hasDescriptionSchemaMixin( + item: InMemoryEntity, +): asserts item is T & HasDescriptionSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & HasDescriptionSchemaMixin = { + get description() { + return this.prop("description"); + }, + set description(value: DescriptionSchema["description"]) { + this.setProp("description", value); + }, + get descriptionObject() { + return this.prop("descriptionObject"); + }, + set descriptionObject(value: DescriptionSchema["descriptionObject"]) { + this.setProp("descriptionObject", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/NamedEntitySchemaMixin.ts b/src/js/generated/NamedEntitySchemaMixin.ts new file mode 100644 index 00000000..72744c2b --- /dev/null +++ b/src/js/generated/NamedEntitySchemaMixin.ts @@ -0,0 +1,23 @@ +import type { NameEntitySchema } from "@mat3ra/esse/dist/js/types"; + +import type { InMemoryEntity } from "../entity/in_memory"; + +export type NamedEntitySchemaMixin = NameEntitySchema; + +export type NamedEntityInMemoryEntity = InMemoryEntity & NamedEntitySchemaMixin; + +export function namedEntitySchemaMixin( + item: InMemoryEntity, +): asserts item is T & NamedEntitySchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & NamedEntitySchemaMixin = { + get name() { + return this.requiredProp("name"); + }, + set name(value: NameEntitySchema["name"]) { + this.setProp("name", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/RuntimeItemsSchemaMixin.ts b/src/js/generated/RuntimeItemsSchemaMixin.ts new file mode 100644 index 00000000..4b16e484 --- /dev/null +++ b/src/js/generated/RuntimeItemsSchemaMixin.ts @@ -0,0 +1,41 @@ +import type { RuntimeItemsSchema } from "@mat3ra/esse/dist/js/types"; + +import type { InMemoryEntity } from "../entity/in_memory"; + +export type RuntimeItemsSchemaMixin = RuntimeItemsSchema; + +export type RuntimeItemsInMemoryEntity = InMemoryEntity & RuntimeItemsSchemaMixin; + +export function runtimeItemsSchemaMixin( + item: InMemoryEntity, +): asserts item is T & RuntimeItemsSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & RuntimeItemsSchemaMixin = { + get preProcessors() { + return this.requiredProp("preProcessors"); + }, + set preProcessors(value: RuntimeItemsSchema["preProcessors"]) { + this.setProp("preProcessors", value); + }, + get postProcessors() { + return this.requiredProp("postProcessors"); + }, + set postProcessors(value: RuntimeItemsSchema["postProcessors"]) { + this.setProp("postProcessors", value); + }, + get monitors() { + return this.requiredProp("monitors"); + }, + set monitors(value: RuntimeItemsSchema["monitors"]) { + this.setProp("monitors", value); + }, + get results() { + return this.requiredProp("results"); + }, + set results(value: RuntimeItemsSchema["results"]) { + this.setProp("results", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/TaggableSchemaMixin.ts b/src/js/generated/TaggableSchemaMixin.ts new file mode 100644 index 00000000..c7f2a2cc --- /dev/null +++ b/src/js/generated/TaggableSchemaMixin.ts @@ -0,0 +1,23 @@ +import type { EntityTagsSchema } from "@mat3ra/esse/dist/js/types"; + +import type { InMemoryEntity } from "../entity/in_memory"; + +export type TaggableSchemaMixin = EntityTagsSchema; + +export type TaggableInMemoryEntity = InMemoryEntity & TaggableSchemaMixin; + +export function taggableSchemaMixin( + item: InMemoryEntity, +): asserts item is T & TaggableSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & TaggableSchemaMixin = { + get tags() { + return this.prop("tags"); + }, + set tags(value: EntityTagsSchema["tags"]) { + this.setProp("tags", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/utils/object.ts b/src/js/utils/object.ts index 2580d889..02decf21 100644 --- a/src/js/utils/object.ts +++ b/src/js/utils/object.ts @@ -1,5 +1,4 @@ import { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import { NameResultSchema } from "@mat3ra/esse/dist/js/types"; import camelCase from "lodash/camelCase"; import filterObject from "lodash/filter"; import isArray from "lodash/isArray"; @@ -13,6 +12,10 @@ import omit from "lodash/omit"; import { safeMakeArray } from "./array"; import { deepClone } from "./clone"; +export type NameResultSchema = { + name: string; +}; + /** * @summary Safely convert input to { name: str } if it is not already * @param name {String|Object} the input to convert diff --git a/tests/js/generateSchemaMixin.tests.ts b/tests/js/generateSchemaMixin.tests.ts index 7800d988..75875856 100644 --- a/tests/js/generateSchemaMixin.tests.ts +++ b/tests/js/generateSchemaMixin.tests.ts @@ -185,4 +185,147 @@ describe("generateSchemaMixin Tests", function () { }).to.not.throw(); }); }); + + describe("generateShemaMixin - Omit Type Generation", () => { + it("should not use Omit when skipFields is undefined", () => { + const outputPath = path.join(tempDir, "NoSkipFieldsSchemaMixin.ts"); + const outputPaths = { + "property/holder": outputPath, + }; + + generateShemaMixin(mockSchemas, outputPaths); + + const generatedCode = fs.readFileSync(outputPath, "utf-8"); + expect(generatedCode).to.not.include("Omit<"); + expect(generatedCode).to.include( + "export type NoSkipFieldsSchemaMixin = PropertyHolder;", + ); + // Verify getters and setters are generated + expect(generatedCode).to.include("get name()"); + expect(generatedCode).to.include("set name(value:"); + expect(generatedCode).to.include('this.setProp("name", value);'); + // Verify generic type and assertion + expect(generatedCode).to.include( + "export function noSkipFieldsSchemaMixin", + ); + expect(generatedCode).to.include("): asserts item is T & NoSkipFieldsSchemaMixin {"); + }); + + it("should not use Omit when skipFields is an empty array", () => { + const outputPath = path.join(tempDir, "EmptySkipFieldsSchemaMixin.ts"); + const outputPaths = { + "property/holder": outputPath, + }; + const skipFields: string[] = []; + + generateShemaMixin(mockSchemas, outputPaths, skipFields); + + const generatedCode = fs.readFileSync(outputPath, "utf-8"); + expect(generatedCode).to.not.include("Omit<"); + expect(generatedCode).to.include( + "export type EmptySkipFieldsSchemaMixin = PropertyHolder;", + ); + // Verify getters and setters are generated + expect(generatedCode).to.include("get description()"); + expect(generatedCode).to.include("set description(value:"); + expect(generatedCode).to.include('this.setProp("description", value);'); + // Verify generic type and assertion + expect(generatedCode).to.include( + "export function emptySkipFieldsSchemaMixin", + ); + expect(generatedCode).to.include("): asserts item is T & EmptySkipFieldsSchemaMixin {"); + }); + + it("should use Omit when skipFields has values", () => { + const outputPath = path.join(tempDir, "WithSkipFieldsSchemaMixin.ts"); + const outputPaths = { + "property/holder": outputPath, + }; + const skipFields = ["metadata"]; + + generateShemaMixin(mockSchemas, outputPaths, skipFields); + + const generatedCode = fs.readFileSync(outputPath, "utf-8"); + expect(generatedCode).to.include("Omit<"); + expect(generatedCode).to.include( + 'export type WithSkipFieldsSchemaMixin = Omit;', + ); + // Verify getters and setters are generated (metadata should be skipped) + expect(generatedCode).to.include("get name()"); + expect(generatedCode).to.include("set name(value:"); + expect(generatedCode).to.not.include("get metadata()"); + expect(generatedCode).to.not.include("set metadata("); + }); + + it("should use Omit with multiple fields when skipFields has multiple values", () => { + const outputPath = path.join(tempDir, "MultipleSkipFieldsSchemaMixin.ts"); + const outputPaths = { + "property/holder": outputPath, + }; + const skipFields = ["metadata", "description"]; + + generateShemaMixin(mockSchemas, outputPaths, skipFields); + + const generatedCode = fs.readFileSync(outputPath, "utf-8"); + expect(generatedCode).to.include("Omit<"); + expect(generatedCode).to.include( + 'export type MultipleSkipFieldsSchemaMixin = Omit;', + ); + // Verify getters and setters are generated (only name should be present) + expect(generatedCode).to.include("get name()"); + expect(generatedCode).to.include("set name(value:"); + expect(generatedCode).to.not.include("get metadata()"); + expect(generatedCode).to.not.include("get description()"); + }); + }); + + describe("generateShemaMixin - Entity Import Path", () => { + it("should use default entity import path when not specified", () => { + const outputPath = path.join(tempDir, "DefaultEntityPathSchemaMixin.ts"); + const outputPaths = { + "property/holder": outputPath, + }; + + generateShemaMixin(mockSchemas, outputPaths); + + const generatedCode = fs.readFileSync(outputPath, "utf-8"); + expect(generatedCode).to.include( + 'import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity";', + ); + // Verify setters are generated + expect(generatedCode).to.include("set name(value:"); + expect(generatedCode).to.include('this.setProp("name", value);'); + // Verify generic type and assertion + expect(generatedCode).to.include( + "export function defaultEntityPathSchemaMixin", + ); + expect(generatedCode).to.include( + "): asserts item is T & DefaultEntityPathSchemaMixin {", + ); + }); + + it("should use custom entity import path when specified", () => { + const outputPath = path.join(tempDir, "CustomEntityPathSchemaMixin.ts"); + const outputPaths = { + "property/holder": outputPath, + }; + const customEntityPath = "@custom/package/dist/entity"; + + generateShemaMixin( + mockSchemas, + outputPaths, + [], + "@mat3ra/esse/dist/js/types", + customEntityPath, + ); + + const generatedCode = fs.readFileSync(outputPath, "utf-8"); + expect(generatedCode).to.include( + `import type { InMemoryEntity } from "${customEntityPath}";`, + ); + // Verify setters are generated + expect(generatedCode).to.include("set description(value:"); + expect(generatedCode).to.include('this.setProp("description", value);'); + }); + }); }); diff --git a/tests/js/mixin.flowchart.tests.ts b/tests/js/mixin.flowchart.tests.ts deleted file mode 100644 index 6a29fa87..00000000 --- a/tests/js/mixin.flowchart.tests.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { expect } from "chai"; - -import { FlowchartEntityMixin, FlowchartItemMixin, InMemoryEntity } from "../../src/js/entity"; - -const FlowchartEntity = FlowchartEntityMixin(InMemoryEntity); - -const FlowchartItem = FlowchartItemMixin(InMemoryEntity); - -function assertString(prop: unknown): prop is string { - expect(prop).to.be.a("string"); - return typeof prop === "string"; -} - -describe("Flowchart Mixins", () => { - it("flowchart item can be added", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - expect(entity.units.length).to.be.equal(1); - }); - - it("flowchart item can be added between two other units", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - expect(entity.units[0].next).to.be.equal(entity.units[1].flowchartId); - const item = new FlowchartItem(); - entity.addUnit(item, 1); - expect(entity.units[1].flowchartId).to.be.equal(item.flowchartId); - expect(entity.units[1].next).to.be.equal(entity.units[2].flowchartId); - }); - - it("flowchart item points to correct target after removal of the in-between unit", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - - if (assertString(entity.units[1].flowchartId)) { - entity.removeUnit(entity.units[1].flowchartId); - } - - expect(entity.units[0].next).to.be.equal(entity.units[1].flowchartId); - }); - - it("flowchart item points to correct target after removal of last unit", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - if (assertString(entity.units[2].flowchartId)) { - entity.removeUnit(entity.units[2].flowchartId); - } - // eslint-disable-next-line no-unused-expressions - expect(entity.units[1].next).to.be.undefined; - }); - - it("flowchart item can be removed", () => { - const entity = new FlowchartEntity(); - const item = new FlowchartItem(); - entity.addUnit(item); - entity.removeUnit(item.flowchartId); - expect(entity.units.length).to.be.equal(0); - }); - - it("flowchart item can be replaced between two other units", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - const unitsBeforeReplace = entity.units.length; - const item = new FlowchartItem(); - entity.replaceUnit(item, 1); - expect(entity.units[1].flowchartId).to.be.equal(item.flowchartId); - expect(entity.units.length).to.be.equal(unitsBeforeReplace); - }); - - it("flowchart item can be accessed by flowchart Id", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - const item = new FlowchartItem(); - entity.addUnit(item); - const fetchedUnit = entity.getUnit(item.flowchartId); - expect(fetchedUnit).to.be.instanceof(FlowchartItem); - expect(fetchedUnit?.flowchartId).to.be.equal(item.flowchartId); - }); - - it("flowchart item index can be found by flowchart Id", () => { - const entity = new FlowchartEntity(); - entity.addUnit(new FlowchartItem()); - entity.addUnit(new FlowchartItem()); - const item = new FlowchartItem(); - entity.addUnit(item); - const index = entity.getUnitIndexByFlowchartId(item.flowchartId); - expect(index).to.be.equal(entity.units.length - 1); // last unit - }); -}); diff --git a/tests/js/utils/class.tests.ts b/tests/js/utils/class.tests.ts index a4ee4afd..b76df01c 100644 --- a/tests/js/utils/class.tests.ts +++ b/tests/js/utils/class.tests.ts @@ -1,23 +1,19 @@ /* eslint-disable max-classes-per-file, class-methods-use-this */ import { expect } from "chai"; -import { - InMemoryEntity, - NamedInMemoryEntity, - RuntimeItemsMixin, -} from "../../../src/js/entity/index"; -import { - defaultableEntityMixin, - defaultableEntityStaticMixin, -} from "../../../src/js/entity/mixins/DefaultableMixin"; +import { InMemoryEntity, NamedInMemoryEntity } from "../../../src/js/entity/index"; +import { defaultableEntityMixin } from "../../../src/js/entity/mixins/DefaultableMixin"; +import { runtimeItemsMixin } from "../../../src/js/entity/mixins/RuntimeItemsMixin"; import { extendClass, extendThis } from "../../../src/js/utils/class"; -class BaseEntity extends RuntimeItemsMixin(InMemoryEntity) { +class BaseEntity extends InMemoryEntity { baseMethod() { return "base"; } } +runtimeItemsMixin(BaseEntity.prototype); + class ExtendClassEntity extends NamedInMemoryEntity { declare results: unknown; @@ -31,8 +27,7 @@ class ExtendClassEntity extends NamedInMemoryEntity { } } -defaultableEntityStaticMixin(ExtendClassEntity); -defaultableEntityMixin(ExtendClassEntity.prototype); +defaultableEntityMixin(ExtendClassEntity); class BaseBetweenEntity extends NamedInMemoryEntity { static staticAttr = "base"; @@ -75,8 +70,7 @@ class ExtendThisEntity extends BetweenEntity { } } -defaultableEntityStaticMixin(ExtendThisEntity); -defaultableEntityMixin(ExtendThisEntity.prototype); +defaultableEntityMixin(ExtendThisEntity); describe("extendClass", () => { it("extends classes no excluded props", () => { @@ -102,7 +96,7 @@ describe("extendThis", () => { }); it("extends this support base mixins", () => { - const obj = new ExtendThisEntity({ results: ["test"] }); + const obj = new ExtendThisEntity({ results: [{ name: "test" }] }); expect(JSON.stringify(obj.results)).to.be.equal(JSON.stringify([{ name: "test" }])); });