diff --git a/.nycrc b/.nycrc index 3cd94a5..c8908b6 100644 --- a/.nycrc +++ b/.nycrc @@ -6,6 +6,7 @@ "src/**/*.ts" ], "exclude": [ + "src/js/generated/**/*", "tests/**/*", "**/*.test.ts", "**/*.spec.ts", diff --git a/dist/js/ApplicationRegistry.d.ts b/dist/js/ApplicationRegistry.d.ts index b277021..361db44 100644 --- a/dist/js/ApplicationRegistry.d.ts +++ b/dist/js/ApplicationRegistry.d.ts @@ -1,10 +1,10 @@ -import type { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; -import Application from "./application"; -import Executable from "./executable"; -import Flavor from "./flavor"; -import Template from "./template"; +import type { ApplicationSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import Application from "./Application"; +import Executable from "./Executable"; +import Flavor from "./Flavor"; +import Template from "./Template"; type ApplicationVersion = { - [build: string]: ApplicationSchemaBase; + [build: string]: ApplicationSchema; }; type ApplicationTreeItem = { defaultVersion: string; @@ -18,7 +18,7 @@ export type CreateApplicationConfig = { type ApplicationTree = Partial>; export default class ApplicationRegistry { static applicationsTree?: ApplicationTree; - static applicationsArray?: ApplicationSchemaBase[]; + static applicationsArray?: ApplicationSchema[]; static createApplication({ name, version, build }: CreateApplicationConfig): Application; static getUniqueAvailableApplicationNames(): string[]; /** @@ -27,7 +27,7 @@ export default class ApplicationRegistry { */ static getAllApplications(): { applicationsTree: Partial>; - applicationsArray: ApplicationSchemaBase[]; + applicationsArray: ApplicationSchema[]; }; /** * @summary Get an application from the constructed applications @@ -36,7 +36,7 @@ export default class ApplicationRegistry { * @param build the build to use (optional, defaults to Default) * @return an application */ - static getApplicationConfig({ name, version, build }: CreateApplicationConfig): ApplicationSchemaBase | null; + static getApplicationConfig({ name, version, build }: CreateApplicationConfig): ApplicationSchema | null; static getExecutables({ name, version }: { name: string; version?: string; @@ -51,7 +51,7 @@ export default class ApplicationRegistry { name: string; }): Flavor | undefined; static getInputAsTemplates(flavor: Flavor): Template[]; - static getInputAsRenderedTemplates(flavor: Flavor, context: Record): import("@mat3ra/esse/dist/js/esse/types").AnyObject[]; + static getInput(flavor: Flavor): TemplateSchema[]; static getAllFlavorsForApplication(appName: string, version?: string): Flavor[]; } export {}; diff --git a/dist/js/ApplicationRegistry.js b/dist/js/ApplicationRegistry.js index 7afe7e0..b2fe069 100644 --- a/dist/js/ApplicationRegistry.js +++ b/dist/js/ApplicationRegistry.js @@ -5,14 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const object_1 = require("@mat3ra/code/dist/js/utils/object"); const standata_1 = require("@mat3ra/standata"); -const application_1 = __importDefault(require("./application")); -const executable_1 = __importDefault(require("./executable")); -const flavor_1 = __importDefault(require("./flavor")); -const template_1 = __importDefault(require("./template")); +const Application_1 = __importDefault(require("./Application")); +const Executable_1 = __importDefault(require("./Executable")); +const Flavor_1 = __importDefault(require("./Flavor")); +const Template_1 = __importDefault(require("./Template")); class ApplicationRegistry { static createApplication({ name, version = null, build = null }) { const staticConfig = ApplicationRegistry.getApplicationConfig({ name, version, build }); - return new application_1.default({ + return new Application_1.default({ ...staticConfig, name, ...(version && { version }), @@ -52,6 +52,7 @@ class ApplicationRegistry { appTreeItem[version] = appVersion; const applicationConfig = { ...appData, + // @ts-ignore build: buildToUse, ...versionInfo, }; @@ -114,7 +115,7 @@ class ApplicationRegistry { return (!supportedApplicationVersions || (version && supportedApplicationVersions.includes(version))); }) - .map((key) => new executable_1.default({ ...tree[key], name: key })); + .map((key) => new Executable_1.default({ ...tree[key], name: key })); } static getExecutableByName(appName, execName) { const appTree = new standata_1.ApplicationStandata().getAppTreeForApplication(appName); @@ -124,7 +125,7 @@ class ApplicationRegistry { const config = execName ? appTree[execName] : (0, object_1.getOneMatchFromObject)(appTree, "isDefault", true); - return new executable_1.default(config); + return new Executable_1.default(config); } // TODO: remove this method and use getApplicationExecutableByName directly static getExecutableByConfig(appName, config) { @@ -133,7 +134,7 @@ class ApplicationRegistry { static getExecutableFlavors(executable) { const flavorsTree = executable.prop("flavors", {}); return Object.keys(flavorsTree).map((key) => { - return new flavor_1.default({ + return new Flavor_1.default({ ...flavorsTree[key], name: key, }); @@ -145,24 +146,26 @@ class ApplicationRegistry { static getFlavorByConfig(executable, config) { return this.getFlavorByName(executable, config === null || config === void 0 ? void 0 : config.name); } - // flavors static getInputAsTemplates(flavor) { - const appName = flavor.prop("applicationName", ""); - const execName = flavor.prop("executableName", ""); + return this.getInput(flavor).map((template) => new Template_1.default(template)); + } + static getInput(flavor) { + const appName = flavor.applicationName || ""; + const execName = flavor.executableName || ""; return flavor.input.map((input) => { const inputName = input.templateName || input.name; const filtered = new standata_1.ApplicationStandata().getTemplatesByName(appName, execName, inputName); if (filtered.length !== 1) { console.log(`found ${filtered.length} templates for app=${appName} exec=${execName} name=${inputName} expected 1`); } - return new template_1.default({ ...filtered[0], name: input.name }); - }); - } - static getInputAsRenderedTemplates(flavor, context) { - return this.getInputAsTemplates(flavor).map((template) => { - return template.getRenderedJSON(context); + return { ...filtered[0], name: input.name || "" }; }); } + // static getInputAsRenderedTemplates(flavor: Flavor, context: ContextProviderConfig) { + // return this.getInputAsTemplates(flavor).map((template) => { + // return template.setContext(context).render().toJSON(); + // }); + // } static getAllFlavorsForApplication(appName, version) { const allExecutables = this.getExecutables({ name: appName, version }); return allExecutables.flatMap((executable) => this.getExecutableFlavors(executable)); diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index fd78625..c74609f 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -1,8 +1,15 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { type ApplicationMixin, type ApplicationStaticMixin } from "./applicationMixin"; -type Base = typeof NamedDefaultableInMemoryEntity & Constructor & ApplicationStaticMixin; +type Base = typeof InMemoryEntity & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor & Constructor & ApplicationStaticMixin; declare const Application_base: Base; -export default class Application extends Application_base { +export default class Application extends Application_base implements ApplicationSchema { + constructor(data?: Partial); + static createDefault: () => Application; + toJSON: () => ApplicationSchema & AnyObject; } export {}; diff --git a/dist/js/application.js b/dist/js/application.js index 129810e..8f344d9 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -1,9 +1,17 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); +const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const applicationMixin_1 = require("./applicationMixin"); -class Application extends entity_1.NamedDefaultableInMemoryEntity { +class Application extends entity_1.InMemoryEntity { + constructor(data = {}) { + super({ + ...data, + }); + } } exports.default = Application; -(0, applicationMixin_1.applicationMixin)(Application.prototype); -(0, applicationMixin_1.applicationStaticMixin)(Application); +(0, NamedEntityMixin_1.namedEntityMixin)(Application.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(Application); +(0, applicationMixin_1.applicationMixin)(Application); diff --git a/dist/js/applicationMixin.d.ts b/dist/js/applicationMixin.d.ts index 11aab73..621e752 100644 --- a/dist/js/applicationMixin.d.ts +++ b/dist/js/applicationMixin.d.ts @@ -1,23 +1,22 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Defaultable } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import type { NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; -import Executable from "./executable"; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; +import Executable from "./Executable"; +import { type ApplicationSchemaMixin } from "./generated/ApplicationSchemaMixin"; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; -export type ApplicationConstructor = Constructor & ApplicationStaticMixin; -export type ApplicationMixin = Pick & { - name: Required["name"]; +export type ApplicationMixin = ApplicationSchemaMixin & { + name: Required["name"]; isUsingMaterial: boolean; }; -export type DefaultApplicationConfig = Pick; +export type DefaultApplicationConfig = Pick; export type ApplicationStaticMixin = { defaultConfig: DefaultApplicationConfig; - jsonSchema: ApplicationSchemaBase; + jsonSchema: ApplicationSchema; }; -export declare function applicationMixin(item: Base): void; -export declare function applicationStaticMixin(Application: T): void; +export declare function applicationMixin(Item: BaseConstructor): void; export {}; diff --git a/dist/js/applicationMixin.js b/dist/js/applicationMixin.js index 7d7945f..11ed596 100644 --- a/dist/js/applicationMixin.js +++ b/dist/js/applicationMixin.js @@ -4,30 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.applicationMixin = applicationMixin; -exports.applicationStaticMixin = applicationStaticMixin; const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const standata_1 = require("@mat3ra/standata"); -function applicationMixin(item) { +const ApplicationSchemaMixin_1 = require("./generated/ApplicationSchemaMixin"); +function applicationPropertiesMixin(item) { // @ts-expect-error const properties = { - get summary() { - return this.prop("summary"); - }, - get version() { - return this.prop("version", ""); - }, - get build() { - return this.prop("build"); - }, - get shortName() { - return this.prop("shortName", this.name); - }, - get hasAdvancedComputeOptions() { - return this.prop("hasAdvancedComputeOptions", false); - }, - get isLicensed() { - return this.prop("isLicensed", false); - }, get isUsingMaterial() { const materialUsingApplications = ["vasp", "nwchem", "espresso"]; return materialUsingApplications.includes(this.name); @@ -46,3 +28,8 @@ function applicationStaticMixin(Application) { }; Object.defineProperties(Application, Object.getOwnPropertyDescriptors(properties)); } +function applicationMixin(Item) { + (0, ApplicationSchemaMixin_1.applicationSchemaMixin)(Item.prototype); + applicationPropertiesMixin(Item.prototype); + applicationStaticMixin(Item); +} diff --git a/dist/js/context/ContextProviderJinja.d.ts b/dist/js/context/ContextProviderJinja.d.ts deleted file mode 100644 index 75cade4..0000000 --- a/dist/js/context/ContextProviderJinja.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import ContextProvider from "./ContextProvider"; -interface JSONSchemaDataProviderConfig extends ContextProviderSchema { - isUsingJinjaVariables?: boolean; -} -export default class ContextProviderJinja extends ContextProvider { - isUsingJinjaVariables: boolean; - constructor(config: JSONSchemaDataProviderConfig); -} -export {}; diff --git a/dist/js/context/ContextProviderJinja.js b/dist/js/context/ContextProviderJinja.js deleted file mode 100644 index 61c41f8..0000000 --- a/dist/js/context/ContextProviderJinja.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const ContextProvider_1 = __importDefault(require("./ContextProvider")); -class ContextProviderJinja extends ContextProvider_1.default { - constructor(config) { - super(config); - this.isUsingJinjaVariables = Boolean(config.isUsingJinjaVariables); - } -} -exports.default = ContextProviderJinja; diff --git a/dist/js/context/JSONSchemaDataProvider.d.ts b/dist/js/context/JSONSchemaDataProvider.d.ts deleted file mode 100644 index 30f033f..0000000 --- a/dist/js/context/JSONSchemaDataProvider.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import JinjaContextProvider from "./JinjaContextProvider"; -/** - * @summary Provides jsonSchema only. - */ -export default class JSONSchemaDataProvider extends JinjaContextProvider { - get jsonSchema(): void; -} diff --git a/dist/js/context/JSONSchemaDataProvider.js b/dist/js/context/JSONSchemaDataProvider.js deleted file mode 100644 index 6f2c8bf..0000000 --- a/dist/js/context/JSONSchemaDataProvider.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -/* eslint-disable class-methods-use-this */ -const JinjaContextProvider_1 = __importDefault(require("./JinjaContextProvider")); -/** - * @summary Provides jsonSchema only. - */ -class JSONSchemaDataProvider extends JinjaContextProvider_1.default { - get jsonSchema() { - throw new Error("Not implemented."); - } -} -exports.default = JSONSchemaDataProvider; diff --git a/dist/js/context/JSONSchemaFormDataProvider.d.ts b/dist/js/context/JSONSchemaFormDataProvider.d.ts deleted file mode 100644 index 349ad61..0000000 --- a/dist/js/context/JSONSchemaFormDataProvider.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { UiSchema } from "react-jsonschema-form"; -import JSONSchemaDataProvider from "./JSONSchemaDataProvider"; -/** - * @summary Provides jsonSchema and uiSchema for generating react-jsonschema-form - * See https://github.com/mozilla-services/react-jsonschema-form for Form UI. - * Form generation example: - * ``` - *
- * ``` - */ -export default class JSONSchemaFormDataProvider extends JSONSchemaDataProvider { - get uiSchema(): UiSchema; - get fields(): {}; - get defaultFieldStyles(): {}; - get uiSchemaStyled(): UiSchema; -} diff --git a/dist/js/context/JSONSchemaFormDataProvider.js b/dist/js/context/JSONSchemaFormDataProvider.js deleted file mode 100644 index e9454a2..0000000 --- a/dist/js/context/JSONSchemaFormDataProvider.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const JSONSchemaDataProvider_1 = __importDefault(require("./JSONSchemaDataProvider")); -/** - * @summary Provides jsonSchema and uiSchema for generating react-jsonschema-form - * See https://github.com/mozilla-services/react-jsonschema-form for Form UI. - * Form generation example: - * ``` - * - * ``` - */ -// TODO: MOVE to WebApp/ave or wove -class JSONSchemaFormDataProvider extends JSONSchemaDataProvider_1.default { - get uiSchema() { - throw new Error("Not implemented."); - } - get fields() { - return {}; - } - get defaultFieldStyles() { - return {}; - } - get uiSchemaStyled() { - const schema = this.uiSchema; - return Object.fromEntries(Object.entries(schema).map(([key, value]) => [ - key, - { - ...value, - ...this.defaultFieldStyles, - classNames: `${value.classNames || ""}`, - }, - ])); - } -} -exports.default = JSONSchemaFormDataProvider; diff --git a/dist/js/context/JinjaContextProvider.d.ts b/dist/js/context/JinjaContextProvider.d.ts deleted file mode 100644 index 68f0f86..0000000 --- a/dist/js/context/JinjaContextProvider.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ContextProviderSchema } from "@mat3ra/esse/dist/js/types"; -import ContextProvider from "./ContextProvider"; -interface JSONSchemaDataProviderConfig extends ContextProviderSchema { - isUsingJinjaVariables?: boolean; -} -export default class JinjaContextProvider extends ContextProvider { - isUsingJinjaVariables: boolean; - constructor(config: JSONSchemaDataProviderConfig); -} -export {}; diff --git a/dist/js/context/JinjaContextProvider.js b/dist/js/context/JinjaContextProvider.js deleted file mode 100644 index d0adbb2..0000000 --- a/dist/js/context/JinjaContextProvider.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const ContextProvider_1 = __importDefault(require("./ContextProvider")); -class JinjaContextProvider extends ContextProvider_1.default { - constructor(config) { - super(config); - this.isUsingJinjaVariables = Boolean(config.isUsingJinjaVariables); - } -} -exports.default = JinjaContextProvider; diff --git a/dist/js/executable.d.ts b/dist/js/executable.d.ts index 4f521d3..7d82e30 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -1,8 +1,19 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type RuntimeItemsInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin } from "./executableMixin"; -type Base = Constructor & typeof NamedDefaultableInMemoryEntity; +import type { PartialBy } from "./typeUtils"; +/** Input for {@link Executable}: runtime item lists default to empty when omitted. */ +export type ExecutableConstructorData = PartialBy; +type Base = Constructor & RuntimeItemsInMemoryEntityConstructor & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor & typeof InMemoryEntity; declare const Executable_base: Base; -export default class Executable extends Executable_base { +export default class Executable extends Executable_base implements ExecutableSchema { + constructor(data: ExecutableConstructorData); + static createDefault: () => Executable; + toJSON: () => ExecutableSchema & AnyObject; } export {}; diff --git a/dist/js/executable.js b/dist/js/executable.js index 878cfaa..3c4f2aa 100644 --- a/dist/js/executable.js +++ b/dist/js/executable.js @@ -1,12 +1,24 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); +const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); const executableMixin_1 = require("./executableMixin"); -class Executable extends entity_1.NamedDefaultableInMemoryEntity { +class Executable extends entity_1.InMemoryEntity { + constructor(data) { + var _a, _b, _c, _d; + super({ + ...data, + monitors: (_a = data.monitors) !== null && _a !== void 0 ? _a : [], + results: (_b = data.results) !== null && _b !== void 0 ? _b : [], + postProcessors: (_c = data.postProcessors) !== null && _c !== void 0 ? _c : [], + preProcessors: (_d = data.preProcessors) !== null && _d !== void 0 ? _d : [], + }); + } } exports.default = Executable; -// Apply mixins +(0, NamedEntityMixin_1.namedEntityMixin)(Executable.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(Executable); (0, RuntimeItemsMixin_1.runtimeItemsMixin)(Executable.prototype); -(0, executableMixin_1.executableMixin)(Executable.prototype); -(0, executableMixin_1.executableStaticMixin)(Executable); +(0, executableMixin_1.executableMixin)(Executable); diff --git a/dist/js/executableMixin.d.ts b/dist/js/executableMixin.d.ts index 87b9d2a..aa8f597 100644 --- a/dist/js/executableMixin.d.ts +++ b/dist/js/executableMixin.d.ts @@ -1,22 +1,21 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Defaultable } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import type { NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import type { FlavorMixin } from "./flavorMixin"; -type BaseFlavor = FlavorMixin & NamedInMemoryEntity & InMemoryEntity; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; -export declare function executableMixin(item: Base): void; -export declare function executableStaticMixin(Executable: Constructor): void; +import { ExecutableSchemaMixin } from "./generated/ExecutableSchemaMixin"; +type BaseFlavor = FlavorMixin & NamedEntity & InMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomFlavor?: (config: object) => BaseFlavor; }; -export type ExecutableMixin = { - applicationId: string[]; +export type ExecutableMixin = ExecutableSchemaMixin & { toJSON: () => ExecutableSchema & AnyObject; }; export type ExecutableStaticMixin = { jsonSchema: ExecutableSchema; }; +export declare function executableMixin(Item: BaseConstructor): void; export {}; diff --git a/dist/js/executableMixin.js b/dist/js/executableMixin.js index bf3169d..eff4125 100644 --- a/dist/js/executableMixin.js +++ b/dist/js/executableMixin.js @@ -4,20 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.executableMixin = executableMixin; -exports.executableStaticMixin = executableStaticMixin; const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -function executableMixin(item) { - // @ts-expect-error - const properties = { - get applicationId() { - return this.prop("applicationId", []); - }, - set applicationId(value) { - this.setProp("applicationId", value); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} +const ExecutableSchemaMixin_1 = require("./generated/ExecutableSchemaMixin"); function executableStaticMixin(Executable) { const properties = { get jsonSchema() { @@ -26,3 +14,7 @@ function executableStaticMixin(Executable) { }; Object.defineProperties(Executable, Object.getOwnPropertyDescriptors(properties)); } +function executableMixin(Item) { + (0, ExecutableSchemaMixin_1.executableSchemaMixin)(Item.prototype); + executableStaticMixin(Item); +} diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index 4134aff..03ae11a 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -1,9 +1,16 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { type RuntimeItemsInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type RuntimeItemsInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type FlavorMixin } from "./flavorMixin"; -type Base = typeof NamedDefaultableInMemoryEntity & Constructor & Constructor; +type Base = typeof InMemoryEntity & Constructor & RuntimeItemsInMemoryEntityConstructor & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor; declare const Flavor_base: Base; -export default class Flavor extends Flavor_base { +export default class Flavor extends Flavor_base implements FlavorSchema { + constructor(data?: Partial); + static createDefault: () => Flavor; + toJSON: () => FlavorSchema & AnyObject; } export {}; diff --git a/dist/js/flavor.js b/dist/js/flavor.js index 956e74c..ed31a4f 100644 --- a/dist/js/flavor.js +++ b/dist/js/flavor.js @@ -1,12 +1,27 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); +const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); const flavorMixin_1 = require("./flavorMixin"); -class Flavor extends entity_1.NamedDefaultableInMemoryEntity { +class Flavor extends entity_1.InMemoryEntity { + constructor(data = {}) { + super({ + monitors: [], + results: [], + postProcessors: [], + preProcessors: [], + input: [], + executableId: "", + executableName: "", + applicationName: "", + ...data, + }); + } } exports.default = Flavor; -// Apply mixins -(0, flavorMixin_1.flavorMixin)(Flavor.prototype); +(0, NamedEntityMixin_1.namedEntityMixin)(Flavor.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(Flavor); (0, RuntimeItemsMixin_1.runtimeItemsMixin)(Flavor.prototype); -(0, flavorMixin_1.flavorStaticMixin)(Flavor); +(0, flavorMixin_1.flavorMixin)(Flavor); diff --git a/dist/js/flavorMixin.d.ts b/dist/js/flavorMixin.d.ts index 3c42e3d..117baab 100644 --- a/dist/js/flavorMixin.d.ts +++ b/dist/js/flavorMixin.d.ts @@ -1,21 +1,9 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; -type Base = InMemoryEntity & NamedInMemoryEntity; -type Input = Required["input"]; -export type FlavorMixin = { - input: Input; - disableRenderMaterials: boolean; - executableId: string; - executableName: string; - applicationName: string; - supportedApplicationVersions?: string[]; - getInputAsRenderedTemplates: (context: Record) => Record[]; -}; -export declare function flavorMixin(item: Base): FlavorMixin & InMemoryEntity & NamedInMemoryEntity; -export declare function flavorStaticMixin(Flavor: Constructor): void; +import { type FlavorSchemaMixin } from "./generated/FlavorSchemaMixin"; +export type FlavorMixin = FlavorSchemaMixin; export type FlavorStaticMixin = { jsonSchema: FlavorSchema; }; -export {}; +export declare function flavorMixin(Item: Constructor): void; diff --git a/dist/js/flavorMixin.js b/dist/js/flavorMixin.js index c771bf7..96fa3ca 100644 --- a/dist/js/flavorMixin.js +++ b/dist/js/flavorMixin.js @@ -4,43 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.flavorMixin = flavorMixin; -exports.flavorStaticMixin = flavorStaticMixin; const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -// TODO: should we add fields from esse schema (executableId, executableName, applicationName)? -function flavorMixin(item) { - // @ts-expect-error - const properties = { - get input() { - return this.prop("input", []); - }, - get disableRenderMaterials() { - return this.prop("isMultiMaterial", false); - }, - get executableId() { - return this.prop("executableId", ""); - }, - get executableName() { - return this.prop("executableName", ""); - }, - get applicationName() { - return this.prop("applicationName", ""); - }, - get supportedApplicationVersions() { - return this.prop("supportedApplicationVersions"); - }, - getInputAsRenderedTemplates(context) { - const input = this.input; - return input.map((template) => { - if (template && typeof template === "object" && "getRenderedJSON" in template) { - return template.getRenderedJSON(context); - } - return template; - }); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; -} +const FlavorSchemaMixin_1 = require("./generated/FlavorSchemaMixin"); function flavorStaticMixin(Flavor) { const properties = { get jsonSchema() { @@ -49,3 +14,7 @@ function flavorStaticMixin(Flavor) { }; Object.defineProperties(Flavor, Object.getOwnPropertyDescriptors(properties)); } +function flavorMixin(Item) { + (0, FlavorSchemaMixin_1.flavorSchemaMixin)(Item.prototype); + flavorStaticMixin(Item); +} diff --git a/dist/js/generated/ApplicationSchemaMixin.d.ts b/dist/js/generated/ApplicationSchemaMixin.d.ts new file mode 100644 index 0000000..11fd11a --- /dev/null +++ b/dist/js/generated/ApplicationSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { ApplicationPropertiesSchema } from "@mat3ra/esse/dist/js/types"; +export type ApplicationSchemaMixin = ApplicationPropertiesSchema; +export type ApplicationInMemoryEntity = InMemoryEntity & ApplicationSchemaMixin; +export declare function applicationSchemaMixin(item: InMemoryEntity): asserts item is T & ApplicationSchemaMixin; diff --git a/dist/js/generated/ApplicationSchemaMixin.js b/dist/js/generated/ApplicationSchemaMixin.js new file mode 100644 index 0000000..bb306bf --- /dev/null +++ b/dist/js/generated/ApplicationSchemaMixin.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.applicationSchemaMixin = applicationSchemaMixin; +function applicationSchemaMixin(item) { + // @ts-expect-error + const properties = { + get shortName() { + return this.requiredProp("shortName"); + }, + set shortName(value) { + this.setProp("shortName", value); + }, + get summary() { + return this.requiredProp("summary"); + }, + set summary(value) { + this.setProp("summary", value); + }, + get version() { + return this.requiredProp("version"); + }, + set version(value) { + this.setProp("version", value); + }, + get build() { + return this.requiredProp("build"); + }, + set build(value) { + this.setProp("build", value); + }, + get isDefault() { + return this.prop("isDefault"); + }, + set isDefault(value) { + this.setProp("isDefault", value); + }, + get hasAdvancedComputeOptions() { + return this.prop("hasAdvancedComputeOptions"); + }, + set hasAdvancedComputeOptions(value) { + this.setProp("hasAdvancedComputeOptions", value); + }, + get isLicensed() { + return this.prop("isLicensed"); + }, + set isLicensed(value) { + this.setProp("isLicensed", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/ExecutableSchemaMixin.d.ts b/dist/js/generated/ExecutableSchemaMixin.d.ts new file mode 100644 index 0000000..11f70b8 --- /dev/null +++ b/dist/js/generated/ExecutableSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { ExecutablePropertiesSchema } from "@mat3ra/esse/dist/js/types"; +export type ExecutableSchemaMixin = ExecutablePropertiesSchema; +export type ExecutableInMemoryEntity = InMemoryEntity & ExecutableSchemaMixin; +export declare function executableSchemaMixin(item: InMemoryEntity): asserts item is T & ExecutableSchemaMixin; diff --git a/dist/js/generated/ExecutableSchemaMixin.js b/dist/js/generated/ExecutableSchemaMixin.js new file mode 100644 index 0000000..3fe9b79 --- /dev/null +++ b/dist/js/generated/ExecutableSchemaMixin.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.executableSchemaMixin = executableSchemaMixin; +function executableSchemaMixin(item) { + // @ts-expect-error + const properties = { + get applicationName() { + return this.requiredProp("applicationName"); + }, + set applicationName(value) { + this.setProp("applicationName", value); + }, + get hasAdvancedComputeOptions() { + return this.prop("hasAdvancedComputeOptions"); + }, + set hasAdvancedComputeOptions(value) { + this.setProp("hasAdvancedComputeOptions", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/FlavorSchemaMixin.d.ts b/dist/js/generated/FlavorSchemaMixin.d.ts new file mode 100644 index 0000000..c239783 --- /dev/null +++ b/dist/js/generated/FlavorSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { FlavorPropertiesSchema } from "@mat3ra/esse/dist/js/types"; +export type FlavorSchemaMixin = FlavorPropertiesSchema; +export type FlavorInMemoryEntity = InMemoryEntity & FlavorSchemaMixin; +export declare function flavorSchemaMixin(item: InMemoryEntity): asserts item is T & FlavorSchemaMixin; diff --git a/dist/js/generated/FlavorSchemaMixin.js b/dist/js/generated/FlavorSchemaMixin.js new file mode 100644 index 0000000..70f8ae6 --- /dev/null +++ b/dist/js/generated/FlavorSchemaMixin.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.flavorSchemaMixin = flavorSchemaMixin; +function flavorSchemaMixin(item) { + // @ts-expect-error + const properties = { + get executableName() { + return this.prop("executableName"); + }, + set executableName(value) { + this.setProp("executableName", value); + }, + get applicationName() { + return this.prop("applicationName"); + }, + set applicationName(value) { + this.setProp("applicationName", value); + }, + get input() { + return this.requiredProp("input"); + }, + set input(value) { + this.setProp("input", value); + }, + get supportedApplicationVersions() { + return this.prop("supportedApplicationVersions"); + }, + set supportedApplicationVersions(value) { + this.setProp("supportedApplicationVersions", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/generated/TemplateSchemaMixin.d.ts b/dist/js/generated/TemplateSchemaMixin.d.ts new file mode 100644 index 0000000..0c81a08 --- /dev/null +++ b/dist/js/generated/TemplateSchemaMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { TemplatePropertiesSchema } from "@mat3ra/esse/dist/js/types"; +export type TemplateSchemaMixin = TemplatePropertiesSchema; +export type TemplateInMemoryEntity = InMemoryEntity & TemplateSchemaMixin; +export declare function templateSchemaMixin(item: InMemoryEntity): asserts item is T & TemplateSchemaMixin; diff --git a/dist/js/generated/TemplateSchemaMixin.js b/dist/js/generated/TemplateSchemaMixin.js new file mode 100644 index 0000000..b9c0916 --- /dev/null +++ b/dist/js/generated/TemplateSchemaMixin.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.templateSchemaMixin = templateSchemaMixin; +function templateSchemaMixin(item) { + // @ts-expect-error + const properties = { + get applicationName() { + return this.requiredProp("applicationName"); + }, + set applicationName(value) { + this.setProp("applicationName", value); + }, + get applicationVersion() { + return this.prop("applicationVersion"); + }, + set applicationVersion(value) { + this.setProp("applicationVersion", value); + }, + get executableName() { + return this.requiredProp("executableName"); + }, + set executableName(value) { + this.setProp("executableName", value); + }, + get contextProviders() { + return this.requiredProp("contextProviders"); + }, + set contextProviders(value) { + this.setProp("contextProviders", value); + }, + get content() { + return this.requiredProp("content"); + }, + set content(value) { + this.setProp("content", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index fdf3a18..214c3e6 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -1,14 +1,10 @@ -import Application from "./application"; -import { applicationMixin, applicationStaticMixin } from "./applicationMixin"; -import ApplicationRegistry from "./ApplicationRegistry"; -import ContextProvider from "./context/ContextProvider"; -import JSONSchemaFormDataProvider from "./context/JSONSchemaFormDataProvider"; -import Executable from "./executable"; +import Application from "./Application"; +import { applicationMixin } from "./applicationMixin"; +import Executable from "./Executable"; import { executableMixin } from "./executableMixin"; -import Flavor from "./flavor"; +import Flavor from "./Flavor"; import { flavorMixin } from "./flavorMixin"; -import Template from "./template"; -import { templateMixin, templateStaticMixin } from "./templateMixin"; -declare const allApplications: string[]; -export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, JSONSchemaFormDataProvider, executableMixin, flavorMixin, applicationMixin, applicationStaticMixin, templateMixin, templateStaticMixin, allApplications, }; +import Template from "./Template"; +import { templateMixin } from "./templateMixin"; +export { Application, Executable, Flavor, Template, executableMixin, flavorMixin, applicationMixin, templateMixin, }; export type * from "./types"; diff --git a/dist/js/index.js b/dist/js/index.js index 58497ad..1a8af41 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,30 +3,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.allApplications = exports.templateStaticMixin = exports.templateMixin = exports.applicationStaticMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.JSONSchemaFormDataProvider = exports.ContextProvider = exports.ApplicationRegistry = exports.Template = exports.Flavor = exports.Executable = exports.Application = void 0; -const application_1 = __importDefault(require("./application")); -exports.Application = application_1.default; +exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.Template = exports.Flavor = exports.Executable = exports.Application = void 0; +const Application_1 = __importDefault(require("./Application")); +exports.Application = Application_1.default; const applicationMixin_1 = require("./applicationMixin"); Object.defineProperty(exports, "applicationMixin", { enumerable: true, get: function () { return applicationMixin_1.applicationMixin; } }); -Object.defineProperty(exports, "applicationStaticMixin", { enumerable: true, get: function () { return applicationMixin_1.applicationStaticMixin; } }); -const ApplicationRegistry_1 = __importDefault(require("./ApplicationRegistry")); -exports.ApplicationRegistry = ApplicationRegistry_1.default; -const ContextProvider_1 = __importDefault(require("./context/ContextProvider")); -exports.ContextProvider = ContextProvider_1.default; -const JSONSchemaFormDataProvider_1 = __importDefault(require("./context/JSONSchemaFormDataProvider")); -exports.JSONSchemaFormDataProvider = JSONSchemaFormDataProvider_1.default; -const executable_1 = __importDefault(require("./executable")); -exports.Executable = executable_1.default; +const Executable_1 = __importDefault(require("./Executable")); +exports.Executable = Executable_1.default; const executableMixin_1 = require("./executableMixin"); Object.defineProperty(exports, "executableMixin", { enumerable: true, get: function () { return executableMixin_1.executableMixin; } }); -const flavor_1 = __importDefault(require("./flavor")); -exports.Flavor = flavor_1.default; +const Flavor_1 = __importDefault(require("./Flavor")); +exports.Flavor = Flavor_1.default; const flavorMixin_1 = require("./flavorMixin"); Object.defineProperty(exports, "flavorMixin", { enumerable: true, get: function () { return flavorMixin_1.flavorMixin; } }); -const template_1 = __importDefault(require("./template")); -exports.Template = template_1.default; +const Template_1 = __importDefault(require("./Template")); +exports.Template = Template_1.default; const templateMixin_1 = require("./templateMixin"); Object.defineProperty(exports, "templateMixin", { enumerable: true, get: function () { return templateMixin_1.templateMixin; } }); -Object.defineProperty(exports, "templateStaticMixin", { enumerable: true, get: function () { return templateMixin_1.templateStaticMixin; } }); -const allApplications = ApplicationRegistry_1.default.getUniqueAvailableApplicationNames(); -exports.allApplications = allApplications; diff --git a/dist/js/template.d.ts b/dist/js/template.d.ts index f507f98..064685a 100644 --- a/dist/js/template.d.ts +++ b/dist/js/template.d.ts @@ -1,8 +1,13 @@ -import { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { type TemplateMixin, type TemplateStaticMixin } from "./templateMixin"; -type Base = typeof NamedInMemoryEntity & Constructor & TemplateStaticMixin; +type Base = typeof InMemoryEntity & Constructor & NamedInMemoryEntityConstructor & TemplateStaticMixin; declare const Template_base: Base; -export default class Template extends Template_base { +export default class Template extends Template_base implements TemplateSchema { + constructor(data?: Partial); + toJSON: () => TemplateSchema & AnyObject; } export {}; diff --git a/dist/js/template.js b/dist/js/template.js index f92273c..bb1c44f 100644 --- a/dist/js/template.js +++ b/dist/js/template.js @@ -1,10 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); const templateMixin_1 = require("./templateMixin"); -class Template extends entity_1.NamedInMemoryEntity { +class Template extends entity_1.InMemoryEntity { + constructor(data = {}) { + super({ + applicationName: "", + executableName: "", + content: "", + contextProviders: [], + ...data, + }); + } } exports.default = Template; -// Apply mixins -(0, templateMixin_1.templateMixin)(Template.prototype); -(0, templateMixin_1.templateStaticMixin)(Template); +(0, NamedEntityMixin_1.namedEntityMixin)(Template.prototype); +(0, templateMixin_1.templateMixin)(Template); diff --git a/dist/js/templateMixin.d.ts b/dist/js/templateMixin.d.ts index 8766dcb..e04262a 100644 --- a/dist/js/templateMixin.d.ts +++ b/dist/js/templateMixin.d.ts @@ -1,39 +1,11 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ContextProviderNameEnum, ContextProviderSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import ContextProvider from "./context/ContextProvider"; -import ContextProviderRegistryContainer from "./context/ContextProviderRegistryContainer"; -export type TemplateBase = InMemoryEntity & NamedInMemoryEntity; -export type TemplateMixin = { - isManuallyChanged: boolean; - content: string; - rendered: string | undefined; - applicationName: string | undefined; - executableName: string | undefined; - contextProviders: ContextProvider[]; - addContextProvider: (provider: ContextProvider) => void; - removeContextProvider: (provider: ContextProvider) => void; - render: (externalContext?: Record) => void; - getRenderedJSON: (context?: Record) => AnyObject; - _cleanRenderingContext: (object: Record) => Record; - getDataFromProvidersForRenderingContext: (context?: Record) => Record; - setContent: (text: string) => void; - setRendered: (text: string) => void; - getContextProvidersAsClassInstances: (providerContext?: Record) => ContextProvider[]; - getDataFromProvidersForPersistentContext: (providerContext?: Record) => Record; - getRenderingContext: (externalContext?: Record) => Record; -}; -export declare function templateMixin(item: TemplateBase): TemplateMixin & InMemoryEntity & NamedInMemoryEntity; -export type ContextProviderConfigMapEntry = { - providerCls: typeof ContextProvider; - config: ContextProviderSchema; -}; -export type ContextProviderConfigMap = Partial>; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import { type TemplateSchemaMixin } from "./generated/TemplateSchemaMixin"; +export type TemplateBase = InMemoryEntity; +export type TemplateMixin = TemplateSchemaMixin; export type TemplateStaticMixin = { - contextProviderRegistry: ContextProviderRegistryContainer | null; - setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; jsonSchema: TemplateSchema; }; -export declare function templateStaticMixin(item: Constructor): TemplateStaticMixin & Constructor; +export declare function templateStaticMixin(item: Constructor): void; +export declare function templateMixin(Item: Constructor): void; diff --git a/dist/js/templateMixin.js b/dist/js/templateMixin.js index 99fdd00..c821258 100644 --- a/dist/js/templateMixin.js +++ b/dist/js/templateMixin.js @@ -3,160 +3,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.templateMixin = templateMixin; exports.templateStaticMixin = templateStaticMixin; +exports.templateMixin = templateMixin; const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); -const utils_1 = require("@mat3ra/utils"); -const nunjucks_1 = __importDefault(require("nunjucks")); -const ContextProviderRegistryContainer_1 = __importDefault(require("./context/ContextProviderRegistryContainer")); -function templateMixin(item) { - // @ts-ignore - const properties = { - get isManuallyChanged() { - return this.prop("isManuallyChanged", false); - }, - get content() { - return this.prop("content", ""); - }, - setContent(text) { - return this.setProp("content", text); - }, - get rendered() { - return this.prop("rendered") || this.content; - }, - setRendered(text) { - return this.setProp("rendered", text); - }, - get applicationName() { - return this.prop("applicationName"); - }, - get executableName() { - return this.prop("executableName"); - }, - get contextProviders() { - return this.prop("contextProviders", []); - }, - addContextProvider(provider) { - this.setProp("contextProviders", [...this.contextProviders, provider]); - }, - removeContextProvider(provider) { - const contextProviders = this.contextProviders.filter((p) => { - return p.name !== provider.name && p.domain !== provider.domain; - }); - this.setProp("contextProviders", contextProviders); - }, - render(externalContext) { - const renderingContext = this.getRenderingContext(externalContext); - if (!this.isManuallyChanged) { - try { - const template = nunjucks_1.default.compile(this.content); - // deepClone to pass JSON data without classes - const rendered = template.render(this._cleanRenderingContext(renderingContext)); - this.setRendered(this.isManuallyChanged ? rendered : rendered || this.content); - } - catch (e) { - console.log(`Template is not compiled: ${e}`); - console.log({ - content: this.content, - _cleanRenderingContext: this._cleanRenderingContext(renderingContext), - }); - } - } - }, - getRenderedJSON(context) { - this.render(context); - return this.toJSON(); - }, - // Remove "bulky" items and JSON stringify before passing it to rendering engine (eg. jinja) to compile. - // This way the context should still be passed in full to contextProviders, but not to final text template. - // eslint-disable-next-line class-methods-use-this - _cleanRenderingContext(object) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { job, ...clone } = object; - return utils_1.Utils.clone.deepClone(clone); - }, - /* - * @summary Initializes context provider class instances. `providerContext` is used to pass the data about any - * previously stored values. That is if data was previously saved in database, the context provider - * shall receive it on initialization through providerContext and prioritize this value over the default. - */ - getContextProvidersAsClassInstances(providerContext) { - return this.contextProviders.map((p) => { - var _a; - const providerInstance = (_a = this.constructor.contextProviderRegistry) === null || _a === void 0 ? void 0 : _a.findProviderInstanceByName(p.name); - if (!providerInstance) { - throw new Error(`Provider ${p.name} not found`); - } - const clsInstance = new providerInstance.constructor({ - ...providerInstance.config, - context: providerContext, - }); - return clsInstance; - }); - }, - /* - * @summary Extracts the the data from all context providers for further use during render. - */ - getDataFromProvidersForRenderingContext(providerContext) { - const result = {}; - this.getContextProvidersAsClassInstances(providerContext).forEach((contextProvider) => { - const context = contextProvider.yieldDataForRendering(); - Object.keys(context).forEach((key) => { - // merge context keys if they are objects otherwise override them. - result[key] = - result[key] !== null && typeof result[key] === "object" - ? // @ts-ignore - { ...result[key], ...context[key] } - : context[key]; - }); - }); - return result; - }, - /* - * @summary Extracts the the data from all context providers for further save in persistent context. - */ - // TODO: optimize logic to prevent re-initializing the context provider classes again below, reuse above function - getDataFromProvidersForPersistentContext(providerContext) { - const result = {}; - this.getContextProvidersAsClassInstances(providerContext).forEach((contextProvider) => { - // only save in the persistent context the data from providers that were edited (or able to be edited) - Object.assign(result, contextProvider.isEdited ? contextProvider.yieldData() : {}); - }); - return result; - }, - /* - * @summary Combines rendering context (in order of preference): - * - context from templates initialized with external context - * - "external" context and - */ - getRenderingContext(externalContext) { - return { - ...externalContext, - ...this.getDataFromProvidersForRenderingContext(externalContext), - }; - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; -} +const TemplateSchemaMixin_1 = require("./generated/TemplateSchemaMixin"); function templateStaticMixin(item) { // @ts-ignore const properties = { - contextProviderRegistry: null, get jsonSchema() { return JSONSchemasInterface_1.default.getSchemaById("software/template"); }, - setContextProvidersConfig(classConfigMap) { - const contextProviderRegistry = new ContextProviderRegistryContainer_1.default(); - Object.entries(classConfigMap).forEach(([name, { providerCls, config }]) => { - contextProviderRegistry.addProvider({ - instance: providerCls.getConstructorConfig(config), - name, - }); - }); - this.contextProviderRegistry = contextProviderRegistry; - }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; +} +function templateMixin(Item) { + (0, TemplateSchemaMixin_1.templateSchemaMixin)(Item.prototype); + templateStaticMixin(Item); } diff --git a/dist/js/typeUtils.d.ts b/dist/js/typeUtils.d.ts new file mode 100644 index 0000000..4ab1e40 --- /dev/null +++ b/dist/js/typeUtils.d.ts @@ -0,0 +1,5 @@ +/** + * `T` with the listed keys made optional. Equivalent to + * `Omit & Partial>`. + */ +export type PartialBy = Omit & Partial>; diff --git a/dist/js/typeUtils.js b/dist/js/typeUtils.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/dist/js/typeUtils.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/js/types.d.ts b/dist/js/types.d.ts index c4367e3..6670452 100644 --- a/dist/js/types.d.ts +++ b/dist/js/types.d.ts @@ -1,6 +1,7 @@ import type { ApplicationMixin, ApplicationStaticMixin } from "./applicationMixin"; -import type { CreateApplicationConfig } from "./ApplicationRegistry"; +import type { ExecutableConstructorData } from "./Executable"; import type { ExecutableMixin } from "./executableMixin"; import type { FlavorMixin } from "./flavorMixin"; -import type { TemplateMixin, TemplateStaticMixin } from "./templateMixin"; -export type { FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, CreateApplicationConfig, TemplateMixin, TemplateStaticMixin, }; +import type { TemplateMixin } from "./templateMixin"; +export type { PartialBy } from "./typeUtils"; +export type { ExecutableConstructorData, FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, TemplateMixin, }; diff --git a/package-lock.json b/package-lock.json index e7daf41..881418e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,21 +9,16 @@ "version": "0.0.0", "license": "Apache-2.0", "dependencies": { - "@types/react-jsonschema-form": "^1.7.13", - "lodash": "^4.17.21", - "nunjucks": "^3.2.4", - "react-jsonschema-form": "^1.8.1" + "lodash": "^4.17.21" }, "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/code": "2025.8.7-0", - "@mat3ra/esse": "2025.11.26-0", - "@mat3ra/made": "2025.7.15-0", - "@mat3ra/standata": "2025.10.1-0", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", "@mat3ra/tsconfig": "2024.6.3-0", "@mat3ra/utils": "2025.9.20-0", - "@types/nunjucks": "^3.2.6", "@typescript-eslint/eslint-plugin": "^5.9.1", "@typescript-eslint/parser": "^5.9.1", "chai": "^4.3.4", @@ -63,7 +58,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -77,7 +71,6 @@ "version": "11.9.3", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==", - "dev": true, "license": "MIT", "dependencies": { "@jsdevtools/ono": "^7.1.3", @@ -95,7 +88,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.28", @@ -125,7 +117,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -140,7 +131,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -150,7 +140,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -181,7 +170,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz", "integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==", - "dev": true, "license": "MIT", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -200,7 +188,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", @@ -217,7 +204,6 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -230,7 +216,6 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -247,7 +232,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -269,7 +253,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -287,7 +270,6 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -304,7 +286,6 @@ "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" @@ -317,7 +298,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -327,7 +307,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.5", @@ -341,7 +320,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -355,7 +333,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -373,7 +350,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -386,7 +362,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -396,7 +371,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -414,7 +388,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", @@ -432,7 +405,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -446,7 +418,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -456,7 +427,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -466,7 +436,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -476,7 +445,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -491,7 +459,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -505,7 +472,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -521,7 +487,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -534,7 +499,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -549,7 +513,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -559,14 +522,12 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -576,7 +537,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -586,7 +546,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -599,7 +558,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.28.5" @@ -615,7 +573,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -632,7 +589,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -648,7 +604,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -664,7 +619,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -682,7 +636,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -700,7 +653,6 @@ "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", @@ -720,7 +672,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -738,7 +689,6 @@ "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", @@ -757,7 +707,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.18.6", @@ -775,7 +724,6 @@ "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.18.9", @@ -793,7 +741,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.18.6", @@ -811,7 +758,6 @@ "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.20.2", @@ -829,7 +775,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -847,7 +792,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.18.6", @@ -865,7 +809,6 @@ "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/compat-data": "^7.20.5", @@ -886,7 +829,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-plugin-utils": "^7.18.6", @@ -904,7 +846,6 @@ "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.20.2", @@ -923,7 +864,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-create-class-features-plugin": "^7.18.6", @@ -940,7 +880,6 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -954,7 +893,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-regexp-features-plugin": "^7.18.6", @@ -971,7 +909,6 @@ "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-plugin-utils": "^7.8.0" @@ -984,7 +921,6 @@ "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.12.13" @@ -997,7 +933,6 @@ "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.14.5" @@ -1013,7 +948,6 @@ "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-plugin-utils": "^7.8.0" @@ -1026,7 +960,6 @@ "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.8.3" @@ -1039,7 +972,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1055,7 +987,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1071,7 +1002,6 @@ "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.8.0" @@ -1084,7 +1014,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1100,7 +1029,6 @@ "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.10.4" @@ -1113,7 +1041,6 @@ "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-plugin-utils": "^7.8.0" @@ -1126,7 +1053,6 @@ "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.10.4" @@ -1139,7 +1065,6 @@ "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.8.0" @@ -1152,7 +1077,6 @@ "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.8.0" @@ -1165,7 +1089,6 @@ "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" @@ -1178,7 +1101,6 @@ "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.14.5" @@ -1194,7 +1116,6 @@ "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-plugin-utils": "^7.14.5" @@ -1210,7 +1131,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1226,7 +1146,6 @@ "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-create-regexp-features-plugin": "^7.18.6", @@ -1243,7 +1162,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1259,7 +1177,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1277,7 +1194,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -1295,7 +1211,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1311,7 +1226,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1327,7 +1241,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -1344,7 +1257,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.3", @@ -1361,7 +1273,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -1382,7 +1293,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1399,7 +1309,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1416,7 +1325,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1433,7 +1341,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1449,7 +1356,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1466,7 +1372,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1482,7 +1387,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1499,7 +1403,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1515,7 +1418,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1531,7 +1433,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1548,7 +1449,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1566,7 +1466,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1582,7 +1481,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1598,7 +1496,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1614,7 +1511,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1630,7 +1526,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1647,7 +1542,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1664,7 +1558,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.28.3", @@ -1683,7 +1576,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1700,7 +1592,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -1717,7 +1608,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1733,7 +1623,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1749,7 +1638,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1765,7 +1653,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", @@ -1785,7 +1672,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1802,7 +1688,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1818,7 +1703,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1835,7 +1719,6 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1851,7 +1734,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -1868,7 +1750,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1886,7 +1767,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1902,7 +1782,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1918,7 +1797,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1938,7 +1816,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" @@ -1954,7 +1831,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1971,7 +1847,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1987,7 +1862,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2004,7 +1878,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2020,7 +1893,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2036,7 +1908,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2053,7 +1924,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2069,7 +1939,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2085,7 +1954,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2101,7 +1969,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -2121,7 +1988,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2137,7 +2003,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2154,7 +2019,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2171,7 +2035,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2188,7 +2051,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.28.5", @@ -2273,7 +2135,6 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2288,7 +2149,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2309,7 +2169,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2329,7 +2188,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.3.tgz", "integrity": "sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==", - "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -2349,20 +2207,7 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs2": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.28.4.tgz", - "integrity": "sha512-chjPHn3p+okNMesTjKU/pnpVT06oiJG1sVDJHTkAwYTCnVdM/2V5LI5xz3Y2y7MNngn8fQ19fpXjV3f9Jqun9w==", "license": "MIT", - "dependencies": { - "core-js": "^2.6.12" - }, "engines": { "node": ">=6.9.0" } @@ -2371,7 +2216,6 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", - "dev": true, "license": "MIT", "dependencies": { "core-js-pure": "^3.43.0" @@ -2384,7 +2228,6 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -2399,7 +2242,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -2418,7 +2260,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2432,7 +2273,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2445,7 +2285,6 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2513,7 +2352,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -2534,7 +2372,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2551,7 +2388,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -2561,7 +2397,6 @@ "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, "license": "MIT", "engines": { "node": ">= 4" @@ -2571,7 +2406,6 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -2585,14 +2419,12 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@exabyte-io/eslint-config": { @@ -2634,9 +2466,9 @@ "version": "2022.5.28-0", "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.28-0.tgz", "integrity": "sha512-BA+u07dkt4e8yqcBHTv5szXXeMyNFcW0G2Ki3Vbugv6ku6dfl4+Sji8cs5PUr+hkYptc7rTg5r89lfr6Vt+oJw==", - "dev": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@babel/cli": "7.16.0", "@babel/core": "7.16.0", @@ -2654,8 +2486,8 @@ "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", + "peer": true, "dependencies": { "commander": "^4.0.1", "convert-source-map": "^1.1.0", @@ -2684,8 +2516,8 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", @@ -2715,8 +2547,8 @@ "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", + "peer": true, "dependencies": { "eslint-scope": "^5.1.1", "eslint-visitor-keys": "^2.1.0", @@ -2734,8 +2566,8 @@ "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", + "peer": true, "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -2753,8 +2585,8 @@ "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", + "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -2771,8 +2603,8 @@ "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", + "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.21.0", @@ -2790,8 +2622,8 @@ "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", + "peer": true, "dependencies": { "@babel/compat-data": "^7.16.4", "@babel/helper-compilation-targets": "^7.16.3", @@ -2879,8 +2711,8 @@ "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", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2896,8 +2728,8 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -2916,8 +2748,8 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -2931,8 +2763,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0", "core-js-compat": "^3.18.0" @@ -2945,8 +2777,8 @@ "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", + "peer": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1" }, @@ -2958,8 +2790,8 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 6" } @@ -2968,15 +2800,15 @@ "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" + "license": "MIT", + "peer": true }, "node_modules/@exabyte-io/periodic-table.js/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -2985,15 +2817,14 @@ "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", - "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "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, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -3009,7 +2840,6 @@ "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, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/load-nyc-config": { @@ -3140,7 +2970,6 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -3151,7 +2980,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -3162,7 +2990,6 @@ "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, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -3172,14 +2999,12 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3190,14 +3015,12 @@ "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/code": { - "version": "2025.8.7-0", - "resolved": "https://registry.npmjs.org/@mat3ra/code/-/code-2025.8.7-0.tgz", - "integrity": "sha512-Bx5mFWQfpNU70vgSt2CR9zYWNsW7b8mU5emmPrsnGKIfKi1UH6xKwhaz7Fy77bju5NHi0iv3IE9UDXf0nr6SGQ==", - "dev": true, + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", + "integrity": "sha512-FLGHrGSba7qj1FnOnvDIaevDPGRJ2xVODFrDvsnF2Qqj/GRER+pb+e4DTBaBK7+CvtJapq2wJ6yU6BMtVabMtw==", "license": "Apache-2.0", "dependencies": { "@types/mathjs": "^5.0.1", @@ -3224,7 +3047,6 @@ "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3234,10 +3056,9 @@ } }, "node_modules/@mat3ra/esse": { - "version": "2025.11.26-0", - "resolved": "https://registry.npmjs.org/@mat3ra/esse/-/esse-2025.11.26-0.tgz", - "integrity": "sha512-m0KZ3E8n+RvJR7cWeGstcJCXt7qxO0eCiZ97ojbBg5H2smTKLBfh4g5UF5ylJnk5PaArcPcRtLYwHcOxuPZHuA==", - "dev": true, + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "integrity": "sha512-qQl96uFmRcA1bP7fxQjSIbt5YtAJ5tcWQEQLgtcPXb1k6COrrc/HqkI5a8QyMxC8NclNosIAzM9myj5sQ+AK0w==", "license": "Apache-2.0", "dependencies": { "@babel/cli": "^7.27.0", @@ -3249,7 +3070,7 @@ "@babel/preset-typescript": "^7.27.0", "@babel/register": "^7.25.9", "@babel/runtime-corejs3": "^7.27.0", - "@mat3ra/utils": "^2025.11.20-0", + "@mat3ra/utils": "2026.3.7-0", "@types/chai": "^4.3.20", "@types/js-yaml": "^4.0.9", "@types/json-schema-merge-allof": "^0.6.5", @@ -3271,7 +3092,6 @@ "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", @@ -3290,7 +3110,6 @@ "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": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -3309,7 +3128,6 @@ "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": { "@babel/helper-plugin-utils": "^7.0.0", @@ -3323,10 +3141,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils": { - "version": "2025.11.20-0", - "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2025.11.20-0.tgz", - "integrity": "sha512-igkswFIPrvIsOKiGdLE6ifgKGa3nruepjq2pPs9us+gHRn4tCaFNsBJqHw3ysw1dLgCtoYhHyYbMdpQu46+FCw==", - "dev": true, + "version": "2026.3.7-0", + "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2026.3.7-0.tgz", + "integrity": "sha512-qUxsyzo4s1G8MjHYbF+QHdXq0KgymJ3ey3x+dswCak69WiB0w8OuO5IOqyXS0RWoEB2mj7Ccm4ZN7uTSWZLHxw==", "license": "ISC", "dependencies": { "@babel/cli": "7.16.0", @@ -3357,7 +3174,6 @@ "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", @@ -3387,14 +3203,12 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, "license": "MIT" }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -3425,7 +3239,6 @@ "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" @@ -3435,7 +3248,6 @@ "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", @@ -3454,7 +3266,6 @@ "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" @@ -3465,7 +3276,6 @@ "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", @@ -3482,7 +3292,6 @@ "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": { "@babel/compat-data": "^7.16.4", @@ -3571,7 +3380,6 @@ "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" @@ -3581,7 +3389,6 @@ "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": { "@babel/helper-plugin-utils": "^7.16.7", @@ -3602,7 +3409,6 @@ "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", @@ -3613,10 +3419,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3629,7 +3434,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", @@ -3644,7 +3448,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0", @@ -3658,7 +3461,6 @@ "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": { "@babel/helper-define-polyfill-provider": "^0.3.1" @@ -3671,7 +3473,6 @@ "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" @@ -3681,7 +3482,6 @@ "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": "*" @@ -3695,7 +3495,6 @@ "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": "*" @@ -3709,7 +3508,6 @@ "version": "12.4.1", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.24.0", @@ -3733,17 +3531,15 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/@mat3ra/esse/node_modules/typed-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.1.tgz", - "integrity": "sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==", - "dev": true, + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", "license": "MIT", "engines": { "node": ">= 18" @@ -3753,7 +3549,6 @@ "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", @@ -3767,8 +3562,8 @@ "version": "2025.7.15-0", "resolved": "https://registry.npmjs.org/@mat3ra/made/-/made-2025.7.15-0.tgz", "integrity": "sha512-6mpQnpxrQ8FEP8mO+0N8oa36tURxeNM7N2zHthzz6gZlqYNf5ipJp9F6vHEqMLZ30RSIib4/oCmK3UQI4MBzAA==", - "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@babel/core": "7.24.1", "@exabyte-io/periodic-table.js": "2022.5.28-0", @@ -3784,453 +3579,61 @@ "typescript": "^4.5.5", "underscore.string": "^3.3.4" }, - "engines": { - "node": ">=0.14" - }, - "peerDependencies": { - "@mat3ra/code": "*", - "@mat3ra/esse": "*" - } - }, - "node_modules/@mat3ra/made/node_modules/@babel/core": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@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/made/node_modules/@types/node": { - "version": "20.19.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", - "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@mat3ra/made/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@mat3ra/made/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mat3ra/standata": { - "version": "2025.10.1-0", - "resolved": "https://registry.npmjs.org/@mat3ra/standata/-/standata-2025.10.1-0.tgz", - "integrity": "sha512-YAyh1752bRdXWvPoCMW1uVTaCpIMcg7ojWGqiUcfbOsRodfd8PdT9f1rbAaBxfDx9ggfljILjobB4bVgo2X3PA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.24.1", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", - "@babel/preset-typescript": "^7.22.5", - "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", - "cmd-ts": "^0.13.0", - "js-yaml": "^4.1.0", - "ts-node": "^10.9.1", - "typescript": "^4.5.5" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@mat3ra/standata/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/standata/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/standata/node_modules/@babel/core": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mat3ra/standata/node_modules/@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/standata/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" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@mat3ra/standata/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.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mat3ra/standata/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": { - "@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": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mat3ra/standata/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": { - "@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/standata/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": { - "@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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@mat3ra/standata/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": { - "@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": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mat3ra/standata/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": ">=6.9.0" - } - }, - "node_modules/@mat3ra/standata/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@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/@mat3ra/standata/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.0", - "core-js-compat": "^3.18.0" + "engines": { + "node": ">=0.14" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@mat3ra/code": "*", + "@mat3ra/esse": "*" } }, - "node_modules/@mat3ra/standata/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, + "node_modules/@mat3ra/made/node_modules/@babel/core": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@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" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mat3ra/standata/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" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@mat3ra/standata/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/@mat3ra/made/node_modules/@types/node": { + "version": "20.19.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", + "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" } }, - "node_modules/@mat3ra/standata/node_modules/typescript": { + "node_modules/@mat3ra/made/node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4239,6 +3642,33 @@ "node": ">=4.2.0" } }, + "node_modules/@mat3ra/made/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@mat3ra/standata": { + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", + "integrity": "sha512-Kl2E6lm1DhVQ01d5z8+FlJpnIrzP1iYZ/rpRBE9IM+X4SvW6VRYWWAS+u2TFMrGrNSBiGxE0mwlwLimD45X8pw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cmd-ts": "^0.13.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@mat3ra/esse": "*" + } + }, "node_modules/@mat3ra/tsconfig": { "version": "2024.6.3-0", "resolved": "https://registry.npmjs.org/@mat3ra/tsconfig/-/tsconfig-2024.6.3-0.tgz", @@ -4769,7 +4199,6 @@ "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, "license": "MIT", "optional": true }, @@ -4777,7 +4206,6 @@ "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, "license": "MIT", "dependencies": { "eslint-scope": "5.1.1" @@ -4846,43 +4274,38 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", - "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, "license": "MIT" }, "node_modules/@types/chai": { "version": "4.3.20", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/chai-almost": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/chai-almost/-/chai-almost-1.0.3.tgz", "integrity": "sha512-NMLjvnFjgxS0Z36whNuoma2p/2Fu6m+dV8eddO8tRAztMAqTqYxFYGyJNsAsOlwx89siUMfxQ1Wdqew2xXsiEg==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/chai": "*" } @@ -4891,7 +4314,6 @@ "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -4904,7 +4326,6 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.5.tgz", "integrity": "sha512-5mS11ZUTyFNUVEMpK3uKoPb6BWL/nLgW/ln2VOiI8OOxKEYC4Gl9O3WjS5P49yqVTfkcbCAPKw3T1O4erUah5g==", - "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "*" @@ -4918,17 +4339,15 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "dev": true, + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", "license": "MIT" }, "node_modules/@types/mathjs": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-5.0.1.tgz", "integrity": "sha512-EFBuueI+BRed9bnUO6/9my55b4FH+VQIvqMm58h9JGbtaGCkqr3YSDhnmVbM1SJjF//8SURERSypzNwejOk7lA==", - "dev": true, "license": "MIT", "dependencies": { "decimal.js": "^10.0.0" @@ -4938,46 +4357,18 @@ "version": "10.0.10", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "24.10.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "dev": true, "license": "MIT", "peer": true, "dependencies": { "undici-types": "~7.16.0" } }, - "node_modules/@types/nunjucks": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", - "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.5.tgz", - "integrity": "sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==", - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-jsonschema-form": { - "version": "1.7.13", - "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.13.tgz", - "integrity": "sha512-C2jgO7/ow76oCSfUK++jKKox17R0A7ryMYNE5hJ2dR1Ske9jhuvjIlurvzMePh+Xjk8wey0nzB2C7HFKe2pRdg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "*", - "@types/react": "*" - } - }, "node_modules/@types/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", @@ -4989,15 +4380,15 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.13.0.tgz", "integrity": "sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA==", - "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/underscore.string": { "version": "0.0.40", "resolved": "https://registry.npmjs.org/@types/underscore.string/-/underscore.string-0.0.40.tgz", "integrity": "sha512-6J3Wp6PnuXhSxVSVaSoh9SKiormScoa2pPLKpZk5QsjKD3RKQZQj/mwBVfULd2MUl5gM/UlLSvr+cynd/7VWQA==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/underscore": "*" } @@ -5267,7 +4658,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5280,7 +4670,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -5290,7 +4679,6 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -5303,7 +4691,6 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5330,7 +4717,6 @@ "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, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -5347,7 +4733,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -5365,21 +4750,20 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-0.0.0.tgz", "integrity": "sha512-/wvWNupeAr7sp7J2ZXvQvd97uyxsokx4TXdV6YMhd/EDwctlgY3wUGZCgQx1sJQyxU+c8EWRCWsLGOumdiS9aw==", - "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/an-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", - "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5418,7 +4802,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5428,7 +4811,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -5478,14 +4860,12 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { @@ -5502,8 +4882,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-almost-equal/-/array-almost-equal-1.0.0.tgz", "integrity": "sha512-NiQJq0vH5nEebm7FMs52fli23nwCh+RBKZZtA5g5qUmqGAkb9n8/WOTW8zjDocLADXXM1CRanFfPTMdrI2yZwg==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "almost-equal": "0.0.0", "an-array": "^1.0.0" @@ -5513,7 +4893,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -5661,7 +5040,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -5706,7 +5084,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5716,7 +5093,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5726,7 +5102,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -5762,7 +5137,6 @@ "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.7", @@ -5777,7 +5151,6 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", @@ -5791,7 +5164,6 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5" @@ -5804,14 +5176,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/baseline-browser-mapping": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", - "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -5834,7 +5204,6 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5865,7 +5234,6 @@ "version": "4.28.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5899,7 +5267,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, "license": "MIT" }, "node_modules/caching-transform": { @@ -5938,7 +5305,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -5957,7 +5323,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5971,7 +5336,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5988,7 +5352,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6008,7 +5371,6 @@ "version": "1.0.30001755", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz", "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -6048,7 +5410,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -6065,7 +5426,6 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": "*" @@ -6197,7 +5557,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -6207,7 +5566,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -6235,7 +5593,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -6248,7 +5605,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/colorette": { @@ -6262,7 +5618,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -6282,14 +5637,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, "license": "MIT" }, "node_modules/complex.js": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==", - "dev": true, "license": "MIT OR GPL-2.0", "engines": { "node": "*" @@ -6299,7 +5652,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "dev": true, "dependencies": { "validate.io-array": "^1.0.3", "validate.io-function": "^1.0.2", @@ -6310,7 +5662,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "dev": true, "dependencies": { "compute-gcd": "^1.2.1", "validate.io-array": "^1.0.3", @@ -6322,7 +5673,6 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, "node_modules/confusing-browser-globals": { @@ -6336,22 +5686,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true, "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", - "dev": true, "license": "MIT", "dependencies": { "browserslist": "^4.26.3" @@ -6365,7 +5705,6 @@ "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz", "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "funding": { @@ -6377,14 +5716,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -6399,7 +5736,6 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": "*" @@ -6409,20 +5745,12 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/dag-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -6436,7 +5764,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -6454,7 +5781,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -6472,7 +5798,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -6490,7 +5815,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -6518,7 +5842,6 @@ "version": "10.6.0", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, "license": "MIT" }, "node_modules/deep-eql": { @@ -6538,7 +5861,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, "license": "MIT" }, "node_modules/default-require-extensions": { @@ -6561,7 +5883,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -6579,7 +5900,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -6638,7 +5958,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -6651,7 +5970,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6673,7 +5991,6 @@ "version": "1.5.255", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.255.tgz", "integrity": "sha512-Z9oIp4HrFF/cZkDPMpz2XSuVpc1THDpT4dlmATFlJUIBVCy9Vap5/rIXsASP1CscBacBqhabwh8vLctqBwEerQ==", - "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { @@ -6687,7 +6004,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", @@ -6701,7 +6017,6 @@ "version": "1.24.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -6770,7 +6085,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6780,7 +6094,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6818,7 +6131,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6831,7 +6143,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6860,7 +6171,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7", @@ -6885,7 +6195,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6895,14 +6204,12 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", - "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6916,7 +6223,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", @@ -7485,7 +6791,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -7499,7 +6804,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -7509,7 +6813,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -7525,7 +6828,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -7535,7 +6837,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10" @@ -7545,7 +6846,6 @@ "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" @@ -7555,7 +6855,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -7572,7 +6871,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -7582,7 +6880,6 @@ "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, "license": "MIT", "engines": { "node": ">= 4" @@ -7592,7 +6889,6 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -7606,14 +6902,12 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7626,14 +6920,12 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -7648,7 +6940,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -7658,7 +6949,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -7672,7 +6962,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -7685,7 +6974,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -7698,7 +6986,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -7708,7 +6995,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -7778,14 +7064,12 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, "funding": [ { "type": "github", @@ -7812,7 +7096,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -7838,7 +7121,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, "license": "MIT", "dependencies": { "commondir": "^1.0.1", @@ -7880,7 +7162,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -7895,14 +7176,12 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -7932,7 +7211,6 @@ "version": "4.0.12", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==", - "dev": true, "license": "MIT OR GPL-2.0", "engines": { "node": "*" @@ -7963,21 +7241,18 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -7992,7 +7267,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8002,7 +7276,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -8023,14 +7296,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, "license": "MIT" }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8040,7 +7311,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8050,7 +7320,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -8080,7 +7349,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -8115,7 +7383,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -8142,7 +7409,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -8161,7 +7427,6 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -8182,7 +7447,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -8195,7 +7459,6 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -8211,7 +7474,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.2.1", @@ -8259,7 +7521,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8296,7 +7557,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8309,7 +7569,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8319,7 +7578,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -8332,7 +7590,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" @@ -8348,7 +7605,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8361,7 +7617,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -8404,7 +7659,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -8470,7 +7724,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -8487,7 +7740,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -8508,7 +7760,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -8519,14 +7770,12 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -8541,7 +7790,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -8559,7 +7807,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, "license": "MIT", "dependencies": { "async-function": "^1.0.0", @@ -8579,7 +7826,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" @@ -8608,7 +7854,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -8625,14 +7870,12 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8645,7 +7888,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -8661,7 +7903,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -8679,7 +7920,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -8696,7 +7936,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8706,7 +7945,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" @@ -8735,7 +7973,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.4", @@ -8755,7 +7992,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8768,7 +8004,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", - "dev": true, "license": "MIT", "dependencies": { "is-glob": "^2.0.0" @@ -8781,7 +8016,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8791,7 +8025,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" @@ -8804,7 +8037,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8817,7 +8049,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8840,7 +8071,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -8867,7 +8097,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -8880,7 +8109,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -8899,7 +8127,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8912,7 +8139,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" @@ -8941,7 +8167,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -8958,7 +8183,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -8976,7 +8200,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -9012,7 +8235,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", - "dev": true, "license": "MIT", "dependencies": { "is-invalid-path": "^0.1.0" @@ -9025,7 +8247,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9038,7 +8259,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" @@ -9054,7 +8274,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -9081,21 +8300,18 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9266,7 +8482,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true, "license": "MIT" }, "node_modules/js-tokens": { @@ -9279,7 +8494,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -9302,7 +8516,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -9315,21 +8528,18 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-compare": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "dev": true, "license": "MIT", "dependencies": { "lodash": "^4.17.4" @@ -9339,7 +8549,6 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.14.0.tgz", "integrity": "sha512-yGR1xmhdiD6R0MSrwWcFxQzAj5b3i5Gb/mt5tvQKgFMMeNe0KZYNEN/jWr7G+xn39Azqgcvk4ZKMs8dQl8e4wA==", - "dev": true, "license": "MIT", "dependencies": { "clone": "^2.1.2", @@ -9359,7 +8568,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", - "dev": true, "license": "MIT", "dependencies": { "compute-lcm": "^1.1.2", @@ -9374,7 +8582,6 @@ "version": "15.0.4", "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz", "integrity": "sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==", - "dev": true, "license": "MIT", "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.5.5", @@ -9398,7 +8605,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -9414,21 +8620,18 @@ "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, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -9538,7 +8741,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -9548,7 +8750,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9578,7 +8779,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -9771,7 +8971,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, "license": "MIT" }, "node_modules/lodash.flattendeep": { @@ -9785,14 +8984,12 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, "license": "MIT" }, "node_modules/log-symbols": { @@ -9900,6 +9097,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -9922,7 +9120,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -9932,7 +9129,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, "license": "MIT", "dependencies": { "pify": "^4.0.1", @@ -9946,7 +9142,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver" @@ -9956,14 +9151,12 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, "license": "ISC" }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9973,7 +9166,6 @@ "version": "5.10.3", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-5.10.3.tgz", "integrity": "sha512-ySjg30BC3dYjQm73ILZtwcWzFJde0VU6otkXW/57IjjuYRa3Qaf0Kb8pydEuBZYtqW2OxreAtsricrAmOj3jIw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "complex.js": "2.0.11", @@ -9996,14 +9188,12 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==", - "dev": true, "license": "MIT" }, "node_modules/md5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "charenc": "~0.0.1", @@ -10015,7 +9205,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/merge-stream": { @@ -10063,7 +9252,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10076,7 +9264,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10086,7 +9273,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/mixwith/-/mixwith-0.1.1.tgz", "integrity": "sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A==", - "dev": true, "license": "Apache-2.0" }, "node_modules/mocha": { @@ -10277,7 +9463,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -10297,7 +9482,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, "license": "MIT" }, "node_modules/natural-compare-lite": { @@ -10324,7 +9508,6 @@ "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, "license": "MIT" }, "node_modules/normalize-path": { @@ -10666,6 +9849,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10675,7 +9859,6 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10688,7 +9871,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10698,7 +9880,6 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -10788,7 +9969,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -10814,7 +9994,6 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -10832,7 +10011,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.6", @@ -10898,7 +10076,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10924,7 +10101,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -10947,7 +10123,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10957,7 +10132,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10967,7 +10141,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-type": { @@ -10994,7 +10167,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -11027,7 +10199,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11037,7 +10208,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -11047,7 +10217,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, "license": "MIT", "dependencies": { "find-up": "^3.0.0" @@ -11060,7 +10229,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^3.0.0" @@ -11073,7 +10241,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^3.0.0", @@ -11087,7 +10254,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -11103,7 +10269,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.0.0" @@ -11116,7 +10281,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11126,7 +10290,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11136,7 +10299,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -11188,7 +10350,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -11198,6 +10359,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -11245,72 +10407,11 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-jsonschema-form": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz", - "integrity": "sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg==", - "deprecated": "react-jsonschema-form has been moved to @rjsf/core", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "lodash": "^4.17.15", - "prop-types": "^15.5.8", - "react-is": "^16.8.4", - "react-lifecycles-compat": "^3.0.4", - "shortid": "^2.2.14" - }, - "engines": { - "node": ">=6", - "npm": ">=2.14.7" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-jsonschema-form/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/react-jsonschema-form/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "dev": true, "license": "MIT" }, "node_modules/readdirp": { @@ -11330,7 +10431,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -11353,14 +10453,12 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", - "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -11373,14 +10471,12 @@ "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -11401,7 +10497,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11414,7 +10509,6 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", - "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", @@ -11442,14 +10536,12 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -11485,7 +10577,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11512,7 +10603,6 @@ "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.1", @@ -11533,7 +10623,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11586,7 +10675,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -11636,7 +10724,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -11677,7 +10764,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11694,7 +10780,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11712,21 +10797,18 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", - "dev": true, "license": "MIT" }, "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true, "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -11753,7 +10835,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -11771,7 +10852,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -11787,7 +10867,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -11802,7 +10881,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -11815,7 +10893,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -11828,44 +10905,15 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shortid": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.17.tgz", - "integrity": "sha512-GpbM3gLF1UUXZvQw6MCyulHkWbRseNO4cyBEZresZRorwl1+SLu1ZdqgVtuwqz8mB6RpwPkm541mYSqrKyJSaA==", - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8" - } - }, - "node_modules/shortid/node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11885,7 +10933,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11902,7 +10949,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11921,7 +10967,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11948,7 +10993,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11988,7 +11032,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -11998,7 +11041,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -12068,14 +11110,12 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12200,7 +11240,6 @@ "version": "1.2.10", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -12222,7 +11261,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -12241,7 +11279,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -12259,7 +11296,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12292,7 +11328,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12305,7 +11340,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12318,7 +11352,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -12348,7 +11381,6 @@ "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -12365,14 +11397,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12382,7 +11412,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -12400,7 +11429,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -12430,7 +11458,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, "license": "MIT" }, "node_modules/through": { @@ -12444,14 +11471,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -12468,7 +11493,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -12486,7 +11510,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -12512,7 +11535,6 @@ "version": "0.6.11", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", - "dev": true, "license": "MIT", "dependencies": { "gopd": "^1.2.0", @@ -12530,7 +11552,6 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -12574,7 +11595,6 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -12587,7 +11607,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -12663,7 +11682,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -12686,7 +11704,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -12699,7 +11716,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -12714,7 +11730,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -12734,7 +11749,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -12756,7 +11770,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -12777,7 +11790,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.1.0.tgz", "integrity": "sha512-TuQzwiT4DDg19beHam3E66oRXhyqlyfgjHB/5fcvsRXbfmWPJfto9B4a0TBdTrQAPGlGmXh/k7iUI+WsObgORA==", - "dev": true, "engines": { "node": ">= 6" } @@ -12796,7 +11808,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -12819,7 +11830,6 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -12833,7 +11843,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -12852,14 +11861,12 @@ "version": "1.13.7", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "dev": true, "license": "MIT" }, "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "^1.1.1", @@ -12873,7 +11880,6 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, "license": "MIT", "peer": true }, @@ -12881,7 +11887,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12891,7 +11896,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -12905,7 +11909,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12915,7 +11918,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12925,7 +11927,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -12965,14 +11966,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -12982,40 +11981,34 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true, "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, "license": "MIT" }, "node_modules/valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", - "dev": true + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "node_modules/validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", - "dev": true, "license": "MIT" }, "node_modules/validate.io-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==", - "dev": true + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" }, "node_modules/validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", - "dev": true, "dependencies": { "validate.io-number": "^1.0.3" } @@ -13024,7 +12017,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", - "dev": true, "dependencies": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" @@ -13033,14 +12025,12 @@ "node_modules/validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==", - "dev": true + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -13056,7 +12046,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", @@ -13076,7 +12065,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -13104,7 +12092,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, "license": "MIT", "dependencies": { "is-map": "^2.0.3", @@ -13130,7 +12117,6 @@ "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -13152,7 +12138,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13219,7 +12204,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -13249,7 +12233,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yaml": { @@ -13369,7 +12352,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/package.json b/package.json index 71c42a0..fe55e1f 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "lint:fix": "eslint --fix --cache src/js tests/js && prettier --write src/js tests/js", "transpile": "tsc -p tsconfig.json", "prettier": "prettier --check src/js tests/js", - "prepare": "husky install" + "prepare": "husky install", + "generate-mixins": "ts-node scripts/generate-mixins.ts" }, "repository": { "type": "git", @@ -42,21 +43,16 @@ "license": "Apache-2.0", "homepage": "https://github.com/Exabyte-io/ade", "dependencies": { - "@types/react-jsonschema-form": "^1.7.13", - "lodash": "^4.17.21", - "nunjucks": "^3.2.4", - "react-jsonschema-form": "^1.8.1" + "lodash": "^4.17.21" }, "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", - "@mat3ra/code": "2025.8.7-0", - "@mat3ra/esse": "2025.11.26-0", - "@mat3ra/made": "2025.7.15-0", - "@mat3ra/standata": "2025.10.1-0", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#c3c9e5eb177fe70b8bc221832b6f9d93104d7e2d", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "@mat3ra/standata": "git+https://github.com/Exabyte-io/standata.git#7a759159c5858b9a815429f041bd004fd8cec8be", "@mat3ra/tsconfig": "2024.6.3-0", - "@types/nunjucks": "^3.2.6", "@typescript-eslint/eslint-plugin": "^5.9.1", "@typescript-eslint/parser": "^5.9.1", "chai": "^4.3.4", diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts new file mode 100644 index 0000000..cb6fcad --- /dev/null +++ b/scripts/generate-mixins.ts @@ -0,0 +1,36 @@ +#!/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 generateSchemaMixin from "@mat3ra/code/dist/js/generateSchemaMixin"; +import allSchemas from "@mat3ra/esse/dist/js/schemas.json"; +import type { JSONSchema7 } from "json-schema"; + +/** + * Output file paths for each schema + */ +const OUTPUT_PATHS = { + "software/executable-properties": "src/js/generated/ExecutableSchemaMixin.ts", + "software/flavor-properties": "src/js/generated/FlavorSchemaMixin.ts", + "software/application-properties": "src/js/generated/ApplicationSchemaMixin.ts", + "software/template-properties": "src/js/generated/TemplateSchemaMixin.ts", +}; + +function main() { + const result = generateSchemaMixin(allSchemas as JSONSchema7[], OUTPUT_PATHS); + + if (result.errorCount > 0) { + process.exit(1); + } +} + +// Run the script if it's executed directly +main(); diff --git a/src/js/Application.ts b/src/js/Application.ts new file mode 100644 index 0000000..8c249cd --- /dev/null +++ b/src/js/Application.ts @@ -0,0 +1,40 @@ +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type DefaultableInMemoryEntityConstructor, + defaultableEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { + type NamedInMemoryEntityConstructor, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; + +import { + type ApplicationMixin, + type ApplicationStaticMixin, + applicationMixin, +} from "./applicationMixin"; + +type Base = typeof InMemoryEntity & + NamedInMemoryEntityConstructor & + DefaultableInMemoryEntityConstructor & + Constructor & + ApplicationStaticMixin; + +export default class Application extends (InMemoryEntity as Base) implements ApplicationSchema { + constructor(data: Partial = {}) { + super({ + ...data, + }); + } + + declare static createDefault: () => Application; + + declare toJSON: () => ApplicationSchema & AnyObject; +} + +namedEntityMixin(Application.prototype); +defaultableEntityMixin(Application); +applicationMixin(Application); diff --git a/src/js/ApplicationRegistry.ts b/src/js/ApplicationRegistry.ts deleted file mode 100644 index e1c8a74..0000000 --- a/src/js/ApplicationRegistry.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { getOneMatchFromObject } from "@mat3ra/code/dist/js/utils/object"; -import type { ApplicationSchemaBase, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; -import { ApplicationStandata } from "@mat3ra/standata"; - -import Application from "./application"; -import Executable from "./executable"; -import Flavor from "./flavor"; -import Template from "./template"; - -type ApplicationVersion = { - [build: string]: ApplicationSchemaBase; -}; - -type ApplicationTreeItem = { - defaultVersion: string; - [version: string]: ApplicationVersion | string; -}; - -export type CreateApplicationConfig = { - name: string; - version?: string | null; - build?: string | null; -}; - -type ApplicationTree = Partial>; - -export default class ApplicationRegistry { - // applications - static applicationsTree?: ApplicationTree; - - static applicationsArray?: ApplicationSchemaBase[]; - - static createApplication({ name, version = null, build = null }: CreateApplicationConfig) { - const staticConfig = ApplicationRegistry.getApplicationConfig({ name, version, build }); - return new Application({ - ...staticConfig, - name, - ...(version && { version }), - ...(build && { build }), - }); - } - - static getUniqueAvailableApplicationNames() { - return new ApplicationStandata().getAllApplicationNames(); - } - - /** - * @summary Return all applications as both a nested object of Applications and an array of config objects - * @returns containing applications and applicationConfigs - */ - static getAllApplications() { - if (this.applicationsTree && this.applicationsArray) { - return { - applicationsTree: this.applicationsTree, - applicationsArray: this.applicationsArray, - }; - } - - const applicationsTree: ApplicationTree = {}; - const applicationsArray: ApplicationSchemaBase[] = []; - - const allApplications = new ApplicationStandata().getAllApplicationNames(); - allApplications.forEach((appName) => { - const { versions, defaultVersion, ...appData } = - new ApplicationStandata().getAppDataForApplication(appName); - - const appTreeItem: ApplicationTreeItem = { defaultVersion }; - - versions.forEach((versionInfo) => { - const { version, build } = versionInfo; - - let buildToUse = build; - if (!build) { - buildToUse = ApplicationStandata.getDefaultBuildForApplicationAndVersion( - appName, - version, - ); - versionInfo.build = buildToUse; - } - - const appVersion = - version in appTreeItem && typeof appTreeItem[version] === "object" - ? appTreeItem[version] - : {}; - - appTreeItem[version] = appVersion; - - const applicationConfig: ApplicationSchemaBase = { - ...appData, - build: buildToUse, - ...versionInfo, - }; - - if (buildToUse) { - appVersion[buildToUse] = applicationConfig; - } - applicationsArray.push(applicationConfig); - }); - - applicationsTree[appName] = appTreeItem; - }); - - this.applicationsTree = applicationsTree; - this.applicationsArray = applicationsArray; - - return { - applicationsTree, - applicationsArray: this.applicationsArray, - }; - } - - /** - * @summary Get an application from the constructed applications - * @param name name of the application - * @param version version of the application (optional, defaults to defaultVersion) - * @param build the build to use (optional, defaults to Default) - * @return an application - */ - static getApplicationConfig({ name, version = null, build = null }: CreateApplicationConfig) { - const { applicationsTree } = this.getAllApplications(); - const app = applicationsTree[name]; - - if (!app) { - throw new Error(`Application ${name} not found`); - } - - let buildToUse: string | null = build; - if (!build) { - try { - buildToUse = ApplicationStandata.getDefaultBuildForApplicationAndVersion( - name, - version || app.defaultVersion, - ); - } catch (error) { - console.warn( - `Failed to get default build for ${name} version ${ - version || app.defaultVersion - }: ${error}`, - ); - return null; - } - } - - const version_ = version || app.defaultVersion; - const appVersion = app[version_]; - - if (!appVersion || typeof appVersion === "string") { - console.warn(`Version ${version_} not available for ${name} !`); - return null; - } - - if (!buildToUse) { - console.warn(`No build specified for ${name} version ${version_}`); - return null; - } - - return appVersion[buildToUse] ?? null; - } - - static getExecutables({ name, version }: { name: string; version?: string }) { - const tree = new ApplicationStandata().getAppTreeForApplication(name); - - return Object.keys(tree) - .filter((key) => { - const executable = tree[key]; - const { supportedApplicationVersions } = executable; - return ( - !supportedApplicationVersions || - (version && supportedApplicationVersions.includes(version)) - ); - }) - .map((key) => new Executable({ ...tree[key], name: key })); - } - - static getExecutableByName(appName: string, execName?: string) { - const appTree = new ApplicationStandata().getAppTreeForApplication(appName); - - Object.entries(appTree).forEach(([name, exec]) => { - exec.name = name; - }); - - const config = execName - ? appTree[execName] - : (getOneMatchFromObject(appTree, "isDefault", true) as ExecutableSchema); - - return new Executable(config); - } - - // TODO: remove this method and use getApplicationExecutableByName directly - static getExecutableByConfig(appName: string, config?: { name: string }) { - return this.getExecutableByName(appName, config?.name); - } - - static getExecutableFlavors(executable: Executable) { - const flavorsTree = executable.prop("flavors", {}) as Record; - - return Object.keys(flavorsTree).map((key) => { - return new Flavor({ - ...flavorsTree[key], - name: key, - }); - }); - } - - static getFlavorByName(executable: Executable, name?: string) { - return this.getExecutableFlavors(executable).find((flavor) => - name ? flavor.name === name : flavor.isDefault, - ); - } - - static getFlavorByConfig(executable: Executable, config?: { name: string }) { - return this.getFlavorByName(executable, config?.name); - } - - // flavors - static getInputAsTemplates(flavor: Flavor) { - const appName = flavor.prop("applicationName", ""); - const execName = flavor.prop("executableName", ""); - - return flavor.input.map((input) => { - const inputName = input.templateName || input.name; - - const filtered = new ApplicationStandata().getTemplatesByName( - appName, - execName, - inputName, - ); - - if (filtered.length !== 1) { - console.log( - `found ${filtered.length} templates for app=${appName} exec=${execName} name=${inputName} expected 1`, - ); - } - - return new Template({ ...filtered[0], name: input.name }); - }); - } - - static getInputAsRenderedTemplates(flavor: Flavor, context: Record) { - return this.getInputAsTemplates(flavor).map((template) => { - return template.getRenderedJSON(context); - }); - } - - static getAllFlavorsForApplication(appName: string, version?: string) { - const allExecutables = this.getExecutables({ name: appName, version }); - - return allExecutables.flatMap((executable) => this.getExecutableFlavors(executable)); - } -} diff --git a/src/js/Executable.ts b/src/js/Executable.ts new file mode 100644 index 0000000..2db77f7 --- /dev/null +++ b/src/js/Executable.ts @@ -0,0 +1,52 @@ +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type DefaultableInMemoryEntityConstructor, + defaultableEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { + type NamedInMemoryEntityConstructor, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { + type RuntimeItemsInMemoryEntityConstructor, + runtimeItemsMixin, +} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; + +import { type ExecutableMixin, executableMixin } from "./executableMixin"; +import type { PartialBy } from "./typeUtils"; + +/** Input for {@link Executable}: runtime item lists default to empty when omitted. */ +export type ExecutableConstructorData = PartialBy< + ExecutableSchema, + "monitors" | "results" | "postProcessors" | "preProcessors" +>; + +type Base = Constructor & + RuntimeItemsInMemoryEntityConstructor & + NamedInMemoryEntityConstructor & + DefaultableInMemoryEntityConstructor & + typeof InMemoryEntity; + +export default class Executable extends (InMemoryEntity as Base) implements ExecutableSchema { + constructor(data: ExecutableConstructorData) { + super({ + ...data, + monitors: data.monitors ?? [], + results: data.results ?? [], + postProcessors: data.postProcessors ?? [], + preProcessors: data.preProcessors ?? [], + }); + } + + declare static createDefault: () => Executable; + + declare toJSON: () => ExecutableSchema & AnyObject; +} + +namedEntityMixin(Executable.prototype); +defaultableEntityMixin(Executable); +runtimeItemsMixin(Executable.prototype); +executableMixin(Executable); diff --git a/src/js/Flavor.ts b/src/js/Flavor.ts new file mode 100644 index 0000000..af35e53 --- /dev/null +++ b/src/js/Flavor.ts @@ -0,0 +1,49 @@ +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type DefaultableInMemoryEntityConstructor, + defaultableEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { + namedEntityMixin, + NamedInMemoryEntityConstructor, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { + type RuntimeItemsInMemoryEntityConstructor, + runtimeItemsMixin, +} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; + +import { type FlavorMixin, flavorMixin } from "./flavorMixin"; + +type Base = typeof InMemoryEntity & + Constructor & + RuntimeItemsInMemoryEntityConstructor & + NamedInMemoryEntityConstructor & + DefaultableInMemoryEntityConstructor; + +export default class Flavor extends (InMemoryEntity as Base) implements FlavorSchema { + constructor(data: Partial = {}) { + super({ + monitors: [], + results: [], + postProcessors: [], + preProcessors: [], + input: [], + executableId: "", + executableName: "", + applicationName: "", + ...data, + }); + } + + declare static createDefault: () => Flavor; + + declare toJSON: () => FlavorSchema & AnyObject; +} + +namedEntityMixin(Flavor.prototype); +defaultableEntityMixin(Flavor); +runtimeItemsMixin(Flavor.prototype); +flavorMixin(Flavor); diff --git a/src/js/Template.ts b/src/js/Template.ts new file mode 100644 index 0000000..af12cc8 --- /dev/null +++ b/src/js/Template.ts @@ -0,0 +1,32 @@ +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type NamedInMemoryEntityConstructor, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; + +import { type TemplateMixin, type TemplateStaticMixin, templateMixin } from "./templateMixin"; + +type Base = typeof InMemoryEntity & + Constructor & + NamedInMemoryEntityConstructor & + TemplateStaticMixin; + +export default class Template extends (InMemoryEntity as Base) implements TemplateSchema { + constructor(data: Partial = {}) { + super({ + applicationName: "", + executableName: "", + content: "", + contextProviders: [], + ...data, + }); + } + + declare toJSON: () => TemplateSchema & AnyObject; +} + +namedEntityMixin(Template.prototype); +templateMixin(Template); diff --git a/src/js/application.ts b/src/js/application.ts deleted file mode 100644 index 7a980d0..0000000 --- a/src/js/application.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; - -import { - type ApplicationMixin, - type ApplicationStaticMixin, - applicationMixin, - applicationStaticMixin, -} from "./applicationMixin"; - -type Base = typeof NamedDefaultableInMemoryEntity & - Constructor & - ApplicationStaticMixin; - -export default class Application extends (NamedDefaultableInMemoryEntity as Base) {} - -applicationMixin(Application.prototype); -applicationStaticMixin(Application); diff --git a/src/js/applicationMixin.ts b/src/js/applicationMixin.ts index f1c59bc..ff78658 100644 --- a/src/js/applicationMixin.ts +++ b/src/js/applicationMixin.ts @@ -1,66 +1,43 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Defaultable } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import type { NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { ApplicationStandata } from "@mat3ra/standata"; -import Executable from "./executable"; +import Executable from "./Executable"; +import { + type ApplicationSchemaMixin, + applicationSchemaMixin, +} from "./generated/ApplicationSchemaMixin"; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; -export type ApplicationConstructor = Constructor & ApplicationStaticMixin; - -export type ApplicationMixin = Pick< - ApplicationSchemaBase, - "summary" | "version" | "build" | "shortName" | "hasAdvancedComputeOptions" | "isLicensed" -> & { - name: Required["name"]; +export type ApplicationMixin = ApplicationSchemaMixin & { + name: Required["name"]; isUsingMaterial: boolean; }; export type DefaultApplicationConfig = Pick< - ApplicationSchemaBase, + ApplicationSchema, "name" | "shortName" | "version" | "summary" | "build" >; export type ApplicationStaticMixin = { defaultConfig: DefaultApplicationConfig; - jsonSchema: ApplicationSchemaBase; + jsonSchema: ApplicationSchema; }; -export function applicationMixin(item: Base) { +function applicationPropertiesMixin( + item: T, +): asserts item is T & ApplicationMixin { // @ts-expect-error const properties: ApplicationMixin & Base = { - get summary() { - return this.prop("summary"); - }, - - get version() { - return this.prop("version", ""); - }, - - get build() { - return this.prop("build"); - }, - - get shortName() { - return this.prop("shortName", this.name); - }, - - get hasAdvancedComputeOptions() { - return this.prop("hasAdvancedComputeOptions", false); - }, - - get isLicensed() { - return this.prop("isLicensed", false); - }, - get isUsingMaterial() { const materialUsingApplications = ["vasp", "nwchem", "espresso"]; return materialUsingApplications.includes(this.name); @@ -70,17 +47,21 @@ export function applicationMixin(item: Base) { Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); } -export function applicationStaticMixin(Application: T) { +function applicationStaticMixin(Application: T) { const properties: ApplicationStaticMixin = { get defaultConfig() { return new ApplicationStandata().getDefaultConfig(); }, get jsonSchema() { - return JSONSchemasInterface.getSchemaById( - "software/application", - ) as ApplicationSchemaBase; + return JSONSchemasInterface.getSchemaById("software/application") as ApplicationSchema; }, }; Object.defineProperties(Application, Object.getOwnPropertyDescriptors(properties)); } + +export function applicationMixin(Item: BaseConstructor) { + applicationSchemaMixin(Item.prototype); + applicationPropertiesMixin(Item.prototype); + applicationStaticMixin(Item); +} diff --git a/src/js/context/ContextProvider.ts b/src/js/context/ContextProvider.ts deleted file mode 100644 index 3bd6c87..0000000 --- a/src/js/context/ContextProvider.ts +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @summary This is a standalone class that contains "data" for a property with "name". Helps facilitate UI logic. - * Can be initialized from context when user edits are present: - * - user edits the corresponding property, eg. "kpath" - * - isKpathEdited is set to `true` - * - context property is updated for the parent entity (eg. Unit) in a way that persists in Redux state - * - new entity inherits the "data" through "context" field in config - * - `extraData` field is used to store any other data that should be passed from one instance of provider - * to next one, for example data about material to track when it is changed. - * @notes Should hold static data only (see `setData` method), no classes or functions - */ -import { ContextProviderSchema, Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; -import { Utils } from "@mat3ra/utils"; -import lodash from "lodash"; - -export interface ContextProviderInstance { - constructor: typeof ContextProvider; - config: ContextProviderSchema; -} - -export interface ContextProviderStatic { - getConstructorConfig: (config: ContextProviderSchema) => ContextProviderInstance; - createConfigFromContext: (config: ContextProviderSchema) => ContextProviderSchema; - getExtraDataKeyByName: (name: string) => string; - getIsEditedKeyByName: (name: string) => string; -} - -export default class ContextProvider implements ContextProviderSchema { - config: ContextProviderSchema; - - name: ContextProviderNameEnum; - - domain?: string; - - entityName?: string; - - data?: object; - - extraData?: object; - - isEdited?: boolean; - - context?: object; - - [k: string]: unknown; - - constructor(config: ContextProviderSchema) { - this.config = config; - this.name = config.name; // property name, ie. "kpath" - this.domain = config.domain || "default"; - - // if context is passed inside config, treat it as additional config - // eslint-disable-next-line no-param-reassign - if (config.context) config = ContextProvider.createConfigFromContext(config); - - this.entityName = config.entityName || "unit"; // entity this provider yields data to, eg. "unit", "subworkflow" - this.data = config.data; // property data container - this.extraData = config.extraData; // property extraData container, used track changes to data, for example - this.isEdited = config.isEdited; // whether property was edited by user, available under `isEdited` key - - this.setIsEdited = this.setIsEdited.bind(this); - this.getData = this.getData.bind(this); - this.setData = this.setData.bind(this); - this.transformData = this.transformData.bind(this); - this.yieldData = this.yieldData.bind(this); - } - - static getConstructorConfig(config: ContextProviderSchema): ContextProviderInstance { - return { - constructor: this.prototype.constructor as typeof ContextProvider, - config, - }; - } - - static createConfigFromContext(config: ContextProviderSchema) { - const data = lodash.get(config.context, config.name); - const isEdited = lodash.get(config.context, this.getIsEditedKeyByName(config.name)); - const extraData = lodash.get(config.context, this.getExtraDataKeyByName(config.name)); - return Object.assign( - config, - data - ? { - data, - extraData, - isEdited, - } - : {}, - ); - } - - setIsEdited(isEdited: boolean) { - this.isEdited = isEdited; - } - - getData() { - return this.isEdited ? this.data : this.defaultData; - } - - setData(data: object) { - this.data = Utils.clone.deepClone(data); - } - - // override in children - // eslint-disable-next-line class-methods-use-this - get defaultData(): object { - throw new Error("Not implemented."); - } - - // override in children - // eslint-disable-next-line class-methods-use-this - transformData(data: object) { - return data; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - yieldData(...transformDataArgs: any) { - const extraDataObject = this.extraData ? { [this.extraDataKey]: this.extraData } : {}; - return { - ...extraDataObject, - // @ts-ignore - [this.name]: this.transformData(this.getData(), ...transformDataArgs), - [this.isEditedKey]: this.isEdited, - }; - } - - // override when this.data needs additional processing before making it available to rendering context - // used to calculate explicit points path, for example - yieldDataForRendering() { - return this.yieldData(); - } - - get extraDataKey() { - return `${this.name}ExtraData`; - } - - static getExtraDataKeyByName(name: string) { - return `${name}ExtraData`; - } - - get isEditedKey() { - return `is${lodash.capitalize(this.name)}Edited`; - } - - static getIsEditedKeyByName(name: string) { - return `is${lodash.capitalize(name)}Edited`; - } - - get isUnitContextProvider() { - return this.entityName === "unit"; - } - - get isSubworkflowContextProvider() { - return this.entityName === "subworkflow"; - } -} diff --git a/src/js/context/ContextProviderRegistryContainer.ts b/src/js/context/ContextProviderRegistryContainer.ts deleted file mode 100644 index 159af9e..0000000 --- a/src/js/context/ContextProviderRegistryContainer.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { ContextProviderInstance } from "./ContextProvider"; -import ContextProvider from "./ContextProvider"; - -export default class ContextProviderRegistryContainer { - _providers: { - name: string; - instance: ContextProviderInstance; - }[]; - - constructor() { - this._providers = []; - } - - get providers() { - return this._providers; - } - - set providers(p) { - this._providers = p; - } - - addProvider({ name, instance }: { name: string; instance: ContextProviderInstance }) { - this._providers.push({ - name, - instance, - }); - } - - findProviderInstanceByName(name: string) { - const provider = this.providers.find((p) => p.name === name); - return provider && provider.instance; - } - - removeProvider(providerCls: ContextProvider) { - this.providers = this.providers.filter((p) => p.name !== providerCls.name); - } - - removeProviderByName(name: string) { - this.providers = this.providers.filter((p) => p.name !== name); - } -} diff --git a/src/js/context/JSONSchemaDataProvider.ts b/src/js/context/JSONSchemaDataProvider.ts deleted file mode 100644 index 2159395..0000000 --- a/src/js/context/JSONSchemaDataProvider.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* eslint-disable class-methods-use-this */ -import JinjaContextProvider from "./JinjaContextProvider"; - -/** - * @summary Provides jsonSchema only. - */ -export default class JSONSchemaDataProvider extends JinjaContextProvider { - get jsonSchema() { - throw new Error("Not implemented."); - } -} diff --git a/src/js/context/JSONSchemaFormDataProvider.ts b/src/js/context/JSONSchemaFormDataProvider.ts deleted file mode 100644 index 05c97cc..0000000 --- a/src/js/context/JSONSchemaFormDataProvider.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* eslint-disable class-methods-use-this */ -import type { UiSchema } from "react-jsonschema-form"; - -import JSONSchemaDataProvider from "./JSONSchemaDataProvider"; - -/** - * @summary Provides jsonSchema and uiSchema for generating react-jsonschema-form - * See https://github.com/mozilla-services/react-jsonschema-form for Form UI. - * Form generation example: - * ``` - * - * ``` - */ -// TODO: MOVE to WebApp/ave or wove -export default class JSONSchemaFormDataProvider extends JSONSchemaDataProvider { - get uiSchema(): UiSchema { - throw new Error("Not implemented."); - } - - get fields() { - return {}; - } - - get defaultFieldStyles() { - return {}; - } - - get uiSchemaStyled(): UiSchema { - const schema = this.uiSchema; - return Object.fromEntries( - Object.entries(schema).map(([key, value]) => [ - key, - { - ...value, - ...this.defaultFieldStyles, - classNames: `${value.classNames || ""}`, - }, - ]), - ); - } -} diff --git a/src/js/context/JinjaContextProvider.ts b/src/js/context/JinjaContextProvider.ts deleted file mode 100644 index cdceb65..0000000 --- a/src/js/context/JinjaContextProvider.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ContextProviderSchema } from "@mat3ra/esse/dist/js/types"; - -import ContextProvider from "./ContextProvider"; - -interface JSONSchemaDataProviderConfig extends ContextProviderSchema { - isUsingJinjaVariables?: boolean; -} - -export default class JinjaContextProvider extends ContextProvider { - isUsingJinjaVariables: boolean; - - constructor(config: JSONSchemaDataProviderConfig) { - super(config); - this.isUsingJinjaVariables = Boolean(config.isUsingJinjaVariables); - } -} diff --git a/src/js/executable.ts b/src/js/executable.ts deleted file mode 100644 index 0a60939..0000000 --- a/src/js/executable.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { runtimeItemsMixin } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; - -import { type ExecutableMixin, executableMixin, executableStaticMixin } from "./executableMixin"; - -type Base = Constructor & typeof NamedDefaultableInMemoryEntity; - -export default class Executable extends (NamedDefaultableInMemoryEntity as Base) {} - -// Apply mixins -runtimeItemsMixin(Executable.prototype); -executableMixin(Executable.prototype); -executableStaticMixin(Executable); diff --git a/src/js/executableMixin.ts b/src/js/executableMixin.ts index 3b5d6c5..dbb080e 100644 --- a/src/js/executableMixin.ts +++ b/src/js/executableMixin.ts @@ -1,31 +1,30 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import type { Defaultable } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import type { NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import type { FlavorMixin } from "./flavorMixin"; +import { ExecutableSchemaMixin, executableSchemaMixin } from "./generated/ExecutableSchemaMixin"; -type BaseFlavor = FlavorMixin & NamedInMemoryEntity & InMemoryEntity; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; +type BaseFlavor = FlavorMixin & NamedEntity & InMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; -export function executableMixin(item: Base) { - // @ts-expect-error - const properties: ExecutableMixin & Base = { - get applicationId() { - return this.prop("applicationId", []); - }, - set applicationId(value: string[]) { - this.setProp("applicationId", value); - }, - }; +export type BaseConstructor = Constructor & { + constructCustomFlavor?: (config: object) => BaseFlavor; +}; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} +export type ExecutableMixin = ExecutableSchemaMixin & { + toJSON: () => ExecutableSchema & AnyObject; +}; + +export type ExecutableStaticMixin = { + jsonSchema: ExecutableSchema; +}; -export function executableStaticMixin(Executable: Constructor) { +function executableStaticMixin(Executable: Constructor) { const properties: ExecutableStaticMixin = { get jsonSchema() { return JSONSchemasInterface.getSchemaById("software/executable") as ExecutableSchema; @@ -35,15 +34,7 @@ export function executableStaticMixin(Executable: Constructor) { Object.defineProperties(Executable, Object.getOwnPropertyDescriptors(properties)); } -export type BaseConstructor = Constructor & { - constructCustomFlavor?: (config: object) => BaseFlavor; -}; - -export type ExecutableMixin = { - applicationId: string[]; - toJSON: () => ExecutableSchema & AnyObject; -}; - -export type ExecutableStaticMixin = { - jsonSchema: ExecutableSchema; -}; +export function executableMixin(Item: BaseConstructor) { + executableSchemaMixin(Item.prototype); + executableStaticMixin(Item); +} diff --git a/src/js/flavor.ts b/src/js/flavor.ts deleted file mode 100644 index f8230b0..0000000 --- a/src/js/flavor.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { - type RuntimeItemsInMemoryEntity, - runtimeItemsMixin, -} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; - -import { type FlavorMixin, flavorMixin, flavorStaticMixin } from "./flavorMixin"; - -type Base = typeof NamedDefaultableInMemoryEntity & - Constructor & - Constructor; - -export default class Flavor extends (NamedDefaultableInMemoryEntity as Base) {} - -// Apply mixins -flavorMixin(Flavor.prototype); -runtimeItemsMixin(Flavor.prototype); -flavorStaticMixin(Flavor); diff --git a/src/js/flavorMixin.ts b/src/js/flavorMixin.ts index d668a6f..a061b26 100644 --- a/src/js/flavorMixin.ts +++ b/src/js/flavorMixin.ts @@ -1,68 +1,13 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; -type Base = InMemoryEntity & NamedInMemoryEntity; +import { type FlavorSchemaMixin, flavorSchemaMixin } from "./generated/FlavorSchemaMixin"; -type Input = Required["input"]; +export type FlavorMixin = FlavorSchemaMixin; -export type FlavorMixin = { - input: Input; - disableRenderMaterials: boolean; - executableId: string; - executableName: string; - applicationName: string; - supportedApplicationVersions?: string[]; - getInputAsRenderedTemplates: (context: Record) => Record[]; -}; - -// TODO: should we add fields from esse schema (executableId, executableName, applicationName)? -export function flavorMixin(item: Base) { - // @ts-expect-error - const properties: FlavorMixin & Base = { - get input() { - return this.prop("input", []); - }, - - get disableRenderMaterials() { - return this.prop("isMultiMaterial", false); - }, - - get executableId() { - return this.prop("executableId", ""); - }, - - get executableName() { - return this.prop("executableName", ""); - }, - - get applicationName() { - return this.prop("applicationName", ""); - }, - - get supportedApplicationVersions() { - return this.prop("supportedApplicationVersions"); - }, - - getInputAsRenderedTemplates(context: Record) { - const input = this.input; - return input.map((template) => { - if (template && typeof template === "object" && "getRenderedJSON" in template) { - return (template as any).getRenderedJSON(context); - } - return template; - }); - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; -} - -export function flavorStaticMixin(Flavor: Constructor) { +function flavorStaticMixin(Flavor: Constructor) { const properties: FlavorStaticMixin = { get jsonSchema() { return JSONSchemasInterface.getSchemaById("software/flavor") as FlavorSchema; @@ -75,3 +20,8 @@ export function flavorStaticMixin(Flavor: Constructor) { export type FlavorStaticMixin = { jsonSchema: FlavorSchema; }; + +export function flavorMixin(Item: Constructor) { + flavorSchemaMixin(Item.prototype); + flavorStaticMixin(Item); +} diff --git a/src/js/generated/ApplicationSchemaMixin.ts b/src/js/generated/ApplicationSchemaMixin.ts new file mode 100644 index 0000000..9a1944d --- /dev/null +++ b/src/js/generated/ApplicationSchemaMixin.ts @@ -0,0 +1,62 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { ApplicationPropertiesSchema } from "@mat3ra/esse/dist/js/types"; + +export type ApplicationSchemaMixin = ApplicationPropertiesSchema; + +export type ApplicationInMemoryEntity = InMemoryEntity & ApplicationSchemaMixin; + +export function applicationSchemaMixin( + item: InMemoryEntity, +): asserts item is T & ApplicationSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & ApplicationSchemaMixin = { + get shortName() { + return this.requiredProp("shortName"); + }, + set shortName(value: ApplicationPropertiesSchema["shortName"]) { + this.setProp("shortName", value); + }, + get summary() { + return this.requiredProp("summary"); + }, + set summary(value: ApplicationPropertiesSchema["summary"]) { + this.setProp("summary", value); + }, + get version() { + return this.requiredProp("version"); + }, + set version(value: ApplicationPropertiesSchema["version"]) { + this.setProp("version", value); + }, + get build() { + return this.requiredProp("build"); + }, + set build(value: ApplicationPropertiesSchema["build"]) { + this.setProp("build", value); + }, + get isDefault() { + return this.prop("isDefault"); + }, + set isDefault(value: ApplicationPropertiesSchema["isDefault"]) { + this.setProp("isDefault", value); + }, + get hasAdvancedComputeOptions() { + return this.prop( + "hasAdvancedComputeOptions", + ); + }, + set hasAdvancedComputeOptions( + value: ApplicationPropertiesSchema["hasAdvancedComputeOptions"], + ) { + this.setProp("hasAdvancedComputeOptions", value); + }, + get isLicensed() { + return this.prop("isLicensed"); + }, + set isLicensed(value: ApplicationPropertiesSchema["isLicensed"]) { + this.setProp("isLicensed", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/ExecutableSchemaMixin.ts b/src/js/generated/ExecutableSchemaMixin.ts new file mode 100644 index 0000000..288a202 --- /dev/null +++ b/src/js/generated/ExecutableSchemaMixin.ts @@ -0,0 +1,34 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { ExecutablePropertiesSchema } from "@mat3ra/esse/dist/js/types"; + +export type ExecutableSchemaMixin = ExecutablePropertiesSchema; + +export type ExecutableInMemoryEntity = InMemoryEntity & ExecutableSchemaMixin; + +export function executableSchemaMixin( + item: InMemoryEntity, +): asserts item is T & ExecutableSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & ExecutableSchemaMixin = { + get applicationName() { + return this.requiredProp( + "applicationName", + ); + }, + set applicationName(value: ExecutablePropertiesSchema["applicationName"]) { + this.setProp("applicationName", value); + }, + get hasAdvancedComputeOptions() { + return this.prop( + "hasAdvancedComputeOptions", + ); + }, + set hasAdvancedComputeOptions( + value: ExecutablePropertiesSchema["hasAdvancedComputeOptions"], + ) { + this.setProp("hasAdvancedComputeOptions", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/FlavorSchemaMixin.ts b/src/js/generated/FlavorSchemaMixin.ts new file mode 100644 index 0000000..441aaf5 --- /dev/null +++ b/src/js/generated/FlavorSchemaMixin.ts @@ -0,0 +1,44 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { FlavorPropertiesSchema } from "@mat3ra/esse/dist/js/types"; + +export type FlavorSchemaMixin = FlavorPropertiesSchema; + +export type FlavorInMemoryEntity = InMemoryEntity & FlavorSchemaMixin; + +export function flavorSchemaMixin( + item: InMemoryEntity, +): asserts item is T & FlavorSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & FlavorSchemaMixin = { + get executableName() { + return this.prop("executableName"); + }, + set executableName(value: FlavorPropertiesSchema["executableName"]) { + this.setProp("executableName", value); + }, + get applicationName() { + return this.prop("applicationName"); + }, + set applicationName(value: FlavorPropertiesSchema["applicationName"]) { + this.setProp("applicationName", value); + }, + get input() { + return this.requiredProp("input"); + }, + set input(value: FlavorPropertiesSchema["input"]) { + this.setProp("input", value); + }, + get supportedApplicationVersions() { + return this.prop( + "supportedApplicationVersions", + ); + }, + set supportedApplicationVersions( + value: FlavorPropertiesSchema["supportedApplicationVersions"], + ) { + this.setProp("supportedApplicationVersions", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/generated/TemplateSchemaMixin.ts b/src/js/generated/TemplateSchemaMixin.ts new file mode 100644 index 0000000..276af42 --- /dev/null +++ b/src/js/generated/TemplateSchemaMixin.ts @@ -0,0 +1,50 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { TemplatePropertiesSchema } from "@mat3ra/esse/dist/js/types"; + +export type TemplateSchemaMixin = TemplatePropertiesSchema; + +export type TemplateInMemoryEntity = InMemoryEntity & TemplateSchemaMixin; + +export function templateSchemaMixin( + item: InMemoryEntity, +): asserts item is T & TemplateSchemaMixin { + // @ts-expect-error + const properties: InMemoryEntity & TemplateSchemaMixin = { + get applicationName() { + return this.requiredProp( + "applicationName", + ); + }, + set applicationName(value: TemplatePropertiesSchema["applicationName"]) { + this.setProp("applicationName", value); + }, + get applicationVersion() { + return this.prop("applicationVersion"); + }, + set applicationVersion(value: TemplatePropertiesSchema["applicationVersion"]) { + this.setProp("applicationVersion", value); + }, + get executableName() { + return this.requiredProp("executableName"); + }, + set executableName(value: TemplatePropertiesSchema["executableName"]) { + this.setProp("executableName", value); + }, + get contextProviders() { + return this.requiredProp( + "contextProviders", + ); + }, + set contextProviders(value: TemplatePropertiesSchema["contextProviders"]) { + this.setProp("contextProviders", value); + }, + get content() { + return this.requiredProp("content"); + }, + set content(value: TemplatePropertiesSchema["content"]) { + this.setProp("content", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/index.ts b/src/js/index.ts index aa149a7..8333163 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -1,32 +1,21 @@ -import Application from "./application"; -import { applicationMixin, applicationStaticMixin } from "./applicationMixin"; -import ApplicationRegistry from "./ApplicationRegistry"; -import ContextProvider from "./context/ContextProvider"; -import JSONSchemaFormDataProvider from "./context/JSONSchemaFormDataProvider"; -import Executable from "./executable"; +import Application from "./Application"; +import { applicationMixin } from "./applicationMixin"; +import Executable from "./Executable"; import { executableMixin } from "./executableMixin"; -import Flavor from "./flavor"; +import Flavor from "./Flavor"; import { flavorMixin } from "./flavorMixin"; -import Template from "./template"; -import { templateMixin, templateStaticMixin } from "./templateMixin"; - -const allApplications = ApplicationRegistry.getUniqueAvailableApplicationNames(); +import Template from "./Template"; +import { templateMixin } from "./templateMixin"; export { Application, Executable, Flavor, Template, - ApplicationRegistry, - ContextProvider, - JSONSchemaFormDataProvider, executableMixin, flavorMixin, applicationMixin, - applicationStaticMixin, templateMixin, - templateStaticMixin, - allApplications, }; export type * from "./types"; diff --git a/src/js/template.ts b/src/js/template.ts deleted file mode 100644 index ab2af9c..0000000 --- a/src/js/template.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; - -import { - type TemplateMixin, - type TemplateStaticMixin, - templateMixin, - templateStaticMixin, -} from "./templateMixin"; - -type Base = typeof NamedInMemoryEntity & Constructor & TemplateStaticMixin; - -export default class Template extends (NamedInMemoryEntity as Base) {} - -// Apply mixins -templateMixin(Template.prototype); -templateStaticMixin(Template); diff --git a/src/js/templateMixin.ts b/src/js/templateMixin.ts index c1e8f92..071f9d4 100644 --- a/src/js/templateMixin.ts +++ b/src/js/templateMixin.ts @@ -1,243 +1,30 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { - ContextProviderNameEnum, - ContextProviderSchema, - TemplateSchema, -} from "@mat3ra/esse/dist/js/types"; -import { Utils } from "@mat3ra/utils"; -import nunjucks from "nunjucks"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import ContextProvider from "./context/ContextProvider"; -import ContextProviderRegistryContainer from "./context/ContextProviderRegistryContainer"; +import { type TemplateSchemaMixin, templateSchemaMixin } from "./generated/TemplateSchemaMixin"; -export type TemplateBase = InMemoryEntity & NamedInMemoryEntity; +export type TemplateBase = InMemoryEntity; -export type TemplateMixin = { - isManuallyChanged: boolean; - content: string; - rendered: string | undefined; - applicationName: string | undefined; - executableName: string | undefined; - contextProviders: ContextProvider[]; - addContextProvider: (provider: ContextProvider) => void; - removeContextProvider: (provider: ContextProvider) => void; - render: (externalContext?: Record) => void; - getRenderedJSON: (context?: Record) => AnyObject; - _cleanRenderingContext: (object: Record) => Record; - getDataFromProvidersForRenderingContext: ( - context?: Record, - ) => Record; - setContent: (text: string) => void; - setRendered: (text: string) => void; - getContextProvidersAsClassInstances: ( - providerContext?: Record, - ) => ContextProvider[]; - getDataFromProvidersForPersistentContext: ( - providerContext?: Record, - ) => Record; - getRenderingContext: (externalContext?: Record) => Record; -}; - -export function templateMixin(item: TemplateBase) { - // @ts-ignore - const properties: TemplateMixin & TemplateBase = { - get isManuallyChanged() { - return this.prop("isManuallyChanged", false); - }, - - get content() { - return this.prop("content", ""); - }, - - setContent(text: string) { - return this.setProp("content", text); - }, - - get rendered() { - return this.prop("rendered") || this.content; - }, - - setRendered(text: string) { - return this.setProp("rendered", text); - }, - - get applicationName() { - return this.prop("applicationName"); - }, - - get executableName() { - return this.prop("executableName"); - }, - - get contextProviders() { - return this.prop("contextProviders", []); - }, - - addContextProvider(provider: ContextProvider) { - this.setProp("contextProviders", [...this.contextProviders, provider]); - }, - - removeContextProvider(provider: ContextProvider) { - const contextProviders = this.contextProviders.filter((p) => { - return p.name !== provider.name && p.domain !== provider.domain; - }); - - this.setProp("contextProviders", contextProviders); - }, - - render(externalContext?: Record) { - const renderingContext = this.getRenderingContext(externalContext); - if (!this.isManuallyChanged) { - try { - const template = nunjucks.compile(this.content); - - // deepClone to pass JSON data without classes - const rendered = template.render( - this._cleanRenderingContext(renderingContext), - ) as string; - - this.setRendered(this.isManuallyChanged ? rendered : rendered || this.content); - } catch (e) { - console.log(`Template is not compiled: ${e}`); - console.log({ - content: this.content, - _cleanRenderingContext: this._cleanRenderingContext(renderingContext), - }); - } - } - }, - - getRenderedJSON(context?: Record) { - this.render(context); - return this.toJSON(); - }, - - // Remove "bulky" items and JSON stringify before passing it to rendering engine (eg. jinja) to compile. - // This way the context should still be passed in full to contextProviders, but not to final text template. - // eslint-disable-next-line class-methods-use-this - _cleanRenderingContext(object: Record) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { job, ...clone } = object; - return Utils.clone.deepClone(clone); - }, - - /* - * @summary Initializes context provider class instances. `providerContext` is used to pass the data about any - * previously stored values. That is if data was previously saved in database, the context provider - * shall receive it on initialization through providerContext and prioritize this value over the default. - */ - getContextProvidersAsClassInstances(providerContext?: Record) { - return this.contextProviders.map((p) => { - const providerInstance = ( - this.constructor as unknown as TemplateStaticMixin - ).contextProviderRegistry?.findProviderInstanceByName(p.name); - - if (!providerInstance) { - throw new Error(`Provider ${p.name} not found`); - } - - const clsInstance = new providerInstance.constructor({ - ...providerInstance.config, - context: providerContext, - }); - - return clsInstance; - }); - }, - - /* - * @summary Extracts the the data from all context providers for further use during render. - */ - getDataFromProvidersForRenderingContext(providerContext?: Record) { - const result: AnyObject = {}; - this.getContextProvidersAsClassInstances(providerContext).forEach((contextProvider) => { - const context = contextProvider.yieldDataForRendering(); - Object.keys(context).forEach((key) => { - // merge context keys if they are objects otherwise override them. - result[key] = - result[key] !== null && typeof result[key] === "object" - ? // @ts-ignore - { ...result[key], ...context[key] } - : context[key]; - }); - }); - return result; - }, - - /* - * @summary Extracts the the data from all context providers for further save in persistent context. - */ - // TODO: optimize logic to prevent re-initializing the context provider classes again below, reuse above function - getDataFromProvidersForPersistentContext(providerContext?: Record) { - const result = {}; - this.getContextProvidersAsClassInstances(providerContext).forEach((contextProvider) => { - // only save in the persistent context the data from providers that were edited (or able to be edited) - Object.assign(result, contextProvider.isEdited ? contextProvider.yieldData() : {}); - }); - return result; - }, - - /* - * @summary Combines rendering context (in order of preference): - * - context from templates initialized with external context - * - "external" context and - */ - getRenderingContext(externalContext?: Record) { - return { - ...externalContext, - ...this.getDataFromProvidersForRenderingContext(externalContext), - }; - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; -} - -export type ContextProviderConfigMapEntry = { - providerCls: typeof ContextProvider; - config: ContextProviderSchema; -}; - -export type ContextProviderConfigMap = Partial< - Record ->; +export type TemplateMixin = TemplateSchemaMixin; export type TemplateStaticMixin = { - contextProviderRegistry: ContextProviderRegistryContainer | null; - setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; jsonSchema: TemplateSchema; }; -export function templateStaticMixin(item: Constructor) { +export function templateStaticMixin(item: Constructor) { // @ts-ignore - const properties: TemplateStaticMixin & Constructor = { - contextProviderRegistry: null, - + const properties: TemplateStaticMixin & Constructor = { get jsonSchema() { return JSONSchemasInterface.getSchemaById("software/template") as TemplateSchema; }, - - setContextProvidersConfig(classConfigMap: ContextProviderConfigMap) { - const contextProviderRegistry = new ContextProviderRegistryContainer(); - - Object.entries(classConfigMap).forEach(([name, { providerCls, config }]) => { - contextProviderRegistry.addProvider({ - instance: providerCls.getConstructorConfig(config), - name, - }); - }); - - this.contextProviderRegistry = contextProviderRegistry; - }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} - return properties; +export function templateMixin(Item: Constructor) { + templateSchemaMixin(Item.prototype); + templateStaticMixin(Item); } diff --git a/src/js/typeUtils.ts b/src/js/typeUtils.ts new file mode 100644 index 0000000..4ab1e40 --- /dev/null +++ b/src/js/typeUtils.ts @@ -0,0 +1,5 @@ +/** + * `T` with the listed keys made optional. Equivalent to + * `Omit & Partial>`. + */ +export type PartialBy = Omit & Partial>; diff --git a/src/js/types.ts b/src/js/types.ts index 22cac20..db25011 100644 --- a/src/js/types.ts +++ b/src/js/types.ts @@ -1,15 +1,16 @@ import type { ApplicationMixin, ApplicationStaticMixin } from "./applicationMixin"; -import type { CreateApplicationConfig } from "./ApplicationRegistry"; +import type { ExecutableConstructorData } from "./Executable"; import type { ExecutableMixin } from "./executableMixin"; import type { FlavorMixin } from "./flavorMixin"; -import type { TemplateMixin, TemplateStaticMixin } from "./templateMixin"; +import type { TemplateMixin } from "./templateMixin"; + +export type { PartialBy } from "./typeUtils"; export type { + ExecutableConstructorData, FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, - CreateApplicationConfig, TemplateMixin, - TemplateStaticMixin, }; diff --git a/src/py/mat3ra/ade/application.py b/src/py/mat3ra/ade/application.py index ed2c8c2..642a8b9 100644 --- a/src/py/mat3ra/ade/application.py +++ b/src/py/mat3ra/ade/application.py @@ -1,8 +1,8 @@ from mat3ra.code.entity import InMemoryEntitySnakeCase -from mat3ra.esse.models.software.application import ApplicationSchemaBase +from mat3ra.esse.models.software.application import ApplicationSchema -class Application(ApplicationSchemaBase, InMemoryEntitySnakeCase): +class Application(ApplicationSchema, InMemoryEntitySnakeCase): """ Application class representing a software application. diff --git a/tests/js/ApplicationRegistry.test.ts b/tests/js/ApplicationRegistry.test.ts deleted file mode 100644 index 9d0d4a2..0000000 --- a/tests/js/ApplicationRegistry.test.ts +++ /dev/null @@ -1,477 +0,0 @@ -/* eslint-disable no-unused-expressions */ -import { Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; -import { expect } from "chai"; -import type { ContextProviderConfigMapEntry } from "src/js/templateMixin"; - -import Application from "../../src/js/application"; -import type { CreateApplicationConfig } from "../../src/js/ApplicationRegistry"; -import ApplicationRegistry from "../../src/js/ApplicationRegistry"; -import ContextProvider from "../../src/js/context/ContextProvider"; -import Executable from "../../src/js/executable"; -import Flavor from "../../src/js/flavor"; -import Template from "../../src/js/template"; - -class MockContextProvider extends ContextProvider { - // eslint-disable-next-line class-methods-use-this - get defaultData() { - return { test: "value" }; - } -} - -describe("ApplicationRegistry", () => { - beforeEach(() => { - // Reset static properties before each test - ApplicationRegistry.applicationsTree = undefined; - ApplicationRegistry.applicationsArray = undefined; - - const mockConfig: ContextProviderConfigMapEntry = { - providerCls: MockContextProvider, - config: { name: ContextProviderNameEnum.QGridFormDataManager }, - }; - - Template.setContextProvidersConfig({ - QGridFormDataManager: mockConfig, - PlanewaveCutoffDataManager: mockConfig, - KGridFormDataManager: mockConfig, - QEPWXInputDataManager: mockConfig, - }); - }); - - describe("createApplication", () => { - it("should create an application with default parameters", () => { - const config: CreateApplicationConfig = { name: "espresso" }; - const app = ApplicationRegistry.createApplication(config); - - expect(app).to.be.instanceOf(Application); - expect(app.name).to.equal("espresso"); - expect(app.version).to.not.be.null; - expect(app.build).to.be.a("string"); - }); - - it("should create an application with custom version and build", () => { - const config: CreateApplicationConfig = { - name: "espresso", - version: "6.3", - build: "Intel", - }; - const app = ApplicationRegistry.createApplication(config); - - expect(app).to.be.instanceOf(Application); - expect(app.name).to.equal("espresso"); - expect(app.version).to.equal("6.3"); - expect(app.build).to.equal("Intel"); - }); - - it("should handle null version parameter", () => { - const config: CreateApplicationConfig = { - name: "espresso", - version: null, - }; - const app = ApplicationRegistry.createApplication(config); - - expect(app).to.be.instanceOf(Application); - expect(app.name).to.equal("espresso"); - }); - }); - - describe("getUniqueAvailableApplicationNames", () => { - it("should return array of available application names", () => { - const names = ApplicationRegistry.getUniqueAvailableApplicationNames(); - - expect(names).to.be.an("array"); - expect(names).to.include("espresso"); - // TODO: uncomment when all applications added to Standata - // expect(names).to.include("vasp"); - expect(names.length).to.be.greaterThan(0); - }); - }); - - describe("getAllApplications", () => { - it("should return applications tree and array on first call", () => { - const result = ApplicationRegistry.getAllApplications(); - - expect(result).to.have.property("applicationsTree"); - expect(result).to.have.property("applicationsArray"); - expect(result.applicationsTree).to.be.an("object"); - expect(result.applicationsArray).to.be.an("array"); - expect(result.applicationsArray.length).to.be.greaterThan(0); - }); - - it("should return cached results on subsequent calls", () => { - const firstCall = ApplicationRegistry.getAllApplications(); - const secondCall = ApplicationRegistry.getAllApplications(); - - expect(firstCall).to.deep.equal(secondCall); - expect(ApplicationRegistry.applicationsTree).to.equal(firstCall.applicationsTree); - expect(ApplicationRegistry.applicationsArray).to.equal(firstCall.applicationsArray); - }); - - it("should populate applications tree with correct structure", () => { - const result = ApplicationRegistry.getAllApplications(); - - expect(result.applicationsTree).to.have.property("espresso"); - const espressoApp = result.applicationsTree.espresso; - expect(espressoApp).to.have.property("defaultVersion"); - expect(espressoApp?.defaultVersion).to.be.a("string"); - }); - }); - - describe("getApplicationConfig", () => { - it("should return application config with default version", () => { - const config = ApplicationRegistry.getApplicationConfig({ - name: "espresso", - }); - - expect(config).to.not.be.null; - expect(config).to.have.property("name", "espresso"); - expect(config).to.have.property("build"); - expect(config?.build).to.be.a("string"); - }); - - it("should return application config with specific version", () => { - const config = ApplicationRegistry.getApplicationConfig({ - name: "espresso", - version: "6.3", - }); - - expect(config).to.not.be.null; - expect(config).to.have.property("name", "espresso"); - expect(config).to.have.property("version", "6.3"); - }); - - it("should return application config with custom build", () => { - const config = ApplicationRegistry.getApplicationConfig({ - name: "espresso", - build: "GNU", - version: "6.3", - }); - - expect(config).to.not.be.null; - expect(config).to.have.property("name", "espresso"); - expect(config).to.have.property("build", "GNU"); - }); - - it("should throw error for non-existent application", () => { - expect(() => { - ApplicationRegistry.getApplicationConfig({ - name: "nonexistent", - }); - }).to.throw("Application nonexistent not found"); - }); - - it("should return null for non-existent version", () => { - const config = ApplicationRegistry.getApplicationConfig({ - name: "espresso", - version: "999.999", - }); - - expect(config).to.be.null; - }); - - it("should return null for non-existent build", () => { - const config = ApplicationRegistry.getApplicationConfig({ - name: "espresso", - build: "NonExistentBuild", - }); - - expect(config).to.be.null; - }); - }); - - describe("getExecutables", () => { - it("should return executables for application without version filter", () => { - const executables = ApplicationRegistry.getExecutables({ name: "espresso" }); - - expect(executables).to.be.an("array"); - expect(executables.length).to.be.greaterThan(0); - executables.forEach((exec) => { - expect(exec).to.be.instanceOf(Executable); - }); - }); - - it("should return executables for application with version filter", () => { - const executables = ApplicationRegistry.getExecutables({ - name: "espresso", - version: "6.3", - }); - - expect(executables).to.be.an("array"); - executables.forEach((exec) => { - expect(exec).to.be.instanceOf(Executable); - }); - }); - - it("should filter executables by supported application versions", () => { - const executables = ApplicationRegistry.getExecutables({ - name: "espresso", - version: "6.3", - }); - - // This test assumes that some executables have supportedApplicationVersions - // The actual filtering logic is tested implicitly - expect(executables).to.be.an("array"); - }); - }); - - describe("getExecutableByName", () => { - it("should return executable by name", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - - expect(executable).to.be.instanceOf(Executable); - expect(executable.name).to.equal("pw.x"); - }); - - it("should return default executable when no name provided", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso"); - - expect(executable).to.be.instanceOf(Executable); - expect(executable.name).to.be.a("string"); - }); - - it("should handle non-existent executable name", () => { - // This test depends on the actual data structure - // We'll test that it doesn't throw an error - expect(() => { - ApplicationRegistry.getExecutableByName("espresso", "nonexistent"); - }).to.not.throw(); - }); - }); - - describe("getExecutableByConfig", () => { - it("should return executable by config with name", () => { - const executable = ApplicationRegistry.getExecutableByConfig("espresso", { - name: "pw.x", - }); - - expect(executable).to.be.instanceOf(Executable); - expect(executable.name).to.equal("pw.x"); - }); - - it("should return default executable when no config provided", () => { - const executable = ApplicationRegistry.getExecutableByConfig("espresso"); - - expect(executable).to.be.instanceOf(Executable); - expect(executable.name).to.be.a("string"); - }); - - it("should return default executable when config without name provided", () => { - const executable = ApplicationRegistry.getExecutableByConfig("espresso", { - name: "", - }); - - expect(executable).to.be.instanceOf(Executable); - expect(executable.name).to.be.a("string"); - }); - }); - - describe("getExecutableFlavors", () => { - it("should return flavors for executable", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw"); - const flavors = ApplicationRegistry.getExecutableFlavors(executable); - - expect(flavors).to.be.an("array"); - flavors.forEach((flavor) => { - expect(flavor).to.be.instanceOf(Flavor); - }); - }); - - it("should return empty array for executable with no flavors", () => { - const flavors = ApplicationRegistry.getExecutableFlavors(new Executable()); - - expect(flavors).to.be.an("array"); - expect(flavors.length).to.equal(0); - }); - }); - - describe("getFlavorByName", () => { - it("should return flavor by name", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByName(executable, "pw_scf"); - - expect(flavor).to.be.instanceOf(Flavor); - expect(flavor?.name).to.equal("pw_scf"); - }); - - it("should return default flavor when no name provided", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByName(executable); - - expect(flavor).to.be.instanceOf(Flavor); - expect(flavor?.isDefault).to.be.true; - }); - - it("should return undefined for non-existent flavor name", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByName(executable, "nonexistent"); - - expect(flavor).to.be.undefined; - }); - }); - - describe("getFlavorByConfig", () => { - it("should return flavor by config with name", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByConfig(executable, { name: "pw_scf" }); - - expect(flavor).to.be.instanceOf(Flavor); - expect(flavor?.name).to.equal("pw_scf"); - }); - - it("should return default flavor when no config provided", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByConfig(executable); - - expect(flavor).to.be.instanceOf(Flavor); - expect(flavor?.isDefault).to.be.true; - }); - - it("should return default flavor when config without name provided", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByConfig(executable, { name: "" }); - - expect(flavor).to.be.instanceOf(Flavor); - expect(flavor?.isDefault).to.be.true; - }); - }); - - describe("getInputAsTemplates", () => { - it("should return templates for flavor input", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByName(executable, "pw_scf"); - - if (flavor) { - const templates = ApplicationRegistry.getInputAsTemplates(flavor); - - expect(templates).to.be.an("array"); - templates.forEach((template) => { - expect(template).to.be.instanceOf(Template); - }); - } - }); - - it("should handle flavor with no input", () => { - const templates = ApplicationRegistry.getInputAsTemplates(new Flavor()); - - expect(templates).to.be.an("array"); - expect(templates.length).to.equal(0); - }); - - it("should handle input with templateName", () => { - const templates = ApplicationRegistry.getInputAsTemplates( - new Flavor({ - applicationName: "espresso", - executableName: "pw", - input: [{ name: "input", templateName: "test_template" }], - }), - ); - - expect(templates).to.be.an("array"); - // The actual result depends on the allTemplates data - // We just verify it returns an array - }); - }); - - describe("getInputAsRenderedTemplates", () => { - it("should return rendered templates for flavor input", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByName(executable, "pw_scf"); - - if (flavor) { - const context = { test: "value" }; - const renderedTemplates = ApplicationRegistry.getInputAsRenderedTemplates( - flavor, - context, - ); - - expect(renderedTemplates).to.be.an("array"); - renderedTemplates.forEach((template) => { - expect(template).to.be.an("object"); - }); - } - }); - - it("should handle empty context", () => { - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - const flavor = ApplicationRegistry.getFlavorByName(executable, "pw_scf"); - - if (!flavor) { - throw new Error("Flavor not found"); - } - - const renderedTemplates = ApplicationRegistry.getInputAsRenderedTemplates(flavor, {}); - - expect(renderedTemplates).to.be.an("array"); - }); - }); - - describe("getAllFlavorsForApplication", () => { - it("should return all flavors for application without version filter", () => { - const flavors = ApplicationRegistry.getAllFlavorsForApplication("espresso"); - - expect(flavors).to.be.an("array"); - expect(flavors.length).to.be.greaterThan(0); - flavors.forEach((flavor) => { - expect(flavor).to.be.instanceOf(Flavor); - }); - }); - - it("should return all flavors for application with version filter", () => { - const flavors = ApplicationRegistry.getAllFlavorsForApplication("espresso", "6.3"); - - expect(flavors).to.be.an("array"); - flavors.forEach((flavor) => { - expect(flavor).to.be.instanceOf(Flavor); - }); - }); - - it("should throw error for non-existent application", () => { - expect(() => { - ApplicationRegistry.getAllFlavorsForApplication("nonexistent"); - }).to.throw("nonexistent is not a known application with executable tree."); - }); - }); - - describe("Integration tests", () => { - it("should work end-to-end: create app -> get executable -> get flavor -> get templates", () => { - // Create application - const app = ApplicationRegistry.createApplication({ name: "espresso" }); - expect(app).to.be.instanceOf(Application); - - // Get executables - const executables = ApplicationRegistry.getExecutables({ name: "espresso" }); - expect(executables.length).to.be.greaterThan(0); - - // Get first executable - const executable = executables[0]; - expect(executable).to.be.instanceOf(Executable); - - // Get flavors for executable - const flavors = ApplicationRegistry.getExecutableFlavors(executable); - expect(flavors.length).to.be.greaterThan(0); - - // Get first flavor - const flavor = flavors[0]; - expect(flavor).to.be.instanceOf(Flavor); - - // Get templates for flavor - const templates = ApplicationRegistry.getInputAsTemplates(flavor); - expect(templates).to.be.an("array"); - }); - - it("should handle edge cases gracefully", () => { - // Test with null/undefined parameters - expect(() => { - ApplicationRegistry.createApplication({ name: "espresso", version: null }); - }).to.not.throw(); - - expect(() => { - ApplicationRegistry.getApplicationConfig({ name: "espresso", version: null }); - }).to.not.throw(); - - // Test with empty strings - expect(() => { - ApplicationRegistry.getExecutableByName("espresso", ""); - }).to.not.throw(); - }); - }); -}); diff --git a/tests/js/ContextProviderRegistryContainer.test.ts b/tests/js/ContextProviderRegistryContainer.test.ts deleted file mode 100644 index 1405900..0000000 --- a/tests/js/ContextProviderRegistryContainer.test.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; -import { expect } from "chai"; - -import ContextProvider, { - type ContextProviderInstance, -} from "../../src/js/context/ContextProvider"; -import ContextProviderRegistryContainer from "../../src/js/context/ContextProviderRegistryContainer"; - -// Mock context provider for testing -class MockContextProvider extends ContextProvider { - // eslint-disable-next-line class-methods-use-this - get defaultData() { - return { test: "value" }; - } -} - -describe("ContextProviderRegistryContainer", () => { - let container: ContextProviderRegistryContainer; - let mockProviderInstance: ContextProviderInstance; - - beforeEach(() => { - container = new ContextProviderRegistryContainer(); - mockProviderInstance = { - constructor: MockContextProvider, - config: { name: ContextProviderNameEnum.QGridFormDataManager }, - }; - }); - - describe("constructor", () => { - it("should initialize with empty providers array", () => { - expect(container.providers).to.deep.equal([]); - }); - }); - - describe("providers getter and setter", () => { - it("should get providers array", () => { - expect(container.providers).to.be.an("array"); - }); - - it("should set providers array", () => { - const newProviders = [ - { name: "provider1", instance: mockProviderInstance }, - { name: "provider2", instance: mockProviderInstance }, - ]; - container.providers = newProviders; - expect(container.providers).to.deep.equal(newProviders); - }); - }); - - describe("addProvider", () => { - it("should add a provider to the registry", () => { - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - expect(container.providers).to.have.length(1); - expect(container.providers[0]).to.deep.equal({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - }); - - it("should add multiple providers", () => { - const provider2 = { - constructor: MockContextProvider, - config: { name: ContextProviderNameEnum.PlanewaveCutoffDataManager }, - }; - - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - container.addProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - instance: provider2, - }); - - expect(container.providers).to.have.length(2); - expect(container.providers[0].name).to.equal( - ContextProviderNameEnum.QGridFormDataManager, - ); - expect(container.providers[1].name).to.equal( - ContextProviderNameEnum.PlanewaveCutoffDataManager, - ); - }); - }); - - describe("findProviderInstanceByName", () => { - it("should find provider instance by name", () => { - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - - const found = container.findProviderInstanceByName( - ContextProviderNameEnum.QGridFormDataManager, - ); - expect(found).to.equal(mockProviderInstance); - }); - - it("should return undefined for non-existent provider", () => { - const found = container.findProviderInstanceByName( - ContextProviderNameEnum.KGridFormDataManager, - ); - expect(found).to.be.undefined; - }); - - it("should find provider when multiple providers exist", () => { - const provider2 = { - constructor: MockContextProvider, - config: { name: ContextProviderNameEnum.PlanewaveCutoffDataManager }, - }; - - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - container.addProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - instance: provider2, - }); - - const found = container.findProviderInstanceByName( - ContextProviderNameEnum.PlanewaveCutoffDataManager, - ); - expect(found).to.equal(provider2); - }); - }); - - describe("removeProvider", () => { - it("should remove provider by ContextProvider instance", () => { - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - - const providerInstance = new MockContextProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - }); - container.removeProvider(providerInstance); - - // The removeProvider method should remove the matching provider - expect(container.providers).to.have.length(0); - }); - - it("should remove only the matching provider", () => { - const provider2 = { - constructor: MockContextProvider, - config: { name: ContextProviderNameEnum.PlanewaveCutoffDataManager }, - }; - - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - container.addProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - instance: provider2, - }); - - const providerInstance = new MockContextProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - }); - container.removeProvider(providerInstance); - - // The removeProvider method should remove the matching provider - expect(container.providers).to.have.length(1); - expect(container.providers[0].name).to.equal( - ContextProviderNameEnum.PlanewaveCutoffDataManager, - ); - }); - - it("should not remove anything if provider not found", () => { - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - - const nonExistentProvider = new MockContextProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - container.removeProvider(nonExistentProvider); - - expect(container.providers).to.have.length(1); - }); - }); - - describe("removeProviderByName", () => { - it("should remove provider by name", () => { - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - - expect(container.providers).to.have.length(1); - - container.removeProviderByName(ContextProviderNameEnum.QGridFormDataManager); - - expect(container.providers).to.have.length(0); - }); - - it("should remove only the matching provider by name", () => { - const provider2 = { - constructor: MockContextProvider, - config: { name: ContextProviderNameEnum.PlanewaveCutoffDataManager }, - }; - - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - container.addProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - instance: provider2, - }); - - container.removeProviderByName(ContextProviderNameEnum.QGridFormDataManager); - - expect(container.providers).to.have.length(1); - expect(container.providers[0].name).to.equal( - ContextProviderNameEnum.PlanewaveCutoffDataManager, - ); - }); - - it("should not remove anything if provider name not found", () => { - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - - container.removeProviderByName(ContextProviderNameEnum.KGridFormDataManager); - - expect(container.providers).to.have.length(1); - }); - }); - - describe("integration tests", () => { - it("should handle full lifecycle: add, find, remove", () => { - // Add providers - container.addProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - instance: mockProviderInstance, - }); - container.addProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - instance: mockProviderInstance, - }); - - // Verify they exist - expect( - container.findProviderInstanceByName(ContextProviderNameEnum.QGridFormDataManager), - ).to.equal(mockProviderInstance); - expect( - container.findProviderInstanceByName( - ContextProviderNameEnum.PlanewaveCutoffDataManager, - ), - ).to.equal(mockProviderInstance); - - // Remove one - container.removeProviderByName(ContextProviderNameEnum.QGridFormDataManager); - - // Verify state - expect( - container.findProviderInstanceByName(ContextProviderNameEnum.QGridFormDataManager), - ).to.be.undefined; - expect( - container.findProviderInstanceByName( - ContextProviderNameEnum.PlanewaveCutoffDataManager, - ), - ).to.equal(mockProviderInstance); - expect(container.providers).to.have.length(1); - }); - }); -}); diff --git a/tests/js/JSONSchemaProvider.test.ts b/tests/js/JSONSchemaProvider.test.ts deleted file mode 100644 index aa1320a..0000000 --- a/tests/js/JSONSchemaProvider.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; -import { expect } from "chai"; - -import JSONSchemaDataProvider from "../../src/js/context/JSONSchemaDataProvider"; -import JSONSchemaFormDataProvider from "../../src/js/context/JSONSchemaFormDataProvider"; - -describe("JSONSchemaDataProvider", () => { - it("should set isUsingJinjaVariables", () => { - const provider = new JSONSchemaDataProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - isUsingJinjaVariables: true, - }); - expect(provider.isUsingJinjaVariables).to.equal(true); - }); - - it("should throw error when accessing jsonSchema", () => { - const provider = new JSONSchemaDataProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - expect(() => provider.jsonSchema).to.throw("Not implemented."); - }); -}); - -describe("JSONSchemaFormDataProvider", () => { - it("can be created", () => { - const provider = new JSONSchemaFormDataProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - expect(provider).to.exist; - }); - - it("should throw error when accessing uiSchema", () => { - const provider = new JSONSchemaFormDataProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - expect(() => provider.uiSchema).to.throw("Not implemented."); - }); - - it("should return empty fields object", () => { - const provider = new JSONSchemaFormDataProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - expect(provider.fields).to.deep.equal({}); - }); - - it("should return empty defaultFieldStyles object", () => { - const provider = new JSONSchemaFormDataProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - expect(provider.defaultFieldStyles).to.deep.equal({}); - }); - - it("should return uiSchemaStyled", () => { - class TestProvider extends JSONSchemaFormDataProvider { - // eslint-disable-next-line class-methods-use-this - get uiSchema() { - return { field1: { classNames: "test" }, field2: {} }; - } - } - const provider = new TestProvider({ - name: ContextProviderNameEnum.KGridFormDataManager, - }); - const styled = provider.uiSchemaStyled; - expect(styled).to.have.property("field1"); - expect(styled.field1).to.have.property("classNames", "test"); - }); -}); diff --git a/tests/js/application.test.ts b/tests/js/application.test.ts index e473fe9..e025fe5 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -1,90 +1,15 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import Application from "../../src/js/application"; -import type { CreateApplicationConfig } from "../../src/js/ApplicationRegistry"; +import { Application } from "../../src/js"; describe("Application", () => { - const obj: CreateApplicationConfig = { name: "espresso" }; - - it("can be created", () => { - const app = new Application(obj); - expect(app.name).to.equal("espresso"); + it("constructs with default data when no argument is passed", () => { + const app = new Application(); + expect(app).to.be.instanceOf(Application); }); describe("applicationMixin properties", () => { - let app: Application; - - beforeEach(() => { - app = new Application(obj); - }); - - describe("summary property", () => { - it("should return summary when set", () => { - app.setProp("summary", "Test summary"); - expect(app.summary).to.equal("Test summary"); - }); - - it("should return undefined when summary is not set", () => { - expect(app.summary).to.be.undefined; - }); - }); - - describe("version property", () => { - it("should return version when set", () => { - app.setProp("version", "1.2.3"); - expect(app.version).to.equal("1.2.3"); - }); - - it("should return empty string as default when version is not set", () => { - expect(app.version).to.equal(""); - }); - }); - - describe("build property", () => { - it("should return build when set", () => { - app.setProp("build", "debug"); - expect(app.build).to.equal("debug"); - }); - - it("should return undefined when build is not set", () => { - expect(app.build).to.be.undefined; - }); - }); - - describe("shortName property", () => { - it("should return shortName when set", () => { - app.setProp("shortName", "qe"); - expect(app.shortName).to.equal("qe"); - }); - - it("should return name as default when shortName is not set", () => { - expect(app.shortName).to.equal("espresso"); - }); - }); - - describe("hasAdvancedComputeOptions property", () => { - it("should return true when set", () => { - app.setProp("hasAdvancedComputeOptions", true); - expect(app.hasAdvancedComputeOptions).to.be.true; - }); - - it("should return false as default when not set", () => { - expect(app.hasAdvancedComputeOptions).to.be.false; - }); - }); - - describe("isLicensed property", () => { - it("should return true when set", () => { - app.setProp("isLicensed", true); - expect(app.isLicensed).to.be.true; - }); - - it("should return false as default when not set", () => { - expect(app.isLicensed).to.be.false; - }); - }); - describe("isUsingMaterial property", () => { it("should return true for vasp application", () => { const vaspApp = new Application({ name: "vasp" }); @@ -109,15 +34,6 @@ describe("Application", () => { }); describe("applicationStaticMixin properties", () => { - it("should have defaultConfig with correct structure", () => { - const config = Application.defaultConfig; - expect(config).to.have.property("name", "espresso"); - expect(config).to.have.property("shortName", "qe"); - expect(config).to.have.property("version", "6.3"); - expect(config).to.have.property("summary", "Quantum ESPRESSO"); - expect(config).to.have.property("build", "GNU"); - }); - it("should return the complete defaultConfig object", () => { expect(Application.defaultConfig).to.deep.equal({ name: "espresso", diff --git a/tests/js/executable.test.ts b/tests/js/executable.test.ts index b029f21..8226edb 100644 --- a/tests/js/executable.test.ts +++ b/tests/js/executable.test.ts @@ -1,65 +1,48 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import ApplicationRegistry from "../../src/js/ApplicationRegistry"; -import Executable from "../../src/js/executable"; +import { Executable } from "../../src/js"; describe("Executable", () => { - it("toJSON works as expected", () => { - const executable = new Executable({ name: "espresso" }); - const json = executable.toJSON(); - expect(json).to.have.property("name", "espresso"); - expect(json).to.have.property("isDefault"); - expect(json).to.have.property("schemaVersion"); - }); - - it("should find executable via ApplicationRegistry and validate JSON structure", () => { - // Find an executable using ApplicationRegistry - const executable = ApplicationRegistry.getExecutableByName("espresso", "pw.x"); - - // Verify we got a valid executable - expect(executable).to.be.instanceOf(Executable); - expect(executable.name).to.equal("pw.x"); - - // Get JSON representation - const json = executable.toJSON(); - - // Validate JSON structure contains expected properties - expect(json).to.be.an("object"); - expect(json).to.have.property("name"); - expect(json.name).to.equal("pw.x"); - - // Verify core executable properties - expect(json).to.have.property("isDefault"); - expect(json.isDefault).to.be.a("boolean"); - - expect(json).to.not.have.property("flavors"); - - // Verify arrays of configuration data - expect(json).to.have.property("monitors"); - expect(json.monitors).to.be.an("array"); - - expect(json).to.have.property("results"); - expect(json.results).to.be.an("array"); - - // The JSON should be comprehensive - expect(Object.keys(json).length).to.be.greaterThan(2); - }); - - describe("executableMixin properties", () => { - let executable: Executable; - beforeEach(() => { - executable = new Executable({ name: "test_exec" }); + it("defaults runtime item lists when omitted", () => { + const executable = new Executable({ + name: "espresso", + applicationName: "espresso", }); + expect(executable.monitors).to.deep.equal([]); + expect(executable.results).to.deep.equal([]); + expect(executable.postProcessors).to.deep.equal([]); + expect(executable.preProcessors).to.deep.equal([]); + }); - it("should get default applicationId as empty array", () => { - expect(executable.applicationId).to.deep.equal([]); + it("preserves explicit runtime item lists when provided", () => { + const monitors = [{ name: "m1" }]; + const results = [{ name: "r1" }]; + const postProcessors = [{ name: "p1" }]; + const preProcessors = [{ name: "pre1" }]; + const executable = new Executable({ + name: "espresso", + applicationName: "espresso", + monitors, + results, + postProcessors, + preProcessors, }); + expect(executable.monitors).to.equal(monitors); + expect(executable.results).to.equal(results); + expect(executable.postProcessors).to.equal(postProcessors); + expect(executable.preProcessors).to.equal(preProcessors); + }); - it("should set and get applicationId", () => { - executable.applicationId = ["app1", "app2"]; - expect(executable.applicationId).to.deep.equal(["app1", "app2"]); + it("toJSON works as expected", () => { + const executable = new Executable({ + name: "espresso", + applicationName: "espresso", }); + const json = executable.toJSON(); + expect(json).to.have.property("name", "espresso"); + expect(json).to.have.property("isDefault"); + expect(json).to.have.property("schemaVersion"); }); describe("executableStaticMixin", () => { diff --git a/tests/js/flavor.test.ts b/tests/js/flavor.test.ts index 6a459b4..9b37ce2 100644 --- a/tests/js/flavor.test.ts +++ b/tests/js/flavor.test.ts @@ -1,99 +1,51 @@ /* eslint-disable no-unused-expressions */ +import { ApplicationStandata } from "@mat3ra/standata"; import { expect } from "chai"; -import ApplicationRegistry from "../../src/js/ApplicationRegistry"; -import Flavor from "../../src/js/flavor"; +import { Flavor } from "../../src/js"; describe("Flavor", () => { - it("results are correct", () => { - const pwscfFlavor = ApplicationRegistry.getAllFlavorsForApplication("espresso").find( - (flavor) => { - return flavor.name === "pw_scf"; - }, - ); - expect(pwscfFlavor?.results).to.deep.equal([ - { name: "atomic_forces" }, - { name: "fermi_energy" }, - { name: "pressure" }, - { name: "stress_tensor" }, - { name: "total_energy" }, - { name: "total_energy_contributions" }, - { name: "total_force" }, - ]); + it("constructs with built-in defaults when no argument is passed", () => { + const flavor = new Flavor(); + expect(flavor).to.be.instanceOf(Flavor); + expect(flavor.monitors).to.deep.equal([]); + expect(flavor.results).to.deep.equal([]); + expect(flavor.executableName).to.equal(""); }); - describe("flavorMixin properties", () => { - let flavor: Flavor; - beforeEach(() => { - flavor = new Flavor({ name: "test_flavor" }); - }); - - it("should have default input as empty array", () => { - expect(flavor.input).to.deep.equal([]); - }); - - it("should return input when set", () => { - const input = [{ name: "param1" }, { name: "param2" }]; - flavor.setProp("input", input); - expect(flavor.input).to.deep.equal(input); - }); - - it("should have disableRenderMaterials as false by default", () => { - expect(flavor.disableRenderMaterials).to.be.false; - }); - - it("should return disableRenderMaterials as true when isMultiMaterial is set", () => { - flavor.setProp("isMultiMaterial", true); - expect(flavor.disableRenderMaterials).to.be.true; - }); - - it("should have executableId as empty string by default", () => { - expect(flavor.executableId).to.equal(""); - }); - - it("should return executableId when set", () => { - flavor.setProp("executableId", "exec123"); - expect(flavor.executableId).to.equal("exec123"); - }); - - it("should have executableName as empty string by default", () => { - expect(flavor.executableName).to.equal(""); - }); - - it("should return executableName when set", () => { - flavor.setProp("executableName", "pw"); - expect(flavor.executableName).to.equal("pw"); - }); - - it("should have applicationName as empty string by default", () => { - expect(flavor.applicationName).to.equal(""); - }); - - it("should return applicationName when set", () => { - flavor.setProp("applicationName", "espresso"); - expect(flavor.applicationName).to.equal("espresso"); - }); - - it("should have supportedApplicationVersions as undefined by default", () => { - expect(flavor.supportedApplicationVersions).to.be.undefined; - }); + it("merges partial data over defaults", () => { + const flavor = new Flavor({ name: "custom", executableName: "pw.x" }); + expect(flavor.name).to.equal("custom"); + expect(flavor.executableName).to.equal("pw.x"); + }); - it("should return supportedApplicationVersions when set", () => { - flavor.setProp("supportedApplicationVersions", ["6.3", "7.0"]); - expect(flavor.supportedApplicationVersions).to.deep.equal(["6.3", "7.0"]); - }); - - // Added with LLM to help with coverage - it("should handle getInputAsRenderedTemplates with different template types", () => { - const mockTemplate = { getRenderedJSON: () => ({ rendered: true }) }; - const simpleTemplate = { name: "simple" }; - flavor.setProp("input", [mockTemplate, simpleTemplate]); + it("results are correct", () => { + const standata = new ApplicationStandata(); + const { flavor } = standata.getExecutableAndFlavorByName("espresso", "pw.x", "pw_scf"); - const result = flavor.getInputAsRenderedTemplates({}); - expect(result).to.have.length(2); - expect(result[0]).to.deep.equal({ rendered: true }); - expect(result[1]).to.deep.equal({ name: "simple" }); - }); + expect(flavor.results).to.deep.equal([ + { + name: "atomic_forces", + }, + { + name: "fermi_energy", + }, + { + name: "pressure", + }, + { + name: "stress_tensor", + }, + { + name: "total_energy", + }, + { + name: "total_energy_contributions", + }, + { + name: "total_force", + }, + ]); }); describe("flavorStaticMixin", () => { diff --git a/tests/js/index.test.ts b/tests/js/index.test.ts new file mode 100644 index 0000000..86079b6 --- /dev/null +++ b/tests/js/index.test.ts @@ -0,0 +1,26 @@ +/* eslint-disable no-unused-expressions */ +import { expect } from "chai"; + +import { + Application, + applicationMixin, + Executable, + executableMixin, + Flavor, + flavorMixin, + Template, + templateMixin, +} from "../../src/js"; + +describe("package exports (index)", () => { + it("exports entity classes and mixins", () => { + expect(Application).to.be.a("function"); + expect(Executable).to.be.a("function"); + expect(Flavor).to.be.a("function"); + expect(Template).to.be.a("function"); + expect(applicationMixin).to.be.a("function"); + expect(executableMixin).to.be.a("function"); + expect(flavorMixin).to.be.a("function"); + expect(templateMixin).to.be.a("function"); + }); +}); diff --git a/tests/js/provider.tests.ts b/tests/js/provider.tests.ts deleted file mode 100644 index 0f1e1f5..0000000 --- a/tests/js/provider.tests.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; -import { expect } from "chai"; - -import ContextProvider from "../../src/js/context/ContextProvider"; - -describe("ContextProvider", () => { - const minimal = { name: ContextProviderNameEnum.KGridFormDataManager }; - const data = { a: "test" }; - - it("can be created", () => { - const provider = new ContextProvider(minimal); - // eslint-disable-next-line no-unused-expressions - expect(provider).to.exist; - }); - - it("sets and gets data", () => { - const provider = new ContextProvider(minimal); - provider.setData(data); - expect(() => provider.getData()).to.throw("Not implemented."); - provider.setIsEdited(true); - expect(JSON.stringify(provider.getData())).to.equal(JSON.stringify(data)); - expect(() => provider.defaultData).to.throw("Not implemented."); - }); - - it("should return extraDataKey", () => { - const provider = new ContextProvider(minimal); - expect(provider.extraDataKey).to.equal(`${provider.name}ExtraData`); - }); - - it("should return isEditedKey", () => { - const provider = new ContextProvider(minimal); - expect(provider.isEditedKey).to.include("Edited"); - expect(provider.isEditedKey).to.include("is"); - }); - - it("should return isUnitContextProvider", () => { - const provider = new ContextProvider({ ...minimal, entityName: "unit" }); - expect(provider.isUnitContextProvider).to.be.true; - const nonUnitProvider = new ContextProvider({ ...minimal, entityName: "subworkflow" }); - expect(nonUnitProvider.isUnitContextProvider).to.be.false; - }); - - it("should return isSubworkflowContextProvider", () => { - const provider = new ContextProvider({ ...minimal, entityName: "subworkflow" }); - expect(provider.isSubworkflowContextProvider).to.be.true; - const nonSubworkflowProvider = new ContextProvider({ ...minimal, entityName: "unit" }); - expect(nonSubworkflowProvider.isSubworkflowContextProvider).to.be.false; - }); - - // transform, yieldData, yieldDataForRendering -}); diff --git a/tests/js/template.test.ts b/tests/js/template.test.ts index 67fcae5..816e2fa 100644 --- a/tests/js/template.test.ts +++ b/tests/js/template.test.ts @@ -1,361 +1,28 @@ /* eslint-disable no-unused-expressions */ -import { Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; import { expect } from "chai"; -import ContextProvider from "../../src/js/context/ContextProvider"; -import Template from "../../src/js/template"; -import type { - ContextProviderConfigMap, - ContextProviderConfigMapEntry, -} from "../../src/js/templateMixin"; - -// Mock context provider class -class MockContextProvider extends ContextProvider { - // eslint-disable-next-line class-methods-use-this - get defaultData() { - return { test: "value" }; - } -} - -// Set up the static context provider registry before tests -const mockConfig: ContextProviderConfigMapEntry = { - providerCls: MockContextProvider, - config: { name: ContextProviderNameEnum.QGridFormDataManager }, -}; - -const providersConfig: ContextProviderConfigMap = { - QGridFormDataManager: mockConfig, - PlanewaveCutoffDataManager: mockConfig, - KGridFormDataManager: mockConfig, - IGridFormDataManager: mockConfig, - QPathFormDataManager: mockConfig, - IPathFormDataManager: mockConfig, - KPathFormDataManager: mockConfig, - ExplicitKPathFormDataManager: mockConfig, - ExplicitKPath2PIBAFormDataManager: mockConfig, - HubbardJContextManager: mockConfig, - HubbardUContextManager: mockConfig, - HubbardVContextManager: mockConfig, - HubbardContextManagerLegacy: mockConfig, - NEBFormDataManager: mockConfig, - BoundaryConditionsFormDataManager: mockConfig, - MLSettingsDataManager: mockConfig, - MLTrainTestSplitDataManager: mockConfig, - IonDynamicsContextProvider: mockConfig, - CollinearMagnetizationDataManager: mockConfig, - NonCollinearMagnetizationDataManager: mockConfig, - QEPWXInputDataManager: mockConfig, - QENEBInputDataManager: mockConfig, - VASPInputDataManager: mockConfig, - VASPNEBInputDataManager: mockConfig, - NWChemInputDataManager: mockConfig, -}; - -before(() => { - // Register the mock provider - Template.setContextProvidersConfig(providersConfig); -}); +import { Template } from "../../src/js"; describe("Template", () => { - let template: Template; - - beforeEach(() => { - template = new Template({ name: "test_template" }); + it("constructs with default data when no argument is passed", () => { + const template = new Template(); + expect(template).to.be.instanceOf(Template); + expect(template.applicationName).to.equal(""); + expect(template.contextProviders).to.deep.equal([]); }); it("toJSON works as expected", () => { - const template = new Template({ name: "test_template" }); - template.setContent("test content"); - template.setRendered("test content"); + const template = new Template({ name: "test_template", content: "test content" }); const json = template.toJSON(); - // Check basic properties from NamedInMemoryEntity expect(json).to.have.property("name", "test_template"); expect(json).to.have.property("schemaVersion"); - - // Check required template properties expect(json).to.have.property("content", "test content"); - expect(json).to.have.property("rendered", "test content"); - - // Verify data types expect(json.content).to.be.a("string"); - expect(json.rendered).to.be.a("string"); - expect(json.schemaVersion).to.be.a("string"); - }); - - it("toJSON includes all template properties when set", () => { - const template = new Template({ name: "test_template" }); - - // Set various properties - template.setContent("test content"); - template.setProp("isManuallyChanged", true); - template.setProp("applicationName", "espresso"); - template.setProp("executableName", "pw"); - template.setRendered("rendered content"); - - const json = template.toJSON(); - - // Check required properties - expect(json.name).to.equal("test_template"); - expect(json.content).to.equal("test content"); - expect(json.rendered).to.equal("rendered content"); expect(json.schemaVersion).to.be.a("string"); - - // Check that the JSON contains the expected structure - expect(json).to.be.an("object"); - expect(Object.keys(json).length).to.be.greaterThan(3); - }); - - it("getRenderedJSON returns valid JSON after rendering", () => { - const template = new Template({ name: "test_template" }); - template.setContent("Hello {{ name }}!"); - template.setProp("isManuallyChanged", false); - - const json = template.getRenderedJSON({ name: "World" }); - - // Check that it returns a valid JSON object - expect(json).to.be.an("object"); - expect(json).to.have.property("name", "test_template"); - expect(json).to.have.property("content", "Hello {{ name }}!"); - expect(json).to.have.property("rendered", "Hello World!"); - expect(json).to.have.property("schemaVersion"); - }); - - describe("templateMixin properties", () => { - describe("isManuallyChanged property", () => { - it("should return false by default", () => { - expect(template.isManuallyChanged).to.be.false; - }); - - it("should return true when set", () => { - template.setProp("isManuallyChanged", true); - expect(template.isManuallyChanged).to.be.true; - }); - }); - - describe("content property", () => { - it("should return empty string by default", () => { - expect(template.content).to.equal(""); - }); - - it("should return content when set", () => { - template.setContent("test content"); - expect(template.content).to.equal("test content"); - }); - - it("should set content via setContent method", () => { - template.setContent("new content"); - expect(template.content).to.equal("new content"); - }); - }); - - describe("rendered property", () => { - it("should return content when rendered is not set", () => { - template.setContent("test content"); - expect(template.rendered).to.equal("test content"); - }); - - it("should return rendered content when set", () => { - template.setContent("test content"); - template.setRendered("rendered content"); - expect(template.rendered).to.equal("rendered content"); - }); - - it("should set rendered via setRendered method", () => { - template.setRendered("rendered text"); - expect(template.rendered).to.equal("rendered text"); - }); - }); - - describe("applicationName property", () => { - it("should return undefined by default", () => { - expect(template.applicationName).to.be.undefined; - }); - - it("should return applicationName when set", () => { - template.setProp("applicationName", "espresso"); - expect(template.applicationName).to.equal("espresso"); - }); - }); - - describe("executableName property", () => { - it("should return undefined by default", () => { - expect(template.executableName).to.be.undefined; - }); - - it("should return executableName when set", () => { - template.setProp("executableName", "pw"); - expect(template.executableName).to.equal("pw"); - }); - }); - - describe("contextProviders property", () => { - it("should return empty array by default", () => { - expect(template.contextProviders).to.deep.equal([]); - }); - - it("should return contextProviders when set", () => { - const providers = [{ name: "provider1" }, { name: "provider2" }]; - template.setProp("contextProviders", providers); - expect(template.contextProviders).to.deep.equal(providers); - }); - }); - - describe("addContextProvider method", () => { - it("should add a context provider", () => { - const provider = new MockContextProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - domain: "test", - }); - const initialLength = template.contextProviders.length; - template.addContextProvider(provider); - // The method sets the new length, so we check that it increased - expect(template.contextProviders.length).to.be.greaterThan(initialLength); - }); - }); - - describe("removeContextProvider method", () => { - it("should remove a context provider by name and domain", () => { - const provider1 = new MockContextProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - domain: "domain1", - }); - const provider2 = new MockContextProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - domain: "domain2", - }); - template.setProp("contextProviders", [provider1, provider2]); - - template.removeContextProvider(provider1); - expect(template.contextProviders).to.deep.equal([provider2]); - }); - }); - - describe("_cleanRenderingContext method", () => { - it("should remove job property and deep clone the object", () => { - const context = { - job: { id: 123 }, - name: "test", - data: { value: 456 }, - }; - - const result = template._cleanRenderingContext(context); - expect(result).to.not.have.property("job"); - expect(result).to.have.property("name", "test"); - expect(result.data).to.deep.equal({ value: 456 }); - }); - }); - - describe("render method", () => { - it("should render template with nunjucks when not manually changed", () => { - template.setContent("Hello {{ name }}!"); - template.setProp("isManuallyChanged", false); - - template.render({ name: "World" }); - expect(template.rendered).to.equal("Hello World!"); - }); - - it("should not render when manually changed", () => { - template.setContent("Original content"); - template.setProp("isManuallyChanged", true); - - template.render({ name: "World" }); - expect(template.rendered).to.equal("Original content"); - }); - - it("should handle template compilation errors gracefully", () => { - template.setContent("Invalid template {{ name }"); - template.setProp("isManuallyChanged", false); - - // Capture console.log calls - const originalLog = console.log; - let logCalled = false; - console.log = () => { - logCalled = true; - }; - - template.render({ name: "World" }); - - expect(logCalled).to.be.true; - expect(template.rendered).to.equal("Invalid template {{ name }"); - - // Restore console.log - console.log = originalLog; - }); - }); - - describe("getRenderedJSON method", () => { - it("should render template and return JSON", () => { - template.setContent("Hello {{ name }}!"); - template.setProp("isManuallyChanged", false); - - const result = template.getRenderedJSON({ name: "World" }); - expect(result).to.have.property("name", "test_template"); - expect(template.rendered).to.equal("Hello World!"); - }); - }); - - describe("getRenderingContext method", () => { - it("should combine external context with provider context", () => { - const externalContext = { external: "value" }; - const providerContext = { provider: "data" }; - - // Mock getDataFromProvidersForRenderingContext - const originalMethod = template.getDataFromProvidersForRenderingContext; - template.getDataFromProvidersForRenderingContext = () => providerContext; - - const result = template.getRenderingContext(externalContext); - expect(result).to.deep.equal({ - external: "value", - provider: "data", - }); - - // Restore original method - template.getDataFromProvidersForRenderingContext = originalMethod; - }); - }); - - // Added with LLM to help with coverage - it("should handle getDataFromProvidersForPersistentContext with edited providers", () => { - const editedProvider = new MockContextProvider({ - name: ContextProviderNameEnum.QGridFormDataManager, - domain: "test", - }); - editedProvider.isEdited = true; - editedProvider.yieldData = () => ({ data: { value: 1 } }); - - const nonEditedProvider = new MockContextProvider({ - name: ContextProviderNameEnum.PlanewaveCutoffDataManager, - domain: "test", - }); - nonEditedProvider.isEdited = false; - nonEditedProvider.yieldData = () => ({ data: { value: 2 } }); - - template.getContextProvidersAsClassInstances = () => [ - editedProvider, - nonEditedProvider, - ]; - const result = template.getDataFromProvidersForPersistentContext(); - expect(result).to.deep.equal({ data: { value: 1 } }); - }); - - it("should throw error when provider not found", () => { - template.setProp("contextProviders", [ - { name: ContextProviderNameEnum.KGridFormDataManager }, - ]); - Template.contextProviderRegistry = null; - expect(() => template.getContextProvidersAsClassInstances()).to.throw( - /Provider .* not found/, - ); - }); }); describe("templateStaticMixin properties", () => { - it("should set context providers config", () => { - Template.setContextProvidersConfig(providersConfig); - expect(Template.contextProviderRegistry).to.not.be.null; - }); - it("should have jsonSchema property", () => { expect(Template.jsonSchema).to.exist; });