diff --git a/packages/graphql/package.json b/packages/graphql/package.json
index 23e32a7590c..487bcf39087 100644
--- a/packages/graphql/package.json
+++ b/packages/graphql/package.json
@@ -30,15 +30,16 @@
"node": ">=20.0.0"
},
"dependencies": {
- "@alloy-js/core": "^0.11.0",
- "@alloy-js/typescript": "^0.11.0",
+ "@alloy-js/core": "^0.22.0",
+ "@alloy-js/graphql": "link:../../alloy/packages/graphql",
+ "@alloy-js/typescript": "^0.22.0",
"change-case": "^5.4.4",
"graphql": "^16.9.0"
},
"scripts": {
"clean": "rimraf ./dist ./temp",
- "build": "tsc -p .",
- "watch": "tsc --watch",
+ "build": "alloy build",
+ "watch": "alloy build --watch",
"test": "vitest run",
"test:watch": "vitest -w",
"lint": "eslint . --max-warnings=0",
@@ -56,6 +57,8 @@
"@typespec/mutator-framework": "workspace:~"
},
"devDependencies": {
+ "@alloy-js/cli": "^0.22.0",
+ "@alloy-js/rollup-plugin": "^0.1.0",
"@types/node": "~22.13.13",
"@typespec/compiler": "workspace:~",
"@typespec/emitter-framework": "workspace:~",
diff --git a/packages/graphql/src/components/fields/field.tsx b/packages/graphql/src/components/fields/field.tsx
new file mode 100644
index 00000000000..ff475b07f92
--- /dev/null
+++ b/packages/graphql/src/components/fields/field.tsx
@@ -0,0 +1,72 @@
+import { type ModelProperty, getDeprecationDetails, isArrayModelType } from "@typespec/compiler";
+import * as gql from "@alloy-js/graphql";
+import { useTsp } from "@typespec/emitter-framework";
+import { resolveGraphQLTypeName } from "../../lib/graphql-type-name.js";
+import { hasNullableElements, isNullable } from "../../lib/nullable.js";
+
+export interface FieldProps {
+ property: ModelProperty;
+ isInput: boolean;
+}
+
+export function Field(props: FieldProps) {
+ const { $, program } = useTsp();
+
+ const doc = $.type.getDoc(props.property);
+ const deprecation = getDeprecationDetails(program, props.property);
+ const nullable = isNullable(props.property) || props.property.optional;
+ const type = props.property.type;
+
+ if (type.kind === "Model" && isArrayModelType(type)) {
+ const elemNullable = hasNullableElements(props.property);
+ const typeName = resolveGraphQLTypeName(type.indexer.value);
+
+ if (props.isInput) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+
+
+ );
+ }
+
+ if (props.isInput) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+}
diff --git a/packages/graphql/src/components/fields/index.ts b/packages/graphql/src/components/fields/index.ts
new file mode 100644
index 00000000000..0cec3b46b26
--- /dev/null
+++ b/packages/graphql/src/components/fields/index.ts
@@ -0,0 +1,2 @@
+export { Field, type FieldProps } from "./field.js";
+export { OperationField, type OperationFieldProps } from "./operation-field.js";
diff --git a/packages/graphql/src/components/fields/operation-field.tsx b/packages/graphql/src/components/fields/operation-field.tsx
new file mode 100644
index 00000000000..f6af1194b60
--- /dev/null
+++ b/packages/graphql/src/components/fields/operation-field.tsx
@@ -0,0 +1,58 @@
+import { type Operation, getDeprecationDetails, isArrayModelType } from "@typespec/compiler";
+import * as gql from "@alloy-js/graphql";
+import { useTsp } from "@typespec/emitter-framework";
+import { resolveGraphQLTypeName } from "../../lib/graphql-type-name.js";
+import { hasNullableElements, isNullable } from "../../lib/nullable.js";
+
+export interface OperationFieldProps {
+ operation: Operation;
+}
+
+export function OperationField(props: OperationFieldProps) {
+ const { $, program } = useTsp();
+
+ const doc = $.type.getDoc(props.operation);
+ const deprecation = getDeprecationDetails(program, props.operation);
+ const returnType = props.operation.returnType;
+ const nullable = isNullable(props.operation);
+ const params = Array.from(props.operation.parameters.properties.values());
+
+ const isList = returnType.kind === "Model" && isArrayModelType(returnType);
+ const typeName = isList
+ ? resolveGraphQLTypeName(returnType.indexer.value)
+ : resolveGraphQLTypeName(returnType);
+ const elemNullable = isList && hasNullableElements(props.operation);
+
+ return (
+
+ {isList ? : undefined}
+ {params.map((param) => {
+ const paramNullable = isNullable(param) || param.optional;
+ const paramType = param.type;
+ const paramIsList = paramType.kind === "Model" && isArrayModelType(paramType);
+ const paramElemNullable = paramIsList && hasNullableElements(param);
+ const paramTypeName = paramIsList
+ ? resolveGraphQLTypeName(paramType.indexer.value)
+ : resolveGraphQLTypeName(paramType);
+
+ return (
+
+ {paramIsList ? : undefined}
+
+ );
+ })}
+
+ );
+}
diff --git a/packages/graphql/src/context/graphql-schema-context.tsx b/packages/graphql/src/context/graphql-schema-context.tsx
new file mode 100644
index 00000000000..f51826dcb89
--- /dev/null
+++ b/packages/graphql/src/context/graphql-schema-context.tsx
@@ -0,0 +1,21 @@
+import { type ComponentContext, createNamedContext, useContext } from "@alloy-js/core";
+import type { TypeGraph } from "../mutation-engine/type-graph.js";
+
+export interface GraphQLSchemaContextValue {
+ typeGraph: TypeGraph;
+}
+
+export const GraphQLSchemaContext: ComponentContext =
+ createNamedContext("GraphQLSchema");
+
+export function useGraphQLSchema(): GraphQLSchemaContextValue {
+ const context = useContext(GraphQLSchemaContext);
+
+ if (!context) {
+ throw new Error(
+ "useGraphQLSchema must be used within GraphQLSchemaContext.Provider.",
+ );
+ }
+
+ return context;
+}
diff --git a/packages/graphql/src/context/index.ts b/packages/graphql/src/context/index.ts
new file mode 100644
index 00000000000..cf8c0efcbbb
--- /dev/null
+++ b/packages/graphql/src/context/index.ts
@@ -0,0 +1,5 @@
+export {
+ GraphQLSchemaContext,
+ useGraphQLSchema,
+ type GraphQLSchemaContextValue,
+} from "./graphql-schema-context.js";
diff --git a/packages/graphql/tsconfig.json b/packages/graphql/tsconfig.json
index ad68b784463..d2f18d1ce33 100644
--- a/packages/graphql/tsconfig.json
+++ b/packages/graphql/tsconfig.json
@@ -1,10 +1,18 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
- "useDefineForClassFields": true,
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "target": "es2022",
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "verbatimModuleSyntax": true,
+ "jsx": "preserve",
+ "jsxImportSource": "@alloy-js/core",
+ "emitDeclarationOnly": true,
"rootDir": ".",
- "outDir": "dist",
- "verbatimModuleSyntax": true
+ "outDir": "dist"
},
- "include": ["src", "test"]
+ "include": ["src/**/*.ts", "src/**/*.tsx", "test/**/*.ts", "test/**/*.tsx"],
+ "exclude": ["node_modules", "dist"]
}
diff --git a/packages/graphql/vitest.config.ts b/packages/graphql/vitest.config.ts
index 63cad767f57..b45007f3475 100644
--- a/packages/graphql/vitest.config.ts
+++ b/packages/graphql/vitest.config.ts
@@ -1,4 +1,14 @@
+import alloyPlugin from "@alloy-js/rollup-plugin";
import { defineConfig, mergeConfig } from "vitest/config";
import { defaultTypeSpecVitestConfig } from "../../vitest.config.js";
-export default mergeConfig(defaultTypeSpecVitestConfig, defineConfig({}));
+export default mergeConfig(
+ defaultTypeSpecVitestConfig,
+ defineConfig({
+ esbuild: {
+ jsx: "preserve",
+ sourcemap: "both",
+ },
+ plugins: [alloyPlugin()],
+ }),
+);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 99e5c06ef65..2ae0ad4c390 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -540,6 +540,58 @@ importers:
specifier: ^4.0.18
version: 4.0.18(@types/node@25.3.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2)
+ packages/graphql:
+ dependencies:
+ '@alloy-js/core':
+ specifier: ^0.22.0
+ version: 0.22.0
+ '@alloy-js/graphql':
+ specifier: link:/home/swatikumar/code/alloy/packages/graphql
+ version: link:../../../alloy/packages/graphql
+ '@alloy-js/typescript':
+ specifier: ^0.22.0
+ version: 0.22.0
+ change-case:
+ specifier: ^5.4.4
+ version: 5.4.4
+ graphql:
+ specifier: ^16.9.0
+ version: 16.14.1
+ devDependencies:
+ '@alloy-js/cli':
+ specifier: ^0.22.0
+ version: 0.22.0
+ '@alloy-js/rollup-plugin':
+ specifier: ^0.1.0
+ version: 0.1.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.49.0)
+ '@types/node':
+ specifier: ~22.13.13
+ version: 22.13.17
+ '@typespec/compiler':
+ specifier: workspace:~
+ version: link:../compiler
+ '@typespec/emitter-framework':
+ specifier: workspace:~
+ version: link:../emitter-framework
+ '@typespec/http':
+ specifier: workspace:~
+ version: link:../http
+ '@typespec/mutator-framework':
+ specifier: workspace:~
+ version: link:../mutator-framework
+ rimraf:
+ specifier: ~6.0.1
+ version: 6.0.1
+ source-map-support:
+ specifier: ~0.5.21
+ version: 0.5.21
+ typescript:
+ specifier: ~5.8.2
+ version: 5.8.2
+ vitest:
+ specifier: ^3.0.9
+ version: 3.2.6(@types/debug@4.1.12)(@types/node@22.13.17)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2)
+
packages/html-program-viewer:
dependencies:
'@fluentui/react-components':
@@ -1544,6 +1596,9 @@ importers:
'@typespec/events':
specifier: workspace:^
version: link:../events
+ '@typespec/graphql':
+ specifier: workspace:^
+ version: link:../graphql
'@typespec/html-program-viewer':
specifier: workspace:^
version: link:../html-program-viewer
@@ -6315,6 +6370,9 @@ packages:
'@types/node@18.19.130':
resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
+ '@types/node@22.13.17':
+ resolution: {integrity: sha512-nAJuQXoyPj04uLgu+obZcSmsfOenUg6DxPKogeUy6yNCFwWaj5sBF8/G/pNo8EtBJjAfSVgfIlugR/BCOleO+g==}
+
'@types/node@25.3.0':
resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
@@ -6522,9 +6580,23 @@ packages:
'@vitest/expect@3.2.4':
resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+ '@vitest/expect@3.2.6':
+ resolution: {integrity: sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==}
+
'@vitest/expect@4.0.18':
resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
+ '@vitest/mocker@3.2.6':
+ resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/mocker@4.0.18':
resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
peerDependencies:
@@ -6539,18 +6611,30 @@ packages:
'@vitest/pretty-format@3.2.4':
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+ '@vitest/pretty-format@3.2.6':
+ resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==}
+
'@vitest/pretty-format@4.0.18':
resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
+ '@vitest/runner@3.2.6':
+ resolution: {integrity: sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==}
+
'@vitest/runner@4.0.18':
resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
+ '@vitest/snapshot@3.2.6':
+ resolution: {integrity: sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==}
+
'@vitest/snapshot@4.0.18':
resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
'@vitest/spy@3.2.4':
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+ '@vitest/spy@3.2.6':
+ resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==}
+
'@vitest/spy@4.0.18':
resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
@@ -6562,6 +6646,9 @@ packages:
'@vitest/utils@3.2.4':
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+ '@vitest/utils@3.2.6':
+ resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==}
+
'@vitest/utils@4.0.18':
resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
@@ -7426,6 +7513,10 @@ packages:
monocart-coverage-reports:
optional: true
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
cacache@19.0.1:
resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -9120,6 +9211,10 @@ packages:
grapheme-splitter@1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+ graphql@16.14.1:
+ resolution: {integrity: sha512-cQOsSMS/IrDz82PVyRDvf/Q1F/bRbBVjJlh+xYOkI1qw2bWRvWGiWc+m2O0d6l4Bt1fyY+8kzJ8JFWGJqNeDBg==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+
gray-matter@4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
@@ -9794,6 +9889,9 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
@@ -11706,6 +11804,11 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
+ rimraf@6.0.1:
+ resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
rimraf@6.1.3:
resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==}
engines: {node: 20 || >=22}
@@ -12232,6 +12335,9 @@ packages:
resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
engines: {node: '>=14.16'}
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+
strnum@2.1.2:
resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==}
@@ -12395,6 +12501,9 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
@@ -12406,6 +12515,10 @@ packages:
tinylogic@2.0.0:
resolution: {integrity: sha512-dljTkiLLITtsjqBvTA1MRZQK/sGP4kI3UJKc3yA9fMzYbMF2RhcN04SeROVqJBIYYOoJMM8u0WDnhFwMSFQotw==}
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
@@ -12724,6 +12837,9 @@ packages:
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
@@ -12976,6 +13092,11 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+ vite-node@3.2.4:
+ resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+
vite-plugin-checker@0.12.0:
resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==}
engines: {node: '>=16.11'}
@@ -13115,6 +13236,34 @@ packages:
vite:
optional: true
+ vitest@3.2.6:
+ resolution: {integrity: sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/debug': ^4.1.12
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@vitest/browser': 3.2.6
+ '@vitest/ui': 3.2.6
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vitest@4.0.18:
resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -18624,6 +18773,10 @@ snapshots:
dependencies:
undici-types: 5.26.5
+ '@types/node@22.13.17':
+ dependencies:
+ undici-types: 6.20.0
+
'@types/node@25.3.0':
dependencies:
undici-types: 7.18.2
@@ -18892,6 +19045,14 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
+ '@vitest/expect@3.2.6':
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/spy': 3.2.6
+ '@vitest/utils': 3.2.6
+ chai: 5.3.3
+ tinyrainbow: 2.0.0
+
'@vitest/expect@4.0.18':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -18901,6 +19062,14 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.0.3
+ '@vitest/mocker@3.2.6(vite@7.3.1(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2))':
+ dependencies:
+ '@vitest/spy': 3.2.6
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.1(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2)
+
'@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.0)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 4.0.18
@@ -18913,15 +19082,31 @@ snapshots:
dependencies:
tinyrainbow: 2.0.0
+ '@vitest/pretty-format@3.2.6':
+ dependencies:
+ tinyrainbow: 2.0.0
+
'@vitest/pretty-format@4.0.18':
dependencies:
tinyrainbow: 3.0.3
+ '@vitest/runner@3.2.6':
+ dependencies:
+ '@vitest/utils': 3.2.6
+ pathe: 2.0.3
+ strip-literal: 3.1.0
+
'@vitest/runner@4.0.18':
dependencies:
'@vitest/utils': 4.0.18
pathe: 2.0.3
+ '@vitest/snapshot@3.2.6':
+ dependencies:
+ '@vitest/pretty-format': 3.2.6
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
'@vitest/snapshot@4.0.18':
dependencies:
'@vitest/pretty-format': 4.0.18
@@ -18932,6 +19117,10 @@ snapshots:
dependencies:
tinyspy: 4.0.4
+ '@vitest/spy@3.2.6':
+ dependencies:
+ tinyspy: 4.0.4
+
'@vitest/spy@4.0.18': {}
'@vitest/ui@4.0.18(vitest@4.0.18)':
@@ -18951,6 +19140,12 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 2.0.0
+ '@vitest/utils@3.2.6':
+ dependencies:
+ '@vitest/pretty-format': 3.2.6
+ loupe: 3.2.1
+ tinyrainbow: 2.0.0
+
'@vitest/utils@4.0.18':
dependencies:
'@vitest/pretty-format': 4.0.18
@@ -20252,6 +20447,8 @@ snapshots:
yargs: 17.7.2
yargs-parser: 21.1.1
+ cac@6.7.14: {}
+
cacache@19.0.1:
dependencies:
'@npmcli/fs': 4.0.0
@@ -22299,6 +22496,8 @@ snapshots:
grapheme-splitter@1.0.4: {}
+ graphql@16.14.1: {}
+
gray-matter@4.0.3:
dependencies:
js-yaml: 3.14.2
@@ -23123,6 +23322,8 @@ snapshots:
js-tokens@4.0.0: {}
+ js-tokens@9.0.1: {}
+
js-yaml@3.14.2:
dependencies:
argparse: 1.0.10
@@ -25637,6 +25838,11 @@ snapshots:
dependencies:
glob: 7.2.3
+ rimraf@6.0.1:
+ dependencies:
+ glob: 11.1.0
+ package-json-from-dist: 1.0.1
+
rimraf@6.1.3:
dependencies:
glob: 13.0.6
@@ -26300,6 +26506,10 @@ snapshots:
strip-json-comments@5.0.3: {}
+ strip-literal@3.1.0:
+ dependencies:
+ js-tokens: 9.0.1
+
strnum@2.1.2: {}
structured-source@4.0.0:
@@ -26541,6 +26751,8 @@ snapshots:
tinybench@2.9.0: {}
+ tinyexec@0.3.2: {}
+
tinyexec@1.0.2: {}
tinyglobby@0.2.15:
@@ -26550,6 +26762,8 @@ snapshots:
tinylogic@2.0.0: {}
+ tinypool@1.1.1: {}
+
tinyrainbow@2.0.0: {}
tinyrainbow@3.0.3: {}
@@ -26829,6 +27043,8 @@ snapshots:
undici-types@5.26.5: {}
+ undici-types@6.20.0: {}
+
undici-types@7.18.2: {}
undici@7.22.0: {}
@@ -27047,6 +27263,27 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
+ vite-node@3.2.4(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3(supports-color@8.1.1)
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 7.3.1(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vite-plugin-checker@0.12.0(eslint@10.0.2)(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
'@babel/code-frame': 7.29.0
@@ -27104,6 +27341,20 @@ snapshots:
tsx: 4.21.0
yaml: 2.8.2
+ vite@7.3.1(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2):
+ dependencies:
+ esbuild: 0.27.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.49.0
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 22.13.17
+ fsevents: 2.3.3
+ tsx: 4.21.0
+ yaml: 2.8.2
+
vite@7.3.1(@types/node@25.3.0)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
@@ -27122,6 +27373,51 @@ snapshots:
optionalDependencies:
vite: 6.4.1(@types/node@25.3.0)(tsx@4.21.0)(yaml@2.8.2)
+ vitest@3.2.6(@types/debug@4.1.12)(@types/node@22.13.17)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2):
+ dependencies:
+ '@types/chai': 5.2.3
+ '@vitest/expect': 3.2.6
+ '@vitest/mocker': 3.2.6(vite@7.3.1(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/pretty-format': 3.2.6
+ '@vitest/runner': 3.2.6
+ '@vitest/snapshot': 3.2.6
+ '@vitest/spy': 3.2.6
+ '@vitest/utils': 3.2.6
+ chai: 5.3.3
+ debug: 4.4.3(supports-color@8.1.1)
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.15
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 7.3.1(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2)
+ vite-node: 3.2.4(@types/node@22.13.17)(tsx@4.21.0)(yaml@2.8.2)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/debug': 4.1.12
+ '@types/node': 22.13.17
+ '@vitest/ui': 4.0.18(vitest@4.0.18)
+ happy-dom: 20.7.0
+ jsdom: 25.0.1
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
vitest@4.0.18(@types/node@25.3.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jsdom@25.0.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@vitest/expect': 4.0.18