diff --git a/archive-configurations/ELAR/fields.json5 b/archive-configurations/ELAR/fields.json5 index 16ce291a..aa5b6529 100644 --- a/archive-configurations/ELAR/fields.json5 +++ b/archive-configurations/ELAR/fields.json5 @@ -1,9 +1,6 @@ { project: [ - { key: "collectionSubjectLanguages", visibility: "always" }, - { key: "collectionWorkingLanguages", visibility: "always" }, - - { key: "collectionName", visibility: "always" }, + // { key: "collectionName", visibility: "always" }, { key: "collectionTitle", visibility: "always" }, { key: "collectionDescription", visibility: "always" }, { diff --git a/archive-configurations/lameta/fields.json5 b/archive-configurations/lameta/fields.json5 index 52c394f4..648c2182 100644 --- a/archive-configurations/lameta/fields.json5 +++ b/archive-configurations/lameta/fields.json5 @@ -17,6 +17,7 @@ key: "vernacularIso3CodeAndName", englishLabel: "Subject Language", xmlTag: "VernacularISO3CodeAndName", + visibility: "never", // replaced by collectionWorkingLanguages type: "language", tabIndex: 1 }, @@ -24,13 +25,14 @@ key: "analysisIso3CodeAndName", englishLabel: "Working Language", xmlTag: "AnalysisISO3CodeAndName", + visibility: "never", // replaced by collectionSubjectLanguages type: "language", tabIndex: 2 }, { key: "collectionSubjectLanguages", englishLabel: "Subject Languages", - visibility: "never", + xmlTag: "CollectionSubjectLanguages", form: "primary", type: "languageChoices", controlProps: { @@ -40,8 +42,8 @@ }, { key: "collectionWorkingLanguages", + xmlTag: "CollectionWorkingLanguages", englishLabel: "Working Languages", - visibility: "never", form: "primary", type: "languageChoices", tabIndex: 2 diff --git a/package.json b/package.json index f1d1ac42..7da35d86 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "@typescript-eslint/eslint-plugin": "^6.12.0", "@typescript-eslint/parser": "^6.12.0", "@vitejs/plugin-react": "^4.2.1", - "@vitest/ui": "^0.34.6", + "@vitest/ui": "^1.6.0", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "10.1.0", "babel-loader": "^8.1.0", @@ -122,7 +122,7 @@ "vite-plugin-electron-renderer": "^0.12.1", "vite-plugin-environment": "^1.1.3", "vite-plugin-time-reporter": "^2.1.0", - "vitest": "^0.34.6", + "vitest": "^1.6.0", "webdriverio": "^4.14.0" }, "dependencies": { @@ -262,7 +262,7 @@ }, "//remember to match this with github actions in main.yml": "", "engines": { - "node": "18.16.0" + "node": "20.12.2" }, "debug": { "env": { @@ -270,7 +270,7 @@ } }, "volta": { - "node": "18.16.0", + "node": "20.12.2", "yarn": "1.22.19" }, "packageManager": "yarn@1.22.19" diff --git a/src/components/FieldLabel.tsx b/src/components/FieldLabel.tsx index e9bea6c6..565a59b0 100644 --- a/src/components/FieldLabel.tsx +++ b/src/components/FieldLabel.tsx @@ -10,7 +10,7 @@ import { import { translateFieldLabel, translateTip } from "../other/localization"; import { observer } from "mobx-react"; import { tooltipBackground } from "../containers/theme"; -import { Project } from "../model/Project/Project"; +import { GetOtherConfigurationSettings } from "../model/Project/OtherConfigurationSettings"; export const FieldLabel: React.FunctionComponent<{ fieldDef: FieldDefinition; @@ -81,7 +81,7 @@ export const FieldInfoAffordances: React.FunctionComponent<{ )} - {Project.OtherConfigurationSettings.showImdiPreview && + {GetOtherConfigurationSettings().showImdiPreview && props.fieldDef.omitFromImdi && } ); diff --git a/src/components/FolderPane.tsx b/src/components/FolderPane.tsx index 1d0194e0..43fe8351 100644 --- a/src/components/FolderPane.tsx +++ b/src/components/FolderPane.tsx @@ -37,6 +37,7 @@ import { import { useEffect } from "react"; import { ErrorBoundary } from "./ErrorBoundary"; import { useLingui } from "@lingui/react"; +import { GetOtherConfigurationSettings } from "../model/Project/OtherConfigurationSettings"; export interface IProps { folder: Folder; @@ -152,7 +153,7 @@ const FileTabs: React.FunctionComponent< /> ); - const imdiTab = Project.OtherConfigurationSettings.showImdiPreview ? ( + const imdiTab = GetOtherConfigurationSettings().showImdiPreview ? ( IMDI {/* don't translate */} ) : ( <> @@ -164,7 +165,7 @@ const FileTabs: React.FunctionComponent< <> ); - const imdiPanel = Project.OtherConfigurationSettings.showImdiPreview ? ( + const imdiPanel = GetOtherConfigurationSettings().showImdiPreview ? ( c.length > 0) .map((c) => c.trim()) - .map((code) => ({ - value: code, - label: getName(props.languageFinder, code) - })); + .map((code) => { + if (code.indexOf("|") > 0) { + const parts = code.split("|"); + console.log("parts: " + JSON.stringify(parts)); + return { + value: parts[0], + label: parts[1] + }; + } + return { + value: code, + label: getName(props.languageFinder, code) + }; + }); const loadMatchingOptions = (inputValue, callback) => { const matches = @@ -107,10 +117,24 @@ export const LanguageChoicesEditor: React.FunctionComponent< loadOptions: _.debounce(loadMatchingOptions, 100), value: currentValueArray, styles: customStyles, - onChange: (v: any[]) => { - // if you delete the last member, you get null instead of [] - const newChoices = v ? v : []; - const s: string = newChoices.map((o) => o.value).join(";"); + onChange: ( + v: Array<{ value: string; label: string; __isNew__: boolean }> + ) => { + console.log("onChange: " + JSON.stringify(v)); + // if any are new, change the value to "new" + const newChoices = v + ? v.map((o) => + o.__isNew__ ? { label: o.label, value: `qaa-x-${o.label}` } : o + ) + : []; // if you delete the last member, you get null instead of [] + + // TODO: move this serialization logic into the Field class + const s: string = newChoices + .map((o) => { + return o.value; + }) + .join(";"); // why semicolong instead of comma? The particpants field as used semicolon for years. + console.log("saving: " + s); props.field.setValueFromString(s); }, isMulti: true @@ -120,7 +144,12 @@ export const LanguageChoicesEditor: React.FunctionComponent<
{props.canCreateNew ? ( - + { + window.alert("You created " + newOption.label); + }} + > ) : ( )} diff --git a/src/components/Notes.tsx b/src/components/Notes.tsx index 5c337df7..461d242a 100644 --- a/src/components/Notes.tsx +++ b/src/components/Notes.tsx @@ -5,7 +5,7 @@ import { TextFieldEdit } from "./TextFieldEdit"; import { InfoIndicator } from "./FieldIndicators"; import { css } from "@emotion/react"; import { Trans, t } from "@lingui/macro"; -import { Project } from "../model/Project/Project"; +import { GetOtherConfigurationSettings } from "../model/Project/OtherConfigurationSettings"; export const Notes: React.FunctionComponent<{ field: Field; @@ -19,7 +19,7 @@ export const Notes: React.FunctionComponent<{ overflow: auto; `} > - {Project.OtherConfigurationSettings.showImdiPreview && ( + {GetOtherConfigurationSettings().showImdiPreview && ( = (props) => { + const [xml, setXml] = React.useState(""); + + React.useEffect(() => { + if (props.target instanceof Project) { + setXml(props.project.metadataFile?.getXml(false) || ""); + } + }, [props.target, props.project, props.folder]); + + return ( +
+ + {xml} + +
+ ); +}; diff --git a/src/components/project/ProjectTab.tsx b/src/components/project/ProjectTab.tsx index dd1751a6..dd6b4197 100644 --- a/src/components/project/ProjectTab.tsx +++ b/src/components/project/ProjectTab.tsx @@ -10,10 +10,13 @@ import { AuthorityLists } from "../../model/Project/AuthorityLists/AuthorityList import { ArchiveConfigurationForm } from "./ArchiveConfigurationForm"; import { ImdiView } from "../ImdiView"; import "./ProjectTab.scss"; -import { ParadisecView } from "../ParadisecView"; +import userSettings from "../../other/UserSettings"; import { ThemeProvider } from "@mui/material"; import { useState } from "react"; import { createProjectTheme } from "../../containers/theme"; +import { ParadisecView } from "../ParadisecView"; +import { LametaXmlView } from "../lametaXmlView"; +import { GetOtherConfigurationSettings } from "../../model/Project/OtherConfigurationSettings"; interface IProps { project: Project; @@ -71,20 +74,27 @@ export const ProjectTab: React.FunctionComponent = observer((props) => { Other Documents - {Project.OtherConfigurationSettings.showImdiPreview ? ( + {GetOtherConfigurationSettings().showImdiPreview ? ( IMDI {/* don't translate */} ) : ( <> )} - {Project.OtherConfigurationSettings.showParadisec ? ( + {GetOtherConfigurationSettings().showParadisec ? ( PARADISEC {/* don't translate */} ) : ( <> )} + {userSettings.DeveloperMode ? ( + + LaMeta {/* don't translate */} + + ) : ( + <> + )} = observer((props) => {
- {Project.OtherConfigurationSettings.showImdiPreview ? ( + {GetOtherConfigurationSettings().showImdiPreview ? ( = observer((props) => { ) : ( <> )} - {Project.OtherConfigurationSettings.showParadisec ? ( + {GetOtherConfigurationSettings().showParadisec ? ( = observer((props) => { ) : ( <> )} + {/* if in developer mode, show LametaXmlView */} + {userSettings.DeveloperMode ? ( + + + + ) : ( + <> + )} ); diff --git a/src/export/ImdiBundler.ts b/src/export/ImdiBundler.ts index c7bc3382..21b3b727 100644 --- a/src/export/ImdiBundler.ts +++ b/src/export/ImdiBundler.ts @@ -157,7 +157,7 @@ export default class ImdiBundler { imdiMode === IMDIMode.OPEX ? Path.basename(session.directory) : "", // with opex, the metadata file goes into the folder it describes. Else, on the level above. - sanitizeForArchive(imdiFileName, true) + sanitizeForArchive(imdiFileName, "ASCII") ), sessionImdi ); @@ -234,7 +234,7 @@ export default class ImdiBundler { // that renames that change the link name are used. sanitizeForArchive( f.getNameToUseWhenExportingUsingTheActualFile(), - true + "ASCII" ) ), (progressMessage) => {} @@ -327,7 +327,7 @@ export default class ImdiBundler { fs.writeFileSync( Path.join( directoryForMetadataXmlFile, - sanitizeForArchive(imdiFileName, true) + sanitizeForArchive(imdiFileName, "ASCII") ), imdiXml ); diff --git a/src/export/corpusImdi.spec.ts b/src/export/ImdiGenerator-corpus-corpusLink.spec.ts similarity index 100% rename from src/export/corpusImdi.spec.ts rename to src/export/ImdiGenerator-corpus-corpusLink.spec.ts diff --git a/src/export/ImdiGenerator-corpus-metadata.spec.ts b/src/export/ImdiGenerator-corpus-metadata.spec.ts new file mode 100644 index 00000000..0ecd1364 --- /dev/null +++ b/src/export/ImdiGenerator-corpus-metadata.spec.ts @@ -0,0 +1,67 @@ +import ImdiGenerator, { IMDIMode } from "./ImdiGenerator"; +import { Project } from "../model/Project/Project"; +import { + setResultXml, + xexpect as expect, + count, + value, + xexpect +} from "../other/xmlUnitTestUtils"; +import temp from "temp"; +import * as fs from "fs-extra"; +import assert from "assert"; +import { + describe, + it, + vi, + beforeAll, + afterAll, + test, + afterEach, + beforeEach +} from "vitest"; +import { GetProjectFileWithOneField } from "../model/Project/WriteProject.spec"; + +temp.track(); // cleanup on exit: doesn't work + +let project: Project; +let projectDir: string; + +describe("Imdi generation for images", () => { + beforeEach(() => { + projectDir = temp.mkdirSync("lameta imdi actor generator test"); + project = Project.fromDirectory(projectDir); + }); + + afterEach(() => { + fs.emptyDirSync(projectDir); + fs.removeSync(projectDir); + }); + + test("fundingProjectTitle goes to the right place", () => { + // NB: in ELAR, at least, this will appear as "Collection Title" + project.properties.setText("fundingProjectTitle", "my title"); + project.properties.setText("projectDescription", "my description"); + project.properties.setText("collectionSteward", "my steward"); + const x = ImdiGenerator.generateCorpus( + IMDIMode.RAW_IMDI, + project, + [], + true + ); + + setResultXml(x); + + // From Hanna: Collection Title = Corpus/Title + // From Hanna: Collection Key = Corpus/MDGroup/Keys/Key[@Name='CorpusId'] + // The ELAR fields.json renames the label for fundingProjectTitle to "Collection Title" + expect("//Corpus/Title").toMatch("my title"); + + // From Hanna: Collection Description= Corpus/Description[@Name='short_description'] + // The ELAR fields.json renames the label for projectDescription to "Collection Description" + expect('//Corpus/Description[@Name="short_description"]').toMatch( + "my description" + ); + // From Hanna: Collection Steward = Corpus/MDGroup/Actors/Actor[@Role='Collection Steward'] + }); +}); diff --git a/src/export/ImdiGenerator.ts b/src/export/ImdiGenerator.ts index 005dbbd6..7fae9b06 100644 --- a/src/export/ImdiGenerator.ts +++ b/src/export/ImdiGenerator.ts @@ -115,7 +115,7 @@ export default class ImdiGenerator { } return this.makeString(); } - private projectXmlForPreview(): string { + public projectXmlForPreview(): string { this.tail = XmlBuilder.create("Project"); this.addProjectInfo(); return this.makeString(); @@ -595,7 +595,7 @@ export default class ImdiGenerator { // files as they get copied to the export, regardless of that setting. This is because this is a *requirement* of // IMDI archives. Anyhow, since the bundler would have (or will have) export the sanitized version, we need to do // that to the file name we use for it in the xml. - const filename = sanitizeForArchive(Path.basename(path), true); + const filename = sanitizeForArchive(Path.basename(path), "ASCII"); const immediateParentDirectoryName = Path.basename(Path.dirname(path)); const relativePath = Path.join(immediateParentDirectoryName, filename) diff --git a/src/model/Project/OtherConfigurationSettings.ts b/src/model/Project/OtherConfigurationSettings.ts new file mode 100644 index 00000000..725d02bd --- /dev/null +++ b/src/model/Project/OtherConfigurationSettings.ts @@ -0,0 +1,30 @@ +export type OtherConfigurationSettings = { + configurationFullName: string; + showImdiPreview: boolean; + showParadisec: boolean; + fileNameRules: "ASCII" | "unicode"; +}; + +let otherConfigurationSettings: OtherConfigurationSettings = { + configurationFullName: "", + showImdiPreview: false, + showParadisec: false, + fileNameRules: "ASCII" +}; + +export function SetOtherConfigurationSettings( + settings: OtherConfigurationSettings +) { + otherConfigurationSettings = settings; +} +export function GetOtherConfigurationSettings(): OtherConfigurationSettings { + return otherConfigurationSettings; +} +export function resetOtherConfigurationSettings() { + otherConfigurationSettings = { + showImdiPreview: false, + showParadisec: false, + configurationFullName: "", + fileNameRules: "ASCII" + }; +} diff --git a/src/model/Project/Person/Person.ts b/src/model/Project/Person/Person.ts index a47cbf9d..c6521257 100644 --- a/src/model/Project/Person/Person.ts +++ b/src/model/Project/Person/Person.ts @@ -17,7 +17,6 @@ import { } from "./PersonMigration"; import xmlbuilder from "xmlbuilder"; import { makeObservable, observable } from "mobx"; -import { Project } from "../Project"; export type idChangeHandler = (oldId: string, newId: string) => void; export const maxOtherLanguages = 10; diff --git a/src/model/Project/Project.ts b/src/model/Project/Project.ts index b987af08..d8e35020 100644 --- a/src/model/Project/Project.ts +++ b/src/model/Project/Project.ts @@ -43,6 +43,10 @@ import { setCurrentProjectId } from "./MediaFolderAccess"; import { CapitalCase } from "../../other/case"; import { IChoice } from "../field/Field"; import { locateDependencyForFilesystemCall } from "../../other/locateDependency"; +import { + GetOtherConfigurationSettings, + SetOtherConfigurationSettings +} from "./OtherConfigurationSettings"; let sCurrentProject: Project | null = null; @@ -72,12 +76,7 @@ export class ProjectHolder { sCurrentProject = p; } } -type OtherConfigurationSettings = { - configurationFullName: string; - showImdiPreview: boolean; - showParadisec: boolean; - fileNameRules: "ASCII" | "unicode"; -}; + export class Project extends Folder { public loadingError: string; @@ -93,28 +92,10 @@ export class Project extends Folder { public authorityLists: AuthorityLists; public languageFinder: LanguageFinder; - public otherConfigurationSettings: OtherConfigurationSettings = { - configurationFullName: "", - showImdiPreview: false, - showParadisec: false, - fileNameRules: "ASCII" - }; - public get folderType(): IFolderType { return "project"; } - public static get OtherConfigurationSettings(): OtherConfigurationSettings { - return sCurrentProject === null - ? { - showImdiPreview: false, - showParadisec: false, - configurationFullName: "", - fileNameRules: "ASCII" - } - : sCurrentProject.otherConfigurationSettings; - } - public static getDefaultContentLanguageCode() { const codeAndName = sCurrentProject === null @@ -157,8 +138,9 @@ export class Project extends Folder { return this[folderType + "s"]; } public migrateFromPreviousVersions(): void { - //nothing to do, yet + // nothing here but see migrate() on ProjectMetadataFile } + public findFolderById( folderType: IFolderType, id: string @@ -961,8 +943,8 @@ export class Project extends Folder { const factoryPath = locateDependencyForFilesystemCall( `archive-configurations/lameta/settings.json5` ); - this.otherConfigurationSettings = JSON5.parse( - fs.readFileSync(factoryPath, "utf8") + SetOtherConfigurationSettings( + JSON5.parse(fs.readFileSync(factoryPath, "utf8")) ); // now see if there are any settings in the confuration that @@ -987,10 +969,10 @@ export class Project extends Folder { } // read in these settings and merge them with the defaults const settings = JSON5.parse(fs.readFileSync(path, "utf8")); - this.otherConfigurationSettings = { - ...this.otherConfigurationSettings, + SetOtherConfigurationSettings({ + ...GetOtherConfigurationSettings(), ...settings - }; + }); } } @@ -1030,7 +1012,7 @@ export class ProjectMetadataFile extends FolderMetadataFile { // the fields.json5 sets the default to "unknown" if ( archiveConfigurationName.length === 0 || - archiveConfigurationName === "unknown" + archiveConfigurationName === "default" ) { const archiveProtocol = this.properties.getTextStringOrEmpty("AccessProtocol"); @@ -1040,6 +1022,35 @@ export class ProjectMetadataFile extends FolderMetadataFile { this.properties.removeProperty("AccessProtocol"); } } + + // Before lameta 3, we could store a single language for the vernacular. If we + // find a file using that but no modern collectionSubjectLanguage, collectionSubjectLanguage + // should be loaded with the value from vernacularIso3CodeAndName. + // If instead we do have a non-empty collectionSubjectLanguage, then we should set + // vernacularIso3CodeAndName to the first item in it. + this.migrateLanguageFields( + "vernacularIso3CodeAndName", + "collectionSubjectLanguages" + ); + // same for the anlysis language + this.migrateLanguageFields( + "analysisIso3CodeAndName", + "collectionWorkingLanguages" + ); + } + + private migrateLanguageFields(legacySingle: string, modernMultiple: string) { + if (this.properties.getTextStringOrEmpty(modernMultiple).length === 0) { + this.properties.setText( + modernMultiple, + this.properties.getTextStringOrEmpty(legacySingle) + ); + } else { + const parts = this.properties + .getTextStringOrEmpty(modernMultiple) + .split(";"); + this.properties.setText(legacySingle, parts[0] || ""); + } } // peek into the xml to get the configuration we're supposed to be using diff --git a/src/model/Project/ReadProject.spec.ts b/src/model/Project/ReadProject.spec.ts index 54ffd5d8..a9fd0cbb 100644 --- a/src/model/Project/ReadProject.spec.ts +++ b/src/model/Project/ReadProject.spec.ts @@ -35,6 +35,45 @@ describe("Project Read", () => { "dde: Doondo" ); }); + + // Before lameta 3, we could store a single language for the vernacular. If we + // find a file using that but no modern collectionSubjectLanguage, collectionSubjectLanguage + // should be loaded with the value from vernacularIso3CodeAndName. + it("should load vernacularIso3CodeAndName into collectionSubjectLanguage if missing or empty", () => { + const f = GetProjectFileWithOneField( + "VernacularISO3CodeAndName", + "abc:Abracadabra" + ); + expect( + f.properties.getTextStringOrEmpty("collectionSubjectLanguages") + ).toBe("abc:Abracadabra"); + // do same for AnaylsisISO3CodeAndName and collectionWorkingLanguages + const f2 = GetProjectFileWithOneField( + "AnalysisISO3CodeAndName", + "abc:Abracadabra" + ); + expect( + f2.properties.getTextStringOrEmpty("collectionWorkingLanguages") + ).toBe("abc:Abracadabra"); + }); + it("fill legacy language fields from modern collectionLanguages", () => { + const f = GetProjectFileWithOneField( + "CollectionSubjectLanguages", + "foo:FooBar;abc:Abracadabra" + ); + expect(f.properties.getTextStringOrEmpty("vernacularIso3CodeAndName")).toBe( + "foo:FooBar" + ); + // do same for AnaylsisISO3CodeAndName and collectionWorkingLanguages + const f2 = GetProjectFileWithOneField( + "CollectionWorkingLanguages", + "foo:FooBar;aby:Abracadabra" + ); + expect(f2.properties.getTextStringOrEmpty("analysisIso3CodeAndName")).toBe( + "foo:FooBar" + ); + }); + it("should read archiveConfigurationName", () => { const f = GetProjectFileWithOneField("ArchiveConfigurationName", "ELAR"); expect(f.properties.getTextStringOrEmpty("archiveConfigurationName")).toBe( @@ -50,7 +89,7 @@ describe("Project Read", () => { it("archiveConfigurationName should be 'unknown' if missing configurationName & accessProtocol", () => { const f = GetProjectFileWithOneField("Foo", "bar"); expect(f.properties.getTextStringOrEmpty("archiveConfigurationName")).toBe( - "unknown" + "default" ); }); it("should read AnalysisISO3CodeAndName", () => { diff --git a/src/model/Project/Session/ReadSession.spec.ts b/src/model/Project/Session/ReadSession.spec.ts index 6121f8c4..3768cb02 100644 --- a/src/model/Project/Session/ReadSession.spec.ts +++ b/src/model/Project/Session/ReadSession.spec.ts @@ -1,3 +1,4 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { SessionMetadataFile } from "./Session"; import * as temp from "temp"; import fs from "fs"; diff --git a/src/model/Project/WriteProject.spec.ts b/src/model/Project/WriteProject.spec.ts index be348306..ee7790d7 100644 --- a/src/model/Project/WriteProject.spec.ts +++ b/src/model/Project/WriteProject.spec.ts @@ -4,6 +4,12 @@ import fs from "fs"; import Path from "path"; import { EncounteredVocabularyRegistry } from "./EncounteredVocabularyRegistry"; import { describe, expect, it, beforeEach, afterEach } from "vitest"; +import { + setResultXml, + xexpect, + count, + value +} from "../../other/xmlUnitTestUtils"; let projectDirectory; let projectName; @@ -51,6 +57,25 @@ describe("Project Write", () => { ) ).toBeGreaterThan(-1); }); + it("should write languages", () => { + const f = GetProjectFileWithOneField("unused", "x"); + f.properties.setText("collectionSubjectLanguages", "ab;cd;ef"); + f.properties.setText("collectionWorkingLanguages", "gh;ij"); + setResultXml(f.getXml()); + xexpect("Project/CollectionSubjectLanguages").toHaveCount(1); + xexpect( + "Project/CollectionSubjectLanguages[text()='ab;cd;ef']" + ).toHaveCount(1); + xexpect("Project/CollectionWorkingLanguages").toHaveCount(1); + xexpect("Project/CollectionWorkingLanguages[text()='gh;ij']").toHaveCount( + 1 + ); + // and these we output for backwards compatibility + xexpect("Project/VernacularISO3CodeAndName").toHaveCount(1); + xexpect("Project/VernacularISO3CodeAndName[text()='ab']").toHaveCount(1); + xexpect("Project/AnalysisISO3CodeAndName").toHaveCount(1); + xexpect("Project/AnalysisISO3CodeAndName[text()='gh']").toHaveCount(1); + }); }); function AttemptRoundTripOfOneField( @@ -83,7 +108,7 @@ function AttemptRoundTripOfOneField( } } -function GetProjectFileWithOneField( +export function GetProjectFileWithOneField( tag: string, content: string ): ProjectMetadataFile { diff --git a/src/model/field/ConfiguredFieldDefinitions.spec.ts b/src/model/field/ConfiguredFieldDefinitions.spec.ts index 68cef95a..56fe2457 100644 --- a/src/model/field/ConfiguredFieldDefinitions.spec.ts +++ b/src/model/field/ConfiguredFieldDefinitions.spec.ts @@ -19,7 +19,7 @@ describe("computeMergedCatalog", () => { { key: "region", show: "never" } ] }; - const mergedCatalog = computeMergedCatalog(ourCatalog); + const { mergedCatalog } = computeMergedCatalog(ourCatalog); expect(mergedCatalog.project.find((f) => f.key == "title")).toEqual({ key: "title", englishLabel: "Project ID", // changed to Project ID at ELAR request Dec 2019 diff --git a/src/model/file/File.spec.ts b/src/model/file/File.spec.ts index dca12ec7..35134ee1 100644 --- a/src/model/file/File.spec.ts +++ b/src/model/file/File.spec.ts @@ -1,4 +1,3 @@ -import { beforeEach, afterEach, describe, it } from "vitest"; import { OtherFile } from "./File"; import * as fs from "fs-extra"; import * as Path from "path"; @@ -156,6 +155,11 @@ describe("FolderMetadataFile", () => { expect(newXml).toBe(originalXml); }); it("can roundtrip sample project file", () => { + // TODO: this is broken because we are migrating from single language to multiple project languages. + // How to make a reasonable test? Maybe get + // all the properties of the original and then verify + // that after writing and reading back in, they are the same? + const originalPath = "./sample data/Edolo sample/Edolo sample.sprj"; const originalXml: string = fs.readFileSync(originalPath, "utf8"); const newDir = Path.join(temp.dir, "Edolo sample"); diff --git a/src/model/file/GetSayMoreXml.ts b/src/model/file/GetSayMoreXml.ts index fdd54125..1a1cbd52 100644 --- a/src/model/file/GetSayMoreXml.ts +++ b/src/model/file/GetSayMoreXml.ts @@ -80,7 +80,7 @@ export default function getSayMoreXml( throw error; } } -//function writeElementsWeDontUnderstand() {} + function writeSimplePropertyElements( root: xmlbuilder.XMLElementOrXMLNode, properties: Field[], @@ -103,7 +103,23 @@ function writeSimplePropertyElements( doOutputTypeInXmlTags, false, "AccessProtocol", - "lameta 3 and following prefer ArchiveConfigurationName, this is written for compatibility with SayMore and older versions of lameta" + "lameta 3 and following use as that matches what we're actually doing with it now. We still emit for compatibility with SayMore and older versions of lameta" + ); + } + if (field.key === "collectionSubjectLanguages") { + writeLanguageFieldForBackwardsCompat( + root, + field, + "VernacularISO3CodeAndName", + "lameta 3 and following use to store multiple languages. We still emit the first language as for compatibility with SayMore and older versions of lameta" + ); + } + if (field.key === "collectionWorkingLanguages") { + writeLanguageFieldForBackwardsCompat( + root, + field, + "AnalysisISO3CodeAndName", + "lameta 3 and following use to store multiple languages. We still emit the first language as for compatibility with SayMore and older versions of lameta" ); } }); @@ -180,6 +196,30 @@ function writeContributions( }); } +function writeLanguageFieldForBackwardsCompat( + root: xmlbuilder.XMLElementOrXMLNode, + field: Field, + overrideTag?: string, + comment?: string +) { + const { type, value } = field.typeAndValueEscapedForXml(); + + // SayMore Windows, at least through version 3.3, has inconsistent capitalization... + // for now we just use those same tags when writing so that the file can be opened in that SM + const tag = + overrideTag || + (field.definition && field.definition.xmlTag + ? field.definition.xmlTag + : field.key); + + if (comment) { + root.comment(comment); + } + const attributes: any = {}; + + root.element(tag, attributes, value.split(";")[0] || "").up(); +} + function writeField( root: xmlbuilder.XMLElementOrXMLNode, field: Field, diff --git a/src/other/sanitizeForArchive.spec.ts b/src/other/sanitizeForArchive.spec.ts index b16cab7b..0a35d893 100644 --- a/src/other/sanitizeForArchive.spec.ts +++ b/src/other/sanitizeForArchive.spec.ts @@ -3,11 +3,11 @@ import { describe, it, expect } from "vitest"; describe("SanitizeForArchive", () => { it("in IMDI mode, it replaces ! with underscores", () => { - const name = sanitizeForArchive("foo!bar!bas", true); + const name = sanitizeForArchive("foo!bar!bas", "ASCII"); expect(name).toBe("foo_bar_bas"); }); it("in IMDI mode, it doesn't leave trailing underscores", () => { - const name = sanitizeForArchive("foo!", true); + const name = sanitizeForArchive("foo!", "ASCII"); expect(name).toBe("foo"); }); }); diff --git a/src/other/sanitizeForArchive.ts b/src/other/sanitizeForArchive.ts index 48983baf..44dc4f13 100644 --- a/src/other/sanitizeForArchive.ts +++ b/src/other/sanitizeForArchive.ts @@ -1,11 +1,11 @@ -import { Project } from "../model/Project/Project"; +import { GetOtherConfigurationSettings } from "../model/Project/OtherConfigurationSettings"; const sanitizeFilename = require("sanitize-filename"); const ASCIIFolder = require("fold-to-ascii"); -export function sanitizeForArchive(name: string): string { +export function sanitizeForArchive(name: string, forceRules?: "ASCII"): string { let n = name; - switch (Project.OtherConfigurationSettings.fileNameRules) { + switch (forceRules || GetOtherConfigurationSettings().fileNameRules) { case "ASCII": { // first, get to ascii only n = ASCIIFolder.foldReplacing(n, "X"); @@ -19,14 +19,14 @@ export function sanitizeForArchive(name: string): string { n = n.replace(regex, "_"); break; } - case "unicode": { + case "unicode": // nothing more to do? break; - } + default: throw new Error( "Unknown fileNameRules: " + - Project.OtherConfigurationSettings.fileNameRules + GetOtherConfigurationSettings().fileNameRules ); } // finally, make sure it is safe for filesystems diff --git a/src/other/xmlUnitTestUtils.ts b/src/other/xmlUnitTestUtils.ts index 57d638d9..28e1bc2f 100644 --- a/src/other/xmlUnitTestUtils.ts +++ b/src/other/xmlUnitTestUtils.ts @@ -147,7 +147,7 @@ expect.extend({ toHaveCount(xpath, expectedValue) { const matchCount = select(xpath).length; if (matchCount !== expectedValue) { - // console.log(resultXml); + console.log(resultXml); return { message: () => `expected ${xpath} to have ${expectedValue} matches, but got ${matchCount}`, diff --git a/yarn.lock b/yarn.lock index 2a6b68e1..034b91db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1535,116 +1535,231 @@ resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + "@esbuild/android-arm64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + "@esbuild/android-arm@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + "@esbuild/android-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + "@esbuild/darwin-arm64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + "@esbuild/darwin-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + "@esbuild/freebsd-arm64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + "@esbuild/freebsd-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + "@esbuild/linux-arm64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + "@esbuild/linux-arm@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + "@esbuild/linux-ia32@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + "@esbuild/linux-loong64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + "@esbuild/linux-mips64el@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + "@esbuild/linux-ppc64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + "@esbuild/linux-riscv64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + "@esbuild/linux-s390x@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + "@esbuild/linux-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + "@esbuild/netbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + "@esbuild/openbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + "@esbuild/sunos-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + "@esbuild/win32-arm64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + "@esbuild/win32-ia32@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + "@esbuild/win32-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -2239,66 +2354,146 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@rollup/rollup-android-arm-eabi@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.2.tgz#29b7b3c70ddf532fe6dcf859cbfc3e4714c34842" + integrity sha512-VGodkwtEuZ+ENPz/CpDSl091koMv8ao5jHVMbG1vNK+sbx/48/wVzP84M5xSfDAC69mAKKoEkSo+ym9bXYRK9w== + "@rollup/rollup-android-arm-eabi@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== +"@rollup/rollup-android-arm64@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.2.tgz#f50f65d0c3b8b30d070d8616b2dfc0978dd588bd" + integrity sha512-5/W1xyIdc7jw6c/f1KEtg1vYDBWnWCsLiipK41NiaWGLG93eH2edgE6EgQJ3AGiPERhiOLUqlDSfjRK08C9xFg== + "@rollup/rollup-android-arm64@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== +"@rollup/rollup-darwin-arm64@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.2.tgz#be3d9fffbf6fc5b9d5f0642f1f0250e0ecab8d3e" + integrity sha512-vOAKMqZSTbPfyPVu1jBiy+YniIQd3MG7LUnqV0dA6Q5tyhdqYtxacTHP1+S/ksKl6qCtMG1qQ0grcIgk/19JEA== + "@rollup/rollup-darwin-arm64@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== +"@rollup/rollup-darwin-x64@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.2.tgz#fe45a772526b2c03d545e20f97a1e5cd60a46e52" + integrity sha512-aIJVRUS3Dnj6MqocBMrcXlatKm64O3ITeQAdAxVSE9swyhNyV1dwnRgw7IGKIkDQofatd8UqMSyUxuFEa42EcA== + "@rollup/rollup-darwin-x64@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== +"@rollup/rollup-linux-arm-gnueabihf@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.2.tgz#450ecf66f30a51514413aafa79d28561db73151c" + integrity sha512-/bjfUiXwy3P5vYr6/ezv//Yle2Y0ak3a+Av/BKoi76nFryjWCkki8AuVoPR7ZU/ckcvAWFo77OnFK14B9B5JsA== + "@rollup/rollup-linux-arm-gnueabihf@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== +"@rollup/rollup-linux-arm-musleabihf@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.2.tgz#1e8807d220047084579cd01499c5476a325e0700" + integrity sha512-S24b+tJHwpq2TNRz9T+r71FjMvyBBApY8EkYxz8Cwi/rhH6h+lu/iDUxyc9PuHf9UvyeBFYkWWcrDahai/NCGw== + +"@rollup/rollup-linux-arm64-gnu@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.2.tgz#128adb9dbf0057b989127d2e7fd73931a6729410" + integrity sha512-UN7VAXLyeyGbCQWiOtQN7BqmjTDw1ON2Oos4lfk0YR7yNhFEJWZiwGtvj9Ay4lsT/ueT04sh80Sg2MlWVVZ+Ug== + "@rollup/rollup-linux-arm64-gnu@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== +"@rollup/rollup-linux-arm64-musl@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.2.tgz#fddc7730045301a7fb0132532890e5edcb23d2bc" + integrity sha512-ZBKvz3+rIhQjusKMccuJiPsStCrPOtejCHxTe+yWp3tNnuPWtyCh9QLGPKz6bFNFbwbw28E2T6zDgzJZ05F1JQ== + "@rollup/rollup-linux-arm64-musl@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== +"@rollup/rollup-linux-powerpc64le-gnu@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.2.tgz#7154fe9ffc6405b2a6555ca931c42c0aa5198c2a" + integrity sha512-LjMMFiVBRL3wOe095vHAekL4b7nQqf4KZEpdMWd3/W+nIy5o9q/8tlVKiqMbfieDypNXLsxM9fexOxd9Qcklyg== + +"@rollup/rollup-linux-riscv64-gnu@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.2.tgz#7a7d091a94fa7c50ebf72d5578475093e01c739e" + integrity sha512-ohkPt0lKoCU0s4B6twro2aft+QROPdUiWwOjPNTzwTsBK5w+2+iT9kySdtOdq0gzWJAdiqsV4NFtXOwGZmIsHA== + "@rollup/rollup-linux-riscv64-gnu@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== +"@rollup/rollup-linux-s390x-gnu@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.2.tgz#39b87bd355dfafbc062ca856d3d6bc5aa1905d89" + integrity sha512-jm2lvLc+/gqXfndlpDw05jKvsl/HKYxUEAt1h5UXcMFVpO4vGpoWmJVUfKDtTqSaHcCNw1his1XjkgR9aort3w== + +"@rollup/rollup-linux-x64-gnu@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.2.tgz#30b88169db18dec202ab9662d5148523d59da553" + integrity sha512-oc5/SlITI/Vj/qL4UM+lXN7MERpiy1HEOnrE+SegXwzf7WP9bzmZd6+MDljCEZTdSY84CpvUv9Rq7bCaftn1+g== + "@rollup/rollup-linux-x64-gnu@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== +"@rollup/rollup-linux-x64-musl@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.2.tgz#d4fd52a28d5ce4aaed436311d89a9a1eaff87c2d" + integrity sha512-/2VWEBG6mKbS2itm7hzPwhIPaxfZh/KLWrYg20pCRLHhNFtF+epLgcBtwy3m07bl/k86Q3PFRAf2cX+VbZbwzQ== + "@rollup/rollup-linux-x64-musl@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== +"@rollup/rollup-win32-arm64-msvc@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.2.tgz#edd352302e3fa6a2d612447590b0a0887cdbf762" + integrity sha512-Wg7ANh7+hSilF0lG3e/0Oy8GtfTIfEk1327Bw8juZOMOoKmJLs3R+a4JDa/4cHJp2Gs7QfCDTepXXcyFD0ubBg== + "@rollup/rollup-win32-arm64-msvc@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== +"@rollup/rollup-win32-ia32-msvc@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.2.tgz#f17cc1db108f364bf6ef427f98844b5f742d31f0" + integrity sha512-J/jCDKVMWp0Y2ELnTjpQFYUCUWv1Jr+LdFrJVZtdqGyjDo0PHPa7pCamjHvJel6zBFM3doFFqAr7cmXYWBAbfw== + "@rollup/rollup-win32-ia32-msvc@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== +"@rollup/rollup-win32-x64-msvc@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.2.tgz#98fb87589960075d39c44784e3a99f67138602f4" + integrity sha512-3nIf+SJMs2ZzrCh+SKNqgLVV9hS/UY0UjT1YU8XQYFGLiUfmHYJ/5trOU1XSvmHjV5gTF/K3DjrWxtyzKKcAHA== + "@rollup/rollup-win32-x64-msvc@4.9.6": version "4.9.6" resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" @@ -3333,14 +3528,7 @@ resolved "https://registry.npmjs.org/@types/camelcase/-/camelcase-4.1.0.tgz#e054f7986f31658d49936261b5cd4588ef29d1ee" integrity sha512-nsaprOtNLvUrLyFX5+mRpE9h2Q0d5YzQRr+Lav3fxdYtc1/E/U7G+Ld861NWBDDtWY3MnwKoUOhCrE1nrVxUQA== -"@types/chai-subset@^1.3.3": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a" - integrity sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.1.2", "@types/chai@^4.3.5": +"@types/chai@^4.1.2": version "4.3.11" resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== @@ -3929,70 +4117,62 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" -"@vitest/expect@0.34.6": - version "0.34.6" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz#608a7b7a9aa3de0919db99b4cc087340a03ea77e" - integrity sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw== +"@vitest/expect@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz#0b3ba0914f738508464983f4d811bc122b51fb30" + integrity sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ== dependencies: - "@vitest/spy" "0.34.6" - "@vitest/utils" "0.34.6" + "@vitest/spy" "1.6.0" + "@vitest/utils" "1.6.0" chai "^4.3.10" -"@vitest/runner@0.34.6": - version "0.34.6" - resolved "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz#6f43ca241fc96b2edf230db58bcde5b974b8dcaf" - integrity sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ== +"@vitest/runner@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz#a6de49a96cb33b0e3ba0d9064a3e8d6ce2f08825" + integrity sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg== dependencies: - "@vitest/utils" "0.34.6" - p-limit "^4.0.0" + "@vitest/utils" "1.6.0" + p-limit "^5.0.0" pathe "^1.1.1" -"@vitest/snapshot@0.34.6": - version "0.34.6" - resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz#b4528cf683b60a3e8071cacbcb97d18b9d5e1d8b" - integrity sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w== +"@vitest/snapshot@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz#deb7e4498a5299c1198136f56e6e0f692e6af470" + integrity sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ== dependencies: - magic-string "^0.30.1" + magic-string "^0.30.5" pathe "^1.1.1" - pretty-format "^29.5.0" + pretty-format "^29.7.0" -"@vitest/spy@0.34.6": - version "0.34.6" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz#b5e8642a84aad12896c915bce9b3cc8cdaf821df" - integrity sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ== +"@vitest/spy@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz#362cbd42ccdb03f1613798fde99799649516906d" + integrity sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw== dependencies: - tinyspy "^2.1.1" + tinyspy "^2.2.0" -"@vitest/ui@^0.34.6": - version "0.34.7" - resolved "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.7.tgz#9ca5704025bcab7c7852e800d3765103edb60059" - integrity sha512-iizUu9R5Rsvsq8FtdJ0suMqEfIsIIzziqnasMHe4VH8vG+FnZSA3UAtCHx6rLeRupIFVAVg7bptMmuvMcsn8WQ== +"@vitest/ui@^1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@vitest/ui/-/ui-1.6.0.tgz#ffcc97ebcceca7fec840c29ab68632d0cd01db93" + integrity sha512-k3Lyo+ONLOgylctiGovRKy7V4+dIN2yxstX3eY5cWFXH6WP+ooVX79YSyi0GagdTQzLmT43BF27T0s6dOIPBXA== dependencies: - "@vitest/utils" "0.34.7" - fast-glob "^3.3.0" - fflate "^0.8.0" - flatted "^3.2.7" + "@vitest/utils" "1.6.0" + fast-glob "^3.3.2" + fflate "^0.8.1" + flatted "^3.2.9" pathe "^1.1.1" picocolors "^1.0.0" - sirv "^2.0.3" - -"@vitest/utils@0.34.6": - version "0.34.6" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz#38a0a7eedddb8e7291af09a2409cb8a189516968" - integrity sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A== - dependencies: - diff-sequences "^29.4.3" - loupe "^2.3.6" - pretty-format "^29.5.0" + sirv "^2.0.4" -"@vitest/utils@0.34.7": - version "0.34.7" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz#46d0d27cd0f6ca1894257d4e141c5c48d7f50295" - integrity sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg== +"@vitest/utils@1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz#5c5675ca7d6f546a7b4337de9ae882e6c57896a1" + integrity sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw== dependencies: - diff-sequences "^29.4.3" - loupe "^2.3.6" - pretty-format "^29.5.0" + diff-sequences "^29.6.3" + estree-walker "^3.0.3" + loupe "^2.3.7" + pretty-format "^29.7.0" "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" @@ -4303,7 +4483,7 @@ acorn-walk@^7.2.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.1.1, acorn-walk@^8.2.0: +acorn-walk@^8.1.1, acorn-walk@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== @@ -4318,7 +4498,7 @@ acorn@^7.4.1: resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.10.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.11.3, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.3" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -6857,6 +7037,11 @@ conf@^10.2.0: pkg-up "^3.1.0" semver "^7.3.5" +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + config-chain@^1.1.11: version "1.1.13" resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -7568,7 +7753,7 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" -diff-sequences@^29.4.3: +diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== @@ -8332,6 +8517,35 @@ esbuild@^0.19.3, esbuild@~0.19.10: "@esbuild/win32-ia32" "0.19.12" "@esbuild/win32-x64" "0.19.12" +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -8574,6 +8788,13 @@ estree-walker@^2.0.2: resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -8648,6 +8869,21 @@ execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + exenv@^1.2.0: version "1.2.2" resolved "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -8825,7 +9061,7 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -8894,10 +9130,10 @@ fetch-retry@^5.0.2: resolved "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== -fflate@^0.8.0: - version "0.8.1" - resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz#1ed92270674d2ad3c73f077cd0acf26486dae6c9" - integrity sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ== +fflate@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== ffprobe-static@^3.1.0: version "3.1.0" @@ -9088,7 +9324,7 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0, flatted@^3.2.7, flatted@^3.2.9: +flatted@^3.1.0, flatted@^3.2.9: version "3.2.9" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== @@ -9476,6 +9712,11 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -10201,6 +10442,11 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + humanize-duration@^3.15.3: version "3.31.0" resolved "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.31.0.tgz#a0384d22555024cd17e6e9f8561540d37756bf4c" @@ -10865,6 +11111,11 @@ is-stream@^2.0.0: resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -11224,6 +11475,11 @@ js-tokens@^3.0.2: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== +js-tokens@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1" + integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== + js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.9.0: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -11330,11 +11586,6 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -11743,10 +11994,13 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: emojis-list "^3.0.0" json5 "^2.1.2" -local-pkg@^0.4.3: - version "0.4.3" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" - integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" localforage@^1.8.1: version "1.10.0" @@ -11921,7 +12175,7 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -loupe@^2.3.6: +loupe@^2.3.6, loupe@^2.3.7: version "2.3.7" resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== @@ -11980,10 +12234,10 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@^0.30.1: - version "0.30.6" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz#996e21b42f944e45591a68f0905d6a740a12506c" - integrity sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA== +magic-string@^0.30.5: + version "0.30.10" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -12432,6 +12686,11 @@ mimic-fn@^3.0.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -12615,10 +12874,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mlly@^1.2.0, mlly@^1.4.0: - version "1.5.0" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== +mlly@^1.4.2, mlly@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== dependencies: acorn "^8.11.3" pathe "^1.1.2" @@ -12952,6 +13211,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + npm-which@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -13165,6 +13431,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^7.0.3, open@^7.4.2: version "7.4.2" resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -13287,10 +13560,10 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== +p-limit@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== dependencies: yocto-queue "^1.0.0" @@ -13558,6 +13831,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -13620,7 +13898,7 @@ path@^0.12.7: process "^0.11.1" util "^0.10.3" -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: +pathe@^1.1.1, pathe@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== @@ -13720,13 +13998,13 @@ pkg-dir@^5.0.0: find-up "^5.0.0" pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + version "1.1.0" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz#3ec1bf33379030fd0a34c227b6c650e8ea7ca271" + integrity sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA== dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" + confbox "^0.1.7" + mlly "^1.6.1" + pathe "^1.1.2" pkg-up@^3.1.0: version "3.1.0" @@ -13922,6 +14200,15 @@ postcss@^8.4.32: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + postinstall-postinstall@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" @@ -13968,7 +14255,7 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^29.5.0: +pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -15173,6 +15460,31 @@ roarr@^2.15.3: semver-compare "^1.0.0" sprintf-js "^1.1.2" +rollup@^4.13.0: + version "4.16.2" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.16.2.tgz#43bcbd225d0a6bc68df97a6e41c45003188a3845" + integrity sha512-sxDP0+pya/Yi5ZtptF4p3avI+uWCIf/OdrfdH2Gbv1kWddLKk0U7WE3PmQokhi5JrektxsK3sK8s4hzAmjqahw== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.16.2" + "@rollup/rollup-android-arm64" "4.16.2" + "@rollup/rollup-darwin-arm64" "4.16.2" + "@rollup/rollup-darwin-x64" "4.16.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.16.2" + "@rollup/rollup-linux-arm-musleabihf" "4.16.2" + "@rollup/rollup-linux-arm64-gnu" "4.16.2" + "@rollup/rollup-linux-arm64-musl" "4.16.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.16.2" + "@rollup/rollup-linux-riscv64-gnu" "4.16.2" + "@rollup/rollup-linux-s390x-gnu" "4.16.2" + "@rollup/rollup-linux-x64-gnu" "4.16.2" + "@rollup/rollup-linux-x64-musl" "4.16.2" + "@rollup/rollup-win32-arm64-msvc" "4.16.2" + "@rollup/rollup-win32-ia32-msvc" "4.16.2" + "@rollup/rollup-win32-x64-msvc" "4.16.2" + fsevents "~2.3.2" + rollup@^4.2.0: version "4.9.6" resolved "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" @@ -15649,7 +15961,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -15681,7 +15993,7 @@ sinon@^4.0.0: supports-color "^5.1.0" type-detect "^4.0.5" -sirv@^2.0.3: +sirv@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== @@ -15786,6 +16098,11 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -15967,7 +16284,7 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -std-env@^3.3.3: +std-env@^3.5.0: version "3.7.0" resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== @@ -16196,6 +16513,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -16220,12 +16542,12 @@ strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^1.0.1: - version "1.3.0" - resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" - integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== +strip-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a" + integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== dependencies: - acorn "^8.10.0" + js-tokens "^9.0.0" strtok2@~1.0.0: version "1.0.4" @@ -16532,20 +16854,20 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2: resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tinybench@^2.5.0: - version "2.6.0" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" - integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== +tinybench@^2.5.1: + version "2.8.0" + resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" + integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== -tinypool@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" - integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== +tinypool@^0.8.3: + version "0.8.4" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz#e217fe1270d941b39e98c625dcecebb1408c9aa8" + integrity sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ== -tinyspy@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz#9dc04b072746520b432f77ea2c2d17933de5d6ce" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== +tinyspy@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== title-case@^4.1.2: version "4.3.1" @@ -16910,9 +17232,9 @@ typescript@^5.3.3: integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== ufo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" - integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== + version "1.5.3" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== uglify-js@^3.1.4: version "3.17.4" @@ -17335,17 +17657,16 @@ vite-electron-plugin@^0.8.3: notbundle "~0.4.0" vite-plugin-electron "~0.14.1" -vite-node@0.34.6: - version "0.34.6" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz#34d19795de1498562bf21541a58edcd106328a17" - integrity sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA== +vite-node@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" + integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== dependencies: cac "^6.7.14" debug "^4.3.4" - mlly "^1.4.0" pathe "^1.1.1" picocolors "^1.0.0" - vite "^3.0.0 || ^4.0.0 || ^5.0.0-0" + vite "^5.0.0" vite-plugin-electron-renderer@^0.12.1: version "0.12.1" @@ -17369,7 +17690,18 @@ vite-plugin-time-reporter@^2.1.0: resolved "https://registry.npmjs.org/vite-plugin-time-reporter/-/vite-plugin-time-reporter-2.3.0.tgz#7f5644252a439bfd1723d259447ae8a13d93991e" integrity sha512-I/EfaCmuZ5tDoWkrhGXOPPZB/AZsto2prqGxRTke3ATGMHM3a7xceuUGZQ6V7pG4xoiVRypkKL9XyDomELycKQ== -"vite@^3.0.0 || ^4.0.0 || ^5.0.0-0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0", vite@^5.0.12: +vite@^5.0.0: + version "5.2.10" + resolved "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" + integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +vite@^5.0.12: version "5.0.12" resolved "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== @@ -17380,34 +17712,30 @@ vite-plugin-time-reporter@^2.1.0: optionalDependencies: fsevents "~2.3.3" -vitest@^0.34.6: - version "0.34.6" - resolved "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz#44880feeeef493c04b7f795ed268f24a543250d7" - integrity sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q== - dependencies: - "@types/chai" "^4.3.5" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - "@vitest/expect" "0.34.6" - "@vitest/runner" "0.34.6" - "@vitest/snapshot" "0.34.6" - "@vitest/spy" "0.34.6" - "@vitest/utils" "0.34.6" - acorn "^8.9.0" - acorn-walk "^8.2.0" - cac "^6.7.14" +vitest@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz#9d5ad4752a3c451be919e412c597126cffb9892f" + integrity sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA== + dependencies: + "@vitest/expect" "1.6.0" + "@vitest/runner" "1.6.0" + "@vitest/snapshot" "1.6.0" + "@vitest/spy" "1.6.0" + "@vitest/utils" "1.6.0" + acorn-walk "^8.3.2" chai "^4.3.10" debug "^4.3.4" - local-pkg "^0.4.3" - magic-string "^0.30.1" + execa "^8.0.1" + local-pkg "^0.5.0" + magic-string "^0.30.5" pathe "^1.1.1" picocolors "^1.0.0" - std-env "^3.3.3" - strip-literal "^1.0.1" - tinybench "^2.5.0" - tinypool "^0.7.0" - vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" - vite-node "0.34.6" + std-env "^3.5.0" + strip-literal "^2.0.0" + tinybench "^2.5.1" + tinypool "^0.8.3" + vite "^5.0.0" + vite-node "1.6.0" why-is-node-running "^2.2.2" vm-browserify@^1.0.1: