From 58e6c9614897d5bad48aa79dc8f7154d3e4e19ea Mon Sep 17 00:00:00 2001
From: Dylan Meysmans
Date: Thu, 19 Dec 2024 23:40:18 +0100
Subject: [PATCH] feat(#2056)!: support Pinia Colada
Work in progress.
---
packages/openapi-pinia-colada/.npmignore | 5 +
packages/openapi-pinia-colada/CHANGELOG.md | 7 +
packages/openapi-pinia-colada/CONTRIBUTING.md | 91 ++
packages/openapi-pinia-colada/LICENSE | 21 +
packages/openapi-pinia-colada/README.md | 65 +
packages/openapi-pinia-colada/biome.json | 17 +
packages/openapi-pinia-colada/package.json | 83 ++
packages/openapi-pinia-colada/src/index.ts | 69 +
.../test/fixtures/api.d.ts | 1055 +++++++++++++++
.../test/fixtures/api.yaml | 726 ++++++++++
.../test/fixtures/mock-server.ts | 121 ++
.../openapi-pinia-colada/test/index.test.tsx | 792 +++++++++++
.../openapi-pinia-colada/tsconfig.build.json | 4 +
packages/openapi-pinia-colada/tsconfig.json | 16 +
.../openapi-pinia-colada/vitest.config.ts | 10 +
pnpm-lock.yaml | 1190 ++++++++++-------
16 files changed, 3778 insertions(+), 494 deletions(-)
create mode 100644 packages/openapi-pinia-colada/.npmignore
create mode 100644 packages/openapi-pinia-colada/CHANGELOG.md
create mode 100644 packages/openapi-pinia-colada/CONTRIBUTING.md
create mode 100644 packages/openapi-pinia-colada/LICENSE
create mode 100644 packages/openapi-pinia-colada/README.md
create mode 100644 packages/openapi-pinia-colada/biome.json
create mode 100644 packages/openapi-pinia-colada/package.json
create mode 100644 packages/openapi-pinia-colada/src/index.ts
create mode 100644 packages/openapi-pinia-colada/test/fixtures/api.d.ts
create mode 100644 packages/openapi-pinia-colada/test/fixtures/api.yaml
create mode 100644 packages/openapi-pinia-colada/test/fixtures/mock-server.ts
create mode 100644 packages/openapi-pinia-colada/test/index.test.tsx
create mode 100644 packages/openapi-pinia-colada/tsconfig.build.json
create mode 100644 packages/openapi-pinia-colada/tsconfig.json
create mode 100644 packages/openapi-pinia-colada/vitest.config.ts
diff --git a/packages/openapi-pinia-colada/.npmignore b/packages/openapi-pinia-colada/.npmignore
new file mode 100644
index 000000000..20c0b3b59
--- /dev/null
+++ b/packages/openapi-pinia-colada/.npmignore
@@ -0,0 +1,5 @@
+.turbo
+test
+vitest.config.ts
+tsconfig*.json
+biome.json
diff --git a/packages/openapi-pinia-colada/CHANGELOG.md b/packages/openapi-pinia-colada/CHANGELOG.md
new file mode 100644
index 000000000..c32f4da71
--- /dev/null
+++ b/packages/openapi-pinia-colada/CHANGELOG.md
@@ -0,0 +1,7 @@
+# openapi-pinia-colada
+
+## 0.0.1
+
+### Patch Changes
+
+- [#2060](https://github.com/openapi-ts/openapi-typescript/pull/2060) [`d4ae6c8`](https://github.com/openapi-ts/openapi-typescript/pull/2060/commits/d4ae6c8ec5549e317f09ee32c6a06f9e9c60d97e) Thanks [@mettekou](https://github.com/mettekou)! - Initial release
\ No newline at end of file
diff --git a/packages/openapi-pinia-colada/CONTRIBUTING.md b/packages/openapi-pinia-colada/CONTRIBUTING.md
new file mode 100644
index 000000000..e64717c75
--- /dev/null
+++ b/packages/openapi-pinia-colada/CONTRIBUTING.md
@@ -0,0 +1,91 @@
+# Contributing
+
+Thanks for being willing to contribute! 🙏
+
+**Working on your first Pull Request (PR)?** You can learn how from this free series [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github).
+
+## Open issues
+
+Please check out the [the open issues](https://github.com/openapi-ts/openapi-typescript/issues). Issues labelled [**Good First Issue**](https://github.com/openapi-ts/openapi-typescript/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) are especially good to start with.
+
+Contributing doesn’t have to be in code. Simply answering questions in open issues or providing workarounds is as important as making pull requests.
+
+## Writing code
+
+### Setup
+
+1. Install [pnpm](https://pnpm.io/)
+2. [Fork this repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo) and clone your copy locally
+3. Run `pnpm i` to install dependencies
+
+### Testing
+
+This library uses [Vitest](https://vitest.dev/) for testing. There’s a great [VS Code extension](https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer) you can optionally use if you’d like in-editor debugging tools.
+
+To run the entire test suite, run:
+
+```bash
+pnpm test
+```
+
+To run an individual test:
+
+```bash
+pnpm test -- [partial filename]
+```
+
+To start the entire test suite in watch mode:
+
+```bash
+npx vitest
+```
+
+#### TypeScript tests
+
+**Don’t neglect writing TS tests!** In the test suite, you’ll see `// @ts-expect-error` comments. These are critical tests in and of themselves—they are asserting that TypeScript throws an error when it should be throwing an error (the test suite will actually fail in places if a TS error is _not_ raised).
+
+As this is just a minimal fetch wrapper meant to provide deep type inference for API schemas, **testing TS types** is arguably more important than testing the runtime. So please make liberal use of `// @ts-expect-error`, and as a general rule of thumb, write more **unwanted** output tests than _wanted_ output tests.
+
+### Running linting
+
+Linting is handled via [Biome](https://biomejs.dev), a faster ESLint replacement. It was installed with `pnpm i` and can be run with:
+
+```bash
+pnpm run lint
+```
+
+### Changelogs
+
+The changelog is generated via [changesets](https://github.com/changesets/changesets), and is separate from Git commit messages and pull request titles. To write a human-readable changelog for your changes, run:
+
+```
+npx changeset
+```
+
+This will ask if it’s a `patch`, `minor`, or `major` change ([semver](https://semver.org/)), along with a plain description of what you did. Commit this new file along with the rest of your PR, and during the next release this will go into the official changelog!
+
+## Opening a Pull Request
+
+Pull requests are **welcome** for this repo!
+
+Bugfixes will always be accepted, though in some cases some small changes may be requested.
+
+However, if adding a feature or breaking change, please **open an issue first to discuss.** This ensures no time or work is wasted writing code that won’t be accepted to the project (see [Project Goals](https://openapi-ts.dev/openapi-fetch/about/#project-goals)). Undiscussed feature work may be rejected at the discretion of the maintainers.
+
+### Writing the commit
+
+Create a new branch for your PR with `git checkout -b your-branch-name`. Add the relevant code as well as docs and tests. When you push everything up (`git push`), navigate back to your repo in GitHub and you should see a prompt to open a new PR.
+
+While best practices for commit messages are encouraged (e.g. start with an imperative verb, keep it short, use the body if needed), this repo doesn’t follow any specific guidelines. Clarity is favored over strict rules. Changelogs are generated separately from git (see [the Changelogs section](#changelogs)).
+
+### Writing the PR notes
+
+**Please fill out the template!** It’s a very lightweight template 🙂.
+
+### Adding docs
+
+If you added a feature, or changed how something worked, please [update the docs](../../docs/)!
+
+### Passing CI
+
+All PRs must fix lint errors, and all tests must pass. PRs will not be merged until all CI checks are “green” (✅).
diff --git a/packages/openapi-pinia-colada/LICENSE b/packages/openapi-pinia-colada/LICENSE
new file mode 100644
index 000000000..11c04a265
--- /dev/null
+++ b/packages/openapi-pinia-colada/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Dylan Meysmans
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/openapi-pinia-colada/README.md b/packages/openapi-pinia-colada/README.md
new file mode 100644
index 000000000..f8edfab39
--- /dev/null
+++ b/packages/openapi-pinia-colada/README.md
@@ -0,0 +1,65 @@
+# openapi-pinia-colada
+
+openapi-pinia-colada is a type-safe tiny wrapper (1 kb) around [`@pinia/colada`](https://pinia-colada.esm.dev/) to work with OpenAPI schema.
+
+It works by using [`openapi-fetch`](../openapi-fetch) and [`openapi-typescript`](../openapi-typescript) so you get all the following features:
+
+- âś… No typos in URLs or params.
+- âś… All parameters, request bodies, and responses are type-checked and 100% match your schema
+- âś… No manual typing of your API
+- âś… Eliminates `any` types that hide bugs
+- âś… Eliminates `as` type overrides that can also hide bugs
+
+## Setup
+
+Install this library along with [`openapi-fetch`](../openapi-fetch) and [`openapi-typescript`](../openapi-typescript):
+
+```bash
+npm i openapi-pinia-colada openapi-fetch
+npm i -D openapi-typescript typescript
+```
+
+Next, generate TypeScript types from your OpenAPI schema using openapi-typescript:
+
+```bash
+npx openapi-typescript ./path/to/api/v1.yaml -o ./src/lib/api/v1.d.ts
+```
+
+## Usage
+
+Once your types have been generated from your schema, you can create a [fetch client](../openapi-fetch), a Pinia Colada client and start querying your API.
+
+```vue
+
+
+
+ Loading...
+ {{`An error occurred: ${error.message}`}}
+ {{data.title}}
+
+```
+
+> You can find more information about `createFetchClient` in the [openapi-fetch documentation](../openapi-fetch).
+
+## đź““ Docs
+
+[View Docs](https://openapi-ts.dev/openapi-pinia-colada/)
diff --git a/packages/openapi-pinia-colada/biome.json b/packages/openapi-pinia-colada/biome.json
new file mode 100644
index 000000000..d5bf28ca0
--- /dev/null
+++ b/packages/openapi-pinia-colada/biome.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
+ "extends": ["../../biome.json"],
+ "files": {
+ "ignore": ["./test/fixtures/"]
+ },
+ "linter": {
+ "rules": {
+ "complexity": {
+ "noBannedTypes": "off"
+ },
+ "suspicious": {
+ "noConfusingVoidType": "off"
+ }
+ }
+ }
+}
diff --git a/packages/openapi-pinia-colada/package.json b/packages/openapi-pinia-colada/package.json
new file mode 100644
index 000000000..b66c1e8bd
--- /dev/null
+++ b/packages/openapi-pinia-colada/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "openapi-pinia-colada",
+ "description": "Fast, type-safe @pinia/colada client to work with your OpenAPI schema.",
+ "version": "0.0.1",
+ "author": {
+ "name": "Dylan Meysmans",
+ "email": "contact@mettekou.com"
+ },
+ "license": "MIT",
+ "type": "module",
+ "main": "./dist/index.js",
+ "module": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ },
+ "require": {
+ "types": "./dist/index.d.cts",
+ "default": "./dist/index.cjs"
+ }
+ },
+ "./*": "./*"
+ },
+ "homepage": "https://openapi-ts.dev",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/openapi-ts/openapi-typescript",
+ "directory": "packages/openapi-pinia-colada"
+ },
+ "bugs": {
+ "url": "https://github.com/openapi-ts/openapi-typescript/issues"
+ },
+ "keywords": [
+ "openapi",
+ "swagger",
+ "rest",
+ "api",
+ "oapi_3",
+ "oapi_3_1",
+ "typescript",
+ "fetch",
+ "vue",
+ "pinia-colada",
+ "pinia"
+ ],
+ "scripts": {
+ "build": "pnpm run build:clean && pnpm run build:esm && pnpm run build:cjs",
+ "build:clean": "del-cli dist",
+ "build:esm": "tsc -p tsconfig.build.json",
+ "build:cjs": "esbuild --bundle --platform=node --target=es2019 --outfile=dist/index.cjs --external:typescript src/index.ts",
+ "dev": "tsc -p tsconfig.build.json --watch",
+ "format": "biome format . --write",
+ "lint": "biome check .",
+ "generate-types": "openapi-typescript test/fixtures/api.yaml -o test/fixtures/api.d.ts",
+ "pretest": "pnpm run generate-types",
+ "test": "pnpm run \"/^test:/\"",
+ "test:js": "vitest run",
+ "test:ts": "tsc --noEmit",
+ "version": "pnpm run prepare && pnpm run build"
+ },
+ "dependencies": {
+ "openapi-typescript-helpers": "workspace:^"
+ },
+ "devDependencies": {
+ "@pinia/colada": "^0.13.0",
+ "@testing-library/vue": "^8.1.0",
+ "@vitejs/plugin-vue": "^5.2.1",
+ "del-cli": "^5.1.0",
+ "esbuild": "^0.24.0",
+ "execa": "^8.0.1",
+ "msw": "^2.7.0",
+ "openapi-fetch": "workspace:^",
+ "openapi-typescript": "workspace:^",
+ "vue": "^3.5.12"
+ },
+ "peerDependencies": {
+ "@pinia/colada": "^0.13.0",
+ "openapi-fetch": "workspace:^"
+ }
+}
diff --git a/packages/openapi-pinia-colada/src/index.ts b/packages/openapi-pinia-colada/src/index.ts
new file mode 100644
index 000000000..86d7bb5bc
--- /dev/null
+++ b/packages/openapi-pinia-colada/src/index.ts
@@ -0,0 +1,69 @@
+import { type MaybeRef, unref } from "vue";
+import {
+ type UseMutationOptions,
+ type UseMutationReturn,
+ type UseQueryOptions,
+ type UseQueryReturn,
+ useMutation as piniaColadaUseMutation,
+ useQuery as piniaColadaUseQuery,
+} from "@pinia/colada";
+import type { ClientMethod, FetchResponse, MaybeOptionalInit, Client as FetchClient } from "openapi-fetch";
+import type { HttpMethod, MediaType, PathsWithMethod, RequiredKeysOf } from "openapi-typescript-helpers";
+
+type InitWithUnknowns = Init & { [key: string]: unknown };
+
+export const useQuery = <
+ Method extends HttpMethod,
+ Paths extends Record>,
+ Media extends MediaType,
+ Path extends PathsWithMethod,
+ Init extends MaybeOptionalInit,
+ Response extends Required>,
+ Options extends Omit, "key" | "query">,
+>(
+ fetchClient: MaybeRef,
+ method: MaybeRef,
+ url: MaybeRef>,
+ ...[init, options]: RequiredKeysOf extends never
+ ? [MaybeRef>?, MaybeRef?]
+ : [MaybeRef>, MaybeRef?]
+): UseQueryReturn => {
+ const fetchClientValue = unref(fetchClient);
+ const methodValue = unref(method);
+ const urlValue = unref(url);
+ const initValue = unref(init);
+ const optionsValue = unref(options);
+ const mth = methodValue.toUpperCase() as Uppercase;
+ const fn = fetchClientValue[mth] as ClientMethod;
+
+ return piniaColadaUseQuery({
+ key: [methodValue, urlValue as string, initValue as InitWithUnknowns],
+ query: () => fn(urlValue, optionsValue),
+ ...optionsValue,
+ });
+};
+
+export const useMutation = <
+ Method extends HttpMethod,
+ Paths extends Record>,
+ Media extends MediaType,
+ Path extends PathsWithMethod,
+ Init extends MaybeOptionalInit,
+ Response extends Required>, // note: Required is used to avoid repeating NonNullable in UseQuery types
+ Options extends Omit, "key" | "mutation">,
+ Vars,
+>(
+ fetchClient: MaybeRef,
+ method: MaybeRef,
+ url: MaybeRef>,
+ options?: Options,
+): UseMutationReturn => {
+ const fetchClientValue = unref(fetchClient);
+ const methodValue = unref(method);
+ const urlValue = unref(url);
+ const optionsValue = unref(options);
+ const mth = methodValue.toUpperCase() as Uppercase;
+ const fn = fetchClientValue[mth] as ClientMethod;
+
+ return piniaColadaUseMutation({ mutation: () => fn(urlValue, optionsValue), ...optionsValue });
+};
diff --git a/packages/openapi-pinia-colada/test/fixtures/api.d.ts b/packages/openapi-pinia-colada/test/fixtures/api.d.ts
new file mode 100644
index 000000000..cad5160d4
--- /dev/null
+++ b/packages/openapi-pinia-colada/test/fixtures/api.d.ts
@@ -0,0 +1,1055 @@
+/**
+ * This file was auto-generated by openapi-typescript.
+ * Do not make direct changes to the file.
+ */
+
+export interface paths {
+ "/comment": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: components["requestBodies"]["CreateReply"];
+ responses: {
+ 201: components["responses"]["CreateReply"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/blogposts": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ tags?: string[];
+ published?: boolean;
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["AllPostsGet"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: components["requestBodies"]["CreatePost"];
+ responses: {
+ 201: components["responses"]["CreatePost"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: components["requestBodies"]["PatchPost"];
+ responses: {
+ 201: components["responses"]["PatchPost"];
+ };
+ };
+ trace?: never;
+ };
+ "/blogposts/{post_id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ post_id: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ version?: number;
+ format?: string;
+ };
+ header?: never;
+ path: {
+ post_id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["PostGet"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ post_id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["PostDelete"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ options?: never;
+ head?: never;
+ patch: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ post_id: string;
+ };
+ cookie?: never;
+ };
+ requestBody: components["requestBodies"]["PatchPost"];
+ responses: {
+ 200: components["responses"]["PatchPost"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ trace?: never;
+ };
+ "/blogposts-optional": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: components["requestBodies"]["CreatePostOptional"];
+ responses: {
+ 201: components["responses"]["CreatePost"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/blogposts-optional-inline": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["Post"];
+ };
+ };
+ responses: {
+ 201: components["responses"]["CreatePost"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/header-params": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: operations["getHeaderParams"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/media": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": {
+ /** Format: blob */
+ media: string;
+ name: string;
+ };
+ };
+ };
+ responses: {
+ "2XX": {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ "4XX": components["responses"]["Error"];
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/mismatched-data": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 201: components["responses"]["PostGet"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/mismatched-errors": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 401: components["responses"]["EmptyError"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/self": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/string-array": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["StringArray"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/tag/{name}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ name: string;
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ name: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["Tag"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ name: string;
+ };
+ cookie?: never;
+ };
+ requestBody: components["requestBodies"]["CreateTag"];
+ responses: {
+ 201: components["responses"]["CreateTag"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ post?: never;
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ name: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ 500: components["responses"]["Error"];
+ };
+ };
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/query-params": {
+ parameters: {
+ query?: {
+ string?: string;
+ number?: number;
+ boolean?: boolean;
+ array?: string[];
+ object?: {
+ foo: string;
+ bar: string;
+ };
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: {
+ string?: string;
+ number?: number;
+ boolean?: boolean;
+ array?: string[];
+ object?: {
+ foo: string;
+ bar: string;
+ };
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ default: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/path-params/{simple_primitive}/{simple_obj_flat}/{simple_arr_flat}/{simple_obj_explode*}/{simple_arr_explode*}/{.label_primitive}/{.label_obj_flat}/{.label_arr_flat}/{.label_obj_explode*}/{.label_arr_explode*}/{;matrix_primitive}/{;matrix_obj_flat}/{;matrix_arr_flat}/{;matrix_obj_explode*}/{;matrix_arr_explode*}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ simple_primitive: string;
+ simple_obj_flat: {
+ a: string;
+ c: string;
+ };
+ simple_arr_flat: number[];
+ simple_obj_explode: {
+ e: string;
+ g: string;
+ };
+ simple_arr_explode: number[];
+ label_primitive: string;
+ label_obj_flat: {
+ a: string;
+ c: string;
+ };
+ label_arr_flat: number[];
+ label_obj_explode: {
+ e: string;
+ g: string;
+ };
+ label_arr_explode: number[];
+ matrix_primitive: string;
+ matrix_obj_flat: {
+ a: string;
+ c: string;
+ };
+ matrix_arr_flat: number[];
+ matrix_obj_explode: {
+ e: string;
+ g: string;
+ };
+ matrix_arr_explode: number[];
+ };
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ simple_primitive: string;
+ simple_obj_flat: {
+ a: string;
+ c: string;
+ };
+ simple_arr_flat: number[];
+ simple_obj_explode: {
+ e: string;
+ g: string;
+ };
+ simple_arr_explode: number[];
+ label_primitive: string;
+ label_obj_flat: {
+ a: string;
+ c: string;
+ };
+ label_arr_flat: number[];
+ label_obj_explode: {
+ e: string;
+ g: string;
+ };
+ label_arr_explode: number[];
+ matrix_primitive: string;
+ matrix_obj_flat: {
+ a: string;
+ c: string;
+ };
+ matrix_arr_flat: number[];
+ matrix_obj_explode: {
+ e: string;
+ g: string;
+ };
+ matrix_arr_explode: number[];
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ default: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/default-as-error": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ default: components["responses"]["Error"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/anyMethod": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ post: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ delete: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ options: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ head: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ patch: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ trace: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["User"];
+ 404: components["responses"]["Error"];
+ 500: components["responses"]["Error"];
+ };
+ };
+ };
+ "/contact": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: components["requestBodies"]["Contact"];
+ responses: {
+ 200: components["responses"]["Contact"];
+ };
+ };
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/multiple-response-content": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: components["responses"]["MultipleResponse"];
+ };
+ };
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+}
+export type webhooks = Record;
+export interface components {
+ schemas: {
+ Post: {
+ title: string;
+ body: string;
+ publish_date?: number;
+ };
+ StringArray: string[];
+ User: {
+ email: string;
+ age?: number;
+ avatar?: string;
+ /** Format: date */
+ created_at: number;
+ /** Format: date */
+ updated_at: number;
+ };
+ };
+ responses: {
+ AllPostsGet: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["Post"][];
+ };
+ };
+ CreatePost: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ CreateTag: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ CreateReply: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json;charset=utf-8": {
+ message: string;
+ };
+ };
+ };
+ Contact: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "text/html": string;
+ };
+ };
+ EmptyError: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ Error: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ code: number;
+ message: string;
+ };
+ };
+ };
+ PatchPost: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ PostDelete: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ PostGet: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["Post"];
+ };
+ };
+ StringArray: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["StringArray"];
+ };
+ };
+ Tag: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": string;
+ };
+ };
+ User: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["User"];
+ };
+ };
+ MultipleResponse: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ id: string;
+ email: string;
+ name?: string;
+ };
+ "application/ld+json": {
+ "@id": string;
+ email: string;
+ name?: string;
+ };
+ };
+ };
+ };
+ parameters: never;
+ requestBodies: {
+ CreatePost: {
+ content: {
+ "application/json": {
+ title: string;
+ body: string;
+ publish_date: number;
+ };
+ };
+ };
+ CreatePostOptional: {
+ content: {
+ "application/json": {
+ title: string;
+ body: string;
+ publish_date: number;
+ };
+ };
+ };
+ CreateTag: {
+ content: {
+ "application/json": {
+ description?: string;
+ };
+ };
+ };
+ CreateReply: {
+ content: {
+ "application/json;charset=utf-8": {
+ message: string;
+ replied_at: number;
+ };
+ };
+ };
+ Contact: {
+ content: {
+ "multipart/form-data": {
+ name: string;
+ email: string;
+ subject: string;
+ message: string;
+ };
+ };
+ };
+ PatchPost: {
+ content: {
+ "application/json": {
+ title?: string;
+ body?: string;
+ publish_date?: number;
+ };
+ };
+ };
+ };
+ headers: never;
+ pathItems: never;
+}
+export type $defs = Record;
+export interface operations {
+ getHeaderParams: {
+ parameters: {
+ query?: never;
+ header: {
+ "x-required-header": string;
+ };
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": {
+ status: string;
+ };
+ };
+ };
+ 500: components["responses"]["Error"];
+ };
+ };
+}
diff --git a/packages/openapi-pinia-colada/test/fixtures/api.yaml b/packages/openapi-pinia-colada/test/fixtures/api.yaml
new file mode 100644
index 000000000..8994e1ba8
--- /dev/null
+++ b/packages/openapi-pinia-colada/test/fixtures/api.yaml
@@ -0,0 +1,726 @@
+openapi: 3.1.0
+info:
+ title: Test Specification
+ version: "1.0"
+paths:
+ /comment:
+ put:
+ requestBody:
+ $ref: "#/components/requestBodies/CreateReply"
+ responses:
+ 201:
+ $ref: "#/components/responses/CreateReply"
+ 500:
+ $ref: "#/components/responses/Error"
+ /blogposts:
+ get:
+ parameters:
+ - in: query
+ name: tags
+ schema:
+ type: array
+ items:
+ type: string
+ - in: query
+ name: published
+ schema:
+ type: boolean
+ responses:
+ 200:
+ $ref: "#/components/responses/AllPostsGet"
+ 500:
+ $ref: "#/components/responses/Error"
+ put:
+ requestBody:
+ $ref: "#/components/requestBodies/CreatePost"
+ responses:
+ 201:
+ $ref: "#/components/responses/CreatePost"
+ 500:
+ $ref: "#/components/responses/Error"
+ patch:
+ requestBody:
+ $ref: "#/components/requestBodies/PatchPost"
+ responses:
+ 201:
+ $ref: "#/components/responses/PatchPost"
+ /blogposts/{post_id}:
+ parameters:
+ - in: path
+ name: post_id
+ schema:
+ type: string
+ required: true
+ get:
+ parameters:
+ - in: query
+ name: version
+ schema:
+ type: number
+ - in: query
+ name: format
+ schema:
+ type: string
+ responses:
+ 200:
+ $ref: "#/components/responses/PostGet"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ patch:
+ requestBody:
+ $ref: "#/components/requestBodies/PatchPost"
+ responses:
+ 200:
+ $ref: "#/components/responses/PatchPost"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ delete:
+ responses:
+ 200:
+ $ref: "#/components/responses/PostDelete"
+ 500:
+ $ref: "#/components/responses/Error"
+ /blogposts-optional:
+ put:
+ requestBody:
+ $ref: "#/components/requestBodies/CreatePostOptional"
+ responses:
+ 201:
+ $ref: "#/components/responses/CreatePost"
+ 500:
+ $ref: "#/components/responses/Error"
+ /blogposts-optional-inline:
+ put:
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Post"
+ responses:
+ 201:
+ $ref: "#/components/responses/CreatePost"
+ 500:
+ $ref: "#/components/responses/Error"
+ /header-params:
+ get:
+ operationId: getHeaderParams
+ parameters:
+ - name: x-required-header
+ in: header
+ required: true
+ schema:
+ type: string
+ responses:
+ 200:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ 500:
+ $ref: "#/components/responses/Error"
+ /media:
+ put:
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ media:
+ type: string
+ format: blob
+ name:
+ type: string
+ required:
+ - media
+ - name
+ responses:
+ 2XX:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ 4XX:
+ $ref: "#/components/responses/Error"
+ /mismatched-data:
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 201:
+ $ref: "#/components/responses/PostGet"
+ 500:
+ $ref: "#/components/responses/Error"
+ /mismatched-errors:
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 401:
+ $ref: "#/components/responses/EmptyError"
+ 500:
+ $ref: "#/components/responses/Error"
+ /self:
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ /string-array:
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/StringArray"
+ 500:
+ $ref: "#/components/responses/Error"
+ /tag/{name}:
+ parameters:
+ - in: path
+ name: name
+ schema:
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/Tag"
+ 500:
+ $ref: "#/components/responses/Error"
+ put:
+ requestBody:
+ $ref: "#/components/requestBodies/CreateTag"
+ responses:
+ 201:
+ $ref: "#/components/responses/CreateTag"
+ 500:
+ $ref: "#/components/responses/Error"
+ delete:
+ responses:
+ 204:
+ description: No Content
+ 500:
+ $ref: "#/components/responses/Error"
+ /query-params:
+ parameters:
+ - in: query
+ name: string
+ schema:
+ type: string
+ - in: query
+ name: number
+ schema:
+ type: number
+ - in: query
+ name: boolean
+ schema:
+ type: boolean
+ - in: query
+ name: array
+ schema:
+ type: array
+ items:
+ type: string
+ - in: query
+ name: object
+ schema:
+ type: object
+ required:
+ - foo
+ - bar
+ properties:
+ foo:
+ type: string
+ bar:
+ type: string
+ get:
+ responses:
+ 200:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ default:
+ $ref: "#/components/responses/Error"
+ /path-params/{simple_primitive}/{simple_obj_flat}/{simple_arr_flat}/{simple_obj_explode*}/{simple_arr_explode*}/{.label_primitive}/{.label_obj_flat}/{.label_arr_flat}/{.label_obj_explode*}/{.label_arr_explode*}/{;matrix_primitive}/{;matrix_obj_flat}/{;matrix_arr_flat}/{;matrix_obj_explode*}/{;matrix_arr_explode*}:
+ parameters:
+ - in: path
+ name: simple_primitive
+ schema:
+ type: string
+ - in: path
+ name: simple_obj_flat
+ schema:
+ type: object
+ required: [a, c]
+ properties:
+ a:
+ type: string
+ c:
+ type: string
+ - in: path
+ name: simple_arr_flat
+ schema:
+ type: array
+ items:
+ type: number
+ - in: path
+ name: simple_obj_explode
+ schema:
+ type: object
+ required: [e, g]
+ properties:
+ e:
+ type: string
+ g:
+ type: string
+ - in: path
+ name: simple_arr_explode
+ schema:
+ type: array
+ items:
+ type: number
+ - in: path
+ name: label_primitive
+ schema:
+ type: string
+ - in: path
+ name: label_obj_flat
+ schema:
+ type: object
+ required: [a, c]
+ properties:
+ a:
+ type: string
+ c:
+ type: string
+ - in: path
+ name: label_arr_flat
+ schema:
+ type: array
+ items:
+ type: number
+ - in: path
+ name: label_obj_explode
+ schema:
+ type: object
+ required: [e, g]
+ properties:
+ e:
+ type: string
+ g:
+ type: string
+ - in: path
+ name: label_arr_explode
+ schema:
+ type: array
+ items:
+ type: number
+ - in: path
+ name: matrix_primitive
+ schema:
+ type: string
+ - in: path
+ name: matrix_obj_flat
+ schema:
+ type: object
+ required: [a, c]
+ properties:
+ a:
+ type: string
+ c:
+ type: string
+ - in: path
+ name: matrix_arr_flat
+ schema:
+ type: array
+ items:
+ type: number
+ - in: path
+ name: matrix_obj_explode
+ schema:
+ type: object
+ required: [e, g]
+ properties:
+ e:
+ type: string
+ g:
+ type: string
+ - in: path
+ name: matrix_arr_explode
+ schema:
+ type: array
+ items:
+ type: number
+ get:
+ responses:
+ 200:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ default:
+ $ref: "#/components/responses/Error"
+ /default-as-error:
+ get:
+ responses:
+ default:
+ $ref: "#/components/responses/Error"
+ /anyMethod:
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ put:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ post:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ delete:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ options:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ head:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ patch:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ trace:
+ responses:
+ 200:
+ $ref: "#/components/responses/User"
+ 404:
+ $ref: "#/components/responses/Error"
+ 500:
+ $ref: "#/components/responses/Error"
+ /contact:
+ put:
+ requestBody:
+ $ref: "#/components/requestBodies/Contact"
+ responses:
+ 200:
+ $ref: "#/components/responses/Contact"
+ /multiple-response-content:
+ get:
+ responses:
+ 200:
+ $ref: "#/components/responses/MultipleResponse"
+components:
+ schemas:
+ Post:
+ type: object
+ properties:
+ title:
+ type: string
+ body:
+ type: string
+ publish_date:
+ type: number
+ required:
+ - title
+ - body
+ StringArray:
+ type: array
+ items:
+ type: string
+ User:
+ type: object
+ properties:
+ email:
+ type: string
+ age:
+ type: number
+ avatar:
+ type: string
+ created_at:
+ type: number
+ format: date
+ updated_at:
+ type: number
+ format: date
+ required:
+ - email
+ - created_at
+ - updated_at
+ requestBodies:
+ CreatePost:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ title:
+ type: string
+ body:
+ type: string
+ publish_date:
+ type: number
+ required:
+ - title
+ - body
+ - publish_date
+ CreatePostOptional:
+ required: false
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ title:
+ type: string
+ body:
+ type: string
+ publish_date:
+ type: number
+ required:
+ - title
+ - body
+ - publish_date
+ CreateTag:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ description:
+ type: string
+ CreateReply:
+ required: true
+ content:
+ "application/json;charset=utf-8":
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ replied_at:
+ type: number
+ required:
+ - message
+ - replied_at
+ Contact:
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ name:
+ type: string
+ email:
+ type: string
+ subject:
+ type: string
+ message:
+ type: string
+ required:
+ - name
+ - email
+ - subject
+ - message
+ PatchPost:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ title:
+ type: string
+ body:
+ type: string
+ publish_date:
+ type: number
+ responses:
+ AllPostsGet:
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: "#/components/schemas/Post"
+ CreatePost:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ CreateTag:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ CreateReply:
+ content:
+ "application/json;charset=utf-8":
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ required:
+ - message
+ Contact:
+ content:
+ text/html:
+ schema:
+ type: string
+ EmptyError:
+ content: {}
+ Error:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: number
+ message:
+ type: string
+ required:
+ - code
+ - message
+ PatchPost:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ PostDelete:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ status:
+ type: string
+ required:
+ - status
+ PostGet:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Post"
+ StringArray:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/StringArray"
+ Tag:
+ content:
+ application/json:
+ schema:
+ type: string
+ User:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/User"
+ MultipleResponse:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ id:
+ type: string
+ email:
+ type: string
+ name:
+ type: string
+ required:
+ - id
+ - email
+ application/ld+json:
+ schema:
+ type: object
+ properties:
+ "@id":
+ type: string
+ email:
+ type: string
+ name:
+ type: string
+ required:
+ - "@id"
+ - email
diff --git a/packages/openapi-pinia-colada/test/fixtures/mock-server.ts b/packages/openapi-pinia-colada/test/fixtures/mock-server.ts
new file mode 100644
index 000000000..4c7571427
--- /dev/null
+++ b/packages/openapi-pinia-colada/test/fixtures/mock-server.ts
@@ -0,0 +1,121 @@
+import {
+ http,
+ HttpResponse,
+ type JsonBodyType,
+ type StrictRequest,
+ type DefaultBodyType,
+ type HttpResponseResolver,
+ type PathParams,
+ type AsyncResponseResolverReturnType,
+} from "msw";
+import { setupServer } from "msw/node";
+
+/**
+ * Mock server instance
+ */
+export const server = setupServer();
+
+/**
+ * Default baseUrl for tests
+ */
+export const baseUrl = "https://api.example.com" as const;
+
+/**
+ * Test path helper, returns an absolute URL based on
+ * the given path and base
+ */
+export function toAbsoluteURL(path: string, base: string = baseUrl) {
+ // If we have absolute path
+ // if (URL.canParse(path)) {
+ // return new URL(path).toString();
+ // }
+
+ // Otherwise we want to support relative paths
+ // where base may also contain some part of the path
+ // e.g.
+ // base = https://api.foo.bar/v1/
+ // path = /self
+ // should result in https://api.foo.bar/v1/self
+
+ // Construct base URL
+ const baseUrlInstance = new URL(base);
+
+ // prepend base url url pathname to path and ensure only one slash between the URL parts
+ const newPath = `${baseUrlInstance.pathname}/${path}`.replace(/\/+/g, "/");
+
+ return new URL(newPath, baseUrlInstance).toString();
+}
+
+export type MswHttpMethod = keyof typeof http;
+
+export interface MockRequestHandlerOptions<
+ // Recreate the generic signature of the HTTP resolver
+ // so the arguments passed to http handlers propagate here.
+ Params extends PathParams = PathParams,
+ RequestBodyType extends DefaultBodyType = DefaultBodyType,
+ ResponseBodyType extends DefaultBodyType = undefined,
+> {
+ baseUrl?: string;
+ method: MswHttpMethod;
+ /**
+ * Relative or absolute path to match.
+ * When relative, baseUrl will be used as base.
+ */
+ path: string;
+ body?: JsonBodyType;
+ headers?: Record;
+ status?: number;
+
+ /**
+ * Optional handler which will be called instead of using the body, headers and status
+ */
+ handler?: HttpResponseResolver;
+}
+
+/**
+ * Configures a msw request handler using the provided options.
+ */
+export function useMockRequestHandler<
+ // Recreate the generic signature of the HTTP resolver
+ // so the arguments passed to http handlers propagate here.
+ Params extends PathParams = PathParams,
+ RequestBodyType extends DefaultBodyType = DefaultBodyType,
+ ResponseBodyType extends DefaultBodyType = undefined,
+>({
+ baseUrl: requestBaseUrl,
+ method,
+ path,
+ body,
+ headers,
+ status,
+ handler,
+}: MockRequestHandlerOptions) {
+ let requestUrl = "";
+ let receivedRequest: StrictRequest;
+ let receivedCookies: Record = {};
+
+ const resolvedPath = toAbsoluteURL(path, requestBaseUrl);
+
+ server.use(
+ http[method](resolvedPath, (args) => {
+ requestUrl = args.request.url;
+ receivedRequest = args.request.clone();
+ receivedCookies = { ...args.cookies };
+
+ if (handler) {
+ return handler(args);
+ }
+
+ return HttpResponse.json(body as any, {
+ status: status ?? 200,
+ headers,
+ }) as AsyncResponseResolverReturnType;
+ }),
+ );
+
+ return {
+ getRequestCookies: () => receivedCookies,
+ getRequest: () => receivedRequest,
+ getRequestUrl: () => new URL(requestUrl),
+ };
+}
diff --git a/packages/openapi-pinia-colada/test/index.test.tsx b/packages/openapi-pinia-colada/test/index.test.tsx
new file mode 100644
index 000000000..294175df9
--- /dev/null
+++ b/packages/openapi-pinia-colada/test/index.test.tsx
@@ -0,0 +1,792 @@
+import { afterAll, beforeAll, describe, expect, it } from "vitest";
+import { server, baseUrl, useMockRequestHandler } from "./fixtures/mock-server.js";
+import type { paths } from "./fixtures/api.js";
+import createClient from "../src/index.js";
+import createFetchClient from "openapi-fetch";
+import { fireEvent, render, renderHook, screen, waitFor, act } from "@testing-library/react";
+import {
+ QueryClient,
+ QueryClientProvider,
+ useQueries,
+ useQuery,
+ useSuspenseQuery,
+ skipToken,
+} from "@tanstack/react-query";
+import { Suspense, type ReactNode } from "react";
+import { ErrorBoundary } from "react-error-boundary";
+
+type minimalGetPaths = {
+ // Without parameters.
+ "/foo": {
+ get: {
+ responses: {
+ 200: { content: { "application/json": true } };
+ 500: { content: { "application/json": false } };
+ };
+ };
+ };
+ // With some parameters (makes init required) and different responses.
+ "/bar": {
+ get: {
+ parameters: { query: {} };
+ responses: {
+ 200: { content: { "application/json": "bar 200" } };
+ 500: { content: { "application/json": "bar 500" } };
+ };
+ };
+ };
+};
+
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: false,
+ },
+ },
+});
+
+const wrapper = ({ children }: { children: ReactNode }) => (
+ {children}
+);
+
+const fetchInfinite = async () => {
+ await new Promise(() => {});
+ return Response.error();
+};
+
+beforeAll(() => {
+ server.listen({
+ onUnhandledRequest: "error",
+ });
+});
+
+afterEach(() => {
+ server.resetHandlers();
+ queryClient.removeQueries();
+});
+
+afterAll(() => server.close());
+
+describe("client", () => {
+ it("generates all proper functions", () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+ expect(client).toHaveProperty("queryOptions");
+ expect(client).toHaveProperty("useQuery");
+ expect(client).toHaveProperty("useSuspenseQuery");
+ expect(client).toHaveProperty("useMutation");
+ });
+
+ describe("queryOptions", () => {
+ it("has correct parameter types", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ client.queryOptions("get", "/string-array");
+ // @ts-expect-error: Wrong method.
+ client.queryOptions("put", "/string-array");
+ // @ts-expect-error: Wrong path.
+ client.queryOptions("get", "/string-arrayX");
+ // @ts-expect-error: Missing 'post_id' param.
+ client.queryOptions("get", "/blogposts/{post_id}", {});
+ });
+
+ it("returns query options that can resolve data correctly with fetchQuery", async () => {
+ const response = { title: "title", body: "body" };
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/blogposts/1",
+ status: 200,
+ body: response,
+ });
+
+ const data = await queryClient.fetchQuery(
+ client.queryOptions("get", "/blogposts/{post_id}", {
+ params: {
+ path: {
+ post_id: "1",
+ },
+ },
+ }),
+ );
+
+ expectTypeOf(data).toEqualTypeOf<{
+ title: string;
+ body: string;
+ publish_date?: number;
+ }>();
+
+ expect(data).toEqual(response);
+ });
+
+ it("returns query options that can be passed to useQueries", async () => {
+ const fetchClient = createFetchClient({ baseUrl, fetch: fetchInfinite });
+ const client = createClient(fetchClient);
+
+ const { result } = renderHook(
+ () =>
+ useQueries(
+ {
+ queries: [
+ client.queryOptions("get", "/string-array"),
+ client.queryOptions("get", "/string-array", {}),
+ client.queryOptions("get", "/blogposts/{post_id}", {
+ params: {
+ path: {
+ post_id: "1",
+ },
+ },
+ }),
+ client.queryOptions("get", "/blogposts/{post_id}", {
+ params: {
+ path: {
+ post_id: "2",
+ },
+ },
+ }),
+ ],
+ },
+ queryClient,
+ ),
+ {
+ wrapper,
+ },
+ );
+
+ expectTypeOf(result.current[0].data).toEqualTypeOf();
+ expectTypeOf(result.current[0].error).toEqualTypeOf<{ code: number; message: string } | null>();
+
+ expectTypeOf(result.current[1]).toEqualTypeOf<(typeof result.current)[0]>();
+
+ expectTypeOf(result.current[2].data).toEqualTypeOf<
+ | {
+ title: string;
+ body: string;
+ publish_date?: number;
+ }
+ | undefined
+ >();
+ expectTypeOf(result.current[2].error).toEqualTypeOf<{ code: number; message: string } | null>();
+
+ expectTypeOf(result.current[3]).toEqualTypeOf<(typeof result.current)[2]>();
+
+ // Generated different queryKey for each query.
+ expect(queryClient.isFetching()).toBe(4);
+ });
+
+ it("returns query options that can be passed to useQuery", async () => {
+ const SKIP = { queryKey: [] as any, queryFn: skipToken } as const;
+
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ const { result } = renderHook(
+ () =>
+ useQuery(
+ // biome-ignore lint/correctness/noConstantCondition: it's just here to test types
+ false
+ ? {
+ ...client.queryOptions("get", "/foo"),
+ select: (data) => {
+ expectTypeOf(data).toEqualTypeOf();
+
+ return "select(true)" as const;
+ },
+ }
+ : SKIP,
+ ),
+ { wrapper },
+ );
+
+ expectTypeOf(result.current.data).toEqualTypeOf<"select(true)" | undefined>();
+ expectTypeOf(result.current.error).toEqualTypeOf();
+ });
+
+ it("returns query options that can be passed to useSuspenseQuery", async () => {
+ const fetchClient = createFetchClient({
+ baseUrl,
+ fetch: () => Promise.resolve(Response.json(true)),
+ });
+ const client = createClient(fetchClient);
+
+ const { result } = renderHook(
+ () =>
+ useSuspenseQuery({
+ ...client.queryOptions("get", "/foo"),
+ select: (data) => {
+ expectTypeOf(data).toEqualTypeOf();
+
+ return "select(true)" as const;
+ },
+ }),
+ { wrapper },
+ );
+
+ await waitFor(() => expect(result.current).not.toBeNull());
+
+ expectTypeOf(result.current.data).toEqualTypeOf<"select(true)">();
+ expectTypeOf(result.current.error).toEqualTypeOf();
+ });
+ });
+
+ describe("useQuery", () => {
+ it("should resolve data properly and have error as null when successfull request", async () => {
+ const response = ["one", "two", "three"];
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/string-array",
+ status: 200,
+ body: response,
+ });
+
+ const { result } = renderHook(() => client.useQuery("get", "/string-array"), {
+ wrapper,
+ });
+
+ await waitFor(() => expect(result.current.isFetching).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(data).toEqual(response);
+ expect(error).toBeNull();
+ });
+
+ it("should resolve error properly and have undefined data when failed request", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/string-array",
+ status: 500,
+ body: { code: 500, message: "Something went wrong" },
+ });
+
+ const { result } = renderHook(() => client.useQuery("get", "/string-array"), {
+ wrapper,
+ });
+
+ await waitFor(() => expect(result.current.isFetching).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(error?.message).toBe("Something went wrong");
+ expect(data).toBeUndefined();
+ });
+
+ it("should resolve data properly and have error as null when queryFn returns null", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/string-array",
+ status: 200,
+ body: null,
+ });
+
+ const { result } = renderHook(() => client.useQuery("get", "/string-array"), { wrapper });
+
+ await waitFor(() => expect(result.current.isFetching).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(data).toBeNull();
+ expect(error).toBeNull();
+ });
+
+ it("should resolve error properly and have undefined data when queryFn returns undefined", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/string-array",
+ status: 200,
+ body: undefined,
+ });
+
+ const { result } = renderHook(() => client.useQuery("get", "/string-array"), { wrapper });
+
+ await waitFor(() => expect(result.current.isFetching).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(error).toBeInstanceOf(Error);
+ expect(data).toBeUndefined();
+ });
+
+ it("should infer correct data and error type", async () => {
+ const fetchClient = createFetchClient({ baseUrl, fetch: fetchInfinite });
+ const client = createClient(fetchClient);
+
+ const { result } = renderHook(() => client.useQuery("get", "/string-array"), {
+ wrapper,
+ });
+
+ const { data, error } = result.current;
+
+ expectTypeOf(data).toEqualTypeOf();
+ expectTypeOf(error).toEqualTypeOf<{ code: number; message: string } | null>();
+ });
+
+ it("passes abort signal to fetch", async () => {
+ let signalPassedToFetch: AbortSignal | undefined;
+
+ const fetchClient = createFetchClient({
+ baseUrl,
+ fetch: async ({ signal }) => {
+ signalPassedToFetch = signal;
+ return await fetchInfinite();
+ },
+ });
+ const client = createClient(fetchClient);
+
+ const { unmount } = renderHook(() => client.useQuery("get", "/string-array"), { wrapper });
+
+ unmount();
+
+ expect(signalPassedToFetch?.aborted).toBeTruthy();
+ });
+
+ describe("params", () => {
+ it("should be required if OpenAPI schema requires params", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/blogposts/:post_id",
+ status: 200,
+ body: { message: "OK" },
+ });
+
+ // expect error on missing 'params'
+ // @ts-expect-error
+ const { result } = renderHook(() => client.useQuery("get", "/blogposts/{post_id}"), {
+ wrapper,
+ });
+ await waitFor(() => expect(result.current.isSuccess).toBe(true));
+ });
+ });
+
+ it("should use provided custom queryClient", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+ const customQueryClient = new QueryClient({});
+
+ function Page() {
+ const { data } = client.useQuery(
+ "get",
+ "/blogposts/{post_id}",
+ {
+ params: {
+ path: {
+ post_id: "1",
+ },
+ },
+ },
+ {},
+ customQueryClient,
+ );
+ return data: {data?.title}
;
+ }
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/blogposts/:post_id",
+ status: 200,
+ body: { title: "hello" },
+ });
+
+ const rendered = render( );
+
+ await waitFor(() => expect(rendered.getByText("data: hello")));
+ });
+
+ it("uses provided options", async () => {
+ const initialData = ["initial", "data"];
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ const { result } = renderHook(
+ () => client.useQuery("get", "/string-array", {}, { enabled: false, initialData }),
+ { wrapper },
+ );
+
+ const { data, error } = result.current;
+
+ expect(data).toBe(initialData);
+ expect(error).toBeNull();
+ });
+ });
+
+ describe("useSuspenseQuery", () => {
+ it("should resolve data properly and have error as null when successfull request", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/string-array",
+ status: 200,
+ body: ["one", "two", "three"],
+ });
+
+ const { result } = renderHook(() => client.useSuspenseQuery("get", "/string-array"), {
+ wrapper,
+ });
+
+ await waitFor(() => expect(result.current.isFetching).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(data[0]).toBe("one");
+ expect(error).toBeNull();
+ });
+
+ it("should properly propagate error to suspense with a failed http request", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+ const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {}); // to avoid sending errors to console
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/string-array",
+ status: 500,
+ body: { code: 500, message: "Something went wrong" },
+ });
+
+ const TestComponent = () => {
+ client.useSuspenseQuery("get", "/string-array");
+ return
;
+ };
+
+ render(
+
+ {error.message}
}>
+ loading
}>
+
+
+
+ ,
+ );
+
+ expect(await screen.findByText("Something went wrong")).toBeDefined();
+ errorSpy.mockRestore();
+ });
+
+ it("should use provided custom queryClient", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+ const customQueryClient = new QueryClient({});
+
+ function Page() {
+ const { data } = client.useSuspenseQuery(
+ "get",
+ "/blogposts/{post_id}",
+ {
+ params: {
+ path: {
+ post_id: "1",
+ },
+ },
+ },
+ {},
+ customQueryClient,
+ );
+ return data: {data?.title}
;
+ }
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "get",
+ path: "/blogposts/:post_id",
+ status: 200,
+ body: { title: "Hello" },
+ });
+
+ const rendered = render( );
+
+ await waitFor(() => rendered.findByText("data: Hello"));
+ });
+
+ it("passes abort signal to fetch", async () => {
+ let signalPassedToFetch: AbortSignal | undefined;
+
+ const fetchClient = createFetchClient({
+ baseUrl,
+ fetch: async ({ signal }) => {
+ signalPassedToFetch = signal;
+ await new Promise(() => {});
+ return Response.error();
+ },
+ });
+ const client = createClient(fetchClient);
+ const queryClient = new QueryClient({});
+
+ const { unmount } = renderHook(() => client.useSuspenseQuery("get", "/string-array", {}, {}, queryClient));
+
+ unmount();
+
+ await act(() => queryClient.cancelQueries());
+
+ expect(signalPassedToFetch?.aborted).toBeTruthy();
+ });
+ });
+
+ describe("useMutation", () => {
+ describe("mutate", () => {
+ it("should resolve data properly and have error as null when successfull request", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 200,
+ body: { message: "Hello" },
+ });
+
+ const { result } = renderHook(() => client.useMutation("put", "/comment"), {
+ wrapper,
+ });
+
+ result.current.mutate({ body: { message: "Hello", replied_at: 0 } });
+
+ await waitFor(() => expect(result.current.isPending).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(data?.message).toBe("Hello");
+ expect(error).toBeNull();
+ });
+
+ it("should resolve error properly and have undefined data when failed request", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 500,
+ body: { code: 500, message: "Something went wrong" },
+ });
+
+ const { result } = renderHook(() => client.useMutation("put", "/comment"), {
+ wrapper,
+ });
+
+ result.current.mutate({ body: { message: "Hello", replied_at: 0 } });
+
+ await waitFor(() => expect(result.current.isPending).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(data).toBeUndefined();
+ expect(error?.message).toBe("Something went wrong");
+ });
+
+ it("should resolve data properly and have error as null when mutationFn returns null", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 200,
+ body: null,
+ });
+
+ const { result } = renderHook(() => client.useMutation("put", "/comment"), { wrapper });
+
+ result.current.mutate({ body: { message: "Hello", replied_at: 0 } });
+
+ await waitFor(() => expect(result.current.isPending).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(data).toBeNull();
+ expect(error).toBeNull();
+ });
+
+ it("should resolve data properly and have error as null when mutationFn returns undefined", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 200,
+ body: undefined,
+ });
+
+ const { result } = renderHook(() => client.useMutation("put", "/comment"), { wrapper });
+
+ result.current.mutate({ body: { message: "Hello", replied_at: 0 } });
+
+ await waitFor(() => expect(result.current.isPending).toBe(false));
+
+ const { data, error } = result.current;
+
+ expect(error).toBeNull();
+ expect(data).toBeUndefined();
+ });
+
+ it("should use provided custom queryClient", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+ const customQueryClient = new QueryClient({});
+
+ function Page() {
+ const mutation = client.useMutation("put", "/comment", {}, customQueryClient);
+
+ return (
+
+
+ mutation.mutate({
+ body: {
+ message: "Hello",
+ replied_at: 0,
+ },
+ })
+ }
+ >
+ mutate
+
+
+ data: {mutation.data?.message ?? "null"}, status: {mutation.status}
+
+
+ );
+ }
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 200,
+ body: { message: "Hello" },
+ });
+
+ const rendered = render( );
+
+ await rendered.findByText("data: null, status: idle");
+
+ fireEvent.click(rendered.getByRole("button", { name: /mutate/i }));
+
+ await waitFor(() => rendered.findByText("data: Hello, status: success"));
+ });
+ });
+
+ describe("mutateAsync", () => {
+ it("should resolve data properly", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 200,
+ body: { message: "Hello" },
+ });
+
+ const { result } = renderHook(() => client.useMutation("put", "/comment"), {
+ wrapper,
+ });
+
+ const data = await result.current.mutateAsync({ body: { message: "Hello", replied_at: 0 } });
+
+ expect(data.message).toBe("Hello");
+ });
+
+ it("should throw an error when failed request", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 500,
+ body: { code: 500, message: "Something went wrong" },
+ });
+
+ const { result } = renderHook(() => client.useMutation("put", "/comment"), {
+ wrapper,
+ });
+
+ expect(result.current.mutateAsync({ body: { message: "Hello", replied_at: 0 } })).rejects.toThrow();
+ });
+
+ it("should use provided custom queryClient", async () => {
+ const fetchClient = createFetchClient({ baseUrl });
+ const client = createClient(fetchClient);
+ const customQueryClient = new QueryClient({});
+
+ function Page() {
+ const mutation = client.useMutation("put", "/comment", {}, customQueryClient);
+
+ return (
+
+
+ mutation.mutateAsync({
+ body: {
+ message: "Hello",
+ replied_at: 0,
+ },
+ })
+ }
+ >
+ mutate
+
+
+ data: {mutation.data?.message ?? "null"}, status: {mutation.status}
+
+
+ );
+ }
+
+ useMockRequestHandler({
+ baseUrl,
+ method: "put",
+ path: "/comment",
+ status: 200,
+ body: { message: "Hello" },
+ });
+
+ const rendered = render( );
+
+ await rendered.findByText("data: null, status: idle");
+
+ fireEvent.click(rendered.getByRole("button", { name: /mutate/i }));
+
+ await waitFor(() => rendered.findByText("data: Hello, status: success"));
+ });
+ });
+ });
+});
diff --git a/packages/openapi-pinia-colada/tsconfig.build.json b/packages/openapi-pinia-colada/tsconfig.build.json
new file mode 100644
index 000000000..b90fc83e0
--- /dev/null
+++ b/packages/openapi-pinia-colada/tsconfig.build.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["src"]
+}
diff --git a/packages/openapi-pinia-colada/tsconfig.json b/packages/openapi-pinia-colada/tsconfig.json
new file mode 100644
index 000000000..e103674b1
--- /dev/null
+++ b/packages/openapi-pinia-colada/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "lib": ["ESNext", "DOM"],
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "outDir": "dist",
+ "skipLibCheck": true,
+ "sourceRoot": ".",
+ "jsx": "preserve",
+ "target": "ES2022",
+ "types": ["vitest/globals"]
+ },
+ "include": ["src", "test", "*.ts"],
+ "exclude": ["node_modules"]
+}
\ No newline at end of file
diff --git a/packages/openapi-pinia-colada/vitest.config.ts b/packages/openapi-pinia-colada/vitest.config.ts
new file mode 100644
index 000000000..a1f5e5ffa
--- /dev/null
+++ b/packages/openapi-pinia-colada/vitest.config.ts
@@ -0,0 +1,10 @@
+import vue from "@vitejs/plugin-vue";
+import { defineConfig, type Plugin } from "vitest/config";
+
+export default defineConfig({
+ plugins: [vue() as unknown as Plugin],
+ test: {
+ environment: "jsdom",
+ globals: true,
+ },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2fd76e3b4..0346d6d7c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -182,10 +182,10 @@ importers:
devDependencies:
'@sveltejs/adapter-auto':
specifier: ^3.3.1
- version: 3.3.1(@sveltejs/kit@2.13.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))
+ version: 3.3.1(@sveltejs/kit@2.14.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))
'@sveltejs/kit':
specifier: ^2.13.0
- version: 2.13.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
+ version: 2.14.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
'@sveltejs/vite-plugin-svelte':
specifier: ^5.0.3
version: 5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
@@ -280,7 +280,44 @@ importers:
version: 5.7.2
unplugin-swc:
specifier: ^1.5.1
- version: 1.5.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(rollup@4.29.1)
+ version: 1.5.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(rollup@4.28.1)
+
+ packages/openapi-pinia-colada:
+ dependencies:
+ openapi-typescript-helpers:
+ specifier: workspace:^
+ version: link:../openapi-typescript-helpers
+ devDependencies:
+ '@pinia/colada':
+ specifier: ^0.13.0
+ version: 0.13.0
+ '@testing-library/vue':
+ specifier: ^8.1.0
+ version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.2))
+ '@vitejs/plugin-vue':
+ specifier: ^5.2.1
+ version: 5.2.1(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.2))
+ del-cli:
+ specifier: ^5.1.0
+ version: 5.1.0
+ esbuild:
+ specifier: ^0.24.0
+ version: 0.24.0
+ execa:
+ specifier: ^8.0.1
+ version: 8.0.1
+ msw:
+ specifier: ^2.7.0
+ version: 2.7.0(@types/node@22.10.2)(typescript@5.7.2)
+ openapi-fetch:
+ specifier: workspace:^
+ version: link:../openapi-fetch
+ openapi-typescript:
+ specifier: workspace:^
+ version: link:../openapi-typescript
+ vue:
+ specifier: ^3.5.12
+ version: 3.5.13(typescript@5.7.2)
packages/openapi-react-query:
dependencies:
@@ -790,12 +827,6 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.24.2':
- resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
'@esbuild/android-arm64@0.21.5':
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
@@ -808,12 +839,6 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.24.2':
- resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
'@esbuild/android-arm@0.21.5':
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
@@ -826,12 +851,6 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.24.2':
- resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
'@esbuild/android-x64@0.21.5':
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
@@ -844,12 +863,6 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.24.2':
- resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
'@esbuild/darwin-arm64@0.21.5':
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
@@ -862,12 +875,6 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.24.2':
- resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
'@esbuild/darwin-x64@0.21.5':
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
@@ -880,12 +887,6 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.24.2':
- resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
'@esbuild/freebsd-arm64@0.21.5':
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
@@ -898,12 +899,6 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.24.2':
- resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
'@esbuild/freebsd-x64@0.21.5':
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
@@ -916,12 +911,6 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.24.2':
- resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
'@esbuild/linux-arm64@0.21.5':
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
@@ -934,12 +923,6 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.24.2':
- resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
'@esbuild/linux-arm@0.21.5':
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
@@ -952,12 +935,6 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.24.2':
- resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-ia32@0.21.5':
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
@@ -970,12 +947,6 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.24.2':
- resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
'@esbuild/linux-loong64@0.21.5':
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
@@ -988,12 +959,6 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.24.2':
- resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
'@esbuild/linux-mips64el@0.21.5':
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
@@ -1006,12 +971,6 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.24.2':
- resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
'@esbuild/linux-ppc64@0.21.5':
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
@@ -1024,12 +983,6 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.24.2':
- resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
'@esbuild/linux-riscv64@0.21.5':
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
@@ -1042,12 +995,6 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.24.2':
- resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
'@esbuild/linux-s390x@0.21.5':
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
@@ -1060,12 +1007,6 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.24.2':
- resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
'@esbuild/linux-x64@0.21.5':
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
@@ -1078,18 +1019,6 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.24.2':
- resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.24.2':
- resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
'@esbuild/netbsd-x64@0.21.5':
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
@@ -1102,24 +1031,12 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.24.2':
- resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
'@esbuild/openbsd-arm64@0.24.0':
resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.24.2':
- resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
'@esbuild/openbsd-x64@0.21.5':
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
@@ -1132,12 +1049,6 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.24.2':
- resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
'@esbuild/sunos-x64@0.21.5':
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
@@ -1150,12 +1061,6 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.24.2':
- resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
'@esbuild/win32-arm64@0.21.5':
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
@@ -1168,12 +1073,6 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.24.2':
- resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
'@esbuild/win32-ia32@0.21.5':
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
@@ -1186,12 +1085,6 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.24.2':
- resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
'@esbuild/win32-x64@0.21.5':
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
@@ -1204,12 +1097,6 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.24.2':
- resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
'@floating-ui/core@1.6.8':
resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
@@ -1456,6 +1343,9 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@one-ini/wasm@0.1.1':
+ resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+
'@open-draft/deferred-promise@2.2.0':
resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
@@ -1465,6 +1355,9 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ '@pinia/colada@0.13.0':
+ resolution: {integrity: sha512-Ah6uv1spRCu3I0QmimOMwrkKMcQK1+Ov2Qroz4PFD2/i9gwRUddj7Pz9kNcg5xXp2WWEPmnvkhTr2GgdqTUaUQ==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -1506,11 +1399,6 @@ packages:
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm-eabi@4.29.1':
- resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==}
- cpu: [arm]
- os: [android]
-
'@rollup/rollup-android-arm64@4.28.0':
resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==}
cpu: [arm64]
@@ -1521,11 +1409,6 @@ packages:
cpu: [arm64]
os: [android]
- '@rollup/rollup-android-arm64@4.29.1':
- resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==}
- cpu: [arm64]
- os: [android]
-
'@rollup/rollup-darwin-arm64@4.28.0':
resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==}
cpu: [arm64]
@@ -1536,11 +1419,6 @@ packages:
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-arm64@4.29.1':
- resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==}
- cpu: [arm64]
- os: [darwin]
-
'@rollup/rollup-darwin-x64@4.28.0':
resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==}
cpu: [x64]
@@ -1551,11 +1429,6 @@ packages:
cpu: [x64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.29.1':
- resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==}
- cpu: [x64]
- os: [darwin]
-
'@rollup/rollup-freebsd-arm64@4.28.0':
resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==}
cpu: [arm64]
@@ -1566,11 +1439,6 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-arm64@4.29.1':
- resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==}
- cpu: [arm64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-x64@4.28.0':
resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==}
cpu: [x64]
@@ -1581,11 +1449,6 @@ packages:
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.29.1':
- resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==}
- cpu: [x64]
- os: [freebsd]
-
'@rollup/rollup-linux-arm-gnueabihf@4.28.0':
resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==}
cpu: [arm]
@@ -1596,11 +1459,6 @@ packages:
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
- resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm-musleabihf@4.28.0':
resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==}
cpu: [arm]
@@ -1611,11 +1469,6 @@ packages:
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.29.1':
- resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm64-gnu@4.28.0':
resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==}
cpu: [arm64]
@@ -1626,11 +1479,6 @@ packages:
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.29.1':
- resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-arm64-musl@4.28.0':
resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==}
cpu: [arm64]
@@ -1641,21 +1489,11 @@ packages:
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.29.1':
- resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-loongarch64-gnu@4.28.1':
resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
- resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==}
- cpu: [loong64]
- os: [linux]
-
'@rollup/rollup-linux-powerpc64le-gnu@4.28.0':
resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==}
cpu: [ppc64]
@@ -1666,11 +1504,6 @@ packages:
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
- resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==}
- cpu: [ppc64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-gnu@4.28.0':
resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==}
cpu: [riscv64]
@@ -1681,11 +1514,6 @@ packages:
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.29.1':
- resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-s390x-gnu@4.28.0':
resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==}
cpu: [s390x]
@@ -1696,11 +1524,6 @@ packages:
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.29.1':
- resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==}
- cpu: [s390x]
- os: [linux]
-
'@rollup/rollup-linux-x64-gnu@4.28.0':
resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==}
cpu: [x64]
@@ -1711,11 +1534,6 @@ packages:
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.29.1':
- resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-linux-x64-musl@4.28.0':
resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==}
cpu: [x64]
@@ -1726,11 +1544,6 @@ packages:
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.29.1':
- resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-win32-arm64-msvc@4.28.0':
resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==}
cpu: [arm64]
@@ -1741,11 +1554,6 @@ packages:
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-arm64-msvc@4.29.1':
- resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==}
- cpu: [arm64]
- os: [win32]
-
'@rollup/rollup-win32-ia32-msvc@4.28.0':
resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==}
cpu: [ia32]
@@ -1756,11 +1564,6 @@ packages:
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.29.1':
- resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==}
- cpu: [ia32]
- os: [win32]
-
'@rollup/rollup-win32-x64-msvc@4.28.0':
resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==}
cpu: [x64]
@@ -1771,11 +1574,6 @@ packages:
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.29.1':
- resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==}
- cpu: [x64]
- os: [win32]
-
'@shikijs/core@1.24.3':
resolution: {integrity: sha512-VRcf4GYUIkxIchGM9DrapRcxtgojg4IWKUtX5EtW+4PJiGzF2xQqZSv27PJt+WLc18KT3CNLpNWow9JYV5n+Rg==}
@@ -1826,8 +1624,8 @@ packages:
peerDependencies:
'@sveltejs/kit': ^2.0.0
- '@sveltejs/kit@2.13.0':
- resolution: {integrity: sha512-6t6ne00vZx/TjD6s0Jvwt8wRLKBwbSAN1nhlOzcLUSTYX1hTp4eCBaTPB5Yz/lu+tYcvz4YPEEuPv3yfsNp2gw==}
+ '@sveltejs/kit@2.14.1':
+ resolution: {integrity: sha512-6dRXi4uxknLMZZfSa0TAZfUfRzWoe0NgIXRcFZPY8iP78ZBMASkZh5L7VCsgLbW1KmA3fnraxZHqEcy9Ovj/ng==}
engines: {node: '>=18.13'}
hasBin: true
peerDependencies:
@@ -1940,6 +1738,10 @@ packages:
resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==}
engines: {node: '>=18'}
+ '@testing-library/dom@9.3.4':
+ resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==}
+ engines: {node: '>=14'}
+
'@testing-library/react@16.1.0':
resolution: {integrity: sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==}
engines: {node: '>=18'}
@@ -1955,6 +1757,16 @@ packages:
'@types/react-dom':
optional: true
+ '@testing-library/vue@8.1.0':
+ resolution: {integrity: sha512-ls4RiHO1ta4mxqqajWRh8158uFObVrrtAPoxk7cIp4HrnQUj/ScKzqz53HxYpG3X6Zb7H2v+0eTGLSoy8HQ2nA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@vue/compiler-sfc': '>= 3'
+ vue: '>= 3'
+ peerDependenciesMeta:
+ '@vue/compiler-sfc':
+ optional: true
+
'@tootallnate/once@2.0.0':
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
@@ -2232,6 +2044,9 @@ packages:
'@vue/shared@3.5.13':
resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+ '@vue/test-utils@2.4.6':
+ resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
+
'@vue/tsconfig@0.5.1':
resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
@@ -2289,6 +2104,10 @@ packages:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
deprecated: Use your platform's native atob() and btoa() methods instead
+ abbrev@2.0.0:
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@@ -2374,6 +2193,9 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ aria-query@5.1.3:
+ resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
+
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
@@ -2381,6 +2203,10 @@ packages:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
+ array-buffer-byte-length@1.0.1:
+ resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
+ engines: {node: '>= 0.4'}
+
array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
@@ -2402,6 +2228,10 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
axios@1.7.8:
resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==}
@@ -2468,10 +2298,22 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
+ call-bind-apply-helpers@1.0.1:
+ resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
+ engines: {node: '>= 0.4'}
+
call-bind@1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.3:
+ resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
+ engines: {node: '>= 0.4'}
+
call-me-maybe@1.0.2:
resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
@@ -2633,6 +2475,9 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ config-chain@1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+
consola@3.2.3:
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -2670,10 +2515,6 @@ packages:
resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
engines: {node: '>=12.13'}
- cross-spawn@7.0.3:
- resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
- engines: {node: '>= 8'}
-
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -2749,6 +2590,10 @@ packages:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
+ deep-equal@2.2.3:
+ resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
+ engines: {node: '>= 0.4'}
+
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -2757,6 +2602,10 @@ packages:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
degit@2.8.4:
resolution: {integrity: sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==}
engines: {node: '>=8.0.0'}
@@ -2820,9 +2669,18 @@ packages:
resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
engines: {node: '>=10'}
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ editorconfig@1.0.4:
+ resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
+ engines: {node: '>=14'}
+ hasBin: true
+
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -2871,13 +2729,24 @@ packages:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
engines: {node: '>= 0.4'}
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
+ es-get-iterator@1.1.3:
+ resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+
es-module-lexer@1.5.4:
resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+ es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+
es6-promise@3.3.1:
resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
@@ -2891,11 +2760,6 @@ packages:
engines: {node: '>=18'}
hasBin: true
- esbuild@0.24.2:
- resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
- engines: {node: '>=18'}
- hasBin: true
-
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -3027,6 +2891,9 @@ packages:
debug:
optional: true
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
foreground-child@3.3.0:
resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
engines: {node: '>=14'}
@@ -3074,6 +2941,9 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -3090,6 +2960,10 @@ packages:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
+ get-intrinsic@1.2.6:
+ resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
+ engines: {node: '>= 0.4'}
+
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
@@ -3128,6 +3002,10 @@ packages:
resolution: {integrity: sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==}
engines: {node: '>= 0.4'}
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -3144,6 +3022,10 @@ packages:
resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
engines: {node: '>=6'}
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -3159,6 +3041,14 @@ packages:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -3258,24 +3148,55 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-arrayish@0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
+ is-boolean-object@1.2.1:
+ resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==}
+ engines: {node: '>= 0.4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
is-core-module@2.15.1:
resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
engines: {node: '>= 0.4'}
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -3296,9 +3217,17 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
is-node-process@1.2.0:
resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
+
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
@@ -3321,14 +3250,42 @@ packages:
is-reference@3.0.3:
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
is-stream@3.0.0:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
is-subdir@1.2.0:
resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
engines: {node: '>=4'}
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
is-what@4.1.16:
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
engines: {node: '>=12.13'}
@@ -3337,6 +3294,9 @@ packages:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@@ -3367,6 +3327,15 @@ packages:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
+ js-beautify@1.15.1:
+ resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ js-cookie@3.0.5:
+ resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
+ engines: {node: '>=14'}
+
js-levenshtein@1.1.6:
resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==}
engines: {node: '>=0.10.0'}
@@ -3536,6 +3505,10 @@ packages:
engines: {node: '>= 16'}
hasBin: true
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
mdast-util-find-and-replace@3.0.1:
resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
@@ -3698,6 +3671,10 @@ packages:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
+ minimatch@9.0.1:
+ resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -3823,6 +3800,11 @@ packages:
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+ nopt@7.2.1:
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+
normalize-package-data@3.0.3:
resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
engines: {node: '>=10'}
@@ -3846,6 +3828,18 @@ packages:
resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
engines: {node: '>= 0.4'}
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -3920,8 +3914,8 @@ packages:
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
- package-manager-detector@0.2.8:
- resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==}
+ package-manager-detector@0.2.7:
+ resolution: {integrity: sha512-g4+387DXDKlZzHkP+9FLt8yKj8+/3tOkPv7DVTJGGRm00RkEWgqbFstX1mXJ4M0VDYhUqsTOiISqNOJnhAu3PQ==}
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
@@ -4028,6 +4022,10 @@ packages:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
postcss-load-config@6.0.1:
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
engines: {node: '>= 18'}
@@ -4078,6 +4076,9 @@ packages:
property-information@6.5.0:
resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+ proto-list@1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -4178,6 +4179,10 @@ packages:
regex@5.0.2:
resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==}
+ regexp.prototype.flags@1.5.3:
+ resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==}
+ engines: {node: '>= 0.4'}
+
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -4224,11 +4229,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rollup@4.29.1:
- resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -4239,6 +4239,10 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -4279,6 +4283,10 @@ packages:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -4297,10 +4305,26 @@ packages:
shiki@1.24.3:
resolution: {integrity: sha512-eMeX/ehE2IDKVs71kB4zVcDHjutNcOtm+yIRuR4sA6ThBbdFI0DffGJiyoKCodj0xRGxIoWC3pk/Anmm5mzHmA==}
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@@ -4391,6 +4415,10 @@ packages:
std-env@3.8.0:
resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
@@ -4986,6 +5014,9 @@ packages:
vscode-uri@3.0.8:
resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
+ vue-component-type-helpers@2.1.10:
+ resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==}
+
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
@@ -5059,6 +5090,18 @@ packages:
whatwg-url@7.1.0:
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.18:
+ resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
+ engines: {node: '>= 0.4'}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -5320,7 +5363,7 @@ snapshots:
'@babel/traverse': 7.26.4
'@babel/types': 7.26.3
convert-source-map: 2.0.0
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -5411,7 +5454,7 @@ snapshots:
'@babel/parser': 7.26.3
'@babel/template': 7.25.9
'@babel/types': 7.26.3
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -5541,7 +5584,7 @@ snapshots:
fs-extra: 7.0.1
mri: 1.2.0
p-limit: 2.3.0
- package-manager-detector: 0.2.8
+ package-manager-detector: 0.2.7
picocolors: 1.1.1
resolve-from: 5.0.0
semver: 7.6.3
@@ -5678,142 +5721,94 @@ snapshots:
'@esbuild/aix-ppc64@0.24.0':
optional: true
- '@esbuild/aix-ppc64@0.24.2':
- optional: true
-
'@esbuild/android-arm64@0.21.5':
optional: true
'@esbuild/android-arm64@0.24.0':
optional: true
- '@esbuild/android-arm64@0.24.2':
- optional: true
-
'@esbuild/android-arm@0.21.5':
optional: true
'@esbuild/android-arm@0.24.0':
optional: true
- '@esbuild/android-arm@0.24.2':
- optional: true
-
'@esbuild/android-x64@0.21.5':
optional: true
'@esbuild/android-x64@0.24.0':
optional: true
- '@esbuild/android-x64@0.24.2':
- optional: true
-
'@esbuild/darwin-arm64@0.21.5':
optional: true
'@esbuild/darwin-arm64@0.24.0':
optional: true
- '@esbuild/darwin-arm64@0.24.2':
- optional: true
-
'@esbuild/darwin-x64@0.21.5':
optional: true
'@esbuild/darwin-x64@0.24.0':
optional: true
- '@esbuild/darwin-x64@0.24.2':
- optional: true
-
'@esbuild/freebsd-arm64@0.21.5':
optional: true
'@esbuild/freebsd-arm64@0.24.0':
optional: true
- '@esbuild/freebsd-arm64@0.24.2':
- optional: true
-
'@esbuild/freebsd-x64@0.21.5':
optional: true
'@esbuild/freebsd-x64@0.24.0':
optional: true
- '@esbuild/freebsd-x64@0.24.2':
- optional: true
-
'@esbuild/linux-arm64@0.21.5':
optional: true
'@esbuild/linux-arm64@0.24.0':
optional: true
- '@esbuild/linux-arm64@0.24.2':
- optional: true
-
'@esbuild/linux-arm@0.21.5':
optional: true
'@esbuild/linux-arm@0.24.0':
optional: true
- '@esbuild/linux-arm@0.24.2':
- optional: true
-
'@esbuild/linux-ia32@0.21.5':
optional: true
'@esbuild/linux-ia32@0.24.0':
optional: true
- '@esbuild/linux-ia32@0.24.2':
- optional: true
-
'@esbuild/linux-loong64@0.21.5':
optional: true
'@esbuild/linux-loong64@0.24.0':
optional: true
- '@esbuild/linux-loong64@0.24.2':
- optional: true
-
'@esbuild/linux-mips64el@0.21.5':
optional: true
'@esbuild/linux-mips64el@0.24.0':
optional: true
- '@esbuild/linux-mips64el@0.24.2':
- optional: true
-
'@esbuild/linux-ppc64@0.21.5':
optional: true
'@esbuild/linux-ppc64@0.24.0':
optional: true
- '@esbuild/linux-ppc64@0.24.2':
- optional: true
-
'@esbuild/linux-riscv64@0.21.5':
optional: true
'@esbuild/linux-riscv64@0.24.0':
optional: true
- '@esbuild/linux-riscv64@0.24.2':
- optional: true
-
'@esbuild/linux-s390x@0.21.5':
optional: true
- '@esbuild/linux-s390x@0.24.0':
- optional: true
-
- '@esbuild/linux-s390x@0.24.2':
+ '@esbuild/linux-s390x@0.24.0':
optional: true
'@esbuild/linux-x64@0.21.5':
@@ -5822,72 +5817,45 @@ snapshots:
'@esbuild/linux-x64@0.24.0':
optional: true
- '@esbuild/linux-x64@0.24.2':
- optional: true
-
- '@esbuild/netbsd-arm64@0.24.2':
- optional: true
-
'@esbuild/netbsd-x64@0.21.5':
optional: true
'@esbuild/netbsd-x64@0.24.0':
optional: true
- '@esbuild/netbsd-x64@0.24.2':
- optional: true
-
'@esbuild/openbsd-arm64@0.24.0':
optional: true
- '@esbuild/openbsd-arm64@0.24.2':
- optional: true
-
'@esbuild/openbsd-x64@0.21.5':
optional: true
'@esbuild/openbsd-x64@0.24.0':
optional: true
- '@esbuild/openbsd-x64@0.24.2':
- optional: true
-
'@esbuild/sunos-x64@0.21.5':
optional: true
'@esbuild/sunos-x64@0.24.0':
optional: true
- '@esbuild/sunos-x64@0.24.2':
- optional: true
-
'@esbuild/win32-arm64@0.21.5':
optional: true
'@esbuild/win32-arm64@0.24.0':
optional: true
- '@esbuild/win32-arm64@0.24.2':
- optional: true
-
'@esbuild/win32-ia32@0.21.5':
optional: true
'@esbuild/win32-ia32@0.24.0':
optional: true
- '@esbuild/win32-ia32@0.24.2':
- optional: true
-
'@esbuild/win32-x64@0.21.5':
optional: true
'@esbuild/win32-x64@0.24.0':
optional: true
- '@esbuild/win32-x64@0.24.2':
- optional: true
-
'@floating-ui/core@1.6.8':
dependencies:
'@floating-ui/utils': 0.2.8
@@ -6131,6 +6099,8 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
+ '@one-ini/wasm@0.1.1': {}
+
'@open-draft/deferred-promise@2.2.0': {}
'@open-draft/logger@0.3.0':
@@ -6140,6 +6110,8 @@ snapshots:
'@open-draft/until@2.1.0': {}
+ '@pinia/colada@0.13.0': {}
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -6175,13 +6147,13 @@ snapshots:
- encoding
- supports-color
- '@rollup/pluginutils@5.1.3(rollup@4.29.1)':
+ '@rollup/pluginutils@5.1.3(rollup@4.28.1)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.29.1
+ rollup: 4.28.1
'@rollup/rollup-android-arm-eabi@4.28.0':
optional: true
@@ -6189,168 +6161,111 @@ snapshots:
'@rollup/rollup-android-arm-eabi@4.28.1':
optional: true
- '@rollup/rollup-android-arm-eabi@4.29.1':
- optional: true
-
'@rollup/rollup-android-arm64@4.28.0':
optional: true
'@rollup/rollup-android-arm64@4.28.1':
optional: true
- '@rollup/rollup-android-arm64@4.29.1':
- optional: true
-
'@rollup/rollup-darwin-arm64@4.28.0':
optional: true
'@rollup/rollup-darwin-arm64@4.28.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.29.1':
- optional: true
-
'@rollup/rollup-darwin-x64@4.28.0':
optional: true
'@rollup/rollup-darwin-x64@4.28.1':
optional: true
- '@rollup/rollup-darwin-x64@4.29.1':
- optional: true
-
'@rollup/rollup-freebsd-arm64@4.28.0':
optional: true
'@rollup/rollup-freebsd-arm64@4.28.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.29.1':
- optional: true
-
'@rollup/rollup-freebsd-x64@4.28.0':
optional: true
'@rollup/rollup-freebsd-x64@4.28.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.29.1':
- optional: true
-
'@rollup/rollup-linux-arm-gnueabihf@4.28.0':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.28.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
- optional: true
-
'@rollup/rollup-linux-arm-musleabihf@4.28.0':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.28.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.29.1':
- optional: true
-
'@rollup/rollup-linux-arm64-gnu@4.28.0':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.28.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.29.1':
- optional: true
-
'@rollup/rollup-linux-arm64-musl@4.28.0':
optional: true
'@rollup/rollup-linux-arm64-musl@4.28.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.29.1':
- optional: true
-
'@rollup/rollup-linux-loongarch64-gnu@4.28.1':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
- optional: true
-
'@rollup/rollup-linux-powerpc64le-gnu@4.28.0':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.28.1':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
- optional: true
-
'@rollup/rollup-linux-riscv64-gnu@4.28.0':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.28.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.29.1':
- optional: true
-
'@rollup/rollup-linux-s390x-gnu@4.28.0':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.28.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.29.1':
- optional: true
-
'@rollup/rollup-linux-x64-gnu@4.28.0':
optional: true
'@rollup/rollup-linux-x64-gnu@4.28.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.29.1':
- optional: true
-
'@rollup/rollup-linux-x64-musl@4.28.0':
optional: true
'@rollup/rollup-linux-x64-musl@4.28.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.29.1':
- optional: true
-
'@rollup/rollup-win32-arm64-msvc@4.28.0':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.28.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.29.1':
- optional: true
-
'@rollup/rollup-win32-ia32-msvc@4.28.0':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.28.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.29.1':
- optional: true
-
'@rollup/rollup-win32-x64-msvc@4.28.0':
optional: true
'@rollup/rollup-win32-x64-msvc@4.28.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.29.1':
- optional: true
-
'@shikijs/core@1.24.3':
dependencies:
'@shikijs/engine-javascript': 1.24.3
@@ -6411,7 +6326,7 @@ snapshots:
'@size-limit/esbuild@11.1.6(size-limit@11.1.6)':
dependencies:
- esbuild: 0.24.2
+ esbuild: 0.24.0
nanoid: 5.0.9
size-limit: 11.1.6
@@ -6425,12 +6340,12 @@ snapshots:
'@size-limit/file': 11.1.6(size-limit@11.1.6)
size-limit: 11.1.6
- '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.13.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))':
+ '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.14.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))':
dependencies:
- '@sveltejs/kit': 2.13.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
+ '@sveltejs/kit': 2.14.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
import-meta-resolve: 4.1.0
- '@sveltejs/kit@2.13.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))':
+ '@sveltejs/kit@2.14.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))':
dependencies:
'@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
'@types/cookie': 0.6.0
@@ -6451,7 +6366,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))':
dependencies:
'@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
svelte: 5.15.0
vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)
transitivePeerDependencies:
@@ -6460,7 +6375,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)))(svelte@5.15.0)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.17
@@ -6545,6 +6460,17 @@ snapshots:
lz-string: 1.5.0
pretty-format: 27.5.1
+ '@testing-library/dom@9.3.4':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/runtime': 7.26.0
+ '@types/aria-query': 5.0.4
+ aria-query: 5.1.3
+ chalk: 4.1.2
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ pretty-format: 27.5.1
+
'@testing-library/react@16.1.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.1)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@babel/runtime': 7.26.0
@@ -6555,6 +6481,15 @@ snapshots:
'@types/react': 18.3.1
'@types/react-dom': 18.3.1
+ '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.2))':
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@testing-library/dom': 9.3.4
+ '@vue/test-utils': 2.4.6
+ vue: 3.5.13(typescript@5.7.2)
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.13
+
'@tootallnate/once@2.0.0':
optional: true
@@ -6668,7 +6603,7 @@ snapshots:
'@typescript/vfs@1.6.0(typescript@5.7.2)':
dependencies:
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
@@ -6703,11 +6638,16 @@ snapshots:
vite: 6.0.4(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)
vue: 3.5.12(typescript@5.7.2)
+ '@vitejs/plugin-vue@5.2.1(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1))(vue@3.5.13(typescript@5.7.2))':
+ dependencies:
+ vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.5.1)
+ vue: 3.5.13(typescript@5.7.2)
+
'@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@22.10.1)(jsdom@20.0.3)(msw@2.7.0(@types/node@22.10.1)(typescript@5.7.2)))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
@@ -6888,9 +6828,9 @@ snapshots:
'@vue/language-core@2.1.6(typescript@5.7.2)':
dependencies:
'@volar/language-core': 2.4.7
- '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-dom': 3.5.13
'@vue/compiler-vue2': 2.7.16
- '@vue/shared': 3.5.12
+ '@vue/shared': 3.5.13
computeds: 0.0.1
minimatch: 9.0.5
muggle-string: 0.4.1
@@ -6946,6 +6886,11 @@ snapshots:
'@vue/shared@3.5.13': {}
+ '@vue/test-utils@2.4.6':
+ dependencies:
+ js-beautify: 1.15.1
+ vue-component-type-helpers: 2.1.10
+
'@vue/tsconfig@0.5.1': {}
'@vueuse/core@11.3.0(vue@3.5.13(typescript@5.7.2))':
@@ -6983,6 +6928,8 @@ snapshots:
abab@2.0.6:
optional: true
+ abbrev@2.0.0: {}
+
accepts@1.3.8:
dependencies:
mime-types: 2.1.35
@@ -7007,14 +6954,14 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
optional: true
agent-base@7.1.1(supports-color@9.4.0):
dependencies:
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
@@ -7076,12 +7023,21 @@ snapshots:
argparse@2.0.1: {}
+ aria-query@5.1.3:
+ dependencies:
+ deep-equal: 2.2.3
+
aria-query@5.3.0:
dependencies:
dequal: 2.0.3
aria-query@5.3.2: {}
+ array-buffer-byte-length@1.0.1:
+ dependencies:
+ call-bind: 1.0.7
+ is-array-buffer: 3.0.5
+
array-flatten@1.1.1: {}
array-union@2.1.0: {}
@@ -7094,6 +7050,10 @@ snapshots:
asynckit@0.4.0: {}
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
axios@1.7.8:
dependencies:
follow-redirects: 1.15.9
@@ -7168,6 +7128,11 @@ snapshots:
cac@6.7.14: {}
+ call-bind-apply-helpers@1.0.1:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
call-bind@1.0.7:
dependencies:
es-define-property: 1.0.0
@@ -7176,6 +7141,18 @@ snapshots:
get-intrinsic: 1.2.4
set-function-length: 1.2.2
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ es-define-property: 1.0.0
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+
+ call-bound@1.0.3:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ get-intrinsic: 1.2.6
+
call-me-maybe@1.0.2: {}
camelcase-keys@7.0.2:
@@ -7332,6 +7309,11 @@ snapshots:
concat-map@0.0.1: {}
+ config-chain@1.1.13:
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+
consola@3.2.3: {}
content-disposition@0.5.4:
@@ -7356,12 +7338,6 @@ snapshots:
dependencies:
is-what: 4.1.16
- cross-spawn@7.0.3:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -7402,11 +7378,9 @@ snapshots:
optionalDependencies:
supports-color: 9.4.0
- debug@4.4.0(supports-color@9.4.0):
+ debug@4.4.0:
dependencies:
ms: 2.1.3
- optionalDependencies:
- supports-color: 9.4.0
decamelize-keys@1.1.1:
dependencies:
@@ -7426,6 +7400,27 @@ snapshots:
deep-eql@5.0.2: {}
+ deep-equal@2.2.3:
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ es-get-iterator: 1.1.3
+ get-intrinsic: 1.2.4
+ is-arguments: 1.2.0
+ is-array-buffer: 3.0.5
+ is-date-object: 1.1.0
+ is-regex: 1.2.1
+ is-shared-array-buffer: 1.0.4
+ isarray: 2.0.5
+ object-is: 1.1.6
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ regexp.prototype.flags: 1.5.3
+ side-channel: 1.0.6
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.18
+
deepmerge@4.3.1: {}
define-data-property@1.1.4:
@@ -7434,6 +7429,12 @@ snapshots:
es-errors: 1.3.0
gopd: 1.1.0
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
degit@2.8.4: {}
del-cli@5.1.0:
@@ -7489,8 +7490,21 @@ snapshots:
dotenv@8.6.0: {}
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
eastasianwidth@0.2.0: {}
+ editorconfig@1.0.4:
+ dependencies:
+ '@one-ini/wasm': 0.1.1
+ commander: 10.0.1
+ minimatch: 9.0.1
+ semver: 7.6.3
+
ee-first@1.1.1: {}
electron-to-chromium@1.5.74: {}
@@ -7526,10 +7540,28 @@ snapshots:
dependencies:
get-intrinsic: 1.2.4
+ es-define-property@1.0.1: {}
+
es-errors@1.3.0: {}
+ es-get-iterator@1.1.3:
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ is-arguments: 1.2.0
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-string: 1.1.1
+ isarray: 2.0.5
+ stop-iteration-iterator: 1.1.0
+
es-module-lexer@1.5.4: {}
+ es-object-atoms@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+
es6-promise@3.3.1: {}
esbuild@0.21.5:
@@ -7585,34 +7617,6 @@ snapshots:
'@esbuild/win32-ia32': 0.24.0
'@esbuild/win32-x64': 0.24.0
- esbuild@0.24.2:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.24.2
- '@esbuild/android-arm': 0.24.2
- '@esbuild/android-arm64': 0.24.2
- '@esbuild/android-x64': 0.24.2
- '@esbuild/darwin-arm64': 0.24.2
- '@esbuild/darwin-x64': 0.24.2
- '@esbuild/freebsd-arm64': 0.24.2
- '@esbuild/freebsd-x64': 0.24.2
- '@esbuild/linux-arm': 0.24.2
- '@esbuild/linux-arm64': 0.24.2
- '@esbuild/linux-ia32': 0.24.2
- '@esbuild/linux-loong64': 0.24.2
- '@esbuild/linux-mips64el': 0.24.2
- '@esbuild/linux-ppc64': 0.24.2
- '@esbuild/linux-riscv64': 0.24.2
- '@esbuild/linux-s390x': 0.24.2
- '@esbuild/linux-x64': 0.24.2
- '@esbuild/netbsd-arm64': 0.24.2
- '@esbuild/netbsd-x64': 0.24.2
- '@esbuild/openbsd-arm64': 0.24.2
- '@esbuild/openbsd-x64': 0.24.2
- '@esbuild/sunos-x64': 0.24.2
- '@esbuild/win32-arm64': 0.24.2
- '@esbuild/win32-ia32': 0.24.2
- '@esbuild/win32-x64': 0.24.2
-
escalade@3.2.0: {}
escape-html@1.0.3: {}
@@ -7654,7 +7658,7 @@ snapshots:
execa@8.0.1:
dependencies:
- cross-spawn: 7.0.3
+ cross-spawn: 7.0.6
get-stream: 8.0.1
human-signals: 5.0.0
is-stream: 3.0.0
@@ -7776,6 +7780,10 @@ snapshots:
follow-redirects@1.15.9: {}
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
foreground-child@3.3.0:
dependencies:
cross-spawn: 7.0.6
@@ -7825,6 +7833,8 @@ snapshots:
function-bind@1.1.2: {}
+ functions-have-names@1.2.3: {}
+
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
@@ -7839,6 +7849,19 @@ snapshots:
has-symbols: 1.0.3
hasown: 2.0.2
+ get-intrinsic@1.2.6:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ dunder-proto: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ function-bind: 1.1.2
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
get-stream@8.0.1: {}
glob-parent@5.1.2:
@@ -7890,6 +7913,8 @@ snapshots:
dependencies:
get-intrinsic: 1.2.4
+ gopd@1.2.0: {}
+
graceful-fs@4.2.11: {}
graphql@16.10.0: {}
@@ -7905,6 +7930,8 @@ snapshots:
hard-rejection@2.1.0: {}
+ has-bigints@1.1.0: {}
+
has-flag@4.0.0: {}
has-property-descriptors@1.0.2:
@@ -7917,6 +7944,12 @@ snapshots:
has-symbols@1.0.3: {}
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.0.3
+
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
@@ -7974,7 +8007,7 @@ snapshots:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
optional: true
@@ -7982,7 +8015,7 @@ snapshots:
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
optional: true
@@ -7990,7 +8023,7 @@ snapshots:
https-proxy-agent@7.0.5(supports-color@9.4.0):
dependencies:
agent-base: 7.1.1(supports-color@9.4.0)
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
@@ -8024,21 +8057,56 @@ snapshots:
inherits@2.0.4: {}
+ ini@1.3.8: {}
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
+
ipaddr.js@1.9.1: {}
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.3
+ has-tostringtag: 1.0.2
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.3
+ get-intrinsic: 1.2.6
+
is-arrayish@0.2.1: {}
is-arrayish@0.3.2:
optional: true
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
+ is-boolean-object@1.2.1:
+ dependencies:
+ call-bound: 1.0.3
+ has-tostringtag: 1.0.2
+
+ is-callable@1.2.7: {}
+
is-core-module@2.15.1:
dependencies:
hasown: 2.0.2
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.3
+ has-tostringtag: 1.0.2
+
is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
@@ -8053,8 +8121,15 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-map@2.0.3: {}
+
is-node-process@1.2.0: {}
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.3
+ has-tostringtag: 1.0.2
+
is-number@7.0.0: {}
is-path-cwd@3.0.0: {}
@@ -8070,16 +8145,49 @@ snapshots:
dependencies:
'@types/estree': 1.0.6
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.3
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.3
+
is-stream@3.0.0: {}
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.3
+ has-tostringtag: 1.0.2
+
is-subdir@1.2.0:
dependencies:
better-path-resolve: 1.0.0
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.3
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-weakmap@2.0.2: {}
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.3
+ get-intrinsic: 1.2.6
+
is-what@4.1.16: {}
is-windows@1.0.2: {}
+ isarray@2.0.5: {}
+
isexe@2.0.0: {}
istanbul-lib-coverage@3.2.2: {}
@@ -8093,7 +8201,7 @@ snapshots:
istanbul-lib-source-maps@5.0.6:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
@@ -8113,6 +8221,16 @@ snapshots:
joycon@3.1.1: {}
+ js-beautify@1.15.1:
+ dependencies:
+ config-chain: 1.1.13
+ editorconfig: 1.0.4
+ glob: 10.4.5
+ js-cookie: 3.0.5
+ nopt: 7.2.1
+
+ js-cookie@3.0.5: {}
+
js-levenshtein@1.1.6: {}
js-tokens@4.0.0: {}
@@ -8299,6 +8417,8 @@ snapshots:
marked@9.1.6: {}
+ math-intrinsics@1.1.0: {}
+
mdast-util-find-and-replace@3.0.1:
dependencies:
'@types/mdast': 4.0.4
@@ -8552,7 +8672,7 @@ snapshots:
micromark@4.0.1:
dependencies:
'@types/debug': 4.1.12
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-core-commonmark: 2.0.2
@@ -8600,6 +8720,10 @@ snapshots:
dependencies:
brace-expansion: 2.0.1
+ minimatch@9.0.1:
+ dependencies:
+ brace-expansion: 2.0.1
+
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
@@ -8746,6 +8870,10 @@ snapshots:
node-releases@2.0.19: {}
+ nopt@7.2.1:
+ dependencies:
+ abbrev: 2.0.0
+
normalize-package-data@3.0.3:
dependencies:
hosted-git-info: 4.1.0
@@ -8766,6 +8894,22 @@ snapshots:
object-inspect@1.13.3: {}
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.3
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
@@ -8836,7 +8980,7 @@ snapshots:
package-json-from-dist@1.0.1: {}
- package-manager-detector@0.2.8: {}
+ package-manager-detector@0.2.7: {}
parse-json@5.2.0:
dependencies:
@@ -8915,6 +9059,8 @@ snapshots:
pluralize@8.0.0: {}
+ possible-typed-array-names@1.0.0: {}
+
postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(yaml@2.5.1):
dependencies:
lilconfig: 3.1.3
@@ -8955,6 +9101,8 @@ snapshots:
property-information@6.5.0: {}
+ proto-list@1.2.4: {}
+
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
@@ -9055,6 +9203,13 @@ snapshots:
dependencies:
regex-utilities: 2.3.0
+ regexp.prototype.flags@1.5.3:
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ set-function-name: 2.0.2
+
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
@@ -9129,31 +9284,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.28.1
fsevents: 2.3.3
- rollup@4.29.1:
- dependencies:
- '@types/estree': 1.0.6
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.29.1
- '@rollup/rollup-android-arm64': 4.29.1
- '@rollup/rollup-darwin-arm64': 4.29.1
- '@rollup/rollup-darwin-x64': 4.29.1
- '@rollup/rollup-freebsd-arm64': 4.29.1
- '@rollup/rollup-freebsd-x64': 4.29.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.29.1
- '@rollup/rollup-linux-arm-musleabihf': 4.29.1
- '@rollup/rollup-linux-arm64-gnu': 4.29.1
- '@rollup/rollup-linux-arm64-musl': 4.29.1
- '@rollup/rollup-linux-loongarch64-gnu': 4.29.1
- '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1
- '@rollup/rollup-linux-riscv64-gnu': 4.29.1
- '@rollup/rollup-linux-s390x-gnu': 4.29.1
- '@rollup/rollup-linux-x64-gnu': 4.29.1
- '@rollup/rollup-linux-x64-musl': 4.29.1
- '@rollup/rollup-win32-arm64-msvc': 4.29.1
- '@rollup/rollup-win32-ia32-msvc': 4.29.1
- '@rollup/rollup-win32-x64-msvc': 4.29.1
- fsevents: 2.3.3
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -9164,6 +9294,12 @@ snapshots:
safe-buffer@5.2.1: {}
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
safer-buffer@2.1.2: {}
sander@0.5.1:
@@ -9226,6 +9362,13 @@ snapshots:
gopd: 1.1.0
has-property-descriptors: 1.0.2
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
setprototypeof@1.2.0: {}
sharp@0.33.5:
@@ -9270,6 +9413,26 @@ snapshots:
'@shikijs/vscode-textmate': 9.3.1
'@types/hast': 3.0.4
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.3
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.6
+ object-inspect: 1.13.3
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.6
+ object-inspect: 1.13.3
+ side-channel-map: 1.0.1
+
side-channel@1.0.6:
dependencies:
call-bind: 1.0.7
@@ -9277,6 +9440,14 @@ snapshots:
get-intrinsic: 1.2.4
object-inspect: 1.13.3
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.3
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
siginfo@2.0.0: {}
signal-exit@4.1.0: {}
@@ -9366,6 +9537,11 @@ snapshots:
std-env@3.8.0: {}
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
streamsearch@1.1.0: {}
strict-event-emitter@0.5.1: {}
@@ -9728,9 +9904,9 @@ snapshots:
unpipe@1.0.0: {}
- unplugin-swc@1.5.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(rollup@4.29.1):
+ unplugin-swc@1.5.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(rollup@4.28.1):
dependencies:
- '@rollup/pluginutils': 5.1.3(rollup@4.29.1)
+ '@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@swc/core': 1.10.1(@swc/helpers@0.5.13)
load-tsconfig: 0.2.5
unplugin: 1.16.0
@@ -9804,7 +9980,7 @@ snapshots:
vite-node@2.1.8(@types/node@22.10.1):
dependencies:
cac: 6.7.14
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
es-module-lexer: 1.5.4
pathe: 1.1.2
vite: 5.4.11(@types/node@22.10.1)
@@ -9822,7 +9998,7 @@ snapshots:
vite-node@2.1.8(@types/node@22.10.2):
dependencies:
cac: 6.7.14
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
es-module-lexer: 1.5.4
pathe: 1.1.2
vite: 5.4.11(@types/node@22.10.2)
@@ -9841,7 +10017,7 @@ snapshots:
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
- rollup: 4.29.1
+ rollup: 4.28.1
optionalDependencies:
'@types/node': 22.10.1
fsevents: 2.3.3
@@ -9850,7 +10026,7 @@ snapshots:
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
- rollup: 4.29.1
+ rollup: 4.28.1
optionalDependencies:
'@types/node': 22.10.2
fsevents: 2.3.3
@@ -9870,7 +10046,7 @@ snapshots:
dependencies:
esbuild: 0.24.0
postcss: 8.4.49
- rollup: 4.29.1
+ rollup: 4.28.1
optionalDependencies:
'@types/node': 22.10.2
fsevents: 2.3.3
@@ -9941,7 +10117,7 @@ snapshots:
'@vitest/spy': 2.1.8
'@vitest/utils': 2.1.8
chai: 5.1.2
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
expect-type: 1.1.0
magic-string: 0.30.17
pathe: 1.1.2
@@ -9977,7 +10153,7 @@ snapshots:
'@vitest/spy': 2.1.8
'@vitest/utils': 2.1.8
chai: 5.1.2
- debug: 4.4.0(supports-color@9.4.0)
+ debug: 4.4.0
expect-type: 1.1.0
magic-string: 0.30.17
pathe: 1.1.2
@@ -10005,6 +10181,8 @@ snapshots:
vscode-uri@3.0.8: {}
+ vue-component-type-helpers@2.1.10: {}
+
vue-demi@0.14.10(vue@3.5.13(typescript@5.7.2)):
dependencies:
vue: 3.5.13(typescript@5.7.2)
@@ -10079,6 +10257,30 @@ snapshots:
tr46: 1.0.1
webidl-conversions: 4.0.2
+ which-boxed-primitive@1.1.1:
+ dependencies:
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.1
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
+
+ which-typed-array@1.1.18:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.3
+ for-each: 0.3.3
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
which@2.0.2:
dependencies:
isexe: 2.0.0