From f93b1af43a4d3127336ccc07b3c7646659e02c0e Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 25 Nov 2025 18:09:29 +0200 Subject: [PATCH 01/18] update: code/new mixins --- dist/js/executable.d.ts | 9 +- dist/js/executable.js | 19 +- dist/js/flavor.d.ts | 10 +- dist/js/flavor.js | 19 +- dist/js/flavorMixin.d.ts | 4 +- dist/js/templateMixin.d.ts | 8 +- package-lock.json | 463 +++++++++---------------------------- package.json | 4 +- src/js/executable.ts | 38 ++- src/js/flavor.ts | 39 +++- tests/js/flavor.test.ts | 16 +- 11 files changed, 236 insertions(+), 393 deletions(-) diff --git a/dist/js/executable.d.ts b/dist/js/executable.d.ts index 4f521d3..f8194aa 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -1,8 +1,13 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { 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 RuntimeItemsStringInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin } from "./executableMixin"; -type Base = Constructor & typeof NamedDefaultableInMemoryEntity; +type Base = Constructor & Constructor & Constructor & Constructor & typeof InMemoryEntity; declare const Executable_base: Base; export default class Executable extends Executable_base { + constructor(data?: Partial); } export {}; diff --git a/dist/js/executable.js b/dist/js/executable.js index 878cfaa..5fbf0b1 100644 --- a/dist/js/executable.js +++ b/dist/js/executable.js @@ -1,12 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); -const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); +const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); +const RuntimeItemsStringMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"); const executableMixin_1 = require("./executableMixin"); -class Executable extends entity_1.NamedDefaultableInMemoryEntity { +class Executable extends entity_1.InMemoryEntity { + constructor(data = {}) { + super({ + monitors: [], + results: [], + postProcessors: [], + preProcessors: [], + ...data, + }); + } } exports.default = Executable; // Apply mixins -(0, RuntimeItemsMixin_1.runtimeItemsMixin)(Executable.prototype); +(0, RuntimeItemsStringMixin_1.runtimeItemsStringMixin)(Executable.prototype); (0, executableMixin_1.executableMixin)(Executable.prototype); (0, executableMixin_1.executableStaticMixin)(Executable); +(0, NamedEntityMixin_1.namedEntityMixin)(Executable.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(Executable); diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index 4134aff..b229353 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -1,9 +1,13 @@ -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 DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { type NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type RuntimeItemsStringInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/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 & Constructor & Constructor & Constructor; declare const Flavor_base: Base; export default class Flavor extends Flavor_base { + constructor(data?: Partial); } export {}; diff --git a/dist/js/flavor.js b/dist/js/flavor.js index 956e74c..f14c624 100644 --- a/dist/js/flavor.js +++ b/dist/js/flavor.js @@ -1,12 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const entity_1 = require("@mat3ra/code/dist/js/entity"); -const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); +const DefaultableMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"); +const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"); +const RuntimeItemsStringMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"); const flavorMixin_1 = require("./flavorMixin"); -class Flavor extends entity_1.NamedDefaultableInMemoryEntity { +class Flavor extends entity_1.InMemoryEntity { + constructor(data = {}) { + super({ + monitors: [], + results: [], + postProcessors: [], + preProcessors: [], + ...data, + }); + } } exports.default = Flavor; // Apply mixins (0, flavorMixin_1.flavorMixin)(Flavor.prototype); -(0, RuntimeItemsMixin_1.runtimeItemsMixin)(Flavor.prototype); +(0, RuntimeItemsStringMixin_1.runtimeItemsStringMixin)(Flavor.prototype); +(0, NamedEntityMixin_1.namedEntityMixin)(Flavor.prototype); +(0, DefaultableMixin_1.defaultableEntityMixin)(Flavor); (0, flavorMixin_1.flavorStaticMixin)(Flavor); diff --git a/dist/js/flavorMixin.d.ts b/dist/js/flavorMixin.d.ts index 3c42e3d..4ace9ab 100644 --- a/dist/js/flavorMixin.d.ts +++ b/dist/js/flavorMixin.d.ts @@ -13,7 +13,9 @@ export type FlavorMixin = { supportedApplicationVersions?: string[]; getInputAsRenderedTemplates: (context: Record) => Record[]; }; -export declare function flavorMixin(item: Base): FlavorMixin & InMemoryEntity & NamedInMemoryEntity; +export declare function flavorMixin(item: Base): FlavorMixin & InMemoryEntity & import("@mat3ra/esse/dist/js/types").NameEntitySchema & { + setName: (name: string) => void; +}; export declare function flavorStaticMixin(Flavor: Constructor): void; export type FlavorStaticMixin = { jsonSchema: FlavorSchema; diff --git a/dist/js/templateMixin.d.ts b/dist/js/templateMixin.d.ts index 3f87088..ec14e17 100644 --- a/dist/js/templateMixin.d.ts +++ b/dist/js/templateMixin.d.ts @@ -25,7 +25,9 @@ export type TemplateMixin = { getDataFromProvidersForPersistentContext: (providerContext?: Record) => Record; getRenderingContext: (externalContext?: Record) => Record; }; -export declare function templateMixin(item: TemplateBase): TemplateMixin & InMemoryEntity & NamedInMemoryEntity; +export declare function templateMixin(item: TemplateBase): TemplateMixin & InMemoryEntity & import("@mat3ra/esse/dist/js/types").NameEntitySchema & { + setName: (name: string) => void; +}; export type ContextProviderConfigMapEntry = { providerCls: typeof ContextProvider; config: ContextProviderConfig; @@ -36,4 +38,6 @@ export type TemplateStaticMixin = { setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; jsonSchema: TemplateSchema; }; -export declare function templateStaticMixin(item: Constructor): TemplateStaticMixin & Constructor; +export declare function templateStaticMixin(item: Constructor): TemplateStaticMixin & Constructor void; +} & TemplateMixin>; diff --git a/package-lock.json b/package-lock.json index 7638a91..069be62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,8 +17,8 @@ "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/code": "2025.8.7-0", - "@mat3ra/esse": "2025.8.14-0", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#a91ed6431f436b52689a1aff82096f3f9d618654", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -73,6 +73,24 @@ "node": ">=6.0.0" } }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", + "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, "node_modules/@babel/cli": { "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", @@ -2410,25 +2428,6 @@ "node": ">=6.9.0" } }, - "node_modules/@bcherny/json-schema-ref-parser": { - "version": "10.0.5-fork", - "resolved": "https://registry.npmjs.org/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz", - "integrity": "sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -3195,9 +3194,9 @@ "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==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", + "integrity": "sha512-24YL0+n8EpWUYURbGp7Pw9MKH456teZStoW4QsUME07CqgrOKUcxV9Z9XVtpLRFSq+A5e7TszSiIJ7FAdlLZTQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3235,9 +3234,9 @@ } }, "node_modules/@mat3ra/esse": { - "version": "2025.8.14-0", - "resolved": "https://registry.npmjs.org/@mat3ra/esse/-/esse-2025.8.14-0.tgz", - "integrity": "sha512-p8Fijembng3eiXEwXXRNp34eVqUq8BueCGqA20aKFJTNROoJCws7ODZoHrGeYn91LXkEJ+lfsg4wa96GxYNZyg==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#a91ed6431f436b52689a1aff82096f3f9d618654", + "integrity": "sha512-h04GnW7PFepbPDp2rAtmFvNGQ0IjvaYVsEUgQ0IS3k087ZsSjxfToDaJ/jftOHpJvOPF8EI48aHZezrdPIDpkw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3260,7 +3259,7 @@ "json-schema": "^0.4.0", "json-schema-deref-sync": "0.14.0", "json-schema-merge-allof": "^0.8.1", - "json-schema-to-typescript": "^13.1.2", + "json-schema-to-typescript": "^15.0.4", "lodash": "4.17.21" }, "engines": { @@ -4391,17 +4390,6 @@ "@types/chai": "*" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/js-yaml": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", @@ -4433,9 +4421,9 @@ "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==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", "dev": true, "license": "MIT" }, @@ -4449,13 +4437,6 @@ "decimal.js": "^10.0.0" } }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/mocha": { "version": "10.0.10", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", @@ -4469,6 +4450,7 @@ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -4480,13 +4462,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/react": { "version": "19.2.5", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.5.tgz", @@ -4968,13 +4943,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -5519,13 +5487,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true, - "license": "MIT" - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -5661,23 +5622,6 @@ "node": ">=6" } }, - "node_modules/cli-color": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", - "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.64", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -5977,20 +5921,6 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/dag-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", @@ -6447,23 +6377,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -6471,45 +6384,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -7258,22 +7132,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -7359,17 +7217,6 @@ "node": ">=0.10.0" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -7394,16 +7241,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7791,19 +7628,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -7870,26 +7694,6 @@ "node": ">= 6" } }, - "node_modules/glob-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", - "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.3" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^7.1.6" - } - }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -8575,13 +8379,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -9077,32 +8874,43 @@ } }, "node_modules/json-schema-to-typescript": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.2.tgz", - "integrity": "sha512-17G+mjx4nunvOpkPvcz7fdwUwYCEwyH8vR3Ym3rFiQ8uzAL3go+c1306Kk7iGRk8HuXBXqy+JJJmpYl0cvOllw==", + "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": { - "@bcherny/json-schema-ref-parser": "10.0.5-fork", - "@types/json-schema": "^7.0.11", - "@types/lodash": "^4.14.182", - "@types/prettier": "^2.6.1", - "cli-color": "^2.0.2", - "get-stdin": "^8.0.0", - "glob": "^7.1.6", - "glob-promise": "^4.2.2", + "@apidevtools/json-schema-ref-parser": "^11.5.5", + "@types/json-schema": "^7.0.15", + "@types/lodash": "^4.17.7", "is-glob": "^4.0.3", + "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "mz": "^2.7.0", - "prettier": "^2.6.2" + "minimist": "^1.2.8", + "prettier": "^3.2.5", + "tinyglobby": "^0.2.9" }, "bin": { "json2ts": "dist/src/cli.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/json-schema-to-typescript/node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/json-schema-traverse": { @@ -9623,16 +9431,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es5-ext": "~0.10.2" - } - }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -9716,26 +9514,6 @@ "is-buffer": "~1.1.1" } }, - "node_modules/memoizee": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", - "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "es5-ext": "^0.10.64", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/memory-cache": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", @@ -9814,19 +9592,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", @@ -10018,18 +9783,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nanoid": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", @@ -10057,13 +9810,6 @@ "dev": true, "license": "MIT" }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true, - "license": "ISC" - }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -12190,29 +11936,6 @@ "dev": true, "license": "MIT" }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -12220,26 +11943,60 @@ "dev": true, "license": "MIT" }, - "node_modules/timers-ext": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", - "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "dev": true, - "license": "ISC", + "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": { - "es5-ext": "^0.10.64", - "next-tick": "^1.1.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=0.12" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -12405,13 +12162,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true, - "license": "ISC" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12627,7 +12377,8 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", diff --git a/package.json b/package.json index 856d91c..94f2298 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,8 @@ "@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.8.14-0", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#a91ed6431f436b52689a1aff82096f3f9d618654", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", diff --git a/src/js/executable.ts b/src/js/executable.ts index 0a60939..fd0db93 100644 --- a/src/js/executable.ts +++ b/src/js/executable.ts @@ -1,14 +1,42 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { runtimeItemsMixin } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type DefaultableInMemoryEntity, + defaultableEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { + type NamedInMemoryEntity, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { + type RuntimeItemsStringInMemoryEntity, + runtimeItemsStringMixin, +} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin, executableMixin, executableStaticMixin } from "./executableMixin"; -type Base = Constructor & typeof NamedDefaultableInMemoryEntity; +type Base = Constructor & + Constructor & + Constructor & + Constructor & + typeof InMemoryEntity; -export default class Executable extends (NamedDefaultableInMemoryEntity as Base) {} +export default class Executable extends (InMemoryEntity as Base) { + constructor(data: Partial = {}) { + super({ + monitors: [], + results: [], + postProcessors: [], + preProcessors: [], + ...data, + }); + } +} // Apply mixins -runtimeItemsMixin(Executable.prototype); +runtimeItemsStringMixin(Executable.prototype); executableMixin(Executable.prototype); executableStaticMixin(Executable); +namedEntityMixin(Executable.prototype); +defaultableEntityMixin(Executable); diff --git a/src/js/flavor.ts b/src/js/flavor.ts index f8230b0..0746731 100644 --- a/src/js/flavor.ts +++ b/src/js/flavor.ts @@ -1,19 +1,42 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { - type RuntimeItemsInMemoryEntity, - runtimeItemsMixin, -} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; + type DefaultableInMemoryEntity, + defaultableEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +import { + type NamedInMemoryEntity, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { + type RuntimeItemsStringInMemoryEntity, + runtimeItemsStringMixin, +} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type FlavorMixin, flavorMixin, flavorStaticMixin } from "./flavorMixin"; -type Base = typeof NamedDefaultableInMemoryEntity & +type Base = typeof InMemoryEntity & Constructor & - Constructor; + Constructor & + Constructor & + Constructor; -export default class Flavor extends (NamedDefaultableInMemoryEntity as Base) {} +export default class Flavor extends (InMemoryEntity as Base) { + constructor(data: Partial = {}) { + super({ + monitors: [], + results: [], + postProcessors: [], + preProcessors: [], + ...data, + }); + } +} // Apply mixins flavorMixin(Flavor.prototype); -runtimeItemsMixin(Flavor.prototype); +runtimeItemsStringMixin(Flavor.prototype); +namedEntityMixin(Flavor.prototype); +defaultableEntityMixin(Flavor); flavorStaticMixin(Flavor); diff --git a/tests/js/flavor.test.ts b/tests/js/flavor.test.ts index 6a459b4..ee12ecd 100644 --- a/tests/js/flavor.test.ts +++ b/tests/js/flavor.test.ts @@ -12,13 +12,13 @@ describe("Flavor", () => { }, ); 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" }, + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force", ]); }); @@ -82,7 +82,7 @@ describe("Flavor", () => { 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 }) }; From 5adf0bfbdb6d1259b0c2a933e83d9050ad3be74a Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 27 Nov 2025 01:51:42 +0200 Subject: [PATCH 02/18] update: add mixin generation --- .nycrc | 1 + dist/js/ApplicationRegistry.js | 1 + dist/js/application.js | 3 +- dist/js/applicationMixin.d.ts | 7 +- dist/js/applicationMixin.js | 27 +- dist/js/executable.js | 4 +- dist/js/executableMixin.d.ts | 7 +- dist/js/executableMixin.js | 18 +- dist/js/flavor.js | 8 +- dist/js/flavorMixin.d.ts | 20 +- dist/js/flavorMixin.js | 49 +- dist/js/generated/ApplicationMixin.d.ts | 5 + dist/js/generated/ApplicationMixin.js | 45 ++ dist/js/generated/ApplicationSchemaMixin.d.ts | 5 + dist/js/generated/ApplicationSchemaMixin.js | 45 ++ dist/js/generated/ExecutableMixin.d.ts | 5 + dist/js/generated/ExecutableMixin.js | 27 + dist/js/generated/ExecutableSchemaMixin.d.ts | 5 + dist/js/generated/ExecutableSchemaMixin.js | 27 + dist/js/generated/FlavorMixin.d.ts | 5 + dist/js/generated/FlavorMixin.js | 39 ++ dist/js/generated/FlavorSchemaMixin.d.ts | 5 + dist/js/generated/FlavorSchemaMixin.js | 39 ++ dist/js/generated/TemplateMixin.d.ts | 5 + dist/js/generated/TemplateMixin.js | 57 ++ dist/js/generated/TemplateSchemaMixin.d.ts | 5 + dist/js/generated/TemplateSchemaMixin.js | 57 ++ dist/js/index.d.ts | 6 +- dist/js/index.js | 4 +- dist/js/template.d.ts | 7 +- dist/js/template.js | 17 +- dist/js/templateMixin.d.ts | 21 +- dist/js/templateMixin.js | 60 +-- dist/js/types.d.ts | 4 +- package-lock.json | 503 +++++++++++++++++- package.json | 5 +- scripts/generate-mixins.ts | 37 ++ src/js/ApplicationRegistry.ts | 1 + src/js/application.ts | 4 +- src/js/applicationMixin.ts | 48 +- src/js/executable.ts | 6 +- src/js/executableMixin.ts | 25 +- src/js/flavor.ts | 10 +- src/js/flavorMixin.ts | 73 +-- src/js/generated/ApplicationSchemaMixin.ts | 56 ++ src/js/generated/ExecutableSchemaMixin.ts | 38 ++ src/js/generated/FlavorSchemaMixin.ts | 50 ++ src/js/generated/TemplateSchemaMixin.ts | 68 +++ src/js/index.ts | 6 +- src/js/template.ts | 36 +- src/js/templateMixin.ts | 113 ++-- src/js/types.ts | 3 +- tests/js/ApplicationRegistry.test.ts | 8 +- tests/js/JSONSchemaFormDataProvider.test.ts | 68 +++ tests/js/application.test.ts | 52 -- tests/js/flavor.test.ts | 29 +- tests/js/template.test.ts | 92 ++-- 57 files changed, 1492 insertions(+), 479 deletions(-) create mode 100644 dist/js/generated/ApplicationMixin.d.ts create mode 100644 dist/js/generated/ApplicationMixin.js create mode 100644 dist/js/generated/ApplicationSchemaMixin.d.ts create mode 100644 dist/js/generated/ApplicationSchemaMixin.js create mode 100644 dist/js/generated/ExecutableMixin.d.ts create mode 100644 dist/js/generated/ExecutableMixin.js create mode 100644 dist/js/generated/ExecutableSchemaMixin.d.ts create mode 100644 dist/js/generated/ExecutableSchemaMixin.js create mode 100644 dist/js/generated/FlavorMixin.d.ts create mode 100644 dist/js/generated/FlavorMixin.js create mode 100644 dist/js/generated/FlavorSchemaMixin.d.ts create mode 100644 dist/js/generated/FlavorSchemaMixin.js create mode 100644 dist/js/generated/TemplateMixin.d.ts create mode 100644 dist/js/generated/TemplateMixin.js create mode 100644 dist/js/generated/TemplateSchemaMixin.d.ts create mode 100644 dist/js/generated/TemplateSchemaMixin.js create mode 100644 scripts/generate-mixins.ts create mode 100644 src/js/generated/ApplicationSchemaMixin.ts create mode 100644 src/js/generated/ExecutableSchemaMixin.ts create mode 100644 src/js/generated/FlavorSchemaMixin.ts create mode 100644 src/js/generated/TemplateSchemaMixin.ts create mode 100644 tests/js/JSONSchemaFormDataProvider.test.ts 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.js b/dist/js/ApplicationRegistry.js index 7afe7e0..989d3d4 100644 --- a/dist/js/ApplicationRegistry.js +++ b/dist/js/ApplicationRegistry.js @@ -52,6 +52,7 @@ class ApplicationRegistry { appTreeItem[version] = appVersion; const applicationConfig = { ...appData, + // @ts-ignore build: buildToUse, ...versionInfo, }; diff --git a/dist/js/application.js b/dist/js/application.js index 129810e..cf464cd 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -5,5 +5,4 @@ const applicationMixin_1 = require("./applicationMixin"); class Application extends entity_1.NamedDefaultableInMemoryEntity { } exports.default = Application; -(0, applicationMixin_1.applicationMixin)(Application.prototype); -(0, applicationMixin_1.applicationStaticMixin)(Application); +(0, applicationMixin_1.applicationMixin)(Application); diff --git a/dist/js/applicationMixin.d.ts b/dist/js/applicationMixin.d.ts index 11aab73..3334cc6 100644 --- a/dist/js/applicationMixin.d.ts +++ b/dist/js/applicationMixin.d.ts @@ -4,12 +4,12 @@ import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/Nam import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; import Executable from "./executable"; +import { type ApplicationSchemaMixin } from "./generated/ApplicationSchemaMixin"; type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; -export type ApplicationConstructor = Constructor & ApplicationStaticMixin; -export type ApplicationMixin = Pick & { +export type ApplicationMixin = ApplicationSchemaMixin & { name: Required["name"]; isUsingMaterial: boolean; }; @@ -18,6 +18,5 @@ export type ApplicationStaticMixin = { defaultConfig: DefaultApplicationConfig; jsonSchema: ApplicationSchemaBase; }; -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..4ddadc7 100644 --- a/dist/js/applicationMixin.js +++ b/dist/js/applicationMixin.js @@ -4,30 +4,13 @@ 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) { + (0, ApplicationSchemaMixin_1.applicationSchemaMixin)(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 +29,7 @@ function applicationStaticMixin(Application) { }; Object.defineProperties(Application, Object.getOwnPropertyDescriptors(properties)); } +function applicationMixin(Item) { + applicationPropertiesMixin(Item.prototype); + applicationStaticMixin(Item); +} diff --git a/dist/js/executable.js b/dist/js/executable.js index 5fbf0b1..e31e9fa 100644 --- a/dist/js/executable.js +++ b/dist/js/executable.js @@ -12,6 +12,7 @@ class Executable extends entity_1.InMemoryEntity { results: [], postProcessors: [], preProcessors: [], + applicationId: [], ...data, }); } @@ -19,7 +20,6 @@ class Executable extends entity_1.InMemoryEntity { exports.default = Executable; // Apply mixins (0, RuntimeItemsStringMixin_1.runtimeItemsStringMixin)(Executable.prototype); -(0, executableMixin_1.executableMixin)(Executable.prototype); -(0, executableMixin_1.executableStaticMixin)(Executable); (0, NamedEntityMixin_1.namedEntityMixin)(Executable.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Executable); +(0, executableMixin_1.executableMixin)(Executable); diff --git a/dist/js/executableMixin.d.ts b/dist/js/executableMixin.d.ts index 87b9d2a..fed8963 100644 --- a/dist/js/executableMixin.d.ts +++ b/dist/js/executableMixin.d.ts @@ -5,18 +5,17 @@ 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"; +import { ExecutableSchemaMixin } from "./generated/ExecutableSchemaMixin"; type BaseFlavor = FlavorMixin & NamedInMemoryEntity & InMemoryEntity; type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; -export declare function executableMixin(item: Base): void; -export declare function executableStaticMixin(Executable: Constructor): void; 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.js b/dist/js/flavor.js index f14c624..537bed5 100644 --- a/dist/js/flavor.js +++ b/dist/js/flavor.js @@ -12,14 +12,16 @@ class Flavor extends entity_1.InMemoryEntity { results: [], postProcessors: [], preProcessors: [], + input: [], + executableId: "", + executableName: "", + applicationName: "", ...data, }); } } exports.default = Flavor; -// Apply mixins -(0, flavorMixin_1.flavorMixin)(Flavor.prototype); (0, RuntimeItemsStringMixin_1.runtimeItemsStringMixin)(Flavor.prototype); (0, NamedEntityMixin_1.namedEntityMixin)(Flavor.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Flavor); -(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 4ace9ab..a494611 100644 --- a/dist/js/flavorMixin.d.ts +++ b/dist/js/flavorMixin.d.ts @@ -1,23 +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 & import("@mat3ra/esse/dist/js/types").NameEntitySchema & { - setName: (name: string) => void; -}; -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..ab09b52 100644 --- a/dist/js/flavorMixin.js +++ b/dist/js/flavorMixin.js @@ -4,39 +4,25 @@ 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")); +const FlavorSchemaMixin_1 = require("./generated/FlavorSchemaMixin"); // TODO: should we add fields from esse schema (executableId, executableName, applicationName)? -function flavorMixin(item) { +function flavorPropertiesMixin(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; - }); - }, + // TODO: there is no "isMultiMaterial" field in the schema; should we add it? + // get disableRenderMaterials() { + // return this.prop("isMultiMaterial", false); + // }, + // TODO: do we actually use this method anywhere? + // getInputAsRenderedTemplates(context: Record) { + // return this.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; @@ -49,3 +35,8 @@ function flavorStaticMixin(Flavor) { }; Object.defineProperties(Flavor, Object.getOwnPropertyDescriptors(properties)); } +function flavorMixin(Item) { + (0, FlavorSchemaMixin_1.flavorSchemaMixin)(Item.prototype); + flavorPropertiesMixin(Item.prototype); + flavorStaticMixin(Item); +} diff --git a/dist/js/generated/ApplicationMixin.d.ts b/dist/js/generated/ApplicationMixin.d.ts new file mode 100644 index 0000000..27024b9 --- /dev/null +++ b/dist/js/generated/ApplicationMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { ApplicationMixinSchema } from "@mat3ra/esse/dist/js/types"; +export type ApplicationMixin = ApplicationMixinSchema; +export type ApplicationMixin = InMemoryEntity & ApplicationMixin; +export declare function applicationMixin(item: InMemoryEntity): asserts item is T & ApplicationMixin; diff --git a/dist/js/generated/ApplicationMixin.js b/dist/js/generated/ApplicationMixin.js new file mode 100644 index 0000000..2510ffb --- /dev/null +++ b/dist/js/generated/ApplicationMixin.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.applicationMixin = applicationMixin; +function applicationMixin(item) { + // @ts-expect-error + const properties = { + get shortName() { + return this.prop("shortName"); + }, + set shortName(value) { + this.setProp("shortName", value); + }, + get summary() { + return this.prop("summary"); + }, + set summary(value) { + this.setProp("summary", value); + }, + get version() { + return this.prop("version"); + }, + set version(value) { + this.setProp("version", value); + }, + get build() { + return this.prop("build"); + }, + set build(value) { + this.setProp("build", 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/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..63a8df0 --- /dev/null +++ b/dist/js/generated/ApplicationSchemaMixin.js @@ -0,0 +1,45 @@ +"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 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/ExecutableMixin.d.ts b/dist/js/generated/ExecutableMixin.d.ts new file mode 100644 index 0000000..d720eb1 --- /dev/null +++ b/dist/js/generated/ExecutableMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { ExecutableMixinSchema } from "@mat3ra/esse/dist/js/types"; +export type ExecutableMixin = ExecutableMixinSchema; +export type ExecutableMixin = InMemoryEntity & ExecutableMixin; +export declare function executableMixin(item: InMemoryEntity): asserts item is T & ExecutableMixin; diff --git a/dist/js/generated/ExecutableMixin.js b/dist/js/generated/ExecutableMixin.js new file mode 100644 index 0000000..ce15d0e --- /dev/null +++ b/dist/js/generated/ExecutableMixin.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.executableMixin = executableMixin; +function executableMixin(item) { + // @ts-expect-error + const properties = { + get name() { + return this.requiredProp("name"); + }, + set name(value) { + this.setProp("name", value); + }, + get applicationId() { + return this.prop("applicationId"); + }, + set applicationId(value) { + this.setProp("applicationId", 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/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..6ab21d3 --- /dev/null +++ b/dist/js/generated/ExecutableSchemaMixin.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.executableSchemaMixin = executableSchemaMixin; +function executableSchemaMixin(item) { + // @ts-expect-error + const properties = { + get name() { + return this.requiredProp("name"); + }, + set name(value) { + this.setProp("name", value); + }, + get applicationId() { + return this.requiredProp("applicationId"); + }, + set applicationId(value) { + this.setProp("applicationId", 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/FlavorMixin.d.ts b/dist/js/generated/FlavorMixin.d.ts new file mode 100644 index 0000000..3ff6703 --- /dev/null +++ b/dist/js/generated/FlavorMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { FlavorMixinSchema } from "@mat3ra/esse/dist/js/types"; +export type FlavorMixin = FlavorMixinSchema; +export type FlavorMixin = InMemoryEntity & FlavorMixin; +export declare function flavorMixin(item: InMemoryEntity): asserts item is T & FlavorMixin; diff --git a/dist/js/generated/FlavorMixin.js b/dist/js/generated/FlavorMixin.js new file mode 100644 index 0000000..1bead61 --- /dev/null +++ b/dist/js/generated/FlavorMixin.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.flavorMixin = flavorMixin; +function flavorMixin(item) { + // @ts-expect-error + const properties = { + get executableId() { + return this.prop("executableId"); + }, + set executableId(value) { + this.setProp("executableId", value); + }, + 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.prop("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/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..cf3434f --- /dev/null +++ b/dist/js/generated/FlavorSchemaMixin.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.flavorSchemaMixin = flavorSchemaMixin; +function flavorSchemaMixin(item) { + // @ts-expect-error + const properties = { + get executableId() { + return this.requiredProp("executableId"); + }, + set executableId(value) { + this.setProp("executableId", value); + }, + 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/TemplateMixin.d.ts b/dist/js/generated/TemplateMixin.d.ts new file mode 100644 index 0000000..7a53e08 --- /dev/null +++ b/dist/js/generated/TemplateMixin.d.ts @@ -0,0 +1,5 @@ +import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import type { TemplateMixinSchema } from "@mat3ra/esse/dist/js/types"; +export type TemplateMixin = TemplateMixinSchema; +export type TemplateMixin = InMemoryEntity & TemplateMixin; +export declare function templateMixin(item: InMemoryEntity): asserts item is T & TemplateMixin; diff --git a/dist/js/generated/TemplateMixin.js b/dist/js/generated/TemplateMixin.js new file mode 100644 index 0000000..7cb1302 --- /dev/null +++ b/dist/js/generated/TemplateMixin.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.templateMixin = templateMixin; +function templateMixin(item) { + // @ts-expect-error + const properties = { + get applicationName() { + return this.prop("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.prop("executableName"); + }, + set executableName(value) { + this.setProp("executableName", value); + }, + get contextProviders() { + return this.prop("contextProviders"); + }, + set contextProviders(value) { + this.setProp("contextProviders", value); + }, + get isManuallyChanged() { + return this.prop("isManuallyChanged"); + }, + set isManuallyChanged(value) { + this.setProp("isManuallyChanged", value); + }, + get name() { + return this.requiredProp("name"); + }, + set name(value) { + this.setProp("name", value); + }, + get content() { + return this.requiredProp("content"); + }, + set content(value) { + this.setProp("content", value); + }, + get rendered() { + return this.prop("rendered"); + }, + set rendered(value) { + this.setProp("rendered", 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..80d218c --- /dev/null +++ b/dist/js/generated/TemplateSchemaMixin.js @@ -0,0 +1,57 @@ +"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 isManuallyChanged() { + return this.prop("isManuallyChanged"); + }, + set isManuallyChanged(value) { + this.setProp("isManuallyChanged", value); + }, + get name() { + return this.requiredProp("name"); + }, + set name(value) { + this.setProp("name", value); + }, + get content() { + return this.requiredProp("content"); + }, + set content(value) { + this.setProp("content", value); + }, + get rendered() { + return this.prop("rendered"); + }, + set rendered(value) { + this.setProp("rendered", value); + }, + }; + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index 4b5801c..c550fcf 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -1,5 +1,5 @@ import Application from "./application"; -import { applicationMixin, applicationStaticMixin } from "./applicationMixin"; +import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; import ContextProvider from "./context/ContextProvider"; import JSONSchemaFormDataProvider from "./context/JSONSchemaFormDataProvider"; @@ -8,6 +8,6 @@ import { executableMixin } from "./executableMixin"; import Flavor from "./flavor"; import { flavorMixin } from "./flavorMixin"; import Template from "./template"; -import { templateMixin, templateStaticMixin } from "./templateMixin"; +import { templateMixin } from "./templateMixin"; declare const allApplications: string[]; -export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, JSONSchemaFormDataProvider, executableMixin, flavorMixin, applicationMixin, applicationStaticMixin, templateMixin, templateStaticMixin, allApplications, }; +export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, JSONSchemaFormDataProvider, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; diff --git a/dist/js/index.js b/dist/js/index.js index 58497ad..5cfd4d3 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,12 +3,11 @@ 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; +exports.allApplications = exports.templateMixin = 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; 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")); @@ -27,6 +26,5 @@ 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..799dff5 100644 --- a/dist/js/template.d.ts +++ b/dist/js/template.d.ts @@ -1,8 +1,11 @@ -import { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { 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 { 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 & Constructor & TemplateStaticMixin; declare const Template_base: Base; export default class Template extends Template_base { + constructor(data?: Partial); } 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 ec14e17..f925926 100644 --- a/dist/js/templateMixin.d.ts +++ b/dist/js/templateMixin.d.ts @@ -1,20 +1,12 @@ 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 { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import ContextProvider, { type ContextProviderConfig, type ContextProviderName } 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; +import { type TemplateSchemaMixin } from "./generated/TemplateSchemaMixin"; +export type TemplateBase = InMemoryEntity; +export type TemplateMixin = TemplateSchemaMixin & { render: (externalContext?: Record) => void; getRenderedJSON: (context?: Record) => AnyObject; _cleanRenderingContext: (object: Record) => Record; @@ -25,9 +17,6 @@ export type TemplateMixin = { getDataFromProvidersForPersistentContext: (providerContext?: Record) => Record; getRenderingContext: (externalContext?: Record) => Record; }; -export declare function templateMixin(item: TemplateBase): TemplateMixin & InMemoryEntity & import("@mat3ra/esse/dist/js/types").NameEntitySchema & { - setName: (name: string) => void; -}; export type ContextProviderConfigMapEntry = { providerCls: typeof ContextProvider; config: ContextProviderConfig; @@ -38,6 +27,4 @@ export type TemplateStaticMixin = { setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; jsonSchema: TemplateSchema; }; -export declare function templateStaticMixin(item: Constructor): TemplateStaticMixin & Constructor void; -} & TemplateMixin>; +export declare function templateMixin(Item: Constructor): void; diff --git a/dist/js/templateMixin.js b/dist/js/templateMixin.js index b2d5389..92cd68a 100644 --- a/dist/js/templateMixin.js +++ b/dist/js/templateMixin.js @@ -4,47 +4,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.templateMixin = templateMixin; -exports.templateStaticMixin = templateStaticMixin; -const utils_1 = require("@mat3ra/utils"); 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 TemplateSchemaMixin_1 = require("./generated/TemplateSchemaMixin"); +function templatePropertiesMixin(item) { + // @ts-expect-error 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; + this.content = text; + if (!this.rendered) { + this.rendered = text; + } }, 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); - }, + this.rendered = text; + }, + // 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) { const renderingContext = this.getRenderingContext(externalContext); if (!this.isManuallyChanged) { @@ -137,7 +122,6 @@ function templateMixin(item) { }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; } function templateStaticMixin(item) { // @ts-ignore @@ -158,5 +142,9 @@ function templateStaticMixin(item) { }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - return properties; +} +function templateMixin(Item) { + (0, TemplateSchemaMixin_1.templateSchemaMixin)(Item.prototype); + templatePropertiesMixin(Item.prototype); + templateStaticMixin(Item); } diff --git a/dist/js/types.d.ts b/dist/js/types.d.ts index 9373ca3..b002bc0 100644 --- a/dist/js/types.d.ts +++ b/dist/js/types.d.ts @@ -2,5 +2,5 @@ import { ApplicationMixin, ApplicationStaticMixin } from "./applicationMixin"; import { CreateApplicationConfig } from "./ApplicationRegistry"; import { ExecutableMixin } from "./executableMixin"; import { FlavorMixin } from "./flavorMixin"; -import { TemplateMixin, TemplateStaticMixin } from "./templateMixin"; -export type { FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, CreateApplicationConfig, TemplateMixin, TemplateStaticMixin, }; +import { TemplateMixin } from "./templateMixin"; +export type { FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, CreateApplicationConfig, TemplateMixin, }; diff --git a/package-lock.json b/package-lock.json index 069be62..ff4653d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#a91ed6431f436b52689a1aff82096f3f9d618654", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c248a30803e421f6da33e8270602bd1571945fb6", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -3235,8 +3235,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#a91ed6431f436b52689a1aff82096f3f9d618654", - "integrity": "sha512-h04GnW7PFepbPDp2rAtmFvNGQ0IjvaYVsEUgQ0IS3k087ZsSjxfToDaJ/jftOHpJvOPF8EI48aHZezrdPIDpkw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#c248a30803e421f6da33e8270602bd1571945fb6", + "integrity": "sha512-9o07vskHfdIsaHkTPvN0gEEaUrVdZBgjXQToy1TXW+I4KH0y5Sa4GWp21IuO9Ww322vI8QdXLx7SfnhzcZzWeQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3249,6 +3249,7 @@ "@babel/preset-typescript": "^7.27.0", "@babel/register": "^7.25.9", "@babel/runtime-corejs3": "^7.27.0", + "@mat3ra/utils": "^2025.11.20-0", "@types/chai": "^4.3.20", "@types/js-yaml": "^4.0.9", "@types/json-schema-merge-allof": "^0.6.5", @@ -3266,6 +3267,502 @@ "node": ">=14.0.0" } }, + "node_modules/@mat3ra/esse/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/esse/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/esse/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/esse/node_modules/@mat3ra/utils": { + "version": "2025.11.20-0", + "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2025.11.20-0.tgz", + "integrity": "sha512-igkswFIPrvIsOKiGdLE6ifgKGa3nruepjq2pPs9us+gHRn4tCaFNsBJqHw3ysw1dLgCtoYhHyYbMdpQu46+FCw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@babel/cli": "7.16.0", + "@babel/core": "7.24.1", + "@babel/eslint-parser": "7.16.3", + "@babel/plugin-proposal-class-properties": "7.16.0", + "@babel/preset-env": "7.16.4", + "@babel/preset-react": "7.16.7", + "@babel/preset-typescript": "^7.22.5", + "@babel/register": "^7.16.0", + "@babel/runtime-corejs3": "7.16.8", + "crypto-js": "^4.1.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "mathjs": "12.4.1", + "semver": "^7.5.3", + "ts-node": "^10.9.1", + "typescript": "^4.5.5", + "underscore": "^1.13.3", + "underscore.string": "^3.3.4", + "uuid": "8.3.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", + "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "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/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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/esse/node_modules/@mat3ra/utils/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", + "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "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/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@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/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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/esse/node_modules/@mat3ra/utils/node_modules/@babel/runtime-corejs3": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", + "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mat3ra/esse/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/esse/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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/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_modules/@mat3ra/esse/node_modules/complex.js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", + "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@mat3ra/esse/node_modules/fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@mat3ra/esse/node_modules/mathjs": { + "version": "12.4.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", + "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.24.0", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mat3ra/esse/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/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, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mat3ra/esse/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/@mat3ra/made": { "version": "2025.7.15-0", "resolved": "https://registry.npmjs.org/@mat3ra/made/-/made-2025.7.15-0.tgz", diff --git a/package.json b/package.json index 94f2298..47d04df 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-transpile.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", @@ -52,7 +53,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#a91ed6431f436b52689a1aff82096f3f9d618654", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c248a30803e421f6da33e8270602bd1571945fb6", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts new file mode 100644 index 0000000..0670b86 --- /dev/null +++ b/scripts/generate-mixins.ts @@ -0,0 +1,37 @@ +#!/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() { + // Type assertion to handle schema compatibility - the schemas from esse may have slightly different types + 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/ApplicationRegistry.ts b/src/js/ApplicationRegistry.ts index e1c8a74..5c04830 100644 --- a/src/js/ApplicationRegistry.ts +++ b/src/js/ApplicationRegistry.ts @@ -87,6 +87,7 @@ export default class ApplicationRegistry { const applicationConfig: ApplicationSchemaBase = { ...appData, + // @ts-ignore build: buildToUse, ...versionInfo, }; diff --git a/src/js/application.ts b/src/js/application.ts index 7a980d0..2f4ce54 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -5,7 +5,6 @@ import { type ApplicationMixin, type ApplicationStaticMixin, applicationMixin, - applicationStaticMixin, } from "./applicationMixin"; type Base = typeof NamedDefaultableInMemoryEntity & @@ -14,5 +13,4 @@ type Base = typeof NamedDefaultableInMemoryEntity & export default class Application extends (NamedDefaultableInMemoryEntity as Base) {} -applicationMixin(Application.prototype); -applicationStaticMixin(Application); +applicationMixin(Application); diff --git a/src/js/applicationMixin.ts b/src/js/applicationMixin.ts index f1c59bc..435304d 100644 --- a/src/js/applicationMixin.ts +++ b/src/js/applicationMixin.ts @@ -7,6 +7,10 @@ import type { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; import { ApplicationStandata } from "@mat3ra/standata"; import Executable from "./executable"; +import { + type ApplicationSchemaMixin, + applicationSchemaMixin, +} from "./generated/ApplicationSchemaMixin"; type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; @@ -14,12 +18,7 @@ export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; -export type ApplicationConstructor = Constructor & ApplicationStaticMixin; - -export type ApplicationMixin = Pick< - ApplicationSchemaBase, - "summary" | "version" | "build" | "shortName" | "hasAdvancedComputeOptions" | "isLicensed" -> & { +export type ApplicationMixin = ApplicationSchemaMixin & { name: Required["name"]; isUsingMaterial: boolean; }; @@ -34,33 +33,13 @@ export type ApplicationStaticMixin = { jsonSchema: ApplicationSchemaBase; }; -export function applicationMixin(item: Base) { +function applicationPropertiesMixin( + item: T, +): asserts item is T & ApplicationMixin { + applicationSchemaMixin(item); + // @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,7 +49,7 @@ 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(); @@ -84,3 +63,8 @@ export function applicationStaticMixin(Application: T Object.defineProperties(Application, Object.getOwnPropertyDescriptors(properties)); } + +export function applicationMixin(Item: BaseConstructor) { + applicationPropertiesMixin(Item.prototype); + applicationStaticMixin(Item); +} diff --git a/src/js/executable.ts b/src/js/executable.ts index fd0db93..c04b0b9 100644 --- a/src/js/executable.ts +++ b/src/js/executable.ts @@ -14,7 +14,7 @@ import { import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; -import { type ExecutableMixin, executableMixin, executableStaticMixin } from "./executableMixin"; +import { type ExecutableMixin, executableMixin } from "./executableMixin"; type Base = Constructor & Constructor & @@ -29,6 +29,7 @@ export default class Executable extends (InMemoryEntity as Base) { results: [], postProcessors: [], preProcessors: [], + applicationId: [], ...data, }); } @@ -36,7 +37,6 @@ export default class Executable extends (InMemoryEntity as Base) { // Apply mixins runtimeItemsStringMixin(Executable.prototype); -executableMixin(Executable.prototype); -executableStaticMixin(Executable); namedEntityMixin(Executable.prototype); defaultableEntityMixin(Executable); +executableMixin(Executable); diff --git a/src/js/executableMixin.ts b/src/js/executableMixin.ts index 3b5d6c5..e441c93 100644 --- a/src/js/executableMixin.ts +++ b/src/js/executableMixin.ts @@ -7,25 +7,12 @@ 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; -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); - }, - }; - - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} - -export function executableStaticMixin(Executable: Constructor) { +function executableStaticMixin(Executable: Constructor) { const properties: ExecutableStaticMixin = { get jsonSchema() { return JSONSchemasInterface.getSchemaById("software/executable") as ExecutableSchema; @@ -39,11 +26,15 @@ 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 function executableMixin(Item: BaseConstructor) { + executableSchemaMixin(Item.prototype); + executableStaticMixin(Item); +} diff --git a/src/js/flavor.ts b/src/js/flavor.ts index 0746731..c7b9183 100644 --- a/src/js/flavor.ts +++ b/src/js/flavor.ts @@ -14,7 +14,7 @@ import { import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; -import { type FlavorMixin, flavorMixin, flavorStaticMixin } from "./flavorMixin"; +import { type FlavorMixin, flavorMixin } from "./flavorMixin"; type Base = typeof InMemoryEntity & Constructor & @@ -29,14 +29,16 @@ export default class Flavor extends (InMemoryEntity as Base) { results: [], postProcessors: [], preProcessors: [], + input: [], + executableId: "", + executableName: "", + applicationName: "", ...data, }); } } -// Apply mixins -flavorMixin(Flavor.prototype); runtimeItemsStringMixin(Flavor.prototype); namedEntityMixin(Flavor.prototype); defaultableEntityMixin(Flavor); -flavorStaticMixin(Flavor); +flavorMixin(Flavor); diff --git a/src/js/flavorMixin.ts b/src/js/flavorMixin.ts index d668a6f..34489b5 100644 --- a/src/js/flavorMixin.ts +++ b/src/js/flavorMixin.ts @@ -1,60 +1,31 @@ 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 = { - input: Input; - disableRenderMaterials: boolean; - executableId: string; - executableName: string; - applicationName: string; - supportedApplicationVersions?: string[]; - getInputAsRenderedTemplates: (context: Record) => Record[]; +export type FlavorMixin = FlavorSchemaMixin & { + // getInputAsRenderedTemplates: (context: Record) => Record[]; }; // TODO: should we add fields from esse schema (executableId, executableName, applicationName)? -export function flavorMixin(item: Base) { +function flavorPropertiesMixin(item: InMemoryEntity & FlavorSchemaMixin) { // @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; - }); - }, + const properties: FlavorMixin & InMemoryEntity & FlavorSchemaMixin = { + // TODO: there is no "isMultiMaterial" field in the schema; should we add it? + // get disableRenderMaterials() { + // return this.prop("isMultiMaterial", false); + // }, + // TODO: do we actually use this method anywhere? + // getInputAsRenderedTemplates(context: Record) { + // return this.input?.map((template) => { + // if (template && typeof template === "object" && "getRenderedJSON" in template) { + // return template.getRenderedJSON(context); + // } + // return template; + // }); + // }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); @@ -62,7 +33,7 @@ export function flavorMixin(item: Base) { 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 +46,9 @@ export function flavorStaticMixin(Flavor: Constructor) { export type FlavorStaticMixin = { jsonSchema: FlavorSchema; }; + +export function flavorMixin(Item: Constructor) { + flavorSchemaMixin(Item.prototype); + flavorPropertiesMixin(Item.prototype); + flavorStaticMixin(Item); +} diff --git a/src/js/generated/ApplicationSchemaMixin.ts b/src/js/generated/ApplicationSchemaMixin.ts new file mode 100644 index 0000000..d136674 --- /dev/null +++ b/src/js/generated/ApplicationSchemaMixin.ts @@ -0,0 +1,56 @@ +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 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..80e554e --- /dev/null +++ b/src/js/generated/ExecutableSchemaMixin.ts @@ -0,0 +1,38 @@ +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 name() { + return this.requiredProp("name"); + }, + set name(value: ExecutablePropertiesSchema["name"]) { + this.setProp("name", value); + }, + get applicationId() { + return this.requiredProp("applicationId"); + }, + set applicationId(value: ExecutablePropertiesSchema["applicationId"]) { + this.setProp("applicationId", 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..024cb69 --- /dev/null +++ b/src/js/generated/FlavorSchemaMixin.ts @@ -0,0 +1,50 @@ +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 executableId() { + return this.requiredProp("executableId"); + }, + set executableId(value: FlavorPropertiesSchema["executableId"]) { + this.setProp("executableId", value); + }, + 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..7fa58fe --- /dev/null +++ b/src/js/generated/TemplateSchemaMixin.ts @@ -0,0 +1,68 @@ +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 isManuallyChanged() { + return this.prop("isManuallyChanged"); + }, + set isManuallyChanged(value: TemplatePropertiesSchema["isManuallyChanged"]) { + this.setProp("isManuallyChanged", value); + }, + get name() { + return this.requiredProp("name"); + }, + set name(value: TemplatePropertiesSchema["name"]) { + this.setProp("name", value); + }, + get content() { + return this.requiredProp("content"); + }, + set content(value: TemplatePropertiesSchema["content"]) { + this.setProp("content", value); + }, + get rendered() { + return this.prop("rendered"); + }, + set rendered(value: TemplatePropertiesSchema["rendered"]) { + this.setProp("rendered", value); + }, + }; + + Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); +} diff --git a/src/js/index.ts b/src/js/index.ts index 0f9f5b2..fe63c05 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -1,5 +1,5 @@ import Application from "./application"; -import { applicationMixin, applicationStaticMixin } from "./applicationMixin"; +import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; import ContextProvider from "./context/ContextProvider"; import JSONSchemaFormDataProvider from "./context/JSONSchemaFormDataProvider"; @@ -8,7 +8,7 @@ import { executableMixin } from "./executableMixin"; import Flavor from "./flavor"; import { flavorMixin } from "./flavorMixin"; import Template from "./template"; -import { templateMixin, templateStaticMixin } from "./templateMixin"; +import { templateMixin } from "./templateMixin"; const allApplications = ApplicationRegistry.getUniqueAvailableApplicationNames(); @@ -23,8 +23,6 @@ export { executableMixin, flavorMixin, applicationMixin, - applicationStaticMixin, templateMixin, - templateStaticMixin, allApplications, }; diff --git a/src/js/template.ts b/src/js/template.ts index ab2af9c..0907e82 100644 --- a/src/js/template.ts +++ b/src/js/template.ts @@ -1,17 +1,29 @@ -import { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; +import { + type NamedInMemoryEntity, + namedEntityMixin, +} from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import { - type TemplateMixin, - type TemplateStaticMixin, - templateMixin, - templateStaticMixin, -} from "./templateMixin"; +import { type TemplateMixin, type TemplateStaticMixin, templateMixin } from "./templateMixin"; -type Base = typeof NamedInMemoryEntity & Constructor & TemplateStaticMixin; +type Base = typeof InMemoryEntity & + Constructor & + Constructor & + TemplateStaticMixin; -export default class Template extends (NamedInMemoryEntity as Base) {} +export default class Template extends (InMemoryEntity as Base) { + constructor(data: Partial = {}) { + super({ + applicationName: "", + executableName: "", + content: "", + contextProviders: [], + ...data, + }); + } +} -// Apply mixins -templateMixin(Template.prototype); -templateStaticMixin(Template); +namedEntityMixin(Template.prototype); +templateMixin(Template); diff --git a/src/js/templateMixin.ts b/src/js/templateMixin.ts index 4d74880..9cb3a20 100644 --- a/src/js/templateMixin.ts +++ b/src/js/templateMixin.ts @@ -1,10 +1,9 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; -import { Utils } from "@mat3ra/utils"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import { Utils } from "@mat3ra/utils"; import nunjucks from "nunjucks"; import ContextProvider, { @@ -12,18 +11,13 @@ import ContextProvider, { type ContextProviderName, } from "./context/ContextProvider"; import ContextProviderRegistryContainer from "./context/ContextProviderRegistryContainer"; +import { type TemplateSchemaMixin, templateSchemaMixin } from "./generated/TemplateSchemaMixin"; -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; +export type TemplateBase = InMemoryEntity; + +export type TemplateMixin = TemplateSchemaMixin & { + // addContextProvider: (provider: ContextProvider) => void; + // removeContextProvider: (provider: ContextProvider) => void; render: (externalContext?: Record) => void; getRenderedJSON: (context?: Record) => AnyObject; _cleanRenderingContext: (object: Record) => Record; @@ -41,52 +35,46 @@ export type TemplateMixin = { getRenderingContext: (externalContext?: Record) => Record; }; -export function templateMixin(item: TemplateBase) { - // @ts-ignore - const properties: TemplateMixin & TemplateBase = { - get isManuallyChanged() { - return this.prop("isManuallyChanged", false); - }, +export type ContextProviderConfigMapEntry = { + providerCls: typeof ContextProvider; + config: ContextProviderConfig; +}; - get content() { - return this.prop("content", ""); - }, +export type ContextProviderConfigMap = Partial< + Record +>; - setContent(text: string) { - return this.setProp("content", text); - }, +export type TemplateStaticMixin = { + contextProviderRegistry: ContextProviderRegistryContainer | null; + setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; + jsonSchema: TemplateSchema; +}; - get rendered() { - return this.prop("rendered") || this.content; +function templatePropertiesMixin(item: InMemoryEntity) { + // @ts-expect-error + const properties: TemplateMixin & TemplateBase = { + setContent(text: string) { + this.content = text; + if (!this.rendered) { + this.rendered = text; + } }, setRendered(text: string) { - return this.setProp("rendered", text); - }, - - get applicationName() { - return this.prop("applicationName"); + this.rendered = text; }, - get executableName() { - return this.prop("executableName"); - }, + // addContextProvider(provider: ContextProvider) { + // this.setProp("contextProviders", [...this.contextProviders, provider]); + // }, - get contextProviders() { - return this.prop("contextProviders", []); - }, + // removeContextProvider(provider: ContextProvider) { + // const contextProviders = this.contextProviders.filter((p) => { + // return p.name !== provider.name && p.domain !== provider.domain; + // }); - 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); - }, + // this.setProp("contextProviders", contextProviders); + // }, render(externalContext?: Record) { const renderingContext = this.getRenderingContext(externalContext); @@ -194,28 +182,11 @@ export function templateMixin(item: TemplateBase) { }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); - - return properties; } -export type ContextProviderConfigMapEntry = { - providerCls: typeof ContextProvider; - config: ContextProviderConfig; -}; - -export type ContextProviderConfigMap = Partial< - Record ->; - -export type TemplateStaticMixin = { - contextProviderRegistry: ContextProviderRegistryContainer | null; - setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; - jsonSchema: TemplateSchema; -}; - -export function templateStaticMixin(item: Constructor) { +function templateStaticMixin(item: Constructor) { // @ts-ignore - const properties: TemplateStaticMixin & Constructor = { + const properties: TemplateStaticMixin & Constructor = { contextProviderRegistry: null, get jsonSchema() { @@ -237,6 +208,10 @@ export function templateStaticMixin(item: Constructor) { + templateSchemaMixin(Item.prototype); + templatePropertiesMixin(Item.prototype); + templateStaticMixin(Item); } diff --git a/src/js/types.ts b/src/js/types.ts index 267ca35..1205631 100644 --- a/src/js/types.ts +++ b/src/js/types.ts @@ -2,7 +2,7 @@ import { ApplicationMixin, ApplicationStaticMixin } from "./applicationMixin"; import { CreateApplicationConfig } from "./ApplicationRegistry"; import { ExecutableMixin } from "./executableMixin"; import { FlavorMixin } from "./flavorMixin"; -import { TemplateMixin, TemplateStaticMixin } from "./templateMixin"; +import { TemplateMixin } from "./templateMixin"; export type { FlavorMixin, @@ -11,5 +11,4 @@ export type { ApplicationStaticMixin, CreateApplicationConfig, TemplateMixin, - TemplateStaticMixin, }; diff --git a/tests/js/ApplicationRegistry.test.ts b/tests/js/ApplicationRegistry.test.ts index 0fd4a63..b2ae47d 100644 --- a/tests/js/ApplicationRegistry.test.ts +++ b/tests/js/ApplicationRegistry.test.ts @@ -349,7 +349,12 @@ describe("ApplicationRegistry", () => { }); it("should handle flavor with no input", () => { - const templates = ApplicationRegistry.getInputAsTemplates(new Flavor()); + const templates = ApplicationRegistry.getInputAsTemplates( + new Flavor({ + executableId: "espresso_pw", + input: [], + }), + ); expect(templates).to.be.an("array"); expect(templates.length).to.equal(0); @@ -358,6 +363,7 @@ describe("ApplicationRegistry", () => { it("should handle input with templateName", () => { const templates = ApplicationRegistry.getInputAsTemplates( new Flavor({ + executableId: "espresso_pw", applicationName: "espresso", executableName: "pw", input: [{ name: "input", templateName: "test_template" }], diff --git a/tests/js/JSONSchemaFormDataProvider.test.ts b/tests/js/JSONSchemaFormDataProvider.test.ts new file mode 100644 index 0000000..2092850 --- /dev/null +++ b/tests/js/JSONSchemaFormDataProvider.test.ts @@ -0,0 +1,68 @@ +import { expect } from "chai"; + +import { ContextProviderName } from "../../src/js/context/ContextProvider"; +import JSONSchemaFormDataProvider from "../../src/js/context/JSONSchemaFormDataProvider"; + +describe("JSONSchemaFormDataProvider", () => { + const baseConfig = { + name: ContextProviderName.KGridFormDataManager, + }; + + it("respects isUsingJinjaVariables flag", () => { + const providerTrue = new JSONSchemaFormDataProvider({ + ...baseConfig, + isUsingJinjaVariables: true, + }); + const providerFalse = new JSONSchemaFormDataProvider({ + ...baseConfig, + isUsingJinjaVariables: false, + }); + const providerUndefined = new JSONSchemaFormDataProvider(baseConfig); + + expect(providerTrue.isUsingJinjaVariables).to.equal(true); + expect(providerFalse.isUsingJinjaVariables).to.equal(false); + expect(providerUndefined.isUsingJinjaVariables).to.equal(false); + }); + + it("returns styled uiSchema from uiSchemaStyled", () => { + const provider = new JSONSchemaFormDataProvider(baseConfig); + + // Monkey-patch abstract getters to avoid "Not implemented." errors + Object.defineProperty(provider, "uiSchema", { + get() { + return { + field1: { + "ui:widget": "text", + classNames: "original-class", + }, + field2: { + "ui:widget": "number", + }, + }; + }, + }); + + Object.defineProperty(provider, "defaultFieldStyles", { + get() { + return { + "ui:options": { + label: true, + }, + }; + }, + }); + + const styled = provider.uiSchemaStyled; + + expect(styled).to.have.property("field1"); + expect(styled).to.have.property("field2"); + + expect(styled.field1["ui:widget"]).to.equal("text"); + expect(styled.field1["ui:options"]).to.deep.equal({ label: true }); + expect(styled.field1.classNames).to.equal("original-class"); + + expect(styled.field2["ui:widget"]).to.equal("number"); + expect(styled.field2["ui:options"]).to.deep.equal({ label: true }); + expect(styled.field2.classNames).to.equal(""); + }); +}); diff --git a/tests/js/application.test.ts b/tests/js/application.test.ts index ea6222f..e36d1af 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -19,59 +19,11 @@ describe("Application", () => { 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", () => { @@ -79,10 +31,6 @@ describe("Application", () => { 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", () => { diff --git a/tests/js/flavor.test.ts b/tests/js/flavor.test.ts index ee12ecd..01a22f3 100644 --- a/tests/js/flavor.test.ts +++ b/tests/js/flavor.test.ts @@ -38,15 +38,6 @@ describe("Flavor", () => { 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(""); }); @@ -84,16 +75,16 @@ describe("Flavor", () => { }); // 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]); - - 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" }); - }); + // it("should handle getInputAsRenderedTemplates with different template types", () => { + // const mockTemplate = { getRenderedJSON: () => ({ rendered: true }) }; + // const simpleTemplate = { name: "simple" }; + // flavor.setProp("input", [mockTemplate, simpleTemplate]); + + // 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" }); + // }); }); describe("flavorStaticMixin", () => { diff --git a/tests/js/template.test.ts b/tests/js/template.test.ts index 33bdb61..68b04e7 100644 --- a/tests/js/template.test.ts +++ b/tests/js/template.test.ts @@ -121,17 +121,6 @@ describe("Template", () => { }); 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(""); @@ -167,8 +156,8 @@ describe("Template", () => { }); describe("applicationName property", () => { - it("should return undefined by default", () => { - expect(template.applicationName).to.be.undefined; + it("should return empty string by default", () => { + expect(template.applicationName).to.equal(""); }); it("should return applicationName when set", () => { @@ -178,8 +167,8 @@ describe("Template", () => { }); describe("executableName property", () => { - it("should return undefined by default", () => { - expect(template.executableName).to.be.undefined; + it("should return empty string by default", () => { + expect(template.executableName).to.equal(""); }); it("should return executableName when set", () => { @@ -200,35 +189,35 @@ describe("Template", () => { }); }); - describe("addContextProvider method", () => { - it("should add a context provider", () => { - const provider = new MockContextProvider({ - name: "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: "QGridFormDataManager", - domain: "domain1", - }); - const provider2 = new MockContextProvider({ - name: "PlanewaveCutoffDataManager", - domain: "domain2", - }); - template.setProp("contextProviders", [provider1, provider2]); - - template.removeContextProvider(provider1); - expect(template.contextProviders).to.deep.equal([provider2]); - }); - }); + // describe("addContextProvider method", () => { + // it("should add a context provider", () => { + // const provider = new MockContextProvider({ + // name: "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: "QGridFormDataManager", + // domain: "domain1", + // }); + // const provider2 = new MockContextProvider({ + // name: "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", () => { @@ -316,15 +305,24 @@ describe("Template", () => { // Added with LLM to help with coverage it("should handle getDataFromProvidersForPersistentContext with edited providers", () => { - const editedProvider = new MockContextProvider({ name: "QGridFormDataManager", domain: "test" }); + const editedProvider = new MockContextProvider({ + name: "QGridFormDataManager", + domain: "test", + }); editedProvider.isEdited = true; editedProvider.yieldData = () => ({ data: { value: 1 } }); - const nonEditedProvider = new MockContextProvider({ name: "PlanewaveCutoffDataManager", domain: "test" }); + const nonEditedProvider = new MockContextProvider({ + name: "PlanewaveCutoffDataManager", + domain: "test", + }); nonEditedProvider.isEdited = false; nonEditedProvider.yieldData = () => ({ data: { value: 2 } }); - template.getContextProvidersAsClassInstances = () => [editedProvider, nonEditedProvider]; + template.getContextProvidersAsClassInstances = () => [ + editedProvider, + nonEditedProvider, + ]; const result = template.getDataFromProvidersForPersistentContext(); expect(result).to.deep.equal({ data: { value: 1 } }); }); From fa0212460146e35a7db50fb5b364e40cf869c692 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 27 Nov 2025 01:52:39 +0200 Subject: [PATCH 03/18] update: add mixin generation (dist) --- dist/js/generated/ApplicationMixin.d.ts | 5 --- dist/js/generated/ApplicationMixin.js | 45 ------------------- dist/js/generated/ExecutableMixin.d.ts | 5 --- dist/js/generated/ExecutableMixin.js | 27 ------------ dist/js/generated/FlavorMixin.d.ts | 5 --- dist/js/generated/FlavorMixin.js | 39 ----------------- dist/js/generated/TemplateMixin.d.ts | 5 --- dist/js/generated/TemplateMixin.js | 57 ------------------------- 8 files changed, 188 deletions(-) delete mode 100644 dist/js/generated/ApplicationMixin.d.ts delete mode 100644 dist/js/generated/ApplicationMixin.js delete mode 100644 dist/js/generated/ExecutableMixin.d.ts delete mode 100644 dist/js/generated/ExecutableMixin.js delete mode 100644 dist/js/generated/FlavorMixin.d.ts delete mode 100644 dist/js/generated/FlavorMixin.js delete mode 100644 dist/js/generated/TemplateMixin.d.ts delete mode 100644 dist/js/generated/TemplateMixin.js diff --git a/dist/js/generated/ApplicationMixin.d.ts b/dist/js/generated/ApplicationMixin.d.ts deleted file mode 100644 index 27024b9..0000000 --- a/dist/js/generated/ApplicationMixin.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { ApplicationMixinSchema } from "@mat3ra/esse/dist/js/types"; -export type ApplicationMixin = ApplicationMixinSchema; -export type ApplicationMixin = InMemoryEntity & ApplicationMixin; -export declare function applicationMixin(item: InMemoryEntity): asserts item is T & ApplicationMixin; diff --git a/dist/js/generated/ApplicationMixin.js b/dist/js/generated/ApplicationMixin.js deleted file mode 100644 index 2510ffb..0000000 --- a/dist/js/generated/ApplicationMixin.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.applicationMixin = applicationMixin; -function applicationMixin(item) { - // @ts-expect-error - const properties = { - get shortName() { - return this.prop("shortName"); - }, - set shortName(value) { - this.setProp("shortName", value); - }, - get summary() { - return this.prop("summary"); - }, - set summary(value) { - this.setProp("summary", value); - }, - get version() { - return this.prop("version"); - }, - set version(value) { - this.setProp("version", value); - }, - get build() { - return this.prop("build"); - }, - set build(value) { - this.setProp("build", 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/ExecutableMixin.d.ts b/dist/js/generated/ExecutableMixin.d.ts deleted file mode 100644 index d720eb1..0000000 --- a/dist/js/generated/ExecutableMixin.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { ExecutableMixinSchema } from "@mat3ra/esse/dist/js/types"; -export type ExecutableMixin = ExecutableMixinSchema; -export type ExecutableMixin = InMemoryEntity & ExecutableMixin; -export declare function executableMixin(item: InMemoryEntity): asserts item is T & ExecutableMixin; diff --git a/dist/js/generated/ExecutableMixin.js b/dist/js/generated/ExecutableMixin.js deleted file mode 100644 index ce15d0e..0000000 --- a/dist/js/generated/ExecutableMixin.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.executableMixin = executableMixin; -function executableMixin(item) { - // @ts-expect-error - const properties = { - get name() { - return this.requiredProp("name"); - }, - set name(value) { - this.setProp("name", value); - }, - get applicationId() { - return this.prop("applicationId"); - }, - set applicationId(value) { - this.setProp("applicationId", 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/FlavorMixin.d.ts b/dist/js/generated/FlavorMixin.d.ts deleted file mode 100644 index 3ff6703..0000000 --- a/dist/js/generated/FlavorMixin.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { FlavorMixinSchema } from "@mat3ra/esse/dist/js/types"; -export type FlavorMixin = FlavorMixinSchema; -export type FlavorMixin = InMemoryEntity & FlavorMixin; -export declare function flavorMixin(item: InMemoryEntity): asserts item is T & FlavorMixin; diff --git a/dist/js/generated/FlavorMixin.js b/dist/js/generated/FlavorMixin.js deleted file mode 100644 index 1bead61..0000000 --- a/dist/js/generated/FlavorMixin.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.flavorMixin = flavorMixin; -function flavorMixin(item) { - // @ts-expect-error - const properties = { - get executableId() { - return this.prop("executableId"); - }, - set executableId(value) { - this.setProp("executableId", value); - }, - 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.prop("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/TemplateMixin.d.ts b/dist/js/generated/TemplateMixin.d.ts deleted file mode 100644 index 7a53e08..0000000 --- a/dist/js/generated/TemplateMixin.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { TemplateMixinSchema } from "@mat3ra/esse/dist/js/types"; -export type TemplateMixin = TemplateMixinSchema; -export type TemplateMixin = InMemoryEntity & TemplateMixin; -export declare function templateMixin(item: InMemoryEntity): asserts item is T & TemplateMixin; diff --git a/dist/js/generated/TemplateMixin.js b/dist/js/generated/TemplateMixin.js deleted file mode 100644 index 7cb1302..0000000 --- a/dist/js/generated/TemplateMixin.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.templateMixin = templateMixin; -function templateMixin(item) { - // @ts-expect-error - const properties = { - get applicationName() { - return this.prop("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.prop("executableName"); - }, - set executableName(value) { - this.setProp("executableName", value); - }, - get contextProviders() { - return this.prop("contextProviders"); - }, - set contextProviders(value) { - this.setProp("contextProviders", value); - }, - get isManuallyChanged() { - return this.prop("isManuallyChanged"); - }, - set isManuallyChanged(value) { - this.setProp("isManuallyChanged", value); - }, - get name() { - return this.requiredProp("name"); - }, - set name(value) { - this.setProp("name", value); - }, - get content() { - return this.requiredProp("content"); - }, - set content(value) { - this.setProp("content", value); - }, - get rendered() { - return this.prop("rendered"); - }, - set rendered(value) { - this.setProp("rendered", value); - }, - }; - Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); -} From e85c8b7c72b2dd205cf1bee359f9b9e9a1944ef0 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 27 Nov 2025 16:17:31 +0200 Subject: [PATCH 04/18] chore: rentime_items --- dist/js/ApplicationRegistry.js | 1 + dist/js/applicationMixin.d.ts | 4 ++-- dist/js/applicationMixin.js | 2 +- dist/js/executable.d.ts | 6 +++--- dist/js/executable.js | 5 ++--- dist/js/executableMixin.d.ts | 6 +++--- dist/js/flavor.d.ts | 6 +++--- dist/js/flavor.js | 4 ++-- dist/js/template.d.ts | 4 ++-- package-lock.json | 12 ++++++------ package.json | 4 ++-- scripts/generate-mixins.ts | 8 ++++---- src/js/ApplicationRegistry.ts | 2 ++ src/js/applicationMixin.ts | 7 +++---- src/js/executable.ts | 15 +++++++-------- src/js/executableMixin.ts | 26 +++++++++++++------------- src/js/flavor.ts | 14 +++++++------- src/js/template.ts | 4 ++-- tests/js/executable.test.ts | 2 ++ 19 files changed, 67 insertions(+), 65 deletions(-) diff --git a/dist/js/ApplicationRegistry.js b/dist/js/ApplicationRegistry.js index 989d3d4..ce33342 100644 --- a/dist/js/ApplicationRegistry.js +++ b/dist/js/ApplicationRegistry.js @@ -119,6 +119,7 @@ class ApplicationRegistry { } static getExecutableByName(appName, execName) { const appTree = new standata_1.ApplicationStandata().getAppTreeForApplication(appName); + console.log("================", appTree); Object.entries(appTree).forEach(([name, exec]) => { exec.name = name; }); diff --git a/dist/js/applicationMixin.d.ts b/dist/js/applicationMixin.d.ts index 3334cc6..b4ecbc0 100644 --- a/dist/js/applicationMixin.d.ts +++ b/dist/js/applicationMixin.d.ts @@ -1,11 +1,11 @@ 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 { 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"; import { type ApplicationSchemaMixin } from "./generated/ApplicationSchemaMixin"; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; diff --git a/dist/js/applicationMixin.js b/dist/js/applicationMixin.js index 4ddadc7..11ed596 100644 --- a/dist/js/applicationMixin.js +++ b/dist/js/applicationMixin.js @@ -8,7 +8,6 @@ const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/ess const standata_1 = require("@mat3ra/standata"); const ApplicationSchemaMixin_1 = require("./generated/ApplicationSchemaMixin"); function applicationPropertiesMixin(item) { - (0, ApplicationSchemaMixin_1.applicationSchemaMixin)(item); // @ts-expect-error const properties = { get isUsingMaterial() { @@ -30,6 +29,7 @@ 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/executable.d.ts b/dist/js/executable.d.ts index f8194aa..7aac21f 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -1,11 +1,11 @@ import { 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 RuntimeItemsStringInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; +import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type RuntimeItems } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin } from "./executableMixin"; -type Base = Constructor & Constructor & Constructor & Constructor & typeof InMemoryEntity; +type Base = Constructor & Constructor & Constructor & Constructor & typeof InMemoryEntity; declare const Executable_base: Base; export default class Executable extends Executable_base { constructor(data?: Partial); diff --git a/dist/js/executable.js b/dist/js/executable.js index e31e9fa..161a8d6 100644 --- a/dist/js/executable.js +++ b/dist/js/executable.js @@ -3,7 +3,7 @@ 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 RuntimeItemsStringMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"); +const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); const executableMixin_1 = require("./executableMixin"); class Executable extends entity_1.InMemoryEntity { constructor(data = {}) { @@ -18,8 +18,7 @@ class Executable extends entity_1.InMemoryEntity { } } exports.default = Executable; -// Apply mixins -(0, RuntimeItemsStringMixin_1.runtimeItemsStringMixin)(Executable.prototype); (0, NamedEntityMixin_1.namedEntityMixin)(Executable.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Executable); +(0, RuntimeItemsMixin_1.runtimeItemsMixin)(Executable.prototype); (0, executableMixin_1.executableMixin)(Executable); diff --git a/dist/js/executableMixin.d.ts b/dist/js/executableMixin.d.ts index fed8963..efbd15f 100644 --- a/dist/js/executableMixin.d.ts +++ b/dist/js/executableMixin.d.ts @@ -1,13 +1,13 @@ 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 { 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"; import { ExecutableSchemaMixin } from "./generated/ExecutableSchemaMixin"; -type BaseFlavor = FlavorMixin & NamedInMemoryEntity & InMemoryEntity; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; +type BaseFlavor = FlavorMixin & NamedEntity & InMemoryEntity; +type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; export type BaseConstructor = Constructor & { constructCustomFlavor?: (config: object) => BaseFlavor; }; diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index b229353..cebc2be 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -1,11 +1,11 @@ import { 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 RuntimeItemsStringInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; +import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type RuntimeItems } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type FlavorMixin } from "./flavorMixin"; -type Base = typeof InMemoryEntity & Constructor & Constructor & Constructor & Constructor; +type Base = typeof InMemoryEntity & Constructor & Constructor & Constructor & Constructor; declare const Flavor_base: Base; export default class Flavor extends Flavor_base { constructor(data?: Partial); diff --git a/dist/js/flavor.js b/dist/js/flavor.js index 537bed5..9cd0c1e 100644 --- a/dist/js/flavor.js +++ b/dist/js/flavor.js @@ -3,7 +3,7 @@ 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 RuntimeItemsStringMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"); +const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); const flavorMixin_1 = require("./flavorMixin"); class Flavor extends entity_1.InMemoryEntity { constructor(data = {}) { @@ -21,7 +21,7 @@ class Flavor extends entity_1.InMemoryEntity { } } exports.default = Flavor; -(0, RuntimeItemsStringMixin_1.runtimeItemsStringMixin)(Flavor.prototype); +(0, RuntimeItemsMixin_1.runtimeItemsMixin)(Flavor.prototype); (0, NamedEntityMixin_1.namedEntityMixin)(Flavor.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Flavor); (0, flavorMixin_1.flavorMixin)(Flavor); diff --git a/dist/js/template.d.ts b/dist/js/template.d.ts index 799dff5..d24b0e9 100644 --- a/dist/js/template.d.ts +++ b/dist/js/template.d.ts @@ -1,9 +1,9 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { type NamedInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { type TemplateMixin, type TemplateStaticMixin } from "./templateMixin"; -type Base = typeof InMemoryEntity & Constructor & Constructor & TemplateStaticMixin; +type Base = typeof InMemoryEntity & Constructor & Constructor & TemplateStaticMixin; declare const Template_base: Base; export default class Template extends Template_base { constructor(data?: Partial); diff --git a/package-lock.json b/package-lock.json index ff4653d..36f58ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,8 +17,8 @@ "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c248a30803e421f6da33e8270602bd1571945fb6", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#19c904dcdae87b83f88b38c756abd746e2bd7927", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -3195,8 +3195,8 @@ }, "node_modules/@mat3ra/code": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", - "integrity": "sha512-24YL0+n8EpWUYURbGp7Pw9MKH456teZStoW4QsUME07CqgrOKUcxV9Z9XVtpLRFSq+A5e7TszSiIJ7FAdlLZTQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#19c904dcdae87b83f88b38c756abd746e2bd7927", + "integrity": "sha512-uhE+7eKKL/r7K+TDgO9THVsYZ0a3Vxfvmga2MZOI3yZJYDrOqAO62T6EGfmoEX0IixXEPe87aO/9jP07SVm4DA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3235,8 +3235,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#c248a30803e421f6da33e8270602bd1571945fb6", - "integrity": "sha512-9o07vskHfdIsaHkTPvN0gEEaUrVdZBgjXQToy1TXW+I4KH0y5Sa4GWp21IuO9Ww322vI8QdXLx7SfnhzcZzWeQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", + "integrity": "sha512-9n1FTk0n5xg0xf2gIPRjcv37OaoUeg4jzAxeBWB2neVsXn4xDJxfdGDcWVLo/2HnLAA0tC93ufx/T26pUSH8Aw==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 47d04df..da2b164 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#2f5206cb8db85af8c9af3d450a8dc551bb6b9b61", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c248a30803e421f6da33e8270602bd1571945fb6", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#19c904dcdae87b83f88b38c756abd746e2bd7927", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts index 0670b86..38370ee 100644 --- a/scripts/generate-mixins.ts +++ b/scripts/generate-mixins.ts @@ -18,10 +18,10 @@ 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", + "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() { diff --git a/src/js/ApplicationRegistry.ts b/src/js/ApplicationRegistry.ts index 5c04830..bc33ef8 100644 --- a/src/js/ApplicationRegistry.ts +++ b/src/js/ApplicationRegistry.ts @@ -176,6 +176,8 @@ export default class ApplicationRegistry { static getExecutableByName(appName: string, execName?: string) { const appTree = new ApplicationStandata().getAppTreeForApplication(appName); + console.log("================", appTree); + Object.entries(appTree).forEach(([name, exec]) => { exec.name = name; }); diff --git a/src/js/applicationMixin.ts b/src/js/applicationMixin.ts index 435304d..cdb060c 100644 --- a/src/js/applicationMixin.ts +++ b/src/js/applicationMixin.ts @@ -1,6 +1,6 @@ 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 { 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"; @@ -12,7 +12,7 @@ import { applicationSchemaMixin, } from "./generated/ApplicationSchemaMixin"; -type Base = InMemoryEntity & NamedInMemoryEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; @@ -36,8 +36,6 @@ export type ApplicationStaticMixin = { function applicationPropertiesMixin( item: T, ): asserts item is T & ApplicationMixin { - applicationSchemaMixin(item); - // @ts-expect-error const properties: ApplicationMixin & Base = { get isUsingMaterial() { @@ -65,6 +63,7 @@ function applicationStaticMixin(Application: T) { } export function applicationMixin(Item: BaseConstructor) { + applicationSchemaMixin(Item.prototype); applicationPropertiesMixin(Item.prototype); applicationStaticMixin(Item); } diff --git a/src/js/executable.ts b/src/js/executable.ts index c04b0b9..0c312f1 100644 --- a/src/js/executable.ts +++ b/src/js/executable.ts @@ -4,21 +4,21 @@ import { defaultableEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; import { - type NamedInMemoryEntity, + type NamedEntity, namedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import { - type RuntimeItemsStringInMemoryEntity, - runtimeItemsStringMixin, -} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; + type RuntimeItems, + runtimeItemsMixin, +} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin, executableMixin } from "./executableMixin"; type Base = Constructor & - Constructor & - Constructor & + Constructor & + Constructor & Constructor & typeof InMemoryEntity; @@ -35,8 +35,7 @@ export default class Executable extends (InMemoryEntity as Base) { } } -// Apply mixins -runtimeItemsStringMixin(Executable.prototype); namedEntityMixin(Executable.prototype); defaultableEntityMixin(Executable); +runtimeItemsMixin(Executable.prototype); executableMixin(Executable); diff --git a/src/js/executableMixin.ts b/src/js/executableMixin.ts index e441c93..69bce1d 100644 --- a/src/js/executableMixin.ts +++ b/src/js/executableMixin.ts @@ -1,6 +1,6 @@ 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 { 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"; @@ -9,18 +9,8 @@ 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; - -function executableStaticMixin(Executable: Constructor) { - const properties: ExecutableStaticMixin = { - get jsonSchema() { - return JSONSchemasInterface.getSchemaById("software/executable") as ExecutableSchema; - }, - }; - - Object.defineProperties(Executable, Object.getOwnPropertyDescriptors(properties)); -} +type BaseFlavor = FlavorMixin & NamedEntity & InMemoryEntity; +type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; export type BaseConstructor = Constructor & { constructCustomFlavor?: (config: object) => BaseFlavor; @@ -34,6 +24,16 @@ export type ExecutableStaticMixin = { jsonSchema: ExecutableSchema; }; +function executableStaticMixin(Executable: Constructor) { + const properties: ExecutableStaticMixin = { + get jsonSchema() { + return JSONSchemasInterface.getSchemaById("software/executable") as ExecutableSchema; + }, + }; + + Object.defineProperties(Executable, Object.getOwnPropertyDescriptors(properties)); +} + export function executableMixin(Item: BaseConstructor) { executableSchemaMixin(Item.prototype); executableStaticMixin(Item); diff --git a/src/js/flavor.ts b/src/js/flavor.ts index c7b9183..49946ad 100644 --- a/src/js/flavor.ts +++ b/src/js/flavor.ts @@ -4,13 +4,13 @@ import { defaultableEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; import { - type NamedInMemoryEntity, + type NamedEntity, namedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import { - type RuntimeItemsStringInMemoryEntity, - runtimeItemsStringMixin, -} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsStringMixin"; + type RuntimeItems, + runtimeItemsMixin, +} from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; @@ -18,8 +18,8 @@ import { type FlavorMixin, flavorMixin } from "./flavorMixin"; type Base = typeof InMemoryEntity & Constructor & - Constructor & - Constructor & + Constructor & + Constructor & Constructor; export default class Flavor extends (InMemoryEntity as Base) { @@ -38,7 +38,7 @@ export default class Flavor extends (InMemoryEntity as Base) { } } -runtimeItemsStringMixin(Flavor.prototype); +runtimeItemsMixin(Flavor.prototype); namedEntityMixin(Flavor.prototype); defaultableEntityMixin(Flavor); flavorMixin(Flavor); diff --git a/src/js/template.ts b/src/js/template.ts index 0907e82..7361e9e 100644 --- a/src/js/template.ts +++ b/src/js/template.ts @@ -1,6 +1,6 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { - type NamedInMemoryEntity, + type NamedEntity, namedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; @@ -10,7 +10,7 @@ import { type TemplateMixin, type TemplateStaticMixin, templateMixin } from "./t type Base = typeof InMemoryEntity & Constructor & - Constructor & + Constructor & TemplateStaticMixin; export default class Template extends (InMemoryEntity as Base) { diff --git a/tests/js/executable.test.ts b/tests/js/executable.test.ts index b029f21..dae16d5 100644 --- a/tests/js/executable.test.ts +++ b/tests/js/executable.test.ts @@ -21,6 +21,8 @@ describe("Executable", () => { expect(executable).to.be.instanceOf(Executable); expect(executable.name).to.equal("pw.x"); + console.log("================", executable._json); + // Get JSON representation const json = executable.toJSON(); From 58c7899e6d85fe5083fc655106fbd035aef1cfce Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 28 Nov 2025 14:23:22 +0200 Subject: [PATCH 05/18] chore: update code --- dist/js/application.d.ts | 11 ++++++++--- dist/js/application.js | 11 ++++++++++- dist/js/applicationMixin.d.ts | 4 ++-- dist/js/executable.d.ts | 10 +++++----- dist/js/executableMixin.d.ts | 4 ++-- dist/js/flavor.d.ts | 10 +++++----- dist/js/flavor.js | 2 +- dist/js/template.d.ts | 6 +++--- package-lock.json | 6 +++--- package.json | 2 +- src/js/application.ts | 27 ++++++++++++++++++++++++--- src/js/applicationMixin.ts | 4 ++-- src/js/executable.ts | 14 +++++++------- src/js/executableMixin.ts | 4 ++-- src/js/flavor.ts | 16 ++++++++-------- src/js/template.ts | 6 +++--- tests/js/application.test.ts | 3 +-- 17 files changed, 87 insertions(+), 53 deletions(-) diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index fd78625..3ef2f5a 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -1,8 +1,13 @@ -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 { ApplicationSchemaBase } 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 ApplicationSchemaBase { + constructor(data?: Partial); + [k: string]: unknown; } export {}; diff --git a/dist/js/application.js b/dist/js/application.js index cf464cd..8f344d9 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -1,8 +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, 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 b4ecbc0..9fa840d 100644 --- a/dist/js/applicationMixin.d.ts +++ b/dist/js/applicationMixin.d.ts @@ -1,11 +1,11 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +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"; import { type ApplicationSchemaMixin } from "./generated/ApplicationSchemaMixin"; -type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; diff --git a/dist/js/executable.d.ts b/dist/js/executable.d.ts index 7aac21f..60fc3c2 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -1,13 +1,13 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { type DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; -import { type RuntimeItems } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; +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 { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin } from "./executableMixin"; -type Base = Constructor & Constructor & Constructor & Constructor & typeof InMemoryEntity; +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?: Partial); } export {}; diff --git a/dist/js/executableMixin.d.ts b/dist/js/executableMixin.d.ts index efbd15f..aa8f597 100644 --- a/dist/js/executableMixin.d.ts +++ b/dist/js/executableMixin.d.ts @@ -1,5 +1,5 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +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"; @@ -7,7 +7,7 @@ import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import type { FlavorMixin } from "./flavorMixin"; import { ExecutableSchemaMixin } from "./generated/ExecutableSchemaMixin"; type BaseFlavor = FlavorMixin & NamedEntity & InMemoryEntity; -type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomFlavor?: (config: object) => BaseFlavor; }; diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index cebc2be..697db87 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -1,13 +1,13 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { type DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; -import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; -import { type RuntimeItems } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; +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 { FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type FlavorMixin } from "./flavorMixin"; -type Base = typeof InMemoryEntity & Constructor & Constructor & 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); } export {}; diff --git a/dist/js/flavor.js b/dist/js/flavor.js index 9cd0c1e..ed31a4f 100644 --- a/dist/js/flavor.js +++ b/dist/js/flavor.js @@ -21,7 +21,7 @@ class Flavor extends entity_1.InMemoryEntity { } } exports.default = Flavor; -(0, RuntimeItemsMixin_1.runtimeItemsMixin)(Flavor.prototype); (0, NamedEntityMixin_1.namedEntityMixin)(Flavor.prototype); (0, DefaultableMixin_1.defaultableEntityMixin)(Flavor); +(0, RuntimeItemsMixin_1.runtimeItemsMixin)(Flavor.prototype); (0, flavorMixin_1.flavorMixin)(Flavor); diff --git a/dist/js/template.d.ts b/dist/js/template.d.ts index d24b0e9..0c7be83 100644 --- a/dist/js/template.d.ts +++ b/dist/js/template.d.ts @@ -1,11 +1,11 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import { type NamedEntity } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; +import { type NamedInMemoryEntityConstructor } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { type TemplateMixin, type TemplateStaticMixin } from "./templateMixin"; -type Base = typeof InMemoryEntity & Constructor & 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); } export {}; diff --git a/package-lock.json b/package-lock.json index 36f58ab..e8b8033 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#19c904dcdae87b83f88b38c756abd746e2bd7927", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", @@ -3195,8 +3195,8 @@ }, "node_modules/@mat3ra/code": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#19c904dcdae87b83f88b38c756abd746e2bd7927", - "integrity": "sha512-uhE+7eKKL/r7K+TDgO9THVsYZ0a3Vxfvmga2MZOI3yZJYDrOqAO62T6EGfmoEX0IixXEPe87aO/9jP07SVm4DA==", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", + "integrity": "sha512-z/9Bipd5XEKBj3/KqxuB4XHshxEkVrmLp41NOwVf96ny9two9lpUapkpzFWdM5uypYm76au04//p59Oo7GWRPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 1b318c2..8c6956b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#19c904dcdae87b83f88b38c756abd746e2bd7927", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", diff --git a/src/js/application.ts b/src/js/application.ts index 2f4ce54..e76c223 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -1,5 +1,14 @@ -import { NamedDefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity"; +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 { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; import { type ApplicationMixin, @@ -7,10 +16,22 @@ import { applicationMixin, } from "./applicationMixin"; -type Base = typeof NamedDefaultableInMemoryEntity & +type Base = typeof InMemoryEntity & + NamedInMemoryEntityConstructor & + DefaultableInMemoryEntityConstructor & Constructor & ApplicationStaticMixin; -export default class Application extends (NamedDefaultableInMemoryEntity as Base) {} +export default class Application extends (InMemoryEntity as Base) implements ApplicationSchemaBase { + constructor(data: Partial = {}) { + super({ + ...data, + }); + } + + [k: string]: unknown; +} +namedEntityMixin(Application.prototype); +defaultableEntityMixin(Application); applicationMixin(Application); diff --git a/src/js/applicationMixin.ts b/src/js/applicationMixin.ts index cdb060c..982629a 100644 --- a/src/js/applicationMixin.ts +++ b/src/js/applicationMixin.ts @@ -1,5 +1,5 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +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"; @@ -12,7 +12,7 @@ import { applicationSchemaMixin, } from "./generated/ApplicationSchemaMixin"; -type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; diff --git a/src/js/executable.ts b/src/js/executable.ts index 0c312f1..1c99757 100644 --- a/src/js/executable.ts +++ b/src/js/executable.ts @@ -1,14 +1,14 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { - type DefaultableInMemoryEntity, + type DefaultableInMemoryEntityConstructor, defaultableEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; import { - type NamedEntity, + type NamedInMemoryEntityConstructor, namedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import { - type RuntimeItems, + type RuntimeItemsInMemoryEntityConstructor, runtimeItemsMixin, } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; @@ -17,12 +17,12 @@ import type { ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { type ExecutableMixin, executableMixin } from "./executableMixin"; type Base = Constructor & - Constructor & - Constructor & - Constructor & + RuntimeItemsInMemoryEntityConstructor & + NamedInMemoryEntityConstructor & + DefaultableInMemoryEntityConstructor & typeof InMemoryEntity; -export default class Executable extends (InMemoryEntity as Base) { +export default class Executable extends (InMemoryEntity as Base) implements ExecutableSchema { constructor(data: Partial = {}) { super({ monitors: [], diff --git a/src/js/executableMixin.ts b/src/js/executableMixin.ts index 69bce1d..dbb080e 100644 --- a/src/js/executableMixin.ts +++ b/src/js/executableMixin.ts @@ -1,5 +1,5 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; -import type { DefaultableInMemoryEntity } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; +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"; @@ -10,7 +10,7 @@ import type { FlavorMixin } from "./flavorMixin"; import { ExecutableSchemaMixin, executableSchemaMixin } from "./generated/ExecutableSchemaMixin"; type BaseFlavor = FlavorMixin & NamedEntity & InMemoryEntity; -type Base = InMemoryEntity & NamedEntity & DefaultableInMemoryEntity; +type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { constructCustomFlavor?: (config: object) => BaseFlavor; diff --git a/src/js/flavor.ts b/src/js/flavor.ts index 49946ad..8f48ef4 100644 --- a/src/js/flavor.ts +++ b/src/js/flavor.ts @@ -1,14 +1,14 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { - type DefaultableInMemoryEntity, + type DefaultableInMemoryEntityConstructor, defaultableEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/DefaultableMixin"; import { - type NamedEntity, namedEntityMixin, + NamedInMemoryEntityConstructor, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import { - type RuntimeItems, + type RuntimeItemsInMemoryEntityConstructor, runtimeItemsMixin, } from "@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; @@ -18,11 +18,11 @@ import { type FlavorMixin, flavorMixin } from "./flavorMixin"; type Base = typeof InMemoryEntity & Constructor & - Constructor & - Constructor & - Constructor; + RuntimeItemsInMemoryEntityConstructor & + NamedInMemoryEntityConstructor & + DefaultableInMemoryEntityConstructor; -export default class Flavor extends (InMemoryEntity as Base) { +export default class Flavor extends (InMemoryEntity as Base) implements FlavorSchema { constructor(data: Partial = {}) { super({ monitors: [], @@ -38,7 +38,7 @@ export default class Flavor extends (InMemoryEntity as Base) { } } -runtimeItemsMixin(Flavor.prototype); namedEntityMixin(Flavor.prototype); defaultableEntityMixin(Flavor); +runtimeItemsMixin(Flavor.prototype); flavorMixin(Flavor); diff --git a/src/js/template.ts b/src/js/template.ts index 7361e9e..6ccefa7 100644 --- a/src/js/template.ts +++ b/src/js/template.ts @@ -1,6 +1,6 @@ import { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import { - type NamedEntity, + type NamedInMemoryEntityConstructor, namedEntityMixin, } from "@mat3ra/code/dist/js/entity/mixins/NamedEntityMixin"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; @@ -10,10 +10,10 @@ import { type TemplateMixin, type TemplateStaticMixin, templateMixin } from "./t type Base = typeof InMemoryEntity & Constructor & - Constructor & + NamedInMemoryEntityConstructor & TemplateStaticMixin; -export default class Template extends (InMemoryEntity as Base) { +export default class Template extends (InMemoryEntity as Base) implements TemplateSchema { constructor(data: Partial = {}) { super({ applicationName: "", diff --git a/tests/js/application.test.ts b/tests/js/application.test.ts index 30a34a0..f27c35b 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -2,10 +2,9 @@ import { expect } from "chai"; import Application from "../../src/js/application"; -import type { CreateApplicationConfig } from "../../src/js/ApplicationRegistry"; describe("Application", () => { - const obj: CreateApplicationConfig = { name: "espresso" }; + const obj = { name: "espresso" }; it("can be created", () => { const app = new Application(obj); From 775d0babcf8ed8d3d45037875c6384b9f71169f1 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 28 Nov 2025 15:33:22 +0200 Subject: [PATCH 06/18] chore: new esse --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8b8033..68ac3ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1b47917bb8feadf49c46d8aa4b33a4255a06788a", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -3235,8 +3235,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", - "integrity": "sha512-9n1FTk0n5xg0xf2gIPRjcv37OaoUeg4jzAxeBWB2neVsXn4xDJxfdGDcWVLo/2HnLAA0tC93ufx/T26pUSH8Aw==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#1b47917bb8feadf49c46d8aa4b33a4255a06788a", + "integrity": "sha512-TEiTzxWwdpSKjKCZdT72917riOPDVAgENFQ9WXhVVbYrOwDmv5Ia0irvP3XlHrfgvmtJW02P/Voib/+zekVwBg==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 8c6956b..b53d4fd 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9cd6ac3b66837a45011974e2c637ca8e8a2d6c41", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1b47917bb8feadf49c46d8aa4b33a4255a06788a", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", From e40a16a49bea0629266eca8cb5eb31b3fda013bd Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 28 Nov 2025 15:55:26 +0200 Subject: [PATCH 07/18] chore: improve ts types of JSONSchemaDataProvider --- dist/js/context/JSONSchemaDataProvider.d.ts | 6 ++++-- dist/js/context/JSONSchemaDataProvider.js | 1 - src/js/context/JSONSchemaDataProvider.ts | 8 ++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dist/js/context/JSONSchemaDataProvider.d.ts b/dist/js/context/JSONSchemaDataProvider.d.ts index 30f033f..58e9e8f 100644 --- a/dist/js/context/JSONSchemaDataProvider.d.ts +++ b/dist/js/context/JSONSchemaDataProvider.d.ts @@ -1,7 +1,9 @@ +import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; import JinjaContextProvider from "./JinjaContextProvider"; /** * @summary Provides jsonSchema only. */ -export default class JSONSchemaDataProvider extends JinjaContextProvider { - get jsonSchema(): void; +declare abstract class JSONSchemaDataProvider extends JinjaContextProvider { + get jsonSchema(): JSONSchema; } +export default JSONSchemaDataProvider; diff --git a/dist/js/context/JSONSchemaDataProvider.js b/dist/js/context/JSONSchemaDataProvider.js index 6f2c8bf..a9c9bcb 100644 --- a/dist/js/context/JSONSchemaDataProvider.js +++ b/dist/js/context/JSONSchemaDataProvider.js @@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -/* eslint-disable class-methods-use-this */ const JinjaContextProvider_1 = __importDefault(require("./JinjaContextProvider")); /** * @summary Provides jsonSchema only. diff --git a/src/js/context/JSONSchemaDataProvider.ts b/src/js/context/JSONSchemaDataProvider.ts index 2159395..4ac61c2 100644 --- a/src/js/context/JSONSchemaDataProvider.ts +++ b/src/js/context/JSONSchemaDataProvider.ts @@ -1,11 +1,15 @@ /* eslint-disable class-methods-use-this */ +import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; + import JinjaContextProvider from "./JinjaContextProvider"; /** * @summary Provides jsonSchema only. */ -export default class JSONSchemaDataProvider extends JinjaContextProvider { - get jsonSchema() { +abstract class JSONSchemaDataProvider extends JinjaContextProvider { + get jsonSchema(): JSONSchema { throw new Error("Not implemented."); } } + +export default JSONSchemaDataProvider; From cdbb99d4ca9406b881ef6c5d4d6011fd4cdb9cfd Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 1 Dec 2025 18:05:59 +0200 Subject: [PATCH 08/18] chore: remove JSONSchemaFormDataProvider --- dist/js/index.d.ts | 4 +- dist/js/index.js | 6 +-- scripts/generate-mixins.ts | 1 - src/js/context/JSONSchemaFormDataProvider.ts | 43 -------------------- src/js/index.ts | 4 +- 5 files changed, 7 insertions(+), 51 deletions(-) delete mode 100644 src/js/context/JSONSchemaFormDataProvider.ts diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index 5d5323e..fd831d9 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -2,7 +2,7 @@ import Application from "./application"; import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; import ContextProvider from "./context/ContextProvider"; -import JSONSchemaFormDataProvider from "./context/JSONSchemaFormDataProvider"; +import JSONSchemaDataProvider from "./context/JSONSchemaDataProvider"; import Executable from "./executable"; import { executableMixin } from "./executableMixin"; import Flavor from "./flavor"; @@ -10,5 +10,5 @@ import { flavorMixin } from "./flavorMixin"; import Template from "./template"; import { templateMixin } from "./templateMixin"; declare const allApplications: string[]; -export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, JSONSchemaFormDataProvider, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; +export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, JSONSchemaDataProvider, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; export type * from "./types"; diff --git a/dist/js/index.js b/dist/js/index.js index 5cfd4d3..1ae159a 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.JSONSchemaFormDataProvider = exports.ContextProvider = exports.ApplicationRegistry = exports.Template = exports.Flavor = exports.Executable = exports.Application = void 0; +exports.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.JSONSchemaDataProvider = 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; const applicationMixin_1 = require("./applicationMixin"); @@ -12,8 +12,8 @@ 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 JSONSchemaDataProvider_1 = __importDefault(require("./context/JSONSchemaDataProvider")); +exports.JSONSchemaDataProvider = JSONSchemaDataProvider_1.default; const executable_1 = __importDefault(require("./executable")); exports.Executable = executable_1.default; const executableMixin_1 = require("./executableMixin"); diff --git a/scripts/generate-mixins.ts b/scripts/generate-mixins.ts index 38370ee..cb6fcad 100644 --- a/scripts/generate-mixins.ts +++ b/scripts/generate-mixins.ts @@ -25,7 +25,6 @@ const OUTPUT_PATHS = { }; function main() { - // Type assertion to handle schema compatibility - the schemas from esse may have slightly different types const result = generateSchemaMixin(allSchemas as JSONSchema7[], OUTPUT_PATHS); if (result.errorCount > 0) { 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/index.ts b/src/js/index.ts index 6ec04b0..bc4f4cb 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -2,7 +2,7 @@ import Application from "./application"; import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; import ContextProvider from "./context/ContextProvider"; -import JSONSchemaFormDataProvider from "./context/JSONSchemaFormDataProvider"; +import JSONSchemaDataProvider from "./context/JSONSchemaDataProvider"; import Executable from "./executable"; import { executableMixin } from "./executableMixin"; import Flavor from "./flavor"; @@ -19,7 +19,7 @@ export { Template, ApplicationRegistry, ContextProvider, - JSONSchemaFormDataProvider, + JSONSchemaDataProvider, executableMixin, flavorMixin, applicationMixin, From 956f0317cd770746775d8861773afae56d4f061e Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 1 Dec 2025 22:41:41 +0200 Subject: [PATCH 09/18] chore: remove JSONSchemaDataProvider and JinjaContextProvider --- dist/js/index.d.ts | 3 +- dist/js/index.js | 4 +- src/js/context/JSONSchemaDataProvider.ts | 15 --- src/js/context/JinjaContextProvider.ts | 16 --- src/js/index.ts | 2 - tests/js/JSONSchemaFormDataProvider.test.ts | 114 +++++++++---------- tests/js/JSONSchemaProvider.test.ts | 118 ++++++++++---------- 7 files changed, 118 insertions(+), 154 deletions(-) delete mode 100644 src/js/context/JSONSchemaDataProvider.ts delete mode 100644 src/js/context/JinjaContextProvider.ts diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index fd831d9..4f8b77f 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -2,7 +2,6 @@ import Application from "./application"; import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; import ContextProvider from "./context/ContextProvider"; -import JSONSchemaDataProvider from "./context/JSONSchemaDataProvider"; import Executable from "./executable"; import { executableMixin } from "./executableMixin"; import Flavor from "./flavor"; @@ -10,5 +9,5 @@ import { flavorMixin } from "./flavorMixin"; import Template from "./template"; import { templateMixin } from "./templateMixin"; declare const allApplications: string[]; -export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, JSONSchemaDataProvider, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; +export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; export type * from "./types"; diff --git a/dist/js/index.js b/dist/js/index.js index 1ae159a..c97e90c 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.JSONSchemaDataProvider = exports.ContextProvider = exports.ApplicationRegistry = exports.Template = exports.Flavor = exports.Executable = exports.Application = void 0; +exports.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = 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; const applicationMixin_1 = require("./applicationMixin"); @@ -12,8 +12,6 @@ const ApplicationRegistry_1 = __importDefault(require("./ApplicationRegistry")); exports.ApplicationRegistry = ApplicationRegistry_1.default; const ContextProvider_1 = __importDefault(require("./context/ContextProvider")); exports.ContextProvider = ContextProvider_1.default; -const JSONSchemaDataProvider_1 = __importDefault(require("./context/JSONSchemaDataProvider")); -exports.JSONSchemaDataProvider = JSONSchemaDataProvider_1.default; const executable_1 = __importDefault(require("./executable")); exports.Executable = executable_1.default; const executableMixin_1 = require("./executableMixin"); diff --git a/src/js/context/JSONSchemaDataProvider.ts b/src/js/context/JSONSchemaDataProvider.ts deleted file mode 100644 index 4ac61c2..0000000 --- a/src/js/context/JSONSchemaDataProvider.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* eslint-disable class-methods-use-this */ -import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; - -import JinjaContextProvider from "./JinjaContextProvider"; - -/** - * @summary Provides jsonSchema only. - */ -abstract class JSONSchemaDataProvider extends JinjaContextProvider { - get jsonSchema(): JSONSchema { - throw new Error("Not implemented."); - } -} - -export default JSONSchemaDataProvider; 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/index.ts b/src/js/index.ts index bc4f4cb..f0f0991 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -2,7 +2,6 @@ import Application from "./application"; import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; import ContextProvider from "./context/ContextProvider"; -import JSONSchemaDataProvider from "./context/JSONSchemaDataProvider"; import Executable from "./executable"; import { executableMixin } from "./executableMixin"; import Flavor from "./flavor"; @@ -19,7 +18,6 @@ export { Template, ApplicationRegistry, ContextProvider, - JSONSchemaDataProvider, executableMixin, flavorMixin, applicationMixin, diff --git a/tests/js/JSONSchemaFormDataProvider.test.ts b/tests/js/JSONSchemaFormDataProvider.test.ts index ba85c05..f9f79f8 100644 --- a/tests/js/JSONSchemaFormDataProvider.test.ts +++ b/tests/js/JSONSchemaFormDataProvider.test.ts @@ -1,68 +1,68 @@ -import { Name as ContextProviderName } from "@mat3ra/esse/dist/js/types"; -import { expect } from "chai"; +// import { Name as ContextProviderName } from "@mat3ra/esse/dist/js/types"; +// import { expect } from "chai"; -import JSONSchemaFormDataProvider from "../../src/js/context/JSONSchemaFormDataProvider"; +// import JSONSchemaFormDataProvider from "../../src/js/context/JSONSchemaFormDataProvider"; -describe("JSONSchemaFormDataProvider", () => { - const baseConfig = { - name: ContextProviderName.KGridFormDataManager, - }; +// describe("JSONSchemaFormDataProvider", () => { +// const baseConfig = { +// name: ContextProviderName.KGridFormDataManager, +// }; - it("respects isUsingJinjaVariables flag", () => { - const providerTrue = new JSONSchemaFormDataProvider({ - ...baseConfig, - isUsingJinjaVariables: true, - }); - const providerFalse = new JSONSchemaFormDataProvider({ - ...baseConfig, - isUsingJinjaVariables: false, - }); - const providerUndefined = new JSONSchemaFormDataProvider(baseConfig); +// it("respects isUsingJinjaVariables flag", () => { +// const providerTrue = new JSONSchemaFormDataProvider({ +// ...baseConfig, +// isUsingJinjaVariables: true, +// }); +// const providerFalse = new JSONSchemaFormDataProvider({ +// ...baseConfig, +// isUsingJinjaVariables: false, +// }); +// const providerUndefined = new JSONSchemaFormDataProvider(baseConfig); - expect(providerTrue.isUsingJinjaVariables).to.equal(true); - expect(providerFalse.isUsingJinjaVariables).to.equal(false); - expect(providerUndefined.isUsingJinjaVariables).to.equal(false); - }); +// expect(providerTrue.isUsingJinjaVariables).to.equal(true); +// expect(providerFalse.isUsingJinjaVariables).to.equal(false); +// expect(providerUndefined.isUsingJinjaVariables).to.equal(false); +// }); - it("returns styled uiSchema from uiSchemaStyled", () => { - const provider = new JSONSchemaFormDataProvider(baseConfig); +// it("returns styled uiSchema from uiSchemaStyled", () => { +// const provider = new JSONSchemaFormDataProvider(baseConfig); - // Monkey-patch abstract getters to avoid "Not implemented." errors - Object.defineProperty(provider, "uiSchema", { - get() { - return { - field1: { - "ui:widget": "text", - classNames: "original-class", - }, - field2: { - "ui:widget": "number", - }, - }; - }, - }); +// // Monkey-patch abstract getters to avoid "Not implemented." errors +// Object.defineProperty(provider, "uiSchema", { +// get() { +// return { +// field1: { +// "ui:widget": "text", +// classNames: "original-class", +// }, +// field2: { +// "ui:widget": "number", +// }, +// }; +// }, +// }); - Object.defineProperty(provider, "defaultFieldStyles", { - get() { - return { - "ui:options": { - label: true, - }, - }; - }, - }); +// Object.defineProperty(provider, "defaultFieldStyles", { +// get() { +// return { +// "ui:options": { +// label: true, +// }, +// }; +// }, +// }); - const styled = provider.uiSchemaStyled; +// const styled = provider.uiSchemaStyled; - expect(styled).to.have.property("field1"); - expect(styled).to.have.property("field2"); +// expect(styled).to.have.property("field1"); +// expect(styled).to.have.property("field2"); - expect(styled.field1["ui:widget"]).to.equal("text"); - expect(styled.field1["ui:options"]).to.deep.equal({ label: true }); - expect(styled.field1.classNames).to.equal("original-class"); +// expect(styled.field1["ui:widget"]).to.equal("text"); +// expect(styled.field1["ui:options"]).to.deep.equal({ label: true }); +// expect(styled.field1.classNames).to.equal("original-class"); - expect(styled.field2["ui:widget"]).to.equal("number"); - expect(styled.field2["ui:options"]).to.deep.equal({ label: true }); - expect(styled.field2.classNames).to.equal(""); - }); -}); +// expect(styled.field2["ui:widget"]).to.equal("number"); +// expect(styled.field2["ui:options"]).to.deep.equal({ label: true }); +// expect(styled.field2.classNames).to.equal(""); +// }); +// }); diff --git a/tests/js/JSONSchemaProvider.test.ts b/tests/js/JSONSchemaProvider.test.ts index aa1320a..54f2fb0 100644 --- a/tests/js/JSONSchemaProvider.test.ts +++ b/tests/js/JSONSchemaProvider.test.ts @@ -1,67 +1,67 @@ -import { Name as ContextProviderNameEnum } from "@mat3ra/esse/dist/js/types"; -import { expect } from "chai"; +// 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"; +// 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); - }); +// 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."); - }); -}); +// 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; - }); +// 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 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 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 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"); - }); -}); +// 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"); +// }); +// }); From 562677d7b7d94a0ef66e43ea378716d308f46b15 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 1 Dec 2025 23:17:31 +0200 Subject: [PATCH 10/18] chore: remove JSONSchemaDataProvider and JinjaContextProvider dist --- dist/js/context/JSONSchemaDataProvider.d.ts | 9 ----- dist/js/context/JSONSchemaDataProvider.js | 15 ------- .../context/JSONSchemaFormDataProvider.d.ts | 18 --------- dist/js/context/JSONSchemaFormDataProvider.js | 40 ------------------- dist/js/context/JinjaContextProvider.d.ts | 10 ----- dist/js/context/JinjaContextProvider.js | 13 ------ 6 files changed, 105 deletions(-) delete mode 100644 dist/js/context/JSONSchemaDataProvider.d.ts delete mode 100644 dist/js/context/JSONSchemaDataProvider.js delete mode 100644 dist/js/context/JSONSchemaFormDataProvider.d.ts delete mode 100644 dist/js/context/JSONSchemaFormDataProvider.js delete mode 100644 dist/js/context/JinjaContextProvider.d.ts delete mode 100644 dist/js/context/JinjaContextProvider.js diff --git a/dist/js/context/JSONSchemaDataProvider.d.ts b/dist/js/context/JSONSchemaDataProvider.d.ts deleted file mode 100644 index 58e9e8f..0000000 --- a/dist/js/context/JSONSchemaDataProvider.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils"; -import JinjaContextProvider from "./JinjaContextProvider"; -/** - * @summary Provides jsonSchema only. - */ -declare abstract class JSONSchemaDataProvider extends JinjaContextProvider { - get jsonSchema(): JSONSchema; -} -export default JSONSchemaDataProvider; diff --git a/dist/js/context/JSONSchemaDataProvider.js b/dist/js/context/JSONSchemaDataProvider.js deleted file mode 100644 index a9c9bcb..0000000 --- a/dist/js/context/JSONSchemaDataProvider.js +++ /dev/null @@ -1,15 +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 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; From 704687a380527165579c6c271cae1676161eef0a Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 26 Dec 2025 19:15:07 +0200 Subject: [PATCH 11/18] update: remove template rendering logic --- dist/js/ApplicationRegistry.d.ts | 12 +- dist/js/ApplicationRegistry.js | 36 +-- dist/js/applicationMixin.d.ts | 2 +- dist/js/generated/TemplateSchemaMixin.js | 18 -- dist/js/index.d.ts | 11 +- dist/js/index.js | 20 +- dist/js/templateMixin.d.ts | 24 +- dist/js/templateMixin.js | 129 --------- package-lock.json | 12 +- package.json | 4 +- src/js/{application.ts => Application.ts} | 0 src/js/ApplicationRegistry.ts | 37 ++- src/js/{executable.ts => Executable.ts} | 0 src/js/{flavor.ts => Flavor.ts} | 0 src/js/{template.ts => Template.ts} | 0 src/js/applicationMixin.ts | 2 +- src/js/context/ContextProvider.ts | 155 ---------- .../ContextProviderRegistryContainer.ts | 41 --- src/js/generated/TemplateSchemaMixin.ts | 18 -- src/js/index.ts | 10 +- src/js/templateMixin.ts | 192 +----------- tests/js/ApplicationRegistry.test.ts | 63 +--- .../ContextProviderRegistryContainer.test.ts | 274 ------------------ tests/js/JSONSchemaFormDataProvider.test.ts | 68 ----- tests/js/JSONSchemaProvider.test.ts | 67 ----- tests/js/application.test.ts | 2 +- tests/js/executable.test.ts | 2 +- tests/js/flavor.test.ts | 2 +- tests/js/provider.tests.ts | 51 ---- tests/js/template.test.ts | 109 +------ 30 files changed, 91 insertions(+), 1270 deletions(-) rename src/js/{application.ts => Application.ts} (100%) rename src/js/{executable.ts => Executable.ts} (100%) rename src/js/{flavor.ts => Flavor.ts} (100%) rename src/js/{template.ts => Template.ts} (100%) delete mode 100644 src/js/context/ContextProvider.ts delete mode 100644 src/js/context/ContextProviderRegistryContainer.ts delete mode 100644 tests/js/ContextProviderRegistryContainer.test.ts delete mode 100644 tests/js/JSONSchemaFormDataProvider.test.ts delete mode 100644 tests/js/JSONSchemaProvider.test.ts delete mode 100644 tests/js/provider.tests.ts diff --git a/dist/js/ApplicationRegistry.d.ts b/dist/js/ApplicationRegistry.d.ts index b277021..2981f21 100644 --- a/dist/js/ApplicationRegistry.d.ts +++ b/dist/js/ApplicationRegistry.d.ts @@ -1,8 +1,8 @@ -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 { ApplicationSchemaBase, 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; }; @@ -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 989d3d4..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 }), @@ -115,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); @@ -125,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) { @@ -134,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, }); @@ -146,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/applicationMixin.d.ts b/dist/js/applicationMixin.d.ts index 9fa840d..3efc012 100644 --- a/dist/js/applicationMixin.d.ts +++ b/dist/js/applicationMixin.d.ts @@ -3,7 +3,7 @@ import type { Defaultable } from "@mat3ra/code/dist/js/entity/mixins/Defaultable 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"; +import Executable from "./Executable"; import { type ApplicationSchemaMixin } from "./generated/ApplicationSchemaMixin"; type Base = InMemoryEntity & NamedEntity & Defaultable; export type BaseConstructor = Constructor & { diff --git a/dist/js/generated/TemplateSchemaMixin.js b/dist/js/generated/TemplateSchemaMixin.js index 80d218c..b9c0916 100644 --- a/dist/js/generated/TemplateSchemaMixin.js +++ b/dist/js/generated/TemplateSchemaMixin.js @@ -28,30 +28,12 @@ function templateSchemaMixin(item) { set contextProviders(value) { this.setProp("contextProviders", value); }, - get isManuallyChanged() { - return this.prop("isManuallyChanged"); - }, - set isManuallyChanged(value) { - this.setProp("isManuallyChanged", value); - }, - get name() { - return this.requiredProp("name"); - }, - set name(value) { - this.setProp("name", value); - }, get content() { return this.requiredProp("content"); }, set content(value) { this.setProp("content", value); }, - get rendered() { - return this.prop("rendered"); - }, - set rendered(value) { - this.setProp("rendered", value); - }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); } diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index 4f8b77f..dcaa237 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -1,13 +1,12 @@ -import Application from "./application"; +import Application from "./Application"; import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; -import ContextProvider from "./context/ContextProvider"; -import Executable from "./executable"; +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 Template from "./Template"; import { templateMixin } from "./templateMixin"; declare const allApplications: string[]; -export { Application, Executable, Flavor, Template, ApplicationRegistry, ContextProvider, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; +export { Application, Executable, Flavor, Template, ApplicationRegistry, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; export type * from "./types"; diff --git a/dist/js/index.js b/dist/js/index.js index c97e90c..90d6fee 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,25 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = 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.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.ApplicationRegistry = 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; } }); const ApplicationRegistry_1 = __importDefault(require("./ApplicationRegistry")); exports.ApplicationRegistry = ApplicationRegistry_1.default; -const ContextProvider_1 = __importDefault(require("./context/ContextProvider")); -exports.ContextProvider = ContextProvider_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; } }); const allApplications = ApplicationRegistry_1.default.getUniqueAvailableApplicationNames(); diff --git a/dist/js/templateMixin.d.ts b/dist/js/templateMixin.d.ts index 593acf2..e04262a 100644 --- a/dist/js/templateMixin.d.ts +++ b/dist/js/templateMixin.d.ts @@ -1,30 +1,10 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { ContextProviderNameEnum, ContextProviderSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; -import ContextProvider from "./context/ContextProvider"; -import ContextProviderRegistryContainer from "./context/ContextProviderRegistryContainer"; +import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { type TemplateSchemaMixin } from "./generated/TemplateSchemaMixin"; export type TemplateBase = InMemoryEntity; -export type TemplateMixin = TemplateSchemaMixin & { - 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 type ContextProviderConfigMapEntry = { - providerCls: typeof ContextProvider; - config: ContextProviderSchema; -}; -export type ContextProviderConfigMap = Partial>; +export type TemplateMixin = TemplateSchemaMixin; export type TemplateStaticMixin = { - contextProviderRegistry: ContextProviderRegistryContainer | null; - setContextProvidersConfig: (classConfigMap: ContextProviderConfigMap) => void; jsonSchema: TemplateSchema; }; export declare function templateStaticMixin(item: Constructor): void; diff --git a/dist/js/templateMixin.js b/dist/js/templateMixin.js index dfe849f..c821258 100644 --- a/dist/js/templateMixin.js +++ b/dist/js/templateMixin.js @@ -6,146 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); 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")); const TemplateSchemaMixin_1 = require("./generated/TemplateSchemaMixin"); -function templatePropertiesMixin(item) { - // @ts-expect-error - const properties = { - setContent(text) { - this.content = text; - if (!this.rendered) { - this.rendered = text; - } - }, - setRendered(text) { - this.rendered = text; - }, - // 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) { - 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)); -} 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)); } function templateMixin(Item) { (0, TemplateSchemaMixin_1.templateSchemaMixin)(Item.prototype); - templatePropertiesMixin(Item.prototype); templateStaticMixin(Item); } diff --git a/package-lock.json b/package-lock.json index 68ac3ae..23ee86f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,8 +17,8 @@ "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1b47917bb8feadf49c46d8aa4b33a4255a06788a", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#aa1aefcfadb1643c69b43deadaafad08ca6d807c", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -3195,8 +3195,8 @@ }, "node_modules/@mat3ra/code": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", - "integrity": "sha512-z/9Bipd5XEKBj3/KqxuB4XHshxEkVrmLp41NOwVf96ny9two9lpUapkpzFWdM5uypYm76au04//p59Oo7GWRPQ==", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", + "integrity": "sha512-LWw+caG75Z4nNHinKcKOUXzeFwZHNPXlJ9Lm6/wVJ4Y7He7mNf5YQfkYSVbctWWzYAi4IlH34ZSb6tyTS0FCCw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3235,8 +3235,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#1b47917bb8feadf49c46d8aa4b33a4255a06788a", - "integrity": "sha512-TEiTzxWwdpSKjKCZdT72917riOPDVAgENFQ9WXhVVbYrOwDmv5Ia0irvP3XlHrfgvmtJW02P/Voib/+zekVwBg==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#aa1aefcfadb1643c69b43deadaafad08ca6d807c", + "integrity": "sha512-WThYT68q2lbV69D7qeEoIM33tsr6BHH44EemqKTythIwoVyyCViYAI/+i+L0ttE76lq1cMG+YoYJLYeeJXJb4A==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index b53d4fd..62ca140 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#5803c543e812727ad32dffefd1426497694a427b", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#1b47917bb8feadf49c46d8aa4b33a4255a06788a", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#aa1aefcfadb1643c69b43deadaafad08ca6d807c", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", diff --git a/src/js/application.ts b/src/js/Application.ts similarity index 100% rename from src/js/application.ts rename to src/js/Application.ts diff --git a/src/js/ApplicationRegistry.ts b/src/js/ApplicationRegistry.ts index 5c04830..d436145 100644 --- a/src/js/ApplicationRegistry.ts +++ b/src/js/ApplicationRegistry.ts @@ -1,11 +1,15 @@ import { getOneMatchFromObject } from "@mat3ra/code/dist/js/utils/object"; -import type { ApplicationSchemaBase, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; +import type { + ApplicationSchemaBase, + ExecutableSchema, + TemplateSchema, +} 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"; +import Application from "./Application"; +import Executable from "./Executable"; +import Flavor from "./Flavor"; +import Template from "./Template"; type ApplicationVersion = { [build: string]: ApplicationSchemaBase; @@ -213,12 +217,15 @@ export default class ApplicationRegistry { return this.getFlavorByName(executable, config?.name); } - // flavors static getInputAsTemplates(flavor: Flavor) { - const appName = flavor.prop("applicationName", ""); - const execName = flavor.prop("executableName", ""); + return this.getInput(flavor).map((template) => new Template(template)); + } + + static getInput(flavor: Flavor): TemplateSchema[] { + const appName = flavor.applicationName || ""; + const execName = flavor.executableName || ""; - return flavor.input.map((input) => { + return flavor.input.map((input): TemplateSchema => { const inputName = input.templateName || input.name; const filtered = new ApplicationStandata().getTemplatesByName( @@ -233,15 +240,15 @@ export default class ApplicationRegistry { ); } - return new Template({ ...filtered[0], name: input.name }); + return { ...filtered[0], name: input.name || "" }; }); } - static getInputAsRenderedTemplates(flavor: Flavor, context: Record) { - return this.getInputAsTemplates(flavor).map((template) => { - return template.getRenderedJSON(context); - }); - } + // static getInputAsRenderedTemplates(flavor: Flavor, context: ContextProviderConfig) { + // return this.getInputAsTemplates(flavor).map((template) => { + // return template.setContext(context).render().toJSON(); + // }); + // } static getAllFlavorsForApplication(appName: string, version?: string) { const allExecutables = this.getExecutables({ name: appName, version }); diff --git a/src/js/executable.ts b/src/js/Executable.ts similarity index 100% rename from src/js/executable.ts rename to src/js/Executable.ts diff --git a/src/js/flavor.ts b/src/js/Flavor.ts similarity index 100% rename from src/js/flavor.ts rename to src/js/Flavor.ts diff --git a/src/js/template.ts b/src/js/Template.ts similarity index 100% rename from src/js/template.ts rename to src/js/Template.ts diff --git a/src/js/applicationMixin.ts b/src/js/applicationMixin.ts index 982629a..16e1c52 100644 --- a/src/js/applicationMixin.ts +++ b/src/js/applicationMixin.ts @@ -6,7 +6,7 @@ import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface import type { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; import { ApplicationStandata } from "@mat3ra/standata"; -import Executable from "./executable"; +import Executable from "./Executable"; import { type ApplicationSchemaMixin, applicationSchemaMixin, 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/generated/TemplateSchemaMixin.ts b/src/js/generated/TemplateSchemaMixin.ts index 7fa58fe..276af42 100644 --- a/src/js/generated/TemplateSchemaMixin.ts +++ b/src/js/generated/TemplateSchemaMixin.ts @@ -38,30 +38,12 @@ export function templateSchemaMixin( set contextProviders(value: TemplatePropertiesSchema["contextProviders"]) { this.setProp("contextProviders", value); }, - get isManuallyChanged() { - return this.prop("isManuallyChanged"); - }, - set isManuallyChanged(value: TemplatePropertiesSchema["isManuallyChanged"]) { - this.setProp("isManuallyChanged", value); - }, - get name() { - return this.requiredProp("name"); - }, - set name(value: TemplatePropertiesSchema["name"]) { - this.setProp("name", value); - }, get content() { return this.requiredProp("content"); }, set content(value: TemplatePropertiesSchema["content"]) { this.setProp("content", value); }, - get rendered() { - return this.prop("rendered"); - }, - set rendered(value: TemplatePropertiesSchema["rendered"]) { - this.setProp("rendered", value); - }, }; Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties)); diff --git a/src/js/index.ts b/src/js/index.ts index f0f0991..a869848 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -1,12 +1,11 @@ -import Application from "./application"; +import Application from "./Application"; import { applicationMixin } from "./applicationMixin"; import ApplicationRegistry from "./ApplicationRegistry"; -import ContextProvider from "./context/ContextProvider"; -import Executable from "./executable"; +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 Template from "./Template"; import { templateMixin } from "./templateMixin"; const allApplications = ApplicationRegistry.getUniqueAvailableApplicationNames(); @@ -17,7 +16,6 @@ export { Flavor, Template, ApplicationRegistry, - ContextProvider, executableMixin, flavorMixin, applicationMixin, diff --git a/src/js/templateMixin.ts b/src/js/templateMixin.ts index c887578..071f9d4 100644 --- a/src/js/templateMixin.ts +++ b/src/js/templateMixin.ts @@ -1,211 +1,24 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; -import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; -import type { - ContextProviderNameEnum, - 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; -export type TemplateMixin = TemplateSchemaMixin & { - // 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 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; }; -function templatePropertiesMixin(item: InMemoryEntity) { - // @ts-expect-error - const properties: TemplateMixin & TemplateBase = { - setContent(text: string) { - this.content = text; - if (!this.rendered) { - this.rendered = text; - } - }, - - setRendered(text: string) { - this.rendered = text; - }, - - // 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)); -} - export function templateStaticMixin(item: Constructor) { // @ts-ignore const properties: TemplateStaticMixin & Constructor = { - contextProviderRegistry: null, - 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)); @@ -213,6 +26,5 @@ export function templateStaticMixin(item: Constructor) { export function templateMixin(Item: Constructor) { templateSchemaMixin(Item.prototype); - templatePropertiesMixin(Item.prototype); templateStaticMixin(Item); } diff --git a/tests/js/ApplicationRegistry.test.ts b/tests/js/ApplicationRegistry.test.ts index 22da031..7d6023a 100644 --- a/tests/js/ApplicationRegistry.test.ts +++ b/tests/js/ApplicationRegistry.test.ts @@ -1,40 +1,18 @@ /* 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 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" }; - } -} +import Executable from "../../src/js/Executable"; +import Flavor from "../../src/js/Flavor"; +import Template from "../../src/js/Template"; 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", () => { @@ -377,39 +355,6 @@ describe("ApplicationRegistry", () => { }); }); - 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"); 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/JSONSchemaFormDataProvider.test.ts b/tests/js/JSONSchemaFormDataProvider.test.ts deleted file mode 100644 index f9f79f8..0000000 --- a/tests/js/JSONSchemaFormDataProvider.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -// import { Name as ContextProviderName } from "@mat3ra/esse/dist/js/types"; -// import { expect } from "chai"; - -// import JSONSchemaFormDataProvider from "../../src/js/context/JSONSchemaFormDataProvider"; - -// describe("JSONSchemaFormDataProvider", () => { -// const baseConfig = { -// name: ContextProviderName.KGridFormDataManager, -// }; - -// it("respects isUsingJinjaVariables flag", () => { -// const providerTrue = new JSONSchemaFormDataProvider({ -// ...baseConfig, -// isUsingJinjaVariables: true, -// }); -// const providerFalse = new JSONSchemaFormDataProvider({ -// ...baseConfig, -// isUsingJinjaVariables: false, -// }); -// const providerUndefined = new JSONSchemaFormDataProvider(baseConfig); - -// expect(providerTrue.isUsingJinjaVariables).to.equal(true); -// expect(providerFalse.isUsingJinjaVariables).to.equal(false); -// expect(providerUndefined.isUsingJinjaVariables).to.equal(false); -// }); - -// it("returns styled uiSchema from uiSchemaStyled", () => { -// const provider = new JSONSchemaFormDataProvider(baseConfig); - -// // Monkey-patch abstract getters to avoid "Not implemented." errors -// Object.defineProperty(provider, "uiSchema", { -// get() { -// return { -// field1: { -// "ui:widget": "text", -// classNames: "original-class", -// }, -// field2: { -// "ui:widget": "number", -// }, -// }; -// }, -// }); - -// Object.defineProperty(provider, "defaultFieldStyles", { -// get() { -// return { -// "ui:options": { -// label: true, -// }, -// }; -// }, -// }); - -// const styled = provider.uiSchemaStyled; - -// expect(styled).to.have.property("field1"); -// expect(styled).to.have.property("field2"); - -// expect(styled.field1["ui:widget"]).to.equal("text"); -// expect(styled.field1["ui:options"]).to.deep.equal({ label: true }); -// expect(styled.field1.classNames).to.equal("original-class"); - -// expect(styled.field2["ui:widget"]).to.equal("number"); -// expect(styled.field2["ui:options"]).to.deep.equal({ label: true }); -// expect(styled.field2.classNames).to.equal(""); -// }); -// }); diff --git a/tests/js/JSONSchemaProvider.test.ts b/tests/js/JSONSchemaProvider.test.ts deleted file mode 100644 index 54f2fb0..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 f27c35b..22ae331 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -1,7 +1,7 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import Application from "../../src/js/application"; +import Application from "../../src/js/Application"; describe("Application", () => { const obj = { name: "espresso" }; diff --git a/tests/js/executable.test.ts b/tests/js/executable.test.ts index b029f21..0411394 100644 --- a/tests/js/executable.test.ts +++ b/tests/js/executable.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import ApplicationRegistry from "../../src/js/ApplicationRegistry"; -import Executable from "../../src/js/executable"; +import Executable from "../../src/js/Executable"; describe("Executable", () => { it("toJSON works as expected", () => { diff --git a/tests/js/flavor.test.ts b/tests/js/flavor.test.ts index 01a22f3..a271207 100644 --- a/tests/js/flavor.test.ts +++ b/tests/js/flavor.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import ApplicationRegistry from "../../src/js/ApplicationRegistry"; -import Flavor from "../../src/js/flavor"; +import Flavor from "../../src/js/Flavor"; describe("Flavor", () => { it("results are correct", () => { 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 3fc70ca..1fa1f7f 100644 --- a/tests/js/template.test.ts +++ b/tests/js/template.test.ts @@ -1,60 +1,7 @@ /* 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/Template"; describe("Template", () => { let template: Template; @@ -64,9 +11,7 @@ describe("Template", () => { }); 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 @@ -84,14 +29,9 @@ describe("Template", () => { }); it("toJSON includes all template properties when set", () => { - const template = new Template({ name: "test_template" }); + const template = new Template({ name: "test_template", content: "test content" }); // 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(); @@ -108,8 +48,8 @@ describe("Template", () => { it("getRenderedJSON returns valid JSON after rendering", () => { const template = new Template({ name: "test_template" }); - template.setContent("Hello {{ name }}!"); - template.setProp("isManuallyChanged", false); + template.content = "Hello {{ name }}!"; + template.isManuallyChanged = false; const json = template.getRenderedJSON({ name: "World" }); @@ -302,48 +242,9 @@ describe("Template", () => { 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; }); From 59f68f3f0d3add49d70f634b7611d1740abbfb5b Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 29 Dec 2025 16:38:52 +0200 Subject: [PATCH 12/18] chore: esse --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 23ee86f..aca2908 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#aa1aefcfadb1643c69b43deadaafad08ca6d807c", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9216482d292bbd1a679c02d167fe676f9d7b7cf4", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -3235,8 +3235,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#aa1aefcfadb1643c69b43deadaafad08ca6d807c", - "integrity": "sha512-WThYT68q2lbV69D7qeEoIM33tsr6BHH44EemqKTythIwoVyyCViYAI/+i+L0ttE76lq1cMG+YoYJLYeeJXJb4A==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#9216482d292bbd1a679c02d167fe676f9d7b7cf4", + "integrity": "sha512-t5D3hVL5bNFadGr0uzLuiyL6jS7O+6OF2Q+fCR2UjzgnA/AqT3ViuZjBsytiXfCedQF6yxjR0m/y8i2s/dMxWg==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 62ca140..8038787 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#aa1aefcfadb1643c69b43deadaafad08ca6d807c", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9216482d292bbd1a679c02d167fe676f9d7b7cf4", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", From ffa43e27414ecbb9a9b40ed3f9f6ef6945c66e3d Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 29 Dec 2025 16:56:53 +0200 Subject: [PATCH 13/18] chore: simplify tests --- dist/js/flavorMixin.d.ts | 2 +- dist/js/flavorMixin.js | 22 ---- package-lock.json | 188 +++++----------------------- package.json | 6 +- src/js/flavorMixin.ts | 29 +---- tests/js/application.test.ts | 36 ------ tests/js/executable.test.ts | 50 -------- tests/js/flavor.test.ts | 65 ---------- tests/js/template.test.ts | 229 ----------------------------------- 9 files changed, 32 insertions(+), 595 deletions(-) diff --git a/dist/js/flavorMixin.d.ts b/dist/js/flavorMixin.d.ts index a494611..117baab 100644 --- a/dist/js/flavorMixin.d.ts +++ b/dist/js/flavorMixin.d.ts @@ -2,7 +2,7 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; import type { Constructor } from "@mat3ra/code/dist/js/utils/types"; import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type FlavorSchemaMixin } from "./generated/FlavorSchemaMixin"; -export type FlavorMixin = FlavorSchemaMixin & {}; +export type FlavorMixin = FlavorSchemaMixin; export type FlavorStaticMixin = { jsonSchema: FlavorSchema; }; diff --git a/dist/js/flavorMixin.js b/dist/js/flavorMixin.js index ab09b52..96fa3ca 100644 --- a/dist/js/flavorMixin.js +++ b/dist/js/flavorMixin.js @@ -6,27 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.flavorMixin = flavorMixin; const JSONSchemasInterface_1 = __importDefault(require("@mat3ra/esse/dist/js/esse/JSONSchemasInterface")); const FlavorSchemaMixin_1 = require("./generated/FlavorSchemaMixin"); -// TODO: should we add fields from esse schema (executableId, executableName, applicationName)? -function flavorPropertiesMixin(item) { - // @ts-expect-error - const properties = { - // TODO: there is no "isMultiMaterial" field in the schema; should we add it? - // get disableRenderMaterials() { - // return this.prop("isMultiMaterial", false); - // }, - // TODO: do we actually use this method anywhere? - // getInputAsRenderedTemplates(context: Record) { - // return this.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; -} function flavorStaticMixin(Flavor) { const properties = { get jsonSchema() { @@ -37,6 +16,5 @@ function flavorStaticMixin(Flavor) { } function flavorMixin(Item) { (0, FlavorSchemaMixin_1.flavorSchemaMixin)(Item.prototype); - flavorPropertiesMixin(Item.prototype); flavorStaticMixin(Item); } diff --git a/package-lock.json b/package-lock.json index aca2908..7bbb5e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,7 @@ "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", @@ -23,7 +20,6 @@ "@mat3ra/standata": "2025.10.1-0", "@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", @@ -2355,18 +2351,6 @@ "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" - } - }, "node_modules/@babel/runtime-corejs3": { "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", @@ -4898,6 +4882,7 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@types/json-schema-merge-allof": { @@ -4952,32 +4937,6 @@ "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", @@ -5261,6 +5220,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true, "license": "MIT" }, "node_modules/acorn": { @@ -5444,7 +5404,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -5683,6 +5643,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, "license": "MIT" }, "node_modules/assertion-error": { @@ -5821,7 +5782,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5845,7 +5806,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -6088,6 +6049,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -6339,14 +6301,6 @@ "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", @@ -6412,12 +6366,6 @@ "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", @@ -7742,6 +7690,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -7772,6 +7721,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { @@ -7825,7 +7775,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -8182,7 +8132,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -8595,7 +8545,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -8696,7 +8646,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8755,7 +8705,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8830,7 +8780,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -9273,6 +9223,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -9900,6 +9851,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" @@ -10331,7 +10283,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10354,6 +10306,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "a-sync-waterfall": "^1.0.0", @@ -10379,6 +10332,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -10666,6 +10620,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" @@ -11001,7 +10956,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -11198,6 +11153,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", @@ -11209,6 +11165,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11245,79 +11202,18 @@ "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": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -11834,33 +11730,6 @@ "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", @@ -12499,7 +12368,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -12956,6 +12825,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" diff --git a/package.json b/package.json index 8038787..805b964 100644 --- a/package.json +++ b/package.json @@ -43,10 +43,7 @@ "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", @@ -57,7 +54,6 @@ "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@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/src/js/flavorMixin.ts b/src/js/flavorMixin.ts index 34489b5..a061b26 100644 --- a/src/js/flavorMixin.ts +++ b/src/js/flavorMixin.ts @@ -5,33 +5,7 @@ import type { FlavorSchema } from "@mat3ra/esse/dist/js/types"; import { type FlavorSchemaMixin, flavorSchemaMixin } from "./generated/FlavorSchemaMixin"; -export type FlavorMixin = FlavorSchemaMixin & { - // getInputAsRenderedTemplates: (context: Record) => Record[]; -}; - -// TODO: should we add fields from esse schema (executableId, executableName, applicationName)? -function flavorPropertiesMixin(item: InMemoryEntity & FlavorSchemaMixin) { - // @ts-expect-error - const properties: FlavorMixin & InMemoryEntity & FlavorSchemaMixin = { - // TODO: there is no "isMultiMaterial" field in the schema; should we add it? - // get disableRenderMaterials() { - // return this.prop("isMultiMaterial", false); - // }, - // TODO: do we actually use this method anywhere? - // getInputAsRenderedTemplates(context: Record) { - // return this.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; -} +export type FlavorMixin = FlavorSchemaMixin; function flavorStaticMixin(Flavor: Constructor) { const properties: FlavorStaticMixin = { @@ -49,6 +23,5 @@ export type FlavorStaticMixin = { export function flavorMixin(Item: Constructor) { flavorSchemaMixin(Item.prototype); - flavorPropertiesMixin(Item.prototype); flavorStaticMixin(Item); } diff --git a/tests/js/application.test.ts b/tests/js/application.test.ts index 22ae331..9893063 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -4,34 +4,7 @@ import { expect } from "chai"; import Application from "../../src/js/Application"; describe("Application", () => { - const obj = { name: "espresso" }; - - it("can be created", () => { - const app = new Application(obj); - expect(app.name).to.equal("espresso"); - }); - describe("applicationMixin properties", () => { - let app: Application; - - beforeEach(() => { - app = new Application(obj); - }); - - describe("hasAdvancedComputeOptions property", () => { - it("should return true when set", () => { - app.setProp("hasAdvancedComputeOptions", true); - expect(app.hasAdvancedComputeOptions).to.be.true; - }); - }); - - describe("isLicensed property", () => { - it("should return true when set", () => { - app.setProp("isLicensed", true); - expect(app.isLicensed).to.be.true; - }); - }); - describe("isUsingMaterial property", () => { it("should return true for vasp application", () => { const vaspApp = new Application({ name: "vasp" }); @@ -56,15 +29,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 0411394..757cb83 100644 --- a/tests/js/executable.test.ts +++ b/tests/js/executable.test.ts @@ -1,7 +1,6 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import ApplicationRegistry from "../../src/js/ApplicationRegistry"; import Executable from "../../src/js/Executable"; describe("Executable", () => { @@ -13,55 +12,6 @@ describe("Executable", () => { 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("should get default applicationId as empty array", () => { - expect(executable.applicationId).to.deep.equal([]); - }); - - it("should set and get applicationId", () => { - executable.applicationId = ["app1", "app2"]; - expect(executable.applicationId).to.deep.equal(["app1", "app2"]); - }); - }); - describe("executableStaticMixin", () => { it("should have jsonSchema property", () => { expect(Executable.jsonSchema).to.exist; diff --git a/tests/js/flavor.test.ts b/tests/js/flavor.test.ts index a271207..20efe3f 100644 --- a/tests/js/flavor.test.ts +++ b/tests/js/flavor.test.ts @@ -22,71 +22,6 @@ describe("Flavor", () => { ]); }); - 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 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("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]); - - // 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" }); - // }); - }); - describe("flavorStaticMixin", () => { it("should have jsonSchema property", () => { expect(Flavor.jsonSchema).to.exist; diff --git a/tests/js/template.test.ts b/tests/js/template.test.ts index 1fa1f7f..3cf6949 100644 --- a/tests/js/template.test.ts +++ b/tests/js/template.test.ts @@ -4,244 +4,15 @@ import { expect } from "chai"; import Template from "../../src/js/Template"; describe("Template", () => { - let template: Template; - - beforeEach(() => { - template = new Template({ name: "test_template" }); - }); - it("toJSON works as expected", () => { 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", content: "test content" }); - - // Set various properties - - 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.content = "Hello {{ name }}!"; - template.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("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 empty string by default", () => { - expect(template.applicationName).to.equal(""); - }); - - it("should return applicationName when set", () => { - template.setProp("applicationName", "espresso"); - expect(template.applicationName).to.equal("espresso"); - }); - }); - - describe("executableName property", () => { - it("should return empty string by default", () => { - expect(template.executableName).to.equal(""); - }); - - 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; - }); - }); }); describe("templateStaticMixin properties", () => { From 291051ef5fbb364d4870acdfae1c6e74bf9b6d60 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 31 Dec 2025 19:10:18 +0200 Subject: [PATCH 14/18] chore: new application schema --- dist/js/ApplicationRegistry.d.ts | 10 +++++----- dist/js/application.d.ts | 7 +++---- dist/js/applicationMixin.d.ts | 8 ++++---- package-lock.json | 6 +++--- package.json | 2 +- src/js/Application.ts | 8 +++----- src/js/ApplicationRegistry.ts | 10 +++++----- src/js/applicationMixin.ts | 12 +++++------- src/py/mat3ra/ade/application.py | 4 ++-- 9 files changed, 31 insertions(+), 36 deletions(-) diff --git a/dist/js/ApplicationRegistry.d.ts b/dist/js/ApplicationRegistry.d.ts index 2981f21..361db44 100644 --- a/dist/js/ApplicationRegistry.d.ts +++ b/dist/js/ApplicationRegistry.d.ts @@ -1,10 +1,10 @@ -import type { ApplicationSchemaBase, TemplateSchema } from "@mat3ra/esse/dist/js/types"; +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; diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 3ef2f5a..04b6768 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -2,12 +2,11 @@ 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 { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { type ApplicationMixin, type ApplicationStaticMixin } from "./applicationMixin"; type Base = typeof InMemoryEntity & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor & Constructor & ApplicationStaticMixin; declare const Application_base: Base; -export default class Application extends Application_base implements ApplicationSchemaBase { - constructor(data?: Partial); - [k: string]: unknown; +export default class Application extends Application_base implements ApplicationSchema { + constructor(data?: Partial); } export {}; diff --git a/dist/js/applicationMixin.d.ts b/dist/js/applicationMixin.d.ts index 3efc012..621e752 100644 --- a/dist/js/applicationMixin.d.ts +++ b/dist/js/applicationMixin.d.ts @@ -2,7 +2,7 @@ import type { InMemoryEntity } from "@mat3ra/code/dist/js/entity"; 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 type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import Executable from "./Executable"; import { type ApplicationSchemaMixin } from "./generated/ApplicationSchemaMixin"; type Base = InMemoryEntity & NamedEntity & Defaultable; @@ -10,13 +10,13 @@ export type BaseConstructor = Constructor & { constructCustomExecutable?: (config: object) => Executable; }; export type ApplicationMixin = ApplicationSchemaMixin & { - name: Required["name"]; + 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: BaseConstructor): void; export {}; diff --git a/package-lock.json b/package-lock.json index 7bbb5e2..f100236 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9216482d292bbd1a679c02d167fe676f9d7b7cf4", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#dfa3f260d19cea3a07aac1278bcebd59d242e346", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", @@ -3219,8 +3219,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#9216482d292bbd1a679c02d167fe676f9d7b7cf4", - "integrity": "sha512-t5D3hVL5bNFadGr0uzLuiyL6jS7O+6OF2Q+fCR2UjzgnA/AqT3ViuZjBsytiXfCedQF6yxjR0m/y8i2s/dMxWg==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#dfa3f260d19cea3a07aac1278bcebd59d242e346", + "integrity": "sha512-fqYHPctqxOUu67owdooAaSgyFc7SLgU5zYGrT7SFysZJbUzXUd5cCY5Yl25qSIrWtJ8OmlMkHQWPmWFXJqrpZg==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 805b964..71e8059 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#9216482d292bbd1a679c02d167fe676f9d7b7cf4", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#dfa3f260d19cea3a07aac1278bcebd59d242e346", "@mat3ra/made": "2025.7.15-0", "@mat3ra/standata": "2025.10.1-0", "@mat3ra/tsconfig": "2024.6.3-0", diff --git a/src/js/Application.ts b/src/js/Application.ts index e76c223..de6995c 100644 --- a/src/js/Application.ts +++ b/src/js/Application.ts @@ -8,7 +8,7 @@ import { namedEntityMixin, } 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 type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { type ApplicationMixin, @@ -22,14 +22,12 @@ type Base = typeof InMemoryEntity & Constructor & ApplicationStaticMixin; -export default class Application extends (InMemoryEntity as Base) implements ApplicationSchemaBase { - constructor(data: Partial = {}) { +export default class Application extends (InMemoryEntity as Base) implements ApplicationSchema { + constructor(data: Partial = {}) { super({ ...data, }); } - - [k: string]: unknown; } namedEntityMixin(Application.prototype); diff --git a/src/js/ApplicationRegistry.ts b/src/js/ApplicationRegistry.ts index d436145..95fbaf5 100644 --- a/src/js/ApplicationRegistry.ts +++ b/src/js/ApplicationRegistry.ts @@ -1,6 +1,6 @@ import { getOneMatchFromObject } from "@mat3ra/code/dist/js/utils/object"; import type { - ApplicationSchemaBase, + ApplicationSchema, ExecutableSchema, TemplateSchema, } from "@mat3ra/esse/dist/js/types"; @@ -12,7 +12,7 @@ import Flavor from "./Flavor"; import Template from "./Template"; type ApplicationVersion = { - [build: string]: ApplicationSchemaBase; + [build: string]: ApplicationSchema; }; type ApplicationTreeItem = { @@ -32,7 +32,7 @@ export default class ApplicationRegistry { // applications static applicationsTree?: ApplicationTree; - static applicationsArray?: ApplicationSchemaBase[]; + static applicationsArray?: ApplicationSchema[]; static createApplication({ name, version = null, build = null }: CreateApplicationConfig) { const staticConfig = ApplicationRegistry.getApplicationConfig({ name, version, build }); @@ -61,7 +61,7 @@ export default class ApplicationRegistry { } const applicationsTree: ApplicationTree = {}; - const applicationsArray: ApplicationSchemaBase[] = []; + const applicationsArray: ApplicationSchema[] = []; const allApplications = new ApplicationStandata().getAllApplicationNames(); allApplications.forEach((appName) => { @@ -89,7 +89,7 @@ export default class ApplicationRegistry { appTreeItem[version] = appVersion; - const applicationConfig: ApplicationSchemaBase = { + const applicationConfig: ApplicationSchema = { ...appData, // @ts-ignore build: buildToUse, diff --git a/src/js/applicationMixin.ts b/src/js/applicationMixin.ts index 16e1c52..ff78658 100644 --- a/src/js/applicationMixin.ts +++ b/src/js/applicationMixin.ts @@ -3,7 +3,7 @@ import type { Defaultable } from "@mat3ra/code/dist/js/entity/mixins/Defaultable 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"; @@ -19,18 +19,18 @@ export type BaseConstructor = Constructor & { }; export type ApplicationMixin = ApplicationSchemaMixin & { - name: Required["name"]; + 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; }; function applicationPropertiesMixin( @@ -53,9 +53,7 @@ function applicationStaticMixin(Application: T) { return new ApplicationStandata().getDefaultConfig(); }, get jsonSchema() { - return JSONSchemasInterface.getSchemaById( - "software/application", - ) as ApplicationSchemaBase; + return JSONSchemasInterface.getSchemaById("software/application") as ApplicationSchema; }, }; 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. From c64bc68f88fcb3e34c68bff214c51c0de91b0eb7 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 2 Jan 2026 15:35:34 +0200 Subject: [PATCH 15/18] chore: declare createDefault TS --- dist/js/application.d.ts | 1 + dist/js/executable.d.ts | 1 + dist/js/flavor.d.ts | 1 + src/js/Application.ts | 2 ++ src/js/Executable.ts | 2 ++ src/js/Flavor.ts | 2 ++ 6 files changed, 9 insertions(+) diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 04b6768..0445e06 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -8,5 +8,6 @@ type Base = typeof InMemoryEntity & NamedInMemoryEntityConstructor & Defaultable declare const Application_base: Base; export default class Application extends Application_base implements ApplicationSchema { constructor(data?: Partial); + createDefault: () => Application; } export {}; diff --git a/dist/js/executable.d.ts b/dist/js/executable.d.ts index 60fc3c2..4be76ca 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -9,5 +9,6 @@ type Base = Constructor & RuntimeItemsInMemoryEntityConstructor declare const Executable_base: Base; export default class Executable extends Executable_base implements ExecutableSchema { constructor(data?: Partial); + createDefault: () => Executable; } export {}; diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index 697db87..44c7224 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -9,5 +9,6 @@ type Base = typeof InMemoryEntity & Constructor & RuntimeItemsInMem declare const Flavor_base: Base; export default class Flavor extends Flavor_base implements FlavorSchema { constructor(data?: Partial); + createDefault: () => Flavor; } export {}; diff --git a/src/js/Application.ts b/src/js/Application.ts index de6995c..a0bea15 100644 --- a/src/js/Application.ts +++ b/src/js/Application.ts @@ -28,6 +28,8 @@ export default class Application extends (InMemoryEntity as Base) implements App ...data, }); } + + declare createDefault: () => Application; } namedEntityMixin(Application.prototype); diff --git a/src/js/Executable.ts b/src/js/Executable.ts index 1c99757..7123cb6 100644 --- a/src/js/Executable.ts +++ b/src/js/Executable.ts @@ -33,6 +33,8 @@ export default class Executable extends (InMemoryEntity as Base) implements Exec ...data, }); } + + declare createDefault: () => Executable; } namedEntityMixin(Executable.prototype); diff --git a/src/js/Flavor.ts b/src/js/Flavor.ts index 8f48ef4..c770303 100644 --- a/src/js/Flavor.ts +++ b/src/js/Flavor.ts @@ -36,6 +36,8 @@ export default class Flavor extends (InMemoryEntity as Base) implements FlavorSc ...data, }); } + + declare createDefault: () => Flavor; } namedEntityMixin(Flavor.prototype); From e2d636491f47dfe2277b60f580c1275acec501dd Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 2 Jan 2026 15:42:39 +0200 Subject: [PATCH 16/18] chore: declare createDefault TS --- dist/js/application.d.ts | 2 +- dist/js/executable.d.ts | 2 +- dist/js/flavor.d.ts | 2 +- src/js/Application.ts | 2 +- src/js/Executable.ts | 2 +- src/js/Flavor.ts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 0445e06..2131e0f 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -8,6 +8,6 @@ type Base = typeof InMemoryEntity & NamedInMemoryEntityConstructor & Defaultable declare const Application_base: Base; export default class Application extends Application_base implements ApplicationSchema { constructor(data?: Partial); - createDefault: () => Application; + static createDefault: () => Application; } export {}; diff --git a/dist/js/executable.d.ts b/dist/js/executable.d.ts index 4be76ca..3777e58 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -9,6 +9,6 @@ type Base = Constructor & RuntimeItemsInMemoryEntityConstructor declare const Executable_base: Base; export default class Executable extends Executable_base implements ExecutableSchema { constructor(data?: Partial); - createDefault: () => Executable; + static createDefault: () => Executable; } export {}; diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index 44c7224..f6f4285 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -9,6 +9,6 @@ type Base = typeof InMemoryEntity & Constructor & RuntimeItemsInMem declare const Flavor_base: Base; export default class Flavor extends Flavor_base implements FlavorSchema { constructor(data?: Partial); - createDefault: () => Flavor; + static createDefault: () => Flavor; } export {}; diff --git a/src/js/Application.ts b/src/js/Application.ts index a0bea15..0aee2e0 100644 --- a/src/js/Application.ts +++ b/src/js/Application.ts @@ -29,7 +29,7 @@ export default class Application extends (InMemoryEntity as Base) implements App }); } - declare createDefault: () => Application; + declare static createDefault: () => Application; } namedEntityMixin(Application.prototype); diff --git a/src/js/Executable.ts b/src/js/Executable.ts index 7123cb6..cfaba03 100644 --- a/src/js/Executable.ts +++ b/src/js/Executable.ts @@ -34,7 +34,7 @@ export default class Executable extends (InMemoryEntity as Base) implements Exec }); } - declare createDefault: () => Executable; + declare static createDefault: () => Executable; } namedEntityMixin(Executable.prototype); diff --git a/src/js/Flavor.ts b/src/js/Flavor.ts index c770303..c774e26 100644 --- a/src/js/Flavor.ts +++ b/src/js/Flavor.ts @@ -37,7 +37,7 @@ export default class Flavor extends (InMemoryEntity as Base) implements FlavorSc }); } - declare createDefault: () => Flavor; + declare static createDefault: () => Flavor; } namedEntityMixin(Flavor.prototype); From 6d494337d83e1b22fe272ff74cc1b6842a7c6561 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 9 Jan 2026 18:43:13 +0200 Subject: [PATCH 17/18] chore: improve toJSON types --- dist/js/application.d.ts | 2 ++ dist/js/executable.d.ts | 2 ++ dist/js/flavor.d.ts | 2 ++ dist/js/template.d.ts | 2 ++ src/js/Application.ts | 3 +++ src/js/Executable.ts | 3 +++ src/js/Flavor.ts | 3 +++ src/js/Template.ts | 3 +++ 8 files changed, 20 insertions(+) diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 2131e0f..c74609f 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -2,6 +2,7 @@ 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 InMemoryEntity & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor & Constructor & ApplicationStaticMixin; @@ -9,5 +10,6 @@ declare const Application_base: 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/executable.d.ts b/dist/js/executable.d.ts index 3777e58..defa353 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -3,6 +3,7 @@ import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/ 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 & RuntimeItemsInMemoryEntityConstructor & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor & typeof InMemoryEntity; @@ -10,5 +11,6 @@ declare const Executable_base: Base; export default class Executable extends Executable_base implements ExecutableSchema { constructor(data?: Partial); static createDefault: () => Executable; + toJSON: () => ExecutableSchema & AnyObject; } export {}; diff --git a/dist/js/flavor.d.ts b/dist/js/flavor.d.ts index f6f4285..03ae11a 100644 --- a/dist/js/flavor.d.ts +++ b/dist/js/flavor.d.ts @@ -3,6 +3,7 @@ import { type DefaultableInMemoryEntityConstructor } from "@mat3ra/code/dist/js/ 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 InMemoryEntity & Constructor & RuntimeItemsInMemoryEntityConstructor & NamedInMemoryEntityConstructor & DefaultableInMemoryEntityConstructor; @@ -10,5 +11,6 @@ declare const Flavor_base: 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/template.d.ts b/dist/js/template.d.ts index 0c7be83..064685a 100644 --- a/dist/js/template.d.ts +++ b/dist/js/template.d.ts @@ -1,11 +1,13 @@ 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 InMemoryEntity & Constructor & NamedInMemoryEntityConstructor & TemplateStaticMixin; declare const Template_base: Base; export default class Template extends Template_base implements TemplateSchema { constructor(data?: Partial); + toJSON: () => TemplateSchema & AnyObject; } export {}; diff --git a/src/js/Application.ts b/src/js/Application.ts index 0aee2e0..8c249cd 100644 --- a/src/js/Application.ts +++ b/src/js/Application.ts @@ -8,6 +8,7 @@ import { 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 { @@ -30,6 +31,8 @@ export default class Application extends (InMemoryEntity as Base) implements App } declare static createDefault: () => Application; + + declare toJSON: () => ApplicationSchema & AnyObject; } namedEntityMixin(Application.prototype); diff --git a/src/js/Executable.ts b/src/js/Executable.ts index cfaba03..66ccb01 100644 --- a/src/js/Executable.ts +++ b/src/js/Executable.ts @@ -12,6 +12,7 @@ import { 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"; @@ -35,6 +36,8 @@ export default class Executable extends (InMemoryEntity as Base) implements Exec } declare static createDefault: () => Executable; + + declare toJSON: () => ExecutableSchema & AnyObject; } namedEntityMixin(Executable.prototype); diff --git a/src/js/Flavor.ts b/src/js/Flavor.ts index c774e26..af35e53 100644 --- a/src/js/Flavor.ts +++ b/src/js/Flavor.ts @@ -12,6 +12,7 @@ import { 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"; @@ -38,6 +39,8 @@ export default class Flavor extends (InMemoryEntity as Base) implements FlavorSc } declare static createDefault: () => Flavor; + + declare toJSON: () => FlavorSchema & AnyObject; } namedEntityMixin(Flavor.prototype); diff --git a/src/js/Template.ts b/src/js/Template.ts index 6ccefa7..af12cc8 100644 --- a/src/js/Template.ts +++ b/src/js/Template.ts @@ -4,6 +4,7 @@ import { 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"; @@ -23,6 +24,8 @@ export default class Template extends (InMemoryEntity as Base) implements Templa ...data, }); } + + declare toJSON: () => TemplateSchema & AnyObject; } namedEntityMixin(Template.prototype); From 0099ff1695e122c7c95183413ddf42aed809c7e4 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Wed, 25 Mar 2026 16:06:30 +0200 Subject: [PATCH 18/18] chore: update code/esse/standata deps --- dist/js/executable.d.ts | 5 +- dist/js/executable.js | 12 +- dist/js/generated/ApplicationSchemaMixin.js | 6 + dist/js/generated/ExecutableSchemaMixin.js | 14 +- dist/js/generated/FlavorSchemaMixin.js | 6 - dist/js/index.d.ts | 4 +- dist/js/index.js | 6 +- dist/js/typeUtils.d.ts | 5 + dist/js/typeUtils.js | 2 + dist/js/types.d.ts | 5 +- package-lock.json | 1032 ++----------------- package.json | 7 +- src/js/ApplicationRegistry.ts | 258 ----- src/js/Executable.ts | 18 +- src/js/generated/ApplicationSchemaMixin.ts | 6 + src/js/generated/ExecutableSchemaMixin.ts | 16 +- src/js/generated/FlavorSchemaMixin.ts | 6 - src/js/index.ts | 5 - src/js/typeUtils.ts | 5 + src/js/types.ts | 6 +- tests/js/ApplicationRegistry.test.ts | 428 -------- tests/js/application.test.ts | 7 +- tests/js/executable.test.ts | 37 +- tests/js/flavor.test.ts | 54 +- tests/js/index.test.ts | 26 + tests/js/template.test.ts | 9 +- 26 files changed, 255 insertions(+), 1730 deletions(-) create mode 100644 dist/js/typeUtils.d.ts create mode 100644 dist/js/typeUtils.js delete mode 100644 src/js/ApplicationRegistry.ts create mode 100644 src/js/typeUtils.ts delete mode 100644 tests/js/ApplicationRegistry.test.ts create mode 100644 tests/js/index.test.ts diff --git a/dist/js/executable.d.ts b/dist/js/executable.d.ts index defa353..7d82e30 100644 --- a/dist/js/executable.d.ts +++ b/dist/js/executable.d.ts @@ -6,10 +6,13 @@ 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"; +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 implements ExecutableSchema { - constructor(data?: Partial); + constructor(data: ExecutableConstructorData); static createDefault: () => Executable; toJSON: () => ExecutableSchema & AnyObject; } diff --git a/dist/js/executable.js b/dist/js/executable.js index 161a8d6..3c4f2aa 100644 --- a/dist/js/executable.js +++ b/dist/js/executable.js @@ -6,14 +6,14 @@ const NamedEntityMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/NamedEnti const RuntimeItemsMixin_1 = require("@mat3ra/code/dist/js/entity/mixins/RuntimeItemsMixin"); const executableMixin_1 = require("./executableMixin"); class Executable extends entity_1.InMemoryEntity { - constructor(data = {}) { + constructor(data) { + var _a, _b, _c, _d; super({ - monitors: [], - results: [], - postProcessors: [], - preProcessors: [], - applicationId: [], ...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 : [], }); } } diff --git a/dist/js/generated/ApplicationSchemaMixin.js b/dist/js/generated/ApplicationSchemaMixin.js index 63a8df0..bb306bf 100644 --- a/dist/js/generated/ApplicationSchemaMixin.js +++ b/dist/js/generated/ApplicationSchemaMixin.js @@ -28,6 +28,12 @@ function applicationSchemaMixin(item) { 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"); }, diff --git a/dist/js/generated/ExecutableSchemaMixin.js b/dist/js/generated/ExecutableSchemaMixin.js index 6ab21d3..3fe9b79 100644 --- a/dist/js/generated/ExecutableSchemaMixin.js +++ b/dist/js/generated/ExecutableSchemaMixin.js @@ -4,17 +4,11 @@ exports.executableSchemaMixin = executableSchemaMixin; function executableSchemaMixin(item) { // @ts-expect-error const properties = { - get name() { - return this.requiredProp("name"); + get applicationName() { + return this.requiredProp("applicationName"); }, - set name(value) { - this.setProp("name", value); - }, - get applicationId() { - return this.requiredProp("applicationId"); - }, - set applicationId(value) { - this.setProp("applicationId", value); + set applicationName(value) { + this.setProp("applicationName", value); }, get hasAdvancedComputeOptions() { return this.prop("hasAdvancedComputeOptions"); diff --git a/dist/js/generated/FlavorSchemaMixin.js b/dist/js/generated/FlavorSchemaMixin.js index cf3434f..70f8ae6 100644 --- a/dist/js/generated/FlavorSchemaMixin.js +++ b/dist/js/generated/FlavorSchemaMixin.js @@ -4,12 +4,6 @@ exports.flavorSchemaMixin = flavorSchemaMixin; function flavorSchemaMixin(item) { // @ts-expect-error const properties = { - get executableId() { - return this.requiredProp("executableId"); - }, - set executableId(value) { - this.setProp("executableId", value); - }, get executableName() { return this.prop("executableName"); }, diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index dcaa237..214c3e6 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -1,12 +1,10 @@ import Application from "./Application"; import { applicationMixin } from "./applicationMixin"; -import ApplicationRegistry from "./ApplicationRegistry"; import Executable from "./Executable"; import { executableMixin } from "./executableMixin"; import Flavor from "./Flavor"; import { flavorMixin } from "./flavorMixin"; import Template from "./Template"; import { templateMixin } from "./templateMixin"; -declare const allApplications: string[]; -export { Application, Executable, Flavor, Template, ApplicationRegistry, executableMixin, flavorMixin, applicationMixin, templateMixin, allApplications, }; +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 90d6fee..1a8af41 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,13 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.allApplications = exports.templateMixin = exports.applicationMixin = exports.flavorMixin = exports.executableMixin = exports.ApplicationRegistry = exports.Template = exports.Flavor = exports.Executable = exports.Application = void 0; +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; } }); -const ApplicationRegistry_1 = __importDefault(require("./ApplicationRegistry")); -exports.ApplicationRegistry = ApplicationRegistry_1.default; const Executable_1 = __importDefault(require("./Executable")); exports.Executable = Executable_1.default; const executableMixin_1 = require("./executableMixin"); @@ -22,5 +20,3 @@ 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; } }); -const allApplications = ApplicationRegistry_1.default.getUniqueAvailableApplicationNames(); -exports.allApplications = allApplications; 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 4cb3bff..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 } from "./templateMixin"; -export type { FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, CreateApplicationConfig, 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 f100236..881418e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,10 +14,9 @@ "devDependencies": { "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#dfa3f260d19cea3a07aac1278bcebd59d242e346", - "@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", "@typescript-eslint/eslint-plugin": "^5.9.1", @@ -59,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", @@ -73,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", @@ -91,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", @@ -121,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", @@ -136,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" @@ -146,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", @@ -177,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", @@ -196,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", @@ -213,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" @@ -226,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", @@ -243,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", @@ -265,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", @@ -283,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", @@ -300,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" @@ -313,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" @@ -323,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", @@ -337,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", @@ -351,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", @@ -369,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" @@ -382,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" @@ -392,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", @@ -410,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", @@ -428,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", @@ -442,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" @@ -452,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" @@ -462,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" @@ -472,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", @@ -487,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", @@ -501,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", @@ -517,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" @@ -530,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", @@ -545,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" @@ -555,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" @@ -572,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" @@ -582,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" @@ -595,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" @@ -611,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", @@ -628,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" @@ -644,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" @@ -660,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", @@ -678,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", @@ -696,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", @@ -716,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", @@ -734,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", @@ -753,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", @@ -771,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", @@ -789,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", @@ -807,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", @@ -825,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", @@ -843,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", @@ -861,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", @@ -882,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", @@ -900,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", @@ -919,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", @@ -936,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" @@ -950,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", @@ -967,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" @@ -980,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" @@ -993,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" @@ -1009,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" @@ -1022,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" @@ -1035,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" @@ -1051,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" @@ -1067,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" @@ -1080,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" @@ -1096,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" @@ -1109,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" @@ -1122,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" @@ -1135,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" @@ -1148,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" @@ -1161,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" @@ -1174,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" @@ -1190,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" @@ -1206,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" @@ -1222,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", @@ -1239,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" @@ -1255,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", @@ -1273,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", @@ -1291,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" @@ -1307,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" @@ -1323,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", @@ -1340,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", @@ -1357,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", @@ -1378,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", @@ -1395,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", @@ -1412,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", @@ -1429,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" @@ -1445,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", @@ -1462,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" @@ -1478,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", @@ -1495,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" @@ -1511,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" @@ -1527,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", @@ -1544,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", @@ -1562,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" @@ -1578,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" @@ -1594,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" @@ -1610,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" @@ -1626,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", @@ -1643,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", @@ -1660,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", @@ -1679,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", @@ -1696,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", @@ -1713,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" @@ -1729,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" @@ -1745,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" @@ -1761,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", @@ -1781,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", @@ -1798,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" @@ -1814,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", @@ -1831,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" @@ -1847,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", @@ -1864,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", @@ -1882,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" @@ -1898,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" @@ -1914,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", @@ -1934,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" @@ -1950,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", @@ -1967,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" @@ -1983,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", @@ -2000,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" @@ -2016,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" @@ -2032,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", @@ -2049,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" @@ -2065,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" @@ -2081,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" @@ -2097,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", @@ -2117,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" @@ -2133,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", @@ -2150,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", @@ -2167,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", @@ -2184,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", @@ -2269,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", @@ -2284,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", @@ -2305,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", @@ -2325,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", @@ -2345,7 +2207,6 @@ "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" @@ -2355,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" @@ -2368,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", @@ -2383,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", @@ -2402,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", @@ -2416,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" @@ -2429,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", @@ -2497,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", @@ -2518,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", @@ -2535,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" @@ -2545,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" @@ -2555,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", @@ -2569,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": { @@ -2618,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", @@ -2638,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", @@ -2668,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", @@ -2699,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", @@ -2718,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", @@ -2737,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" @@ -2755,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", @@ -2774,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", @@ -2863,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", @@ -2880,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", @@ -2900,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", @@ -2915,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" @@ -2929,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" }, @@ -2942,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" } @@ -2952,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" } @@ -2969,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", @@ -2993,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": { @@ -3124,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", @@ -3135,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", @@ -3146,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" @@ -3156,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", @@ -3174,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": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "integrity": "sha512-LWw+caG75Z4nNHinKcKOUXzeFwZHNPXlJ9Lm6/wVJ4Y7He7mNf5YQfkYSVbctWWzYAi4IlH34ZSb6tyTS0FCCw==", - "dev": true, + "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", @@ -3208,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" @@ -3219,9 +3057,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#dfa3f260d19cea3a07aac1278bcebd59d242e346", - "integrity": "sha512-fqYHPctqxOUu67owdooAaSgyFc7SLgU5zYGrT7SFysZJbUzXUd5cCY5Yl25qSIrWtJ8OmlMkHQWPmWFXJqrpZg==", - "dev": true, + "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", @@ -3233,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", @@ -3255,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", @@ -3274,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", @@ -3293,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", @@ -3307,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", @@ -3341,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", @@ -3371,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", @@ -3409,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" @@ -3419,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", @@ -3438,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" @@ -3449,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", @@ -3466,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", @@ -3555,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" @@ -3565,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", @@ -3586,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", @@ -3597,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" @@ -3613,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", @@ -3628,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", @@ -3642,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" @@ -3655,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" @@ -3665,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": "*" @@ -3679,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": "*" @@ -3693,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", @@ -3717,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" @@ -3737,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", @@ -3751,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", @@ -3780,8 +3591,8 @@ "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.1", @@ -3811,8 +3622,8 @@ "version": "20.19.25", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -3821,8 +3632,8 @@ "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" @@ -3835,392 +3646,27 @@ "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" + "license": "MIT", + "peer": true }, "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==", + "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": { - "@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" + "lodash": "^4.17.21", + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" }, "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "node": ">=20.0.0" }, "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_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/standata/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "@mat3ra/esse": "*" } }, "node_modules/@mat3ra/tsconfig": { @@ -4753,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 }, @@ -4761,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" @@ -4830,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": "*" } @@ -4875,21 +4314,18 @@ "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, "license": "MIT" }, "node_modules/@types/json-schema-merge-allof": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.5.tgz", "integrity": "sha512-5mS11ZUTyFNUVEMpK3uKoPb6BWL/nLgW/ln2VOiI8OOxKEYC4Gl9O3WjS5P49yqVTfkcbCAPKw3T1O4erUah5g==", - "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "*" @@ -4906,14 +4342,12 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/mathjs": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-5.0.1.tgz", "integrity": "sha512-EFBuueI+BRed9bnUO6/9my55b4FH+VQIvqMm58h9JGbtaGCkqr3YSDhnmVbM1SJjF//8SURERSypzNwejOk7lA==", - "dev": true, "license": "MIT", "dependencies": { "decimal.js": "^10.0.0" @@ -4923,14 +4357,12 @@ "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": { @@ -4948,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": "*" } @@ -5220,14 +4652,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", - "dev": true, "license": "MIT" }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5240,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" @@ -5250,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" @@ -5263,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" @@ -5290,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", @@ -5307,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" @@ -5325,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" @@ -5378,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" @@ -5388,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" @@ -5404,7 +4826,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -5438,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": { @@ -5462,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" @@ -5473,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", @@ -5621,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", @@ -5643,7 +5061,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, "license": "MIT" }, "node_modules/assertion-error": { @@ -5667,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" @@ -5677,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" @@ -5687,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" @@ -5723,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", @@ -5738,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", @@ -5752,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" @@ -5765,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" @@ -5782,7 +5191,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -5795,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", @@ -5806,7 +5214,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -5826,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", @@ -5860,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": { @@ -5899,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", @@ -5918,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", @@ -5932,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", @@ -5949,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" @@ -5969,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", @@ -6009,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", @@ -6026,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": "*" @@ -6049,7 +5448,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -6159,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" @@ -6169,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", @@ -6197,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" @@ -6210,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": { @@ -6224,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" @@ -6244,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": "*" @@ -6261,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", @@ -6272,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", @@ -6284,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": { @@ -6298,14 +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-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" @@ -6319,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": { @@ -6331,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", @@ -6353,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": "*" @@ -6363,14 +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/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": { @@ -6384,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", @@ -6402,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", @@ -6420,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", @@ -6438,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" @@ -6466,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": { @@ -6486,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": { @@ -6509,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", @@ -6527,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", @@ -6586,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" @@ -6599,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", @@ -6621,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": { @@ -6635,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", @@ -6649,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", @@ -6718,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" @@ -6728,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" @@ -6766,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" @@ -6779,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", @@ -6808,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", @@ -6833,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" @@ -6843,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" @@ -6864,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", @@ -7433,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", @@ -7447,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" @@ -7457,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" @@ -7473,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" @@ -7483,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" @@ -7493,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" @@ -7503,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", @@ -7520,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" @@ -7530,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" @@ -7540,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", @@ -7554,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" @@ -7574,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", @@ -7596,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" @@ -7606,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", @@ -7620,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" @@ -7633,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" @@ -7646,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" @@ -7656,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" @@ -7690,7 +7028,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -7721,21 +7058,18 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "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", @@ -7762,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" @@ -7775,7 +7108,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -7788,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", @@ -7830,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", @@ -7845,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" @@ -7882,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": "*" @@ -7913,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, @@ -7942,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" @@ -7952,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", @@ -7973,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" @@ -7990,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" @@ -8000,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" @@ -8030,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", @@ -8065,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", @@ -8092,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", @@ -8111,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", @@ -8132,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==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -8145,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" @@ -8161,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", @@ -8209,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" @@ -8246,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" @@ -8259,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" @@ -8269,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" @@ -8282,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" @@ -8298,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" @@ -8311,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" @@ -8354,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" @@ -8420,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", @@ -8437,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" @@ -8458,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", @@ -8469,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", @@ -8491,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", @@ -8509,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", @@ -8529,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" @@ -8545,7 +7841,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -8558,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", @@ -8575,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" @@ -8595,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" @@ -8611,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", @@ -8629,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", @@ -8646,7 +7936,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8656,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" @@ -8685,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", @@ -8705,7 +7992,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8718,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" @@ -8731,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" @@ -8741,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" @@ -8754,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" @@ -8767,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" @@ -8780,7 +8061,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -8790,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", @@ -8817,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" @@ -8830,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", @@ -8849,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" @@ -8862,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" @@ -8891,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", @@ -8908,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", @@ -8926,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" @@ -8962,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" @@ -8975,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" @@ -8988,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" @@ -9004,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", @@ -9031,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" @@ -9216,21 +8482,18 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true, "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -9253,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" @@ -9266,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" @@ -9290,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", @@ -9310,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", @@ -9325,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", @@ -9349,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" @@ -9365,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" @@ -9489,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" @@ -9499,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" @@ -9529,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", @@ -9722,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": { @@ -9736,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": { @@ -9874,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" @@ -9884,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", @@ -9898,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" @@ -9908,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" @@ -9925,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", @@ -9948,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", @@ -9967,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": { @@ -10015,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" @@ -10028,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" @@ -10038,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": { @@ -10229,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": { @@ -10249,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": { @@ -10276,14 +9508,13 @@ "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": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10306,7 +9537,6 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "a-sync-waterfall": "^1.0.0", @@ -10332,7 +9562,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -10630,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" @@ -10643,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" @@ -10653,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", @@ -10743,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" @@ -10769,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", @@ -10787,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", @@ -10853,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" @@ -10879,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" @@ -10902,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" @@ -10912,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" @@ -10922,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": { @@ -10949,14 +10167,13 @@ "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": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -10982,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" @@ -10992,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" @@ -11002,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" @@ -11015,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" @@ -11028,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", @@ -11042,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" @@ -11058,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" @@ -11071,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" @@ -11081,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" @@ -11091,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" @@ -11143,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" @@ -11165,7 +10371,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11213,7 +10418,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -11226,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", @@ -11249,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" @@ -11269,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", @@ -11297,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" @@ -11310,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", @@ -11338,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" @@ -11381,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" @@ -11408,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", @@ -11429,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" @@ -11482,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" @@ -11532,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", @@ -11573,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", @@ -11590,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", @@ -11608,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" @@ -11649,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", @@ -11667,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", @@ -11683,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", @@ -11698,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" @@ -11711,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" @@ -11724,7 +10905,6 @@ "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" @@ -11734,7 +10914,6 @@ "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", @@ -11754,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", @@ -11771,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", @@ -11790,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", @@ -11817,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" @@ -11857,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" @@ -11867,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", @@ -11937,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", @@ -12069,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", @@ -12091,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", @@ -12110,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", @@ -12128,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" @@ -12161,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" @@ -12174,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" @@ -12187,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" @@ -12217,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", @@ -12234,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" @@ -12251,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", @@ -12269,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", @@ -12299,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": { @@ -12313,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", @@ -12337,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" @@ -12355,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" @@ -12368,7 +11522,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -12381,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", @@ -12399,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", @@ -12443,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" @@ -12456,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" @@ -12532,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" @@ -12555,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" @@ -12568,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", @@ -12583,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", @@ -12603,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", @@ -12625,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", @@ -12646,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" } @@ -12665,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", @@ -12688,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", @@ -12702,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", @@ -12721,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", @@ -12742,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 }, @@ -12750,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" @@ -12760,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", @@ -12774,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" @@ -12784,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" @@ -12794,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", @@ -12825,7 +11957,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -12835,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" @@ -12852,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" } @@ -12894,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" @@ -12903,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" @@ -12926,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", @@ -12946,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", @@ -12974,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", @@ -13000,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", @@ -13022,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" @@ -13089,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": { @@ -13119,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": { @@ -13239,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 71e8059..fe55e1f 100644 --- a/package.json +++ b/package.json @@ -49,10 +49,9 @@ "@babel/eslint-parser": "^7.16.3", "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/utils": "2025.9.20-0", - "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#cf4115b459e7d308e708b606adfca7918185e525", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#dfa3f260d19cea3a07aac1278bcebd59d242e346", - "@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", "@typescript-eslint/eslint-plugin": "^5.9.1", "@typescript-eslint/parser": "^5.9.1", diff --git a/src/js/ApplicationRegistry.ts b/src/js/ApplicationRegistry.ts deleted file mode 100644 index 95fbaf5..0000000 --- a/src/js/ApplicationRegistry.ts +++ /dev/null @@ -1,258 +0,0 @@ -import { getOneMatchFromObject } from "@mat3ra/code/dist/js/utils/object"; -import type { - ApplicationSchema, - ExecutableSchema, - TemplateSchema, -} 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]: ApplicationSchema; -}; - -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?: ApplicationSchema[]; - - 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: ApplicationSchema[] = []; - - 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: ApplicationSchema = { - ...appData, - // @ts-ignore - 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); - } - - static getInputAsTemplates(flavor: Flavor) { - return this.getInput(flavor).map((template) => new Template(template)); - } - - static getInput(flavor: Flavor): TemplateSchema[] { - const appName = flavor.applicationName || ""; - const execName = flavor.executableName || ""; - - return flavor.input.map((input): TemplateSchema => { - 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 { ...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: 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 index 66ccb01..2db77f7 100644 --- a/src/js/Executable.ts +++ b/src/js/Executable.ts @@ -16,6 +16,13 @@ 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 & @@ -24,14 +31,13 @@ type Base = Constructor & typeof InMemoryEntity; export default class Executable extends (InMemoryEntity as Base) implements ExecutableSchema { - constructor(data: Partial = {}) { + constructor(data: ExecutableConstructorData) { super({ - monitors: [], - results: [], - postProcessors: [], - preProcessors: [], - applicationId: [], ...data, + monitors: data.monitors ?? [], + results: data.results ?? [], + postProcessors: data.postProcessors ?? [], + preProcessors: data.preProcessors ?? [], }); } diff --git a/src/js/generated/ApplicationSchemaMixin.ts b/src/js/generated/ApplicationSchemaMixin.ts index d136674..9a1944d 100644 --- a/src/js/generated/ApplicationSchemaMixin.ts +++ b/src/js/generated/ApplicationSchemaMixin.ts @@ -34,6 +34,12 @@ export function applicationSchemaMixin( 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", diff --git a/src/js/generated/ExecutableSchemaMixin.ts b/src/js/generated/ExecutableSchemaMixin.ts index 80e554e..288a202 100644 --- a/src/js/generated/ExecutableSchemaMixin.ts +++ b/src/js/generated/ExecutableSchemaMixin.ts @@ -10,17 +10,13 @@ export function executableSchemaMixin( ): asserts item is T & ExecutableSchemaMixin { // @ts-expect-error const properties: InMemoryEntity & ExecutableSchemaMixin = { - get name() { - return this.requiredProp("name"); - }, - set name(value: ExecutablePropertiesSchema["name"]) { - this.setProp("name", value); - }, - get applicationId() { - return this.requiredProp("applicationId"); + get applicationName() { + return this.requiredProp( + "applicationName", + ); }, - set applicationId(value: ExecutablePropertiesSchema["applicationId"]) { - this.setProp("applicationId", value); + set applicationName(value: ExecutablePropertiesSchema["applicationName"]) { + this.setProp("applicationName", value); }, get hasAdvancedComputeOptions() { return this.prop( diff --git a/src/js/generated/FlavorSchemaMixin.ts b/src/js/generated/FlavorSchemaMixin.ts index 024cb69..441aaf5 100644 --- a/src/js/generated/FlavorSchemaMixin.ts +++ b/src/js/generated/FlavorSchemaMixin.ts @@ -10,12 +10,6 @@ export function flavorSchemaMixin( ): asserts item is T & FlavorSchemaMixin { // @ts-expect-error const properties: InMemoryEntity & FlavorSchemaMixin = { - get executableId() { - return this.requiredProp("executableId"); - }, - set executableId(value: FlavorPropertiesSchema["executableId"]) { - this.setProp("executableId", value); - }, get executableName() { return this.prop("executableName"); }, diff --git a/src/js/index.ts b/src/js/index.ts index a869848..8333163 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -1,6 +1,5 @@ import Application from "./Application"; import { applicationMixin } from "./applicationMixin"; -import ApplicationRegistry from "./ApplicationRegistry"; import Executable from "./Executable"; import { executableMixin } from "./executableMixin"; import Flavor from "./Flavor"; @@ -8,19 +7,15 @@ import { flavorMixin } from "./flavorMixin"; import Template from "./Template"; import { templateMixin } from "./templateMixin"; -const allApplications = ApplicationRegistry.getUniqueAvailableApplicationNames(); - export { Application, Executable, Flavor, Template, - ApplicationRegistry, executableMixin, flavorMixin, applicationMixin, templateMixin, - allApplications, }; export type * from "./types"; 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 028a783..db25011 100644 --- a/src/js/types.ts +++ b/src/js/types.ts @@ -1,14 +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 } from "./templateMixin"; +export type { PartialBy } from "./typeUtils"; + export type { + ExecutableConstructorData, FlavorMixin, ExecutableMixin, ApplicationMixin, ApplicationStaticMixin, - CreateApplicationConfig, TemplateMixin, }; diff --git a/tests/js/ApplicationRegistry.test.ts b/tests/js/ApplicationRegistry.test.ts deleted file mode 100644 index 7d6023a..0000000 --- a/tests/js/ApplicationRegistry.test.ts +++ /dev/null @@ -1,428 +0,0 @@ -/* eslint-disable no-unused-expressions */ -import { expect } from "chai"; - -import Application from "../../src/js/Application"; -import type { CreateApplicationConfig } from "../../src/js/ApplicationRegistry"; -import ApplicationRegistry from "../../src/js/ApplicationRegistry"; -import Executable from "../../src/js/Executable"; -import Flavor from "../../src/js/Flavor"; -import Template from "../../src/js/Template"; - -describe("ApplicationRegistry", () => { - beforeEach(() => { - // Reset static properties before each test - ApplicationRegistry.applicationsTree = undefined; - ApplicationRegistry.applicationsArray = undefined; - }); - - 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({ - executableId: "espresso_pw", - input: [], - }), - ); - - expect(templates).to.be.an("array"); - expect(templates.length).to.equal(0); - }); - - it("should handle input with templateName", () => { - const templates = ApplicationRegistry.getInputAsTemplates( - new Flavor({ - executableId: "espresso_pw", - 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("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/application.test.ts b/tests/js/application.test.ts index 9893063..e025fe5 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -1,9 +1,14 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import Application from "../../src/js/Application"; +import { Application } from "../../src/js"; describe("Application", () => { + it("constructs with default data when no argument is passed", () => { + const app = new Application(); + expect(app).to.be.instanceOf(Application); + }); + describe("applicationMixin properties", () => { describe("isUsingMaterial property", () => { it("should return true for vasp application", () => { diff --git a/tests/js/executable.test.ts b/tests/js/executable.test.ts index 757cb83..8226edb 100644 --- a/tests/js/executable.test.ts +++ b/tests/js/executable.test.ts @@ -1,11 +1,44 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import Executable from "../../src/js/Executable"; +import { Executable } from "../../src/js"; describe("Executable", () => { + 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("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("toJSON works as expected", () => { - const executable = new Executable({ name: "espresso" }); + 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"); diff --git a/tests/js/flavor.test.ts b/tests/js/flavor.test.ts index 20efe3f..9b37ce2 100644 --- a/tests/js/flavor.test.ts +++ b/tests/js/flavor.test.ts @@ -1,24 +1,50 @@ /* 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("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(""); + }); + + 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("results are correct", () => { - const pwscfFlavor = ApplicationRegistry.getAllFlavorsForApplication("espresso").find( - (flavor) => { - return flavor.name === "pw_scf"; + const standata = new ApplicationStandata(); + const { flavor } = standata.getExecutableAndFlavorByName("espresso", "pw.x", "pw_scf"); + + 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", }, - ); - expect(pwscfFlavor?.results).to.deep.equal([ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force", ]); }); 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/template.test.ts b/tests/js/template.test.ts index 3cf6949..816e2fa 100644 --- a/tests/js/template.test.ts +++ b/tests/js/template.test.ts @@ -1,9 +1,16 @@ /* eslint-disable no-unused-expressions */ import { expect } from "chai"; -import Template from "../../src/js/Template"; +import { Template } from "../../src/js"; describe("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", content: "test content" }); const json = template.toJSON();