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"