diff --git a/packages/admin/admin-vite-plugin/package.json b/packages/admin/admin-vite-plugin/package.json
index da5072fc2e832..8a1b3c332104f 100644
--- a/packages/admin/admin-vite-plugin/package.json
+++ b/packages/admin/admin-vite-plugin/package.json
@@ -22,14 +22,17 @@
],
"scripts": {
"build": "tsup",
- "watch": "tsup --watch"
+ "watch": "tsup --watch",
+ "test": "vitest --run",
+ "test:watch": "vitest"
},
"devDependencies": {
"@babel/types": "7.25.6",
"@types/node": "^20.10.4",
"tsup": "8.0.1",
"typescript": "5.3.3",
- "vite": "^5.2.11"
+ "vite": "^5.2.11",
+ "vitest": "^2.1.3"
},
"peerDependencies": {
"vite": "^5.0.0"
diff --git a/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-displays.ts b/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-displays.ts
index 2ac717b118fe2..d18ce42cb32c8 100644
--- a/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-displays.ts
+++ b/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-displays.ts
@@ -20,7 +20,7 @@ import {
traverse,
} from "../babel"
import { logger } from "../logger"
-import { crawl, getParserOptions } from "../utils"
+import { crawl, getParserOptions, normalizePath } from "../utils"
import { getConfigArgument, getModel, validateLink } from "./helpers"
type CustomFieldDisplay = {
@@ -288,5 +288,6 @@ function generateCustomFieldConfigName(index: number): string {
}
function generateImport(file: string, index: number): string {
- return `import ${generateCustomFieldConfigName(index)} from "${file}"`
+ const path = normalizePath(file)
+ return `import ${generateCustomFieldConfigName(index)} from "${path}"`
}
diff --git a/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts b/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts
index 2f11ee3ff94c3..1bb2c3d967bf2 100644
--- a/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts
+++ b/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-forms.ts
@@ -29,7 +29,7 @@ import {
traverse,
} from "../babel"
import { logger } from "../logger"
-import { crawl, getParserOptions } from "../utils"
+import { crawl, getParserOptions, normalizePath } from "../utils"
import { getConfigArgument, getModel, validateLink } from "./helpers"
type CustomFieldConfigField = {
@@ -263,7 +263,8 @@ function generateCustomFieldConfigName(index: number): string {
}
function generateImport(file: string, index: number): string {
- return `import ${generateCustomFieldConfigName(index)} from "${file}"`
+ const path = normalizePath(file)
+ return `import ${generateCustomFieldConfigName(index)} from "${path}"`
}
function getForms(
diff --git a/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-links.ts b/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-links.ts
index ac4e4fd7b6906..9c363b36f6e83 100644
--- a/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-links.ts
+++ b/packages/admin/admin-vite-plugin/src/custom-fields/generate-custom-field-links.ts
@@ -12,7 +12,7 @@ import {
traverse,
} from "../babel"
import { logger } from "../logger"
-import { crawl, getParserOptions } from "../utils"
+import { crawl, getParserOptions, normalizePath } from "../utils"
import { getConfigArgument, getModel } from "./helpers"
type ParsedCustomFieldLink = {
@@ -138,7 +138,8 @@ function generateCustomFieldConfigName(index: number): string {
}
function generateImport(file: string, index: number): string {
- return `import ${generateCustomFieldConfigName(index)} from "${file}"`
+ const path = normalizePath(file)
+ return `import ${generateCustomFieldConfigName(index)} from "${path}"`
}
function getLink(
diff --git a/packages/admin/admin-vite-plugin/src/routes/__tests__/generate-menu-items.spec.ts b/packages/admin/admin-vite-plugin/src/routes/__tests__/generate-menu-items.spec.ts
new file mode 100644
index 0000000000000..cb8ccd98eaa39
--- /dev/null
+++ b/packages/admin/admin-vite-plugin/src/routes/__tests__/generate-menu-items.spec.ts
@@ -0,0 +1,113 @@
+import { describe, expect, it, vi } from "vitest"
+
+import fs from "fs/promises"
+import * as utils from "../../utils"
+import { generateMenuItems } from "../generate-menu-items"
+
+vi.mock("../../utils", async () => {
+ const actual = await vi.importActual("../../utils")
+ return {
+ ...actual,
+ crawl: vi.fn(),
+ }
+})
+
+vi.mock("fs/promises", () => ({
+ default: {
+ readFile: vi.fn(),
+ },
+}))
+
+const mockFileContents = [
+ `
+ import { defineRouteConfig } from "@medusajs/admin-sdk"
+
+ const Page = () => {
+ return
Page 1
+ }
+
+ export const config = defineRouteConfig({
+ label: "Page 1",
+ icon: "icon1",
+ })
+
+ export default Page
+ `,
+ `
+ import { defineRouteConfig } from "@medusajs/admin-sdk"
+
+ const Page = () => {
+ return Page 2
+ }
+
+ export const config = defineRouteConfig({
+ label: "Page 2",
+ })
+
+ export default Page
+ `,
+]
+
+const expectedMenuItems = `
+ menuItems: [
+ {
+ label: RouteConfig0.label,
+ icon: RouteConfig0.icon,
+ path: "/one",
+ },
+ {
+ label: RouteConfig1.label,
+ icon: undefined,
+ path: "/two",
+ }
+ ]
+ `
+
+describe("generateMenuItems", () => {
+ it("should generate menu items", async () => {
+ const mockFiles = [
+ "Users/user/medusa/src/admin/routes/one/page.tsx",
+ "Users/user/medusa/src/admin/routes/two/page.tsx",
+ ]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ const result = await generateMenuItems(
+ new Set(["Users/user/medusa/src/admin"])
+ )
+
+ expect(result.imports).toEqual([
+ `import { config as RouteConfig0 } from "Users/user/medusa/src/admin/routes/one/page.tsx"`,
+ `import { config as RouteConfig1 } from "Users/user/medusa/src/admin/routes/two/page.tsx"`,
+ ])
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedMenuItems)
+ )
+ })
+
+ it("should handle windows paths", async () => {
+ // Setup mocks
+ const mockFiles = [
+ "C:\\medusa\\src\\admin\\routes\\one\\page.tsx",
+ "C:\\medusa\\src\\admin\\routes\\two\\page.tsx",
+ ]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ const result = await generateMenuItems(new Set(["C:\\medusa\\src\\admin"]))
+
+ expect(result.imports).toEqual([
+ `import { config as RouteConfig0 } from "C:/medusa/src/admin/routes/one/page.tsx"`,
+ `import { config as RouteConfig1 } from "C:/medusa/src/admin/routes/two/page.tsx"`,
+ ])
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedMenuItems)
+ )
+ })
+})
diff --git a/packages/admin/admin-vite-plugin/src/routes/__tests__/generate-routes.spec.ts b/packages/admin/admin-vite-plugin/src/routes/__tests__/generate-routes.spec.ts
new file mode 100644
index 0000000000000..6ef9e1f1fe75e
--- /dev/null
+++ b/packages/admin/admin-vite-plugin/src/routes/__tests__/generate-routes.spec.ts
@@ -0,0 +1,144 @@
+import { describe, expect, it, vi } from "vitest"
+
+import { Stats } from "fs"
+import fs from "fs/promises"
+import * as utils from "../../utils"
+import { generateRoutes } from "../generate-routes"
+
+// Mock the dependencies
+vi.mock("../../utils", async () => {
+ const actual = await vi.importActual("../../utils")
+ return {
+ ...actual,
+ crawl: vi.fn(),
+ }
+})
+
+vi.mock("fs/promises", () => ({
+ default: {
+ readFile: vi.fn(),
+ stat: vi.fn(),
+ },
+}))
+
+const mockFileContents = [
+ `
+ import { defineRouteConfig } from "@medusajs/admin-sdk"
+
+ const Page = () => {
+ return Page 1
+ }
+
+ export const config = defineRouteConfig({
+ label: "Page 1",
+ icon: "icon1",
+ })
+
+ export default Page
+ `,
+ `
+ import { defineRouteConfig } from "@medusajs/admin-sdk"
+
+ const Page = () => {
+ return Page 2
+ }
+
+ export const config = defineRouteConfig({
+ label: "Page 2",
+ })
+
+ export default Page
+ `,
+]
+
+const expectedRoutesWithoutLoaders = `
+ routes: [
+ {
+ Component: RouteComponent0,
+ loader: undefined,
+ path: "/one",
+ },
+ {
+ Component: RouteComponent1,
+ loader: undefined,
+ path: "/two",
+ }
+ ]
+`
+
+const expectedRoutesWithLoaders = `
+ routes: [
+ {
+ Component: RouteComponent0,
+ loader: RouteLoader0,
+ path: "/one",
+ },
+ {
+ Component: RouteComponent1,
+ loader: RouteLoader1,
+ path: "/two",
+ }
+ ]
+`
+
+describe("generateRoutes", () => {
+ it("should generate routes", async () => {
+ const mockFiles = [
+ "Users/user/medusa/src/admin/routes/one/page.tsx",
+ "Users/user/medusa/src/admin/routes/two/page.tsx",
+ ]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ vi.mocked(fs.stat).mockRejectedValue(new Error("File not found"))
+
+ const result = await generateRoutes(
+ new Set(["Users/user/medusa/src/admin"])
+ )
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedRoutesWithoutLoaders)
+ )
+ })
+ it("should generate routes with loaders", async () => {
+ const mockFiles = [
+ "Users/user/medusa/src/admin/routes/one/page.tsx",
+ "Users/user/medusa/src/admin/routes/two/page.tsx",
+ ]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ vi.mocked(fs.stat).mockResolvedValue({} as Stats) // We just want to mock that the check passes
+
+ const result = await generateRoutes(
+ new Set(["Users/user/medusa/src/admin"])
+ )
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedRoutesWithLoaders)
+ )
+ })
+ it("should handle windows paths", async () => {
+ const mockFiles = [
+ "C:\\medusa\\src\\admin\\routes\\one\\page.tsx",
+ "C:\\medusa\\src\\admin\\routes\\two\\page.tsx",
+ ]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ vi.mocked(fs.stat).mockRejectedValue(new Error("File not found"))
+
+ const result = await generateRoutes(new Set(["C:\\medusa\\src\\admin"]))
+
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedRoutesWithoutLoaders)
+ )
+ })
+})
diff --git a/packages/admin/admin-vite-plugin/src/routes/generate-menu-items.ts b/packages/admin/admin-vite-plugin/src/routes/generate-menu-items.ts
index 7c738903462c4..19ef309810501 100644
--- a/packages/admin/admin-vite-plugin/src/routes/generate-menu-items.ts
+++ b/packages/admin/admin-vite-plugin/src/routes/generate-menu-items.ts
@@ -2,7 +2,12 @@ import fs from "fs/promises"
import { outdent } from "outdent"
import { isIdentifier, isObjectProperty, parse, traverse } from "../babel"
import { logger } from "../logger"
-import { crawl, getConfigObjectProperties, getParserOptions } from "../utils"
+import {
+ crawl,
+ getConfigObjectProperties,
+ getParserOptions,
+ normalizePath,
+} from "../utils"
import { getRoute } from "./helpers"
type MenuItem = {
@@ -90,7 +95,8 @@ async function parseFile(
}
function generateImport(file: string, index: number): string {
- return `import { config as ${generateRouteConfigName(index)} } from "${file}"`
+ const path = normalizePath(file)
+ return `import { config as ${generateRouteConfigName(index)} } from "${path}"`
}
function generateMenuItem(
diff --git a/packages/admin/admin-vite-plugin/src/utils.ts b/packages/admin/admin-vite-plugin/src/utils.ts
index 0522ef49a00f0..7c3d1349558ab 100644
--- a/packages/admin/admin-vite-plugin/src/utils.ts
+++ b/packages/admin/admin-vite-plugin/src/utils.ts
@@ -17,7 +17,7 @@ import {
} from "./babel"
export function normalizePath(file: string) {
- return path.normalize(file).split(path.sep).join("/")
+ return path.normalize(file.replace(/\\/g, "/"))
}
/**
@@ -145,3 +145,11 @@ export function isFileInAdminSubdirectory(
const normalizedPath = normalizePath(file)
return normalizedPath.includes(`/src/admin/${subdirectory}/`)
}
+
+/**
+ * Test util to normalize strings, so they can be compared without taking
+ * whitespace into account.
+ */
+export function normalizeString(str: string): string {
+ return str.replace(/\s+/g, " ").trim()
+}
diff --git a/packages/admin/admin-vite-plugin/src/widgets/__tests__/generate-widgets.spec.ts b/packages/admin/admin-vite-plugin/src/widgets/__tests__/generate-widgets.spec.ts
new file mode 100644
index 0000000000000..2f31ca82b4f7e
--- /dev/null
+++ b/packages/admin/admin-vite-plugin/src/widgets/__tests__/generate-widgets.spec.ts
@@ -0,0 +1,83 @@
+import { vi } from "vitest"
+
+import fs from "fs/promises"
+import * as utils from "../../utils"
+import { generateWidgets } from "../generate-widgets"
+
+vi.mock("../../utils", async () => {
+ const actual = await vi.importActual("../../utils")
+ return {
+ ...actual,
+ crawl: vi.fn(),
+ }
+})
+
+vi.mock("fs/promises", () => ({
+ default: {
+ readFile: vi.fn(),
+ },
+}))
+
+const mockFileContents = [
+ `
+ import { defineWidgetConfig } from "@medusajs/admin-sdk"
+
+ const Widget = () => {
+ return Widget 1
+ }
+
+ export const config = defineWidgetConfig({
+ zone: "product.details.after",
+ })
+
+ export default Widget
+`,
+]
+
+const expectedWidgets = `
+ widgets: [
+ {
+ Component: WidgetComponent0,
+ zone: ["product.details.after"]
+ }
+ ]
+`
+
+describe("generateWidgets", () => {
+ it("should generate widgets", async () => {
+ const mockFiles = ["Users/user/medusa/src/admin/widgets/widget.tsx"]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ const result = await generateWidgets(
+ new Set(["Users/user/medusa/src/admin"])
+ )
+
+ expect(result.imports).toEqual([
+ `import WidgetComponent0, { config as WidgetConfig0 } from "Users/user/medusa/src/admin/widgets/widget.tsx"`,
+ ])
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedWidgets)
+ )
+ })
+ it("should handle windows paths", async () => {
+ const mockFiles = ["C:\\medusa\\src\\admin\\widgets\\widget.tsx"]
+ vi.mocked(utils.crawl).mockResolvedValue(mockFiles)
+
+ vi.mocked(fs.readFile).mockImplementation(async (file) =>
+ Promise.resolve(mockFileContents[mockFiles.indexOf(file as string)])
+ )
+
+ const result = await generateWidgets(new Set(["C:\\medusa\\src\\admin"]))
+
+ expect(result.imports).toEqual([
+ `import WidgetComponent0, { config as WidgetConfig0 } from "C:/medusa/src/admin/widgets/widget.tsx"`,
+ ])
+ expect(utils.normalizeString(result.code)).toEqual(
+ utils.normalizeString(expectedWidgets)
+ )
+ })
+})
diff --git a/packages/admin/admin-vite-plugin/src/widgets/generate-widgets.ts b/packages/admin/admin-vite-plugin/src/widgets/generate-widgets.ts
index 5a96dbf973e57..af5960458316f 100644
--- a/packages/admin/admin-vite-plugin/src/widgets/generate-widgets.ts
+++ b/packages/admin/admin-vite-plugin/src/widgets/generate-widgets.ts
@@ -16,6 +16,7 @@ import {
getConfigObjectProperties,
getParserOptions,
hasDefaultExport,
+ normalizePath,
} from "../utils"
import { getWidgetFilesFromSources } from "./helpers"
@@ -135,9 +136,10 @@ function generateWidgetConfigName(index: number): string {
}
function generateImport(file: string, index: number): string {
+ const path = normalizePath(file)
return `import ${generateWidgetComponentName(
index
- )}, { config as ${generateWidgetConfigName(index)} } from "${file}"`
+ )}, { config as ${generateWidgetConfigName(index)} } from "${path}"`
}
function generateWidget(zone: InjectionZone[], index: number): WidgetConfig {
diff --git a/packages/admin/admin-vite-plugin/tsconfig.build.json b/packages/admin/admin-vite-plugin/tsconfig.build.json
new file mode 100644
index 0000000000000..d853b83a4105b
--- /dev/null
+++ b/packages/admin/admin-vite-plugin/tsconfig.build.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig.json",
+ "exclude": ["**/*.spec.ts", "vitest.config.ts", "tsup.config.ts"]
+}
diff --git a/packages/admin/admin-vite-plugin/tsconfig.json b/packages/admin/admin-vite-plugin/tsconfig.json
index aa9f8ff0f3b68..ec7fcfec0c22a 100644
--- a/packages/admin/admin-vite-plugin/tsconfig.json
+++ b/packages/admin/admin-vite-plugin/tsconfig.json
@@ -18,5 +18,5 @@
"@babel/types": ["../../../node_modules/@babel/types"]
}
},
- "include": ["src"]
+ "include": ["src", "vitest.config.ts", "tsup.config.ts"]
}
diff --git a/packages/admin/admin-vite-plugin/tsup.config.cjs b/packages/admin/admin-vite-plugin/tsup.config.ts
similarity index 81%
rename from packages/admin/admin-vite-plugin/tsup.config.cjs
rename to packages/admin/admin-vite-plugin/tsup.config.ts
index f54ede878e0d8..adc4f96458ccc 100644
--- a/packages/admin/admin-vite-plugin/tsup.config.cjs
+++ b/packages/admin/admin-vite-plugin/tsup.config.ts
@@ -2,6 +2,7 @@ import { defineConfig } from "tsup"
export default defineConfig({
entry: ["./src/index.ts"],
+ tsconfig: "tsconfig.build.json",
format: ["cjs", "esm"],
dts: true,
clean: true,
diff --git a/packages/admin/admin-vite-plugin/vitest.config.ts b/packages/admin/admin-vite-plugin/vitest.config.ts
new file mode 100644
index 0000000000000..b93b2bbe7688c
--- /dev/null
+++ b/packages/admin/admin-vite-plugin/vitest.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from "vitest/config"
+
+export default defineConfig({
+ test: {
+ globals: true,
+ environment: "node",
+ include: ["**/*.spec.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
+ },
+})
diff --git a/yarn.lock b/yarn.lock
index d465b522f6d93..e91411582ae61 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3345,6 +3345,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/aix-ppc64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/aix-ppc64@npm:0.21.5"
+ conditions: os=aix & cpu=ppc64
+ languageName: node
+ linkType: hard
+
"@esbuild/aix-ppc64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/aix-ppc64@npm:0.23.1"
@@ -3373,6 +3380,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/android-arm64@npm:0.21.5"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/android-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/android-arm64@npm:0.23.1"
@@ -3401,6 +3415,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-arm@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/android-arm@npm:0.21.5"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
"@esbuild/android-arm@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/android-arm@npm:0.23.1"
@@ -3429,6 +3450,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/android-x64@npm:0.21.5"
+ conditions: os=android & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/android-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/android-x64@npm:0.23.1"
@@ -3457,6 +3485,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/darwin-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/darwin-arm64@npm:0.21.5"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/darwin-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/darwin-arm64@npm:0.23.1"
@@ -3485,6 +3520,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/darwin-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/darwin-x64@npm:0.21.5"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/darwin-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/darwin-x64@npm:0.23.1"
@@ -3513,6 +3555,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/freebsd-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/freebsd-arm64@npm:0.21.5"
+ conditions: os=freebsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/freebsd-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/freebsd-arm64@npm:0.23.1"
@@ -3541,6 +3590,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/freebsd-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/freebsd-x64@npm:0.21.5"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/freebsd-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/freebsd-x64@npm:0.23.1"
@@ -3569,6 +3625,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-arm64@npm:0.21.5"
+ conditions: os=linux & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-arm64@npm:0.23.1"
@@ -3597,6 +3660,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-arm@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-arm@npm:0.21.5"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-arm@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-arm@npm:0.23.1"
@@ -3625,6 +3695,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-ia32@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-ia32@npm:0.21.5"
+ conditions: os=linux & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-ia32@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-ia32@npm:0.23.1"
@@ -3653,6 +3730,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-loong64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-loong64@npm:0.21.5"
+ conditions: os=linux & cpu=loong64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-loong64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-loong64@npm:0.23.1"
@@ -3681,6 +3765,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-mips64el@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-mips64el@npm:0.21.5"
+ conditions: os=linux & cpu=mips64el
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-mips64el@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-mips64el@npm:0.23.1"
@@ -3709,6 +3800,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-ppc64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-ppc64@npm:0.21.5"
+ conditions: os=linux & cpu=ppc64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-ppc64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-ppc64@npm:0.23.1"
@@ -3737,6 +3835,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-riscv64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-riscv64@npm:0.21.5"
+ conditions: os=linux & cpu=riscv64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-riscv64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-riscv64@npm:0.23.1"
@@ -3765,6 +3870,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-s390x@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-s390x@npm:0.21.5"
+ conditions: os=linux & cpu=s390x
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-s390x@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-s390x@npm:0.23.1"
@@ -3793,6 +3905,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-x64@npm:0.21.5"
+ conditions: os=linux & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-x64@npm:0.23.1"
@@ -3821,6 +3940,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/netbsd-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/netbsd-x64@npm:0.21.5"
+ conditions: os=netbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/netbsd-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/netbsd-x64@npm:0.23.1"
@@ -3856,6 +3982,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/openbsd-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/openbsd-x64@npm:0.21.5"
+ conditions: os=openbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/openbsd-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/openbsd-x64@npm:0.23.1"
@@ -3884,6 +4017,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/sunos-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/sunos-x64@npm:0.21.5"
+ conditions: os=sunos & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/sunos-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/sunos-x64@npm:0.23.1"
@@ -3912,6 +4052,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/win32-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/win32-arm64@npm:0.21.5"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/win32-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/win32-arm64@npm:0.23.1"
@@ -3940,6 +4087,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/win32-ia32@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/win32-ia32@npm:0.21.5"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@esbuild/win32-ia32@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/win32-ia32@npm:0.23.1"
@@ -3968,6 +4122,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/win32-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/win32-x64@npm:0.21.5"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/win32-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/win32-x64@npm:0.23.1"
@@ -4984,6 +5145,13 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/sourcemap-codec@npm:^1.5.0":
+ version: 1.5.0
+ resolution: "@jridgewell/sourcemap-codec@npm:1.5.0"
+ checksum: 2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18
+ languageName: node
+ linkType: hard
+
"@jridgewell/trace-mapping@npm:0.3.9":
version: 0.3.9
resolution: "@jridgewell/trace-mapping@npm:0.3.9"
@@ -5136,6 +5304,7 @@ __metadata:
tsup: 8.0.1
typescript: 5.3.3
vite: ^5.2.11
+ vitest: ^2.1.3
peerDependencies:
vite: ^5.0.0
languageName: unknown
@@ -10792,6 +10961,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-android-arm-eabi@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-android-arm64@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-android-arm64@npm:4.17.2"
@@ -10799,6 +10975,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-android-arm64@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-android-arm64@npm:4.24.0"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-darwin-arm64@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-darwin-arm64@npm:4.17.2"
@@ -10806,6 +10989,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-darwin-arm64@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-darwin-x64@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-darwin-x64@npm:4.17.2"
@@ -10813,6 +11003,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-darwin-x64@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-darwin-x64@npm:4.24.0"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-arm-gnueabihf@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.17.2"
@@ -10820,6 +11017,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0"
+ conditions: os=linux & cpu=arm & libc=glibc
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-arm-musleabihf@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.17.2"
@@ -10827,6 +11031,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0"
+ conditions: os=linux & cpu=arm & libc=musl
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-arm64-gnu@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.17.2"
@@ -10834,6 +11045,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-arm64-gnu@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-arm64-musl@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.17.2"
@@ -10841,6 +11059,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-arm64-musl@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.17.2"
@@ -10848,6 +11073,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0"
+ conditions: os=linux & cpu=ppc64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-riscv64-gnu@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.17.2"
@@ -10855,6 +11087,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0"
+ conditions: os=linux & cpu=riscv64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-s390x-gnu@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.17.2"
@@ -10862,6 +11101,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-s390x-gnu@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0"
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-x64-gnu@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.17.2"
@@ -10869,6 +11115,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-x64-gnu@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-linux-x64-musl@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-linux-x64-musl@npm:4.17.2"
@@ -10876,6 +11129,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-linux-x64-musl@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-win32-arm64-msvc@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.17.2"
@@ -10883,6 +11143,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-win32-arm64-msvc@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-win32-ia32-msvc@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.17.2"
@@ -10890,6 +11157,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-win32-ia32-msvc@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@rollup/rollup-win32-x64-msvc@npm:4.17.2":
version: 4.17.2
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.17.2"
@@ -10897,6 +11171,13 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-win32-x64-msvc@npm:4.24.0":
+ version: 4.24.0
+ resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@rushstack/node-core-library@npm:4.2.0":
version: 4.2.0
resolution: "@rushstack/node-core-library@npm:4.2.0"
@@ -13085,6 +13366,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/estree@npm:1.0.6":
+ version: 1.0.6
+ resolution: "@types/estree@npm:1.0.6"
+ checksum: cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a
+ languageName: node
+ linkType: hard
+
"@types/estree@npm:^0.0.51":
version: 0.0.51
resolution: "@types/estree@npm:0.0.51"
@@ -14067,6 +14355,38 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/expect@npm:2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/expect@npm:2.1.3"
+ dependencies:
+ "@vitest/spy": 2.1.3
+ "@vitest/utils": 2.1.3
+ chai: ^5.1.1
+ tinyrainbow: ^1.2.0
+ checksum: 0837adcbb938feebcc083664afc5c4d12e42f1f2442b6f1bedc6b5650a8ff2448b1f10713b45afb099c839fb5cf766c971736267fa9b0fe2ac87f3e2d7f782c2
+ languageName: node
+ linkType: hard
+
+"@vitest/mocker@npm:2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/mocker@npm:2.1.3"
+ dependencies:
+ "@vitest/spy": 2.1.3
+ estree-walker: ^3.0.3
+ magic-string: ^0.30.11
+ peerDependencies:
+ "@vitest/spy": 2.1.3
+ msw: ^2.3.5
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+ checksum: 03c80628d092244f21a0ba9041665fc75f987d0d11fab1ae0b7027ec21e503f65057e8c24b936602c5f852d83fbb183da13d05dba117c99785b41b3dafd105ce
+ languageName: node
+ linkType: hard
+
"@vitest/pretty-format@npm:2.0.5":
version: 2.0.5
resolution: "@vitest/pretty-format@npm:2.0.5"
@@ -14085,6 +14405,15 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/pretty-format@npm:2.1.3, @vitest/pretty-format@npm:^2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/pretty-format@npm:2.1.3"
+ dependencies:
+ tinyrainbow: ^1.2.0
+ checksum: 5a6ee872a8adf5e2764f2b5b2276d8a2199be4ef14777ab693428caf359481851400af10b59721d4972289c955ffe7277954a662b04cfb10233824574c7074ba
+ languageName: node
+ linkType: hard
+
"@vitest/runner@npm:0.32.4":
version: 0.32.4
resolution: "@vitest/runner@npm:0.32.4"
@@ -14096,6 +14425,16 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/runner@npm:2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/runner@npm:2.1.3"
+ dependencies:
+ "@vitest/utils": 2.1.3
+ pathe: ^1.1.2
+ checksum: d5b077643265d10025e22fa64a0e54c3d4fddc23e05f9fcd143dbcc4080851b0df31985986e57890a974577a18d3af624758b6062801d7dd96f9b4f2eaf591f1
+ languageName: node
+ linkType: hard
+
"@vitest/snapshot@npm:0.32.4":
version: 0.32.4
resolution: "@vitest/snapshot@npm:0.32.4"
@@ -14107,6 +14446,17 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/snapshot@npm:2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/snapshot@npm:2.1.3"
+ dependencies:
+ "@vitest/pretty-format": 2.1.3
+ magic-string: ^0.30.11
+ pathe: ^1.1.2
+ checksum: a3dcea6a5f7581b6a34dc3bf5f7bd42a05e2ccf6e1171d9f1b759688aebe650e6412564d066aeaa45e83ac549d453b6a3edcf774a8ac728c0c639f8dc919039f
+ languageName: node
+ linkType: hard
+
"@vitest/spy@npm:0.32.4":
version: 0.32.4
resolution: "@vitest/spy@npm:0.32.4"
@@ -14125,6 +14475,15 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/spy@npm:2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/spy@npm:2.1.3"
+ dependencies:
+ tinyspy: ^3.0.0
+ checksum: 8d85a5c2848c5bd81892af989aebad65d0c7ae74094aa98ad4f35ecf80755259c7a748a8e7bf683b2906fac29a51fc0ffa82f8fc073b36dbd8a0418261fccdba
+ languageName: node
+ linkType: hard
+
"@vitest/utils@npm:0.32.4":
version: 0.32.4
resolution: "@vitest/utils@npm:0.32.4"
@@ -14148,6 +14507,17 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/utils@npm:2.1.3":
+ version: 2.1.3
+ resolution: "@vitest/utils@npm:2.1.3"
+ dependencies:
+ "@vitest/pretty-format": 2.1.3
+ loupe: ^3.1.1
+ tinyrainbow: ^1.2.0
+ checksum: 55a044e43b84c0f8f573d8578107f26440678b6f506c8d9fee88b7ef120d19efd27c9be77985c107113b0f3f3db298dcee57074e1c1c214bee7a097fd08a209b
+ languageName: node
+ linkType: hard
+
"@vitest/utils@npm:^2.0.5":
version: 2.1.2
resolution: "@vitest/utils@npm:2.1.2"
@@ -18782,6 +19152,86 @@ __metadata:
languageName: node
linkType: hard
+"esbuild@npm:^0.21.3":
+ version: 0.21.5
+ resolution: "esbuild@npm:0.21.5"
+ dependencies:
+ "@esbuild/aix-ppc64": 0.21.5
+ "@esbuild/android-arm": 0.21.5
+ "@esbuild/android-arm64": 0.21.5
+ "@esbuild/android-x64": 0.21.5
+ "@esbuild/darwin-arm64": 0.21.5
+ "@esbuild/darwin-x64": 0.21.5
+ "@esbuild/freebsd-arm64": 0.21.5
+ "@esbuild/freebsd-x64": 0.21.5
+ "@esbuild/linux-arm": 0.21.5
+ "@esbuild/linux-arm64": 0.21.5
+ "@esbuild/linux-ia32": 0.21.5
+ "@esbuild/linux-loong64": 0.21.5
+ "@esbuild/linux-mips64el": 0.21.5
+ "@esbuild/linux-ppc64": 0.21.5
+ "@esbuild/linux-riscv64": 0.21.5
+ "@esbuild/linux-s390x": 0.21.5
+ "@esbuild/linux-x64": 0.21.5
+ "@esbuild/netbsd-x64": 0.21.5
+ "@esbuild/openbsd-x64": 0.21.5
+ "@esbuild/sunos-x64": 0.21.5
+ "@esbuild/win32-arm64": 0.21.5
+ "@esbuild/win32-ia32": 0.21.5
+ "@esbuild/win32-x64": 0.21.5
+ dependenciesMeta:
+ "@esbuild/aix-ppc64":
+ optional: true
+ "@esbuild/android-arm":
+ optional: true
+ "@esbuild/android-arm64":
+ optional: true
+ "@esbuild/android-x64":
+ optional: true
+ "@esbuild/darwin-arm64":
+ optional: true
+ "@esbuild/darwin-x64":
+ optional: true
+ "@esbuild/freebsd-arm64":
+ optional: true
+ "@esbuild/freebsd-x64":
+ optional: true
+ "@esbuild/linux-arm":
+ optional: true
+ "@esbuild/linux-arm64":
+ optional: true
+ "@esbuild/linux-ia32":
+ optional: true
+ "@esbuild/linux-loong64":
+ optional: true
+ "@esbuild/linux-mips64el":
+ optional: true
+ "@esbuild/linux-ppc64":
+ optional: true
+ "@esbuild/linux-riscv64":
+ optional: true
+ "@esbuild/linux-s390x":
+ optional: true
+ "@esbuild/linux-x64":
+ optional: true
+ "@esbuild/netbsd-x64":
+ optional: true
+ "@esbuild/openbsd-x64":
+ optional: true
+ "@esbuild/sunos-x64":
+ optional: true
+ "@esbuild/win32-arm64":
+ optional: true
+ "@esbuild/win32-ia32":
+ optional: true
+ "@esbuild/win32-x64":
+ optional: true
+ bin:
+ esbuild: bin/esbuild
+ checksum: fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.1.1, escalade@npm:^3.1.2":
version: 3.1.2
resolution: "escalade@npm:3.1.2"
@@ -23915,6 +24365,15 @@ __metadata:
languageName: node
linkType: hard
+"magic-string@npm:^0.30.11":
+ version: 0.30.12
+ resolution: "magic-string@npm:0.30.12"
+ dependencies:
+ "@jridgewell/sourcemap-codec": ^1.5.0
+ checksum: 469f457d18af37dfcca8617086ea8a65bcd8b60ba8a1182cb024ce43e470ace3c9d1cb6bee58d3b311768fb16bc27bd50bdeebcaa63dadd0fd46cac4d2e11d5f
+ languageName: node
+ linkType: hard
+
"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2":
version: 3.1.0
resolution: "make-dir@npm:3.1.0"
@@ -26796,6 +27255,17 @@ __metadata:
languageName: node
linkType: hard
+"postcss@npm:^8.4.43":
+ version: 8.4.47
+ resolution: "postcss@npm:8.4.47"
+ dependencies:
+ nanoid: ^3.3.7
+ picocolors: ^1.1.0
+ source-map-js: ^1.2.1
+ checksum: 929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44
+ languageName: node
+ linkType: hard
+
"postgres-array@npm:~2.0.0":
version: 2.0.0
resolution: "postgres-array@npm:2.0.0"
@@ -28752,6 +29222,69 @@ __metadata:
languageName: node
linkType: hard
+"rollup@npm:^4.20.0":
+ version: 4.24.0
+ resolution: "rollup@npm:4.24.0"
+ dependencies:
+ "@rollup/rollup-android-arm-eabi": 4.24.0
+ "@rollup/rollup-android-arm64": 4.24.0
+ "@rollup/rollup-darwin-arm64": 4.24.0
+ "@rollup/rollup-darwin-x64": 4.24.0
+ "@rollup/rollup-linux-arm-gnueabihf": 4.24.0
+ "@rollup/rollup-linux-arm-musleabihf": 4.24.0
+ "@rollup/rollup-linux-arm64-gnu": 4.24.0
+ "@rollup/rollup-linux-arm64-musl": 4.24.0
+ "@rollup/rollup-linux-powerpc64le-gnu": 4.24.0
+ "@rollup/rollup-linux-riscv64-gnu": 4.24.0
+ "@rollup/rollup-linux-s390x-gnu": 4.24.0
+ "@rollup/rollup-linux-x64-gnu": 4.24.0
+ "@rollup/rollup-linux-x64-musl": 4.24.0
+ "@rollup/rollup-win32-arm64-msvc": 4.24.0
+ "@rollup/rollup-win32-ia32-msvc": 4.24.0
+ "@rollup/rollup-win32-x64-msvc": 4.24.0
+ "@types/estree": 1.0.6
+ fsevents: ~2.3.2
+ dependenciesMeta:
+ "@rollup/rollup-android-arm-eabi":
+ optional: true
+ "@rollup/rollup-android-arm64":
+ optional: true
+ "@rollup/rollup-darwin-arm64":
+ optional: true
+ "@rollup/rollup-darwin-x64":
+ optional: true
+ "@rollup/rollup-linux-arm-gnueabihf":
+ optional: true
+ "@rollup/rollup-linux-arm-musleabihf":
+ optional: true
+ "@rollup/rollup-linux-arm64-gnu":
+ optional: true
+ "@rollup/rollup-linux-arm64-musl":
+ optional: true
+ "@rollup/rollup-linux-powerpc64le-gnu":
+ optional: true
+ "@rollup/rollup-linux-riscv64-gnu":
+ optional: true
+ "@rollup/rollup-linux-s390x-gnu":
+ optional: true
+ "@rollup/rollup-linux-x64-gnu":
+ optional: true
+ "@rollup/rollup-linux-x64-musl":
+ optional: true
+ "@rollup/rollup-win32-arm64-msvc":
+ optional: true
+ "@rollup/rollup-win32-ia32-msvc":
+ optional: true
+ "@rollup/rollup-win32-x64-msvc":
+ optional: true
+ fsevents:
+ optional: true
+ bin:
+ rollup: dist/bin/rollup
+ checksum: 77fb549c1de8afd1142d2da765adbb0cdab9f13c47df5217f00b5cf40b74219caa48c6ba2157f6249313ee81b6fa4c4fa8b3d2a0347ad6220739e00e580a808d
+ languageName: node
+ linkType: hard
+
"root@workspace:.":
version: 0.0.0-use.local
resolution: "root@workspace:."
@@ -29565,6 +30098,13 @@ __metadata:
languageName: node
linkType: hard
+"source-map-js@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "source-map-js@npm:1.2.1"
+ checksum: 7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf
+ languageName: node
+ linkType: hard
+
"source-map-support@npm:0.5.13":
version: 0.5.13
resolution: "source-map-support@npm:0.5.13"
@@ -29822,7 +30362,7 @@ __metadata:
languageName: node
linkType: hard
-"std-env@npm:^3.3.3":
+"std-env@npm:^3.3.3, std-env@npm:^3.7.0":
version: 3.7.0
resolution: "std-env@npm:3.7.0"
checksum: 60edf2d130a4feb7002974af3d5a5f3343558d1ccf8d9b9934d225c638606884db4a20d2fe6440a09605bca282af6b042ae8070a10490c0800d69e82e478f41e
@@ -30620,6 +31160,20 @@ __metadata:
languageName: node
linkType: hard
+"tinybench@npm:^2.9.0":
+ version: 2.9.0
+ resolution: "tinybench@npm:2.9.0"
+ checksum: c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c
+ languageName: node
+ linkType: hard
+
+"tinyexec@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "tinyexec@npm:0.3.0"
+ checksum: 138a4f4241aea6b6312559508468ab275a31955e66e2f57ed206e0aaabecee622624f208c5740345f0a66e33478fd065e359ed1eb1269eb6fd4fa25d44d0ba3b
+ languageName: node
+ linkType: hard
+
"tinypool@npm:^0.5.0":
version: 0.5.0
resolution: "tinypool@npm:0.5.0"
@@ -30627,6 +31181,13 @@ __metadata:
languageName: node
linkType: hard
+"tinypool@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "tinypool@npm:1.0.1"
+ checksum: 90939d6a03f1519c61007bf416632dc1f0b9c1a9dd673c179ccd9e36a408437384f984fc86555a5d040d45b595abc299c3bb39d354439e98a090766b5952e73d
+ languageName: node
+ linkType: hard
+
"tinyrainbow@npm:^1.2.0":
version: 1.2.0
resolution: "tinyrainbow@npm:1.2.0"
@@ -32174,6 +32735,20 @@ __metadata:
languageName: node
linkType: hard
+"vite-node@npm:2.1.3":
+ version: 2.1.3
+ resolution: "vite-node@npm:2.1.3"
+ dependencies:
+ cac: ^6.7.14
+ debug: ^4.3.6
+ pathe: ^1.1.2
+ vite: ^5.0.0
+ bin:
+ vite-node: vite-node.mjs
+ checksum: 1b06139880a8170651e025e8c35aa92a917f8ec8f24507cda5bf4be09843f6447e1f494932a8d7eb98124f1c8c9fee02283ef318ddd57e2b861d2d85a409a206
+ languageName: node
+ linkType: hard
+
"vite-plugin-inspect@npm:^0.8.7":
version: 0.8.7
resolution: "vite-plugin-inspect@npm:0.8.7"
@@ -32243,6 +32818,49 @@ __metadata:
languageName: node
linkType: hard
+"vite@npm:^5.0.0":
+ version: 5.4.9
+ resolution: "vite@npm:5.4.9"
+ dependencies:
+ esbuild: ^0.21.3
+ fsevents: ~2.3.3
+ postcss: ^8.4.43
+ rollup: ^4.20.0
+ peerDependencies:
+ "@types/node": ^18.0.0 || >=20.0.0
+ less: "*"
+ lightningcss: ^1.21.0
+ sass: "*"
+ sass-embedded: "*"
+ stylus: "*"
+ sugarss: "*"
+ terser: ^5.4.0
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ bin:
+ vite: bin/vite.js
+ checksum: e9c59f2c639047e37c79bbbb151c7a55a3dc27932957cf4cf0447ee0bdcc1ddfd9b1fb3ba0465371c01ba3616d62561327855794c2d652213c3a10a32e6d369d
+ languageName: node
+ linkType: hard
+
"vite@npm:^5.2.11":
version: 5.2.11
resolution: "vite@npm:5.2.11"
@@ -32343,6 +32961,55 @@ __metadata:
languageName: node
linkType: hard
+"vitest@npm:^2.1.3":
+ version: 2.1.3
+ resolution: "vitest@npm:2.1.3"
+ dependencies:
+ "@vitest/expect": 2.1.3
+ "@vitest/mocker": 2.1.3
+ "@vitest/pretty-format": ^2.1.3
+ "@vitest/runner": 2.1.3
+ "@vitest/snapshot": 2.1.3
+ "@vitest/spy": 2.1.3
+ "@vitest/utils": 2.1.3
+ chai: ^5.1.1
+ debug: ^4.3.6
+ magic-string: ^0.30.11
+ pathe: ^1.1.2
+ std-env: ^3.7.0
+ tinybench: ^2.9.0
+ tinyexec: ^0.3.0
+ tinypool: ^1.0.0
+ tinyrainbow: ^1.2.0
+ vite: ^5.0.0
+ vite-node: 2.1.3
+ why-is-node-running: ^2.3.0
+ peerDependencies:
+ "@edge-runtime/vm": "*"
+ "@types/node": ^18.0.0 || >=20.0.0
+ "@vitest/browser": 2.1.3
+ "@vitest/ui": 2.1.3
+ happy-dom: "*"
+ jsdom: "*"
+ peerDependenciesMeta:
+ "@edge-runtime/vm":
+ optional: true
+ "@types/node":
+ optional: true
+ "@vitest/browser":
+ optional: true
+ "@vitest/ui":
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+ bin:
+ vitest: vitest.mjs
+ checksum: 7688fdce37205e7f3b448039df216e103e3a52994af0201993e22decbb558d129a734001b991f3c3d80bf4a4ef91ca6a5665a7395d5b051249da60a0016eda36
+ languageName: node
+ linkType: hard
+
"void-elements@npm:3.1.0":
version: 3.1.0
resolution: "void-elements@npm:3.1.0"
@@ -32637,6 +33304,18 @@ __metadata:
languageName: node
linkType: hard
+"why-is-node-running@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "why-is-node-running@npm:2.3.0"
+ dependencies:
+ siginfo: ^2.0.0
+ stackback: 0.0.2
+ bin:
+ why-is-node-running: cli.js
+ checksum: 1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054
+ languageName: node
+ linkType: hard
+
"widest-line@npm:^3.1.0":
version: 3.1.0
resolution: "widest-line@npm:3.1.0"