diff --git a/client/package.json b/client/package.json index 207662d93ce..5b2a2c8574b 100644 --- a/client/package.json +++ b/client/package.json @@ -99,7 +99,7 @@ "querystring-es3": "^0.2.1", "regenerator-runtime": "^0.14.0", "requirejs": "2.3.7", - "ro-crate-zip-explorer": "^0.4.0", + "ro-crate-zip-explorer": "^0.4.1", "rxjs": "^7.8.1", "rxjs-spy": "^8.0.2", "rxjs-spy-devtools-plugin": "^0.0.4", @@ -196,10 +196,9 @@ "fork-ts-checker-webpack-plugin": "^9.0.2", "fs-extra": "^11.2.0", "gulp": "^5.0.0", + "happy-dom": "^20.0.10", "ignore-loader": "^0.1.2", "imports-loader": "^5.0.0", - "jsdom": "^27.2.0", - "jsdom-worker": "^0.3.0", "json-loader": "^0.5.7", "mini-css-extract-plugin": "^2.9.2", "msw": "^2.3.4", diff --git a/client/src/app/__mocks__/index.js b/client/src/app/__mocks__/index.js deleted file mode 100644 index 43ce32827dd..00000000000 --- a/client/src/app/__mocks__/index.js +++ /dev/null @@ -1,38 +0,0 @@ -export function getGalaxyInstance() { - return { - config: { - allow_user_deletion: false, - allow_local_account_creation: true, - wiki_url: "https://galaxyproject.org/", - ftp_upload_site: null, - support_url: "https://galaxyproject.org/support/", - allow_user_dataset_purge: false, - allow_library_path_paste: false, - user_library_import_dir: null, - terms_url: null, - library_import_dir: null, - logo_url: null, - enable_unique_workflow_defaults: false, - }, - user: { - username: "test", - quota_percent: null, - total_disk_usage: 61815527, - nice_total_disk_usage: "59.0 MB", - email: "test@test.test", - model_class: "User", - id: "f2db41e1fa331b3e", - attributes: {}, - isAdmin: function () { - return false; - }, - }, - root: "/", - emit: { - debug: function () {}, - error: function (v) { - window.console.error(v); - }, - }, - }; -} diff --git a/client/src/components/ActivityBar/ActivitySettings.test.js b/client/src/components/ActivityBar/ActivitySettings.test.js index 2aa498da26e..728d31efe4f 100644 --- a/client/src/components/ActivityBar/ActivitySettings.test.js +++ b/client/src/components/ActivityBar/ActivitySettings.test.js @@ -78,7 +78,7 @@ describe("ActivitySettings", () => { expect(items.length).toBe(1); const checkbox = items.at(0).find("[data-title='Hide in Activity Bar']"); expect(checkbox.exists()).toBeTruthy(); - const icon = wrapper.find("[icon='activity-test-icon'"); + const icon = wrapper.find("[icon='activity-test-icon']"); expect(icon.exists()).toBeTruthy(); expect(activityStore.getAll()[0].visible).toBeTruthy(); checkbox.trigger("click"); diff --git a/client/src/components/Citation/CitationsList.test.ts b/client/src/components/Citation/CitationsList.test.ts index 80823d59eff..566f5cdf83d 100644 --- a/client/src/components/Citation/CitationsList.test.ts +++ b/client/src/components/Citation/CitationsList.test.ts @@ -6,22 +6,20 @@ import flushPromises from "flush-promises"; import { beforeEach, describe, expect, it, vi } from "vitest"; import VueRouter from "vue-router"; +import { setMockConfig } from "@/composables/__mocks__/config"; + import CitationItem from "./CitationItem.vue"; import MountTarget from "./CitationsList.vue"; const localVue = getLocalVue(true); localVue.use(VueRouter); -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: { - value: { - citation_bibtex: - "@article{Galaxy2024, title={The Galaxy platform for accessible, reproducible, and collaborative data analyses: 2024 update}, author={{The Galaxy Community}}, journal={Nucleic Acids Research}, year={2024}, doi={10.1093/nar/gkae410}, url={https://doi.org/10.1093/nar/gkae410}}", - }, - }, - })), -})); +vi.mock("@/composables/config"); + +setMockConfig({ + citation_bibtex: + "@article{Galaxy2024, title={The Galaxy platform for accessible, reproducible, and collaborative data analyses: 2024 update}, author={{The Galaxy Community}}, journal={Nucleic Acids Research}, year={2024}, doi={10.1093/nar/gkae410}, url={https://doi.org/10.1093/nar/gkae410}}", +}); vi.mock("@/components/Citation/services", () => ({ getCitations: vi.fn(() => diff --git a/client/src/components/DatasetInformation/DatasetError.test.ts b/client/src/components/DatasetInformation/DatasetError.test.ts index 81d182c67f5..17ecc3fdfb4 100644 --- a/client/src/components/DatasetInformation/DatasetError.test.ts +++ b/client/src/components/DatasetInformation/DatasetError.test.ts @@ -15,12 +15,7 @@ const localVue = getLocalVue(); const DATASET_ID = "dataset_id"; -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: {}, - isConfigLoaded: true, - })), -})); +vi.mock("@/composables/config"); const { server, http } = useServerMock(); diff --git a/client/src/components/Form/Elements/FormData/FormData.test.ts b/client/src/components/Form/Elements/FormData/FormData.test.ts index 4b3b228803b..c786b17e819 100644 --- a/client/src/components/Form/Elements/FormData/FormData.test.ts +++ b/client/src/components/Form/Elements/FormData/FormData.test.ts @@ -442,7 +442,7 @@ describe("FormData", () => { }); const noCheckLinked = wrapper.find("input[type='checkbox']"); expect(noCheckLinked.exists()).toBeFalsy(); - await wrapper.find("[title='Multiple datasets'").trigger("click"); + await wrapper.find("[title='Multiple datasets']").trigger("click"); expect(wrapper.emitted()!.input![1]![0]).toEqual(null); const elements_0 = wrapper.findAll(SELECT_OPTIONS); expect(elements_0.length).toEqual(6); @@ -508,7 +508,7 @@ describe("FormData", () => { const selectedValues = wrapper.findAll(SELECTED_VALUE); expect(selectedValues.length).toBe(1); expect(selectedValues.at(0).text()).toBe("5: hdcaName5"); - await wrapper.find("[title='Multiple datasets'").trigger("click"); + await wrapper.find("[title='Multiple datasets']").trigger("click"); expect(options.at(0).classes()).toContain("active"); expect(wrapper.emitted()!.input![2]![0]).toEqual(null); }); diff --git a/client/src/components/Form/Elements/FormText.test.js b/client/src/components/Form/Elements/FormText.test.js index 603c9a2892f..d39f493cf11 100644 --- a/client/src/components/Form/Elements/FormText.test.js +++ b/client/src/components/Form/Elements/FormText.test.js @@ -47,9 +47,10 @@ describe("FormText", () => { it("should be able to render border and text color from props", async () => { const wrapper = await mountFormText({}); const el = wrapper.find("input"); - expect(el.element.style).toMatchObject({}); + expect(el.element.style.color).toBeFalsy(); await wrapper.setProps({ color: "green" }); - expect(el.element.style).toMatchObject({ color: "green", "border-color": "green" }); + expect(el.element.style.color).toBe("green"); + expect(el.element.style.borderColor).toBe("green"); await wrapper.setProps({ cls: "my-custom-class" }); expect(el.element.classList).toContain("my-custom-class"); }); diff --git a/client/src/components/Markdown/Sections/MarkdownGalaxy.test.js b/client/src/components/Markdown/Sections/MarkdownGalaxy.test.js index 00ca92ce59f..c571c77367b 100644 --- a/client/src/components/Markdown/Sections/MarkdownGalaxy.test.js +++ b/client/src/components/Markdown/Sections/MarkdownGalaxy.test.js @@ -91,7 +91,8 @@ describe("MarkdownContainer", () => { const container = wrapper.find(".collapse"); expect(container.attributes("style")).toBe("display: none;"); await link.trigger("click"); - expect(container.attributes("style")).toBe(""); + // After click, style attribute is removed + expect(container.attributes("style")).toBeFalsy(); }); it("Renders time stamp", async () => { diff --git a/client/src/components/Panels/Common/ToolSection.test.js b/client/src/components/Panels/Common/ToolSection.test.js index 5cf40d1637e..c7b3431d011 100644 --- a/client/src/components/Panels/Common/ToolSection.test.js +++ b/client/src/components/Panels/Common/ToolSection.test.js @@ -3,16 +3,15 @@ import { mount } from "@vue/test-utils"; import { createPinia } from "pinia"; import { describe, expect, test, vi } from "vitest"; +import { setMockConfig } from "@/composables/__mocks__/config"; + import ToolSection from "./ToolSection.vue"; -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: { - toolbox_auto_sort: true, - }, - isConfigLoaded: true, - })), -})); +vi.mock("@/composables/config"); + +setMockConfig({ + toolbox_auto_sort: true, +}); const localVue = getLocalVue(); const pinia = createPinia(); diff --git a/client/src/components/Panels/ToolBox.test.js b/client/src/components/Panels/ToolBox.test.js index 2561c0ccc79..f88e1b37727 100644 --- a/client/src/components/Panels/ToolBox.test.js +++ b/client/src/components/Panels/ToolBox.test.js @@ -4,17 +4,15 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import toolsList from "@/components/ToolsView/testData/toolsList"; import toolsListInPanel from "@/components/ToolsView/testData/toolsListInPanel"; +import { setMockConfig } from "@/composables/__mocks__/config"; import { createSortedResultPanel, filterTools } from "./utilities"; -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: { - toolbox_auto_sort: true, - }, - isConfigLoaded: true, - })), -})); +vi.mock("@/composables/config"); + +setMockConfig({ + toolbox_auto_sort: true, +}); describe("ToolBox", () => { const toolsMock = toolsList.reduce((acc, item) => { diff --git a/client/src/components/Panels/ToolPanel.test.ts b/client/src/components/Panels/ToolPanel.test.ts index 1b06dacf5ab..f118968ba00 100644 --- a/client/src/components/Panels/ToolPanel.test.ts +++ b/client/src/components/Panels/ToolPanel.test.ts @@ -35,12 +35,7 @@ const TEST_PANELS_URI = "/api/tool_panels"; const DEFAULT_VIEW_ID = "default"; const PANEL_VIEW_ERR_MSG = "Error loading panel view"; -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: {}, - isConfigLoaded: true, - })), -})); +vi.mock("@/composables/config"); vi.mock("@/composables/userLocalStorage", () => ({ useUserLocalStorage: vi.fn(() => ref(DEFAULT_VIEW_ID)), diff --git a/client/src/components/TagsMultiselect/HeadlessMultiselect.test.ts b/client/src/components/TagsMultiselect/HeadlessMultiselect.test.ts index 325218bd062..1510d782c0f 100644 --- a/client/src/components/TagsMultiselect/HeadlessMultiselect.test.ts +++ b/client/src/components/TagsMultiselect/HeadlessMultiselect.test.ts @@ -1,15 +1,11 @@ import { getLocalVue } from "@tests/vitest/helpers"; import { mount } from "@vue/test-utils"; -import { describe, expect, it, vi } from "vitest"; +import { describe, expect, it } from "vitest"; import { nextTick } from "vue"; import HeadlessMultiselect from "./HeadlessMultiselect.vue"; describe("HeadlessMultiselect", () => { - // this function is not implemented in jsdom - // mocking it to avoid false errors - Element.prototype.scrollIntoView = vi.fn(); - const localVue = getLocalVue(); type Props = InstanceType["$props"]; diff --git a/client/src/components/Tool/ToolForm.test.js b/client/src/components/Tool/ToolForm.test.js index 11daa7fb473..aade2046cf7 100644 --- a/client/src/components/Tool/ToolForm.test.js +++ b/client/src/components/Tool/ToolForm.test.js @@ -41,9 +41,9 @@ describe("ToolForm", () => { }), ); - // the PersonViewer component uses a BPopover that doesn't work with jsdom properly. It would be + // the PersonViewer component uses a BPopover that doesn't work in the test environment. It would be // better to break PersonViewer and OrganizationViewer out into smaller subcomponents and just - // stub out the Popover piece I think. + // stub out the Popover piece. suppressBootstrapVueWarnings(); axiosMock = new MockAdapter(axios); diff --git a/client/src/components/Upload/UploadModal.test.js b/client/src/components/Upload/UploadModal.test.js index dd9b0d40191..f098834d8aa 100644 --- a/client/src/components/Upload/UploadModal.test.js +++ b/client/src/components/Upload/UploadModal.test.js @@ -12,12 +12,7 @@ import { useUserStore } from "@/stores/userStore"; import UploadContainer from "./UploadContainer.vue"; import UploadModal from "./UploadModal.vue"; -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: {}, - isConfigLoaded: true, - })), -})); +vi.mock("@/composables/config"); const { server, http } = useServerMock(); diff --git a/client/src/components/Workflow/List/WorkflowList.test.ts b/client/src/components/Workflow/List/WorkflowList.test.ts index 6b5dace706a..50d55c851ce 100644 --- a/client/src/components/Workflow/List/WorkflowList.test.ts +++ b/client/src/components/Workflow/List/WorkflowList.test.ts @@ -7,6 +7,7 @@ import { setActivePinia } from "pinia"; import { beforeEach, describe, expect, it, vi } from "vitest"; import VueRouter from "vue-router"; +import { useServerMock } from "@/api/client/__mocks__"; import { loadWorkflows } from "@/api/workflows"; import { useUserStore } from "@/stores/userStore"; @@ -14,6 +15,8 @@ import { generateRandomWorkflowList } from "../testUtils"; import WorkflowList from "./WorkflowList.vue"; +const { server, http } = useServerMock(); + vi.mock("@/api/workflows", () => ({ loadWorkflows: vi.fn(), })); @@ -55,6 +58,12 @@ describe("WorkflowList", () => { beforeEach(() => { suppressBootstrapVueWarnings(); vi.clearAllMocks(); + // Mock the workflow counts endpoint used by workflow card badges + server.use( + http.get("/api/workflows/{workflow_id}/counts", ({ response }) => { + return response(200).json({}); + }), + ); }); it("render empty workflow list", async () => { diff --git a/client/src/components/Workflow/Run/__mocks__/WorkflowRunSuccess.vue b/client/src/components/Workflow/Run/__mocks__/WorkflowRunSuccess.vue deleted file mode 100644 index 44f9f66f018..00000000000 --- a/client/src/components/Workflow/Run/__mocks__/WorkflowRunSuccess.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/client/src/composables/__mocks__/config.ts b/client/src/composables/__mocks__/config.ts new file mode 100644 index 00000000000..2f6623faebc --- /dev/null +++ b/client/src/composables/__mocks__/config.ts @@ -0,0 +1,34 @@ +import { vi } from "vitest"; +import { ref } from "vue"; + +// Default mock config values +const defaultConfig = { + allow_local_account_creation: true, + enable_oidc: false, + mailing_join_addr: "", + prefer_custos_login: false, + registration_warning_message: "", + server_mail_configured: false, + show_welcome_with_login: false, + terms_url: "", + welcome_url: "", + citation_bibtex: "", + toolbox_auto_sort: false, +}; + +const mockConfig = ref({ ...defaultConfig }); + +export const useConfig = vi.fn(() => ({ + config: mockConfig, + isConfigLoaded: true, +})); + +// Helper function for tests to override config values +export function setMockConfig(config: Record) { + mockConfig.value = { ...mockConfig.value, ...config }; +} + +// Helper function to reset config to defaults +export function resetMockConfig() { + mockConfig.value = { ...defaultConfig }; +} diff --git a/client/src/entry/analysis/modules/Login.test.ts b/client/src/entry/analysis/modules/Login.test.ts index 256dc65093b..64bfc49eb32 100644 --- a/client/src/entry/analysis/modules/Login.test.ts +++ b/client/src/entry/analysis/modules/Login.test.ts @@ -2,35 +2,33 @@ import { createTestingPinia } from "@pinia/testing"; import { getLocalVue } from "@tests/vitest/helpers"; import { shallowMount } from "@vue/test-utils"; import { setActivePinia } from "pinia"; -import { describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { setMockConfig } from "@/composables/__mocks__/config"; import Login from "./Login.vue"; const localVue = getLocalVue(true); -const configMock = { - allow_local_account_creation: true, - enable_oidc: true, - mailing_join_addr: "mailing_join_addr", - prefer_custos_login: true, - registration_warning_message: "registration_warning_message", - server_mail_configured: true, - show_welcome_with_login: true, - terms_url: "terms_url", - welcome_url: "welcome_url", -}; - vi.mock("@/app", () => ({ getGalaxyInstance: vi.fn(() => ({ session_csrf_token: "session_csrf_token" })), })); -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: configMock, +vi.mock("@/composables/config"); - isConfigLoaded: true, - })), -})); +beforeEach(() => { + setMockConfig({ + allow_local_account_creation: true, + enable_oidc: true, + mailing_join_addr: "mailing_join_addr", + prefer_custos_login: true, + registration_warning_message: "registration_warning_message", + server_mail_configured: true, + show_welcome_with_login: true, + terms_url: "terms_url", + welcome_url: "welcome_url", + }); +}); const mockRouter = (query: object) => ({ currentRoute: { diff --git a/client/src/entry/analysis/modules/Register.test.ts b/client/src/entry/analysis/modules/Register.test.ts index b2e487f47a0..351e6ef9d3d 100644 --- a/client/src/entry/analysis/modules/Register.test.ts +++ b/client/src/entry/analysis/modules/Register.test.ts @@ -1,35 +1,34 @@ import { createTestingPinia } from "@pinia/testing"; import { getLocalVue } from "@tests/vitest/helpers"; import { shallowMount } from "@vue/test-utils"; -import { describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { setMockConfig } from "@/composables/__mocks__/config"; import Register from "./Register.vue"; import RegisterForm from "@/components/Register/RegisterForm.vue"; const localVue = getLocalVue(true); -const configMock = { - allow_local_account_creation: true, - enable_oidc: true, - mailing_join_addr: "mailing_join_addr", - prefer_custos_login: true, - registration_warning_message: "registration_warning_message", - server_mail_configured: true, - show_welcome_with_login: true, - terms_url: "terms_url", - welcome_url: "welcome_url", -}; - vi.mock("@/app/singleton", () => ({ getGalaxyInstance: vi.fn(() => ({ session_csrf_token: "session_csrf_token" })), })); -vi.mock("@/composables/config", () => ({ - useConfig: vi.fn(() => ({ - config: configMock, - isConfigLoaded: true, - })), -})); +vi.mock("@/composables/config"); + +beforeEach(() => { + setMockConfig({ + allow_local_account_creation: true, + enable_oidc: true, + mailing_join_addr: "mailing_join_addr", + prefer_custos_login: true, + registration_warning_message: "registration_warning_message", + server_mail_configured: true, + show_welcome_with_login: true, + terms_url: "terms_url", + welcome_url: "welcome_url", + }); +}); const mockRouter = (query: object) => ({ currentRoute: { diff --git a/client/tests/vitest/__mocks__/font.js b/client/tests/vitest/__mocks__/font.js deleted file mode 100644 index ff8b4c56321..00000000000 --- a/client/tests/vitest/__mocks__/font.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; diff --git a/client/tests/vitest/__mocks__/style.js b/client/tests/vitest/__mocks__/style.js deleted file mode 100644 index f053ebf7976..00000000000 --- a/client/tests/vitest/__mocks__/style.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {}; diff --git a/client/tests/vitest/setup.ts b/client/tests/vitest/setup.ts index 0c3f457d92a..b3bf8dd8767 100644 --- a/client/tests/vitest/setup.ts +++ b/client/tests/vitest/setup.ts @@ -1,10 +1,9 @@ // Vitest setup file - mirrors Jest setup with Vitest-compatible APIs -/// import "@testing-library/jest-dom/vitest"; import "fake-indexeddb/auto"; import "vitest-location-mock"; -import { afterAll, afterEach, beforeAll, vi } from "vitest"; +import { vi } from "vitest"; // Vue configuration import Vue from "vue"; @@ -24,6 +23,13 @@ vi.mock("@handsontable/vue", () => ({ HotTable: {}, })); +// Mock KaTeX to avoid quirks mode warning (it checks document.compatMode at module load) +vi.mock("katex", () => ({ + default: { + renderToString: (latex: string) => `${latex}`, + }, +})); + // Provide a mocked version of Vue to ensure above settings are not // overridden by a Vue library that gets imported later vi.doMock("vue", () => ({ @@ -31,48 +37,22 @@ vi.doMock("vue", () => ({ ...Vue, })); -// Mock window.scrollIntoView (not available in jsdom) +// Mock window.scrollIntoView (not available in test environment) Object.defineProperty(global, "scrollIntoView", { writable: true, configurable: true, value: vi.fn(), }); -// Replace setImmediate with setTimeout to fix certain tests -if (!global.setImmediate) { - Object.defineProperty(global, "setImmediate", { - writable: true, +// Spoof user agent to include "jsdom" so BootstrapVue skips its +// "Multiple instances of Vue" warning check (it only checks in non-jsdom envs) +if (typeof window !== "undefined" && window.navigator) { + Object.defineProperty(window.navigator, "userAgent", { + value: window.navigator.userAgent + " jsdom", configurable: true, - value: (fn: (...args: any[]) => void, ...args: any[]) => global.setTimeout(fn, 0, ...args), }); } -// Add structuredClone polyfill if not available -if (typeof structuredClone === "undefined") { - global.structuredClone = (obj: any) => { - return JSON.parse(JSON.stringify(obj)); - }; -} - -// Mock IntersectionObserver -class MockIntersectionObserver { - observe = vi.fn(); - disconnect = vi.fn(); - unobserve = vi.fn(); -} - -Object.defineProperty(window, "IntersectionObserver", { - writable: true, - configurable: true, - value: MockIntersectionObserver, -}); - -// Mock HTMLDialogElement methods if not available -if (typeof HTMLDialogElement !== "undefined") { - HTMLDialogElement.prototype.showModal = HTMLDialogElement.prototype.showModal || vi.fn(); - HTMLDialogElement.prototype.close = HTMLDialogElement.prototype.close || vi.fn(); -} - // Mock BroadcastChannel to fix Pinia state synchronization errors // Node.js's BroadcastChannel has a type mismatch with the browser API class MockBroadcastChannel extends EventTarget { diff --git a/client/vitest.config.mts b/client/vitest.config.mts index 82e956d1d89..3d5945eda9a 100644 --- a/client/vitest.config.mts +++ b/client/vitest.config.mts @@ -25,10 +25,10 @@ export default defineConfig({ plugins: [vue(), i18nPlugin(), yamlPlugin()], test: { globals: false, - environment: "jsdom", + environment: "happy-dom", setupFiles: ["./tests/vitest/setup.ts"], environmentOptions: { - jsdom: { + happyDOM: { url: "http://localhost/", }, }, diff --git a/client/yarn.lock b/client/yarn.lock index e4ce259bbb4..b5f7475899c 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -7,11 +7,6 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@acemir/cssom@^0.9.23": - version "0.9.23" - resolved "https://registry.yarnpkg.com/@acemir/cssom/-/cssom-0.9.23.tgz#9930458ccace533c597e1cd90c200edc336ed80a" - integrity sha512-2kJ1HxBKzPLbmhZpxBiTZggjtgCwKg1ma5RHShxvd6zgqhDEdEkzpiwe7jLkI2p2BrZvFCXIihdoMkl1H39VnA== - "@adobe/css-tools@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" @@ -25,33 +20,6 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@asamuzakjp/css-color@^4.0.3": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-4.1.0.tgz#4c8c6f48ed2e5c1ad9cc1aa23c80d665e56dd458" - integrity sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w== - dependencies: - "@csstools/css-calc" "^2.1.4" - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - lru-cache "^11.2.2" - -"@asamuzakjp/dom-selector@^6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@asamuzakjp/dom-selector/-/dom-selector-6.7.4.tgz#1b7cafe7793e399f9291de2689fdd2efc01838dd" - integrity sha512-buQDjkm+wDPXd6c13534URWZqbz0RP5PAhXZ+LIoa5LgwInT9HVJvGIJivg75vi8I13CxDGdTnz+aY5YUJlIAA== - dependencies: - "@asamuzakjp/nwsapi" "^2.3.9" - bidi-js "^1.0.3" - css-tree "^3.1.0" - is-potential-custom-element-name "^1.0.1" - lru-cache "^11.2.2" - -"@asamuzakjp/nwsapi@^2.3.9": - version "2.3.9" - resolved "https://registry.yarnpkg.com/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz#ad5549322dfe9d153d4b4dd6f7ff2ae234b06e24" - integrity sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q== - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" @@ -1296,39 +1264,6 @@ "@citation-js/date" "^0.5.0" citeproc "^2.4.6" -"@csstools/color-helpers@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" - integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== - -"@csstools/css-calc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" - integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== - -"@csstools/css-color-parser@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" - integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== - dependencies: - "@csstools/color-helpers" "^5.1.0" - "@csstools/css-calc" "^2.1.4" - -"@csstools/css-parser-algorithms@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" - integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== - -"@csstools/css-syntax-patches-for-csstree@^1.0.14": - version "1.0.17" - resolved "https://registry.yarnpkg.com/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.17.tgz#307685b5204cdf9fc029a5850a94edd3a8dc100f" - integrity sha512-LCC++2h8pLUSPY+EsZmrrJ1EOUu+5iClpEiDhhdw3zRJpPbABML/N5lmRuBHjxtKm9VnRcsUzioyD0sekFMF0A== - -"@csstools/css-tokenizer@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" - integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== - "@discoveryjs/json-ext@^0.6.1": version "0.6.3" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" @@ -2824,6 +2759,13 @@ resolved "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz" integrity sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw== +"@types/node@^20.0.0": + version "20.19.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.25.tgz#467da94a2fd966b57cc39c357247d68047611190" + integrity sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ== + dependencies: + undici-types "~6.21.0" + "@types/node@^22.0.0": version "22.0.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.0.tgz#04862a2a71e62264426083abe1e27e87cac05a30" @@ -2940,6 +2882,11 @@ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz#74bd1c8fd3a2058cb6fc76b188fcded50a83d866" integrity sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw== +"@types/whatwg-mimetype@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz#e5e06dcd3e92d4e622ef0129637707d66c28d6a4" + integrity sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA== + "@types/wrap-ansi@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" @@ -3612,7 +3559,7 @@ ag-grid-vue@^30: resolved "https://registry.yarnpkg.com/ag-grid-vue/-/ag-grid-vue-30.2.1.tgz#56395cf053ca2df70107123cf589618ddc3f84b3" integrity sha512-dnyltXrVUPk0ALQ1PfwnjBtYk/GDOjRjyOMy8LVAiWxVQA6Tmnb/dTnS1yjym1uggu+dDKof2zgPxVKayIHtWg== -agent-base@^7.1.0, agent-base@^7.1.2: +agent-base@^7.1.2: version "7.1.4" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== @@ -4036,13 +3983,6 @@ bent@~7.3.6: caseless "~0.12.0" is-stream "^2.0.0" -bidi-js@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" - integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== - dependencies: - require-from-string "^2.0.2" - big.js@^5.2.2: version "5.2.2" resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" @@ -4745,14 +4685,6 @@ css-tree@^2.2.1: mdn-data "2.0.30" source-map-js "^1.0.1" -css-tree@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-3.1.0.tgz#7aabc035f4e66b5c86f54570d55e05b1346eb0fd" - integrity sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w== - dependencies: - mdn-data "2.12.2" - source-map-js "^1.0.1" - css-tree@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" @@ -4831,15 +4763,6 @@ csso@^5.0.5: dependencies: css-tree "~2.2.0" -cssstyle@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-5.3.3.tgz#977f3868f379c17d619e9672839f9b5bb3db9861" - integrity sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw== - dependencies: - "@asamuzakjp/css-color" "^4.0.3" - "@csstools/css-syntax-patches-for-csstree" "^1.0.14" - css-tree "^3.1.0" - csstype@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" @@ -5142,14 +5065,6 @@ d3@^7.8.5: resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" integrity sha512-yFk/2idb8OHPKkbAL8QaOaqENNoMhIaSHZerk3oQsECwkObkCpJyjYwCe+OHiq6UEdhe1m8ZGARRRO3ljFjlKg== -data-urls@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-6.0.0.tgz#95a7943c8ac14c1d563b771f2621cc50e8ec7744" - integrity sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA== - dependencies: - whatwg-mimetype "^4.0.0" - whatwg-url "^15.0.0" - date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -5190,11 +5105,6 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: dependencies: ms "2.1.2" -decimal.js@^10.6.0: - version "10.6.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" - integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== - decode-uri-component@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -5511,11 +5421,6 @@ entities@^4.2.0, entities@^4.5.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -entities@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" - integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== - entities@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" @@ -6716,6 +6621,15 @@ handsontable@^4.0.0: numbro "^2.0.6" pikaday "1.5.1" +happy-dom@^20.0.10: + version "20.0.10" + resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-20.0.10.tgz#01fb5f09426420994e47e966598e272102678dd2" + integrity sha512-6umCCHcjQrhP5oXhrHQQvLB0bwb1UzHAHdsXy+FjtKoYjUhmNZsQL8NivwM1vDvNEChJabVrUYxUnp/ZdYmy2g== + dependencies: + "@types/node" "^20.0.0" + "@types/whatwg-mimetype" "^3.0.2" + whatwg-mimetype "^3.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -6823,13 +6737,6 @@ hsluv@^1.0.1: resolved "https://registry.yarnpkg.com/hsluv/-/hsluv-1.0.1.tgz#8f957afd3f928d2de7f7569db7687f811bb2baed" integrity sha512-zCaFTiDqBLQjCCFBu0qg7z9ASYPd+Bxx2GDCVZJsnehjK80S+jByqhuFz0pCd2Aw3FSKr18AWbRlwnKR0YdizQ== -html-encoding-sniffer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" - integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== - dependencies: - whatwg-encoding "^3.1.1" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" @@ -6874,14 +6781,6 @@ http-parser-js@>=0.5.1: resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-agent@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - http-proxy-middleware@^2.0.7: version "2.0.9" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" @@ -6902,7 +6801,7 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -https-proxy-agent@^7.0.4, https-proxy-agent@^7.0.5, https-proxy-agent@^7.0.6: +https-proxy-agent@^7.0.4, https-proxy-agent@^7.0.5: version "7.0.6" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== @@ -6922,7 +6821,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6, iconv-lite@0.6.3, iconv-lite@^0.6.3: +iconv-lite@0.6, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -7270,11 +7169,6 @@ is-plain-object@^5.0.0: resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -7549,40 +7443,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom-worker@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/jsdom-worker/-/jsdom-worker-0.3.0.tgz#aff32ec089d17f56a5a344a426b6fb2f56e7de54" - integrity sha512-nlPmN0i93+e6vxzov8xqLMR+MBs/TAYeSviehivzqovHH0AgooVx9pQ/otrygASppPvdR+V9Jqx5SMe8+FcADg== - dependencies: - mitt "^3.0.0" - uuid-v4 "^0.1.0" - -jsdom@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-27.2.0.tgz#499a41eef477c3632f44009e095cb8e418fdd714" - integrity sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA== - dependencies: - "@acemir/cssom" "^0.9.23" - "@asamuzakjp/dom-selector" "^6.7.4" - cssstyle "^5.3.3" - data-urls "^6.0.0" - decimal.js "^10.6.0" - html-encoding-sniffer "^4.0.0" - http-proxy-agent "^7.0.2" - https-proxy-agent "^7.0.6" - is-potential-custom-element-name "^1.0.1" - parse5 "^8.0.0" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^6.0.0" - w3c-xmlserializer "^5.0.0" - webidl-conversions "^8.0.0" - whatwg-encoding "^3.1.1" - whatwg-mimetype "^4.0.0" - whatwg-url "^15.1.0" - ws "^8.18.3" - xml-name-validator "^5.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -7937,11 +7797,6 @@ lodash@^4.17.15, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lru-cache@^11.2.2: - version "11.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.2.tgz#40fd37edffcfae4b2940379c0722dc6eeaa75f24" - integrity sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg== - lru-cache@^4.1.2, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" @@ -8040,11 +7895,6 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -mdn-data@2.12.2: - version "2.12.2" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.2.tgz#9ae6c41a9e65adf61318b32bff7b64fbfb13f8cf" - integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== - mdurl@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" @@ -8185,11 +8035,6 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -mitt@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd" - integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ== - moment@2.20.1: version "2.20.1" resolved "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz" @@ -8748,13 +8593,6 @@ parse-passwd@^1.0.0: resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.0.tgz#aceb267f6b15f9b6e6ba9e35bfdd481fc2167b12" - integrity sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA== - dependencies: - entities "^6.0.0" - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -9287,7 +9125,7 @@ psl@^1.1.33: resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -punycode@^2.1.0, punycode@^2.3.1: +punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== @@ -9637,10 +9475,10 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -ro-crate-zip-explorer@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/ro-crate-zip-explorer/-/ro-crate-zip-explorer-0.4.0.tgz#28e6a5a0c7dd7a7e5eb8ec5a271e8d108402ca62" - integrity sha512-23WC9WuJ+FMjOjC2uyXdT8IpZ/DYqWNqtMkFNgBtyqHLVXVY7nIvCgV+nMYPHPHnnDlr2m0fjQagXxd0xXiDUQ== +ro-crate-zip-explorer@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/ro-crate-zip-explorer/-/ro-crate-zip-explorer-0.4.1.tgz#bc2b94e32de5390df2b1622a58442b022eb50bf6" + integrity sha512-nnO5NLiW3w7LsuP+CA4zl/FS+NqhGvvtijMzFh+0m6+uySNORU/iYwirGuPelX0s9rBJ5jPv37Z3y51zLr10Rg== dependencies: jszip "^3.10.1" pako "^2.1.0" @@ -9828,13 +9666,6 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - dependencies: - xmlchars "^2.2.0" - schema-to-ts@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/schema-to-ts/-/schema-to-ts-0.0.2.tgz#4b03f550279872f85de1ecdfa0384e413f197dde" @@ -10474,11 +10305,6 @@ svgo@^3.0.2: csso "^5.0.5" picocolors "^1.0.0" -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - sync-fetch@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.4.2.tgz#40ec3398f7193198c44fd0753b7b77a27185a117" @@ -10610,18 +10436,6 @@ tinyrainbow@^3.0.3: resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.0.3.tgz#984a5b1c1b25854a9b6bccbe77964d0593d1ea42" integrity sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q== -tldts-core@^7.0.18: - version "7.0.18" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.18.tgz#78edfd38e8c35e20fb4d2cde63c759139e169d31" - integrity sha512-jqJC13oP4FFAahv4JT/0WTDrCF9Okv7lpKtOZUGPLiAnNbACcSg8Y8T+Z9xthOmRBqi/Sob4yi0TE0miRCvF7Q== - -tldts@^7.0.5: - version "7.0.18" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.18.tgz#72cac7a2bdb6bba78f8a09fdf7ef84843b09aa94" - integrity sha512-lCcgTAgMxQ1JKOWrVGo6E69Ukbnx4Gc1wiYLRf6J5NN4HRYJtCby1rPF8rkQ4a6qqoFBK5dvjJ1zJ0F7VfDSvw== - dependencies: - tldts-core "^7.0.18" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -10675,20 +10489,6 @@ tough-cookie@^4.1.4: universalify "^0.2.0" url-parse "^1.5.3" -tough-cookie@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-6.0.0.tgz#11e418b7864a2c0d874702bc8ce0f011261940e5" - integrity sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w== - dependencies: - tldts "^7.0.5" - -tr46@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-6.0.0.tgz#f5a1ae546a0adb32a277a2278d0d17fa2f9093e6" - integrity sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw== - dependencies: - punycode "^2.3.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -10930,6 +10730,11 @@ undici-types@~6.11.1: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197" integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" @@ -11037,11 +10842,6 @@ utrie@^1.0.2: dependencies: base64-arraybuffer "^1.0.2" -uuid-v4@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/uuid-v4/-/uuid-v4-0.1.0.tgz#62d7b310406f6cecfea1528c69f1e8e0bcec5a3a" - integrity sha512-m11RYDtowtAIihBXMoGajOEKpAXrKbpKlpmxqyztMYQNGSY5nZAZ/oYch/w2HNS1RMA4WLGcZvuD8/wFMuCEzA== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" @@ -11733,13 +11533,6 @@ vuedraggable@^2.24.3: dependencies: sortablejs "1.10.2" -w3c-xmlserializer@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" - integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== - dependencies: - xml-name-validator "^5.0.0" - watchpack@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" @@ -11760,11 +11553,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-8.0.0.tgz#821c92aa4f88d88a31264d887e244cb9655690c6" - integrity sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA== - webpack-cli@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207" @@ -11917,25 +11705,10 @@ websocket-extensions@>=0.1.1: resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" - integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" - integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== - -whatwg-url@^15.0.0, whatwg-url@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-15.1.0.tgz#5c433439b9a5789eeb3806bbd0da89a8bd40b8d7" - integrity sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g== - dependencies: - tr46 "^6.0.0" - webidl-conversions "^8.0.0" +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^5.0.0: version "5.0.0" @@ -12057,11 +11830,6 @@ ws@^8.18.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== -ws@^8.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - xml-beautifier@^0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/xml-beautifier/-/xml-beautifier-0.5.0.tgz" @@ -12081,11 +11849,6 @@ xml-name-validator@^4.0.0: resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xml-name-validator@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" - integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== - xml2js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" @@ -12099,11 +11862,6 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"