{"_id":"@eeeooolll/graphiql","_rev":"6-e27d3ba4650996e10a2c382dfaef1b08","name":"@eeeooolll/graphiql","dist-tags":{"latest":"0.4.2"},"versions":{"0.1.0":{"name":"@eeeooolll/graphiql","version":"0.1.0","license":"MIT","_id":"@eeeooolll/graphiql@0.1.0","maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"dist":{"shasum":"93e964d1e2b82b9767aeb6e7975602db874ec220","tarball":"https://registry.npmjs.org/@eeeooolll/graphiql/-/graphiql-0.1.0.tgz","fileCount":61,"integrity":"sha512-oGSlHnT+lkTiZ5b6/nZ8a/zCfpYBeXYlSsGG2VZKigrkj1V5CV1eOqtLrUSQFEUxjlcO757gVckCI6JhA17w+w==","signatures":[{"sig":"MEUCIEDKxliXdt3ya/1AV4JCpPJBonEO8e7oNyibB5Rsli9jAiEA3Rexes2ZbvQfzJTi4wtP2W1dWJsGqEGQLmLawNNpxg8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110397},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./splitter":{"types":"./dist/components/Splitter.svelte.d.ts","svelte":"./dist/components/Splitter.svelte","default":"./dist/components/Splitter.svelte"},"./component":{"types":"./dist/GraphiQL.svelte.d.ts","svelte":"./dist/GraphiQL.svelte","default":"./dist/GraphiQL.svelte"}},"gitHead":"3c06c95f396b6e911076bc3291d5855ed01b5caa","scripts":{"dev":"vite","test":"vitest run","build":"vite build","check":"svelte-check --tsconfig tsconfig.json","update":"updates --update","package":"svelte-package --input source/library --output dist","preview":"vite preview","publish":"bun run package && bun publish","prepublishOnly":"bun run package"},"_npmUser":{"name":"netopwibby","email":"paul@webb.page"},"_npmVersion":"11.4.2","description":"A Svelte 5 GraphiQL alternative.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"graphql":"^16.13.2","@inc/uchu":"^2.2.0","codemirror":"^6.0.2","graphql-ws":"^6.0.8","cm6-graphql":"^0.2.1","graphql-sse":"^2.6.0","@codemirror/view":"^6.41.1","@lezer/highlight":"^1.2.3","@codemirror/state":"^6.6.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/autocomplete":"^6.20.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"npm:sass-embedded@^1.99.0","vite":"^8.0.10","svelte":"^5.55.5","vitest":"^4.1.5","updates":"^17.16.3","typescript":"^6.0.3","svelte-check":"^4.4.6","sass-embedded":"^1.99.0","@sveltejs/package":"^2.5.7","svelte-preprocess":"^6.0.3","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.55.5"},"_npmOperationalInternal":{"tmp":"tmp/graphiql_0.1.0_1777259944918_0.1057988437553039","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@eeeooolll/graphiql","version":"0.2.0","license":"MIT","_id":"@eeeooolll/graphiql@0.2.0","maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"dist":{"shasum":"c5ebec5adf2d639f918d0d2b46eddbbec0067efd","tarball":"https://registry.npmjs.org/@eeeooolll/graphiql/-/graphiql-0.2.0.tgz","fileCount":61,"integrity":"sha512-FbApMv3k4SLU0EusCBk3/BfPehwCbRuASw4TpoLyw8Tl/gNxSYPKRFVFkQ6RNw2dfmkpjF/DQpbam2J02yt3kA==","signatures":[{"sig":"MEQCIA5AH2VicxDn+veE3Td/P4Q8XuqN07+nVu7woLur7v3kAiAIJL8hi08beo2U4waDy3sT636ez5yeFjCplrRozp5trg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110397},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./splitter":{"types":"./dist/components/Splitter.svelte.d.ts","svelte":"./dist/components/Splitter.svelte","default":"./dist/components/Splitter.svelte"},"./component":{"types":"./dist/GraphiQL.svelte.d.ts","svelte":"./dist/GraphiQL.svelte","default":"./dist/GraphiQL.svelte"}},"gitHead":"938496228e9553c90aa81ee993c0d760a7dd6c26","scripts":{"dev":"vite","test":"vitest run","build":"vite build","check":"svelte-check --tsconfig tsconfig.json","update":"updates --update","package":"svelte-package --input source/library --output dist","preview":"vite preview","publish":"bun run package && bun publish","prepublishOnly":"bun run package"},"_npmUser":{"name":"netopwibby","email":"paul@webb.page"},"_npmVersion":"11.4.2","description":"A Svelte 5 GraphiQL alternative.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"graphql":"^16.13.2","@inc/uchu":"^2.2.0","codemirror":"^6.0.2","graphql-ws":"^6.0.8","cm6-graphql":"^0.2.1","graphql-sse":"^2.6.0","@codemirror/view":"^6.41.1","@lezer/highlight":"^1.2.3","@codemirror/state":"^6.6.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/autocomplete":"^6.20.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"npm:sass-embedded@^1.99.0","vite":"^8.0.10","svelte":"^5.55.5","vitest":"^4.1.5","updates":"^17.16.3","typescript":"^6.0.3","svelte-check":"^4.4.6","sass-embedded":"^1.99.0","@sveltejs/package":"^2.5.7","svelte-preprocess":"^6.0.3","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.55.5"},"_npmOperationalInternal":{"tmp":"tmp/graphiql_0.2.0_1777259979361_0.9072590874842801","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@eeeooolll/graphiql","version":"0.3.0","license":"MIT","_id":"@eeeooolll/graphiql@0.3.0","maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"dist":{"shasum":"a75d16b347407bd82986fe688874203e4cd79955","tarball":"https://registry.npmjs.org/@eeeooolll/graphiql/-/graphiql-0.3.0.tgz","fileCount":64,"integrity":"sha512-ICp2R4v2XkIAOUlAKlcS511qKlCRSuSO2U9scpy1J4PyED4i+uoSNiLD2JPV8eg+DVFgnSRyfxG5jIUdhzNhQg==","signatures":[{"sig":"MEUCIH6NXlw2meqL3ZheJjRsoiHPXjo5ecZeBxrZ58GpckQsAiEA5j42ZRGBbRuvh4QxzeboLL6SLbrwFd5IJEcCh/oUQ/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4320520},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./splitter":{"types":"./dist/components/Splitter.svelte.d.ts","svelte":"./dist/components/Splitter.svelte","default":"./dist/components/Splitter.svelte"},"./component":{"types":"./dist/GraphiQL.svelte.d.ts","svelte":"./dist/GraphiQL.svelte","default":"./dist/GraphiQL.svelte"},"./standalone":"./dist/standalone.js","./standalone.css":"./dist/standalone.css"},"gitHead":"07d39a1a3a09739bbc3d27a31829063f1e0a5e24","scripts":{"dev":"vite","test":"vitest run","build":"vite build","check":"svelte-check --tsconfig tsconfig.json","update":"updates --update","package":"svelte-package --input source/library --output dist && bun run build:standalone","preview":"vite preview","publish":"bun run package && bun publish","prepublishOnly":"bun run package","build:standalone":"vite build --config vite.standalone.config.ts"},"_npmUser":{"name":"netopwibby","email":"paul@webb.page"},"_npmVersion":"11.4.2","description":"A Svelte 5 GraphiQL alternative.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"graphql":"^16.13.2","@inc/uchu":"^2.2.0","codemirror":"^6.0.2","graphql-ws":"^6.0.8","cm6-graphql":"^0.2.1","graphql-sse":"^2.6.0","@codemirror/view":"^6.41.1","@lezer/highlight":"^1.2.3","@codemirror/state":"^6.6.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/autocomplete":"^6.20.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"npm:sass-embedded@^1.99.0","vite":"^8.0.10","svelte":"^5.55.5","vitest":"^4.1.5","updates":"^17.16.3","typescript":"^6.0.3","svelte-check":"^4.4.6","sass-embedded":"^1.99.0","@sveltejs/package":"^2.5.7","svelte-preprocess":"^6.0.3","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.55.5"},"_npmOperationalInternal":{"tmp":"tmp/graphiql_0.3.0_1777261889422_0.25737031932538645","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@eeeooolll/graphiql","version":"0.4.0","license":"MIT","_id":"@eeeooolll/graphiql@0.4.0","maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"dist":{"shasum":"59667950ad04fdffdcdf56c5c05d1fc5411a39e6","tarball":"https://registry.npmjs.org/@eeeooolll/graphiql/-/graphiql-0.4.0.tgz","fileCount":65,"integrity":"sha512-mUjq0sIFEy4OvHADmlrvbZET9LvgPfmKlnB13ao2fYQElHHilEtMDoN/09ATz2a5BAb5Zii07ZeTRNXsvWgAig==","signatures":[{"sig":"MEUCIAoZmOu4tplqj0vZlwunsevM8Tqa788AFt/7f8X5WcBMAiEAh7cgNnAz6DUOoK9RSbPbq3QAKoKq+tN02kKyUXZkJRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4321309},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./splitter":{"types":"./dist/components/Splitter.svelte.d.ts","svelte":"./dist/components/Splitter.svelte","default":"./dist/components/Splitter.svelte"},"./component":{"types":"./dist/GraphiQL.svelte.d.ts","svelte":"./dist/GraphiQL.svelte","default":"./dist/GraphiQL.svelte"},"./standalone":"./dist/standalone.js","./standalone.css":"./dist/standalone.css"},"gitHead":"d5b7c5e3b663e3031f803df41be28a1e9bc78843","scripts":{"dev":"vite","test":"vitest run","build":"vite build","check":"svelte-check --tsconfig tsconfig.json","update":"updates --update","package":"svelte-package --input source/library --output dist && bun run build:standalone","preview":"vite preview","publish":"bun run package && bun publish","prepublishOnly":"bun run package","build:standalone":"vite build --config vite.standalone.config.ts"},"_npmUser":{"name":"netopwibby","email":"paul@webb.page"},"_npmVersion":"11.4.2","description":"A Svelte 5 GraphiQL alternative.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"graphql":"^16.13.2","@inc/uchu":"^2.2.0","codemirror":"^6.0.2","graphql-ws":"^6.0.8","cm6-graphql":"^0.2.1","graphql-sse":"^2.6.0","@codemirror/view":"^6.41.1","@lezer/highlight":"^1.2.3","@codemirror/state":"^6.6.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/autocomplete":"^6.20.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"npm:sass-embedded@^1.99.0","vite":"^8.0.10","svelte":"^5.55.5","vitest":"^4.1.5","updates":"^17.16.3","typescript":"^6.0.3","svelte-check":"^4.4.6","sass-embedded":"^1.99.0","@sveltejs/package":"^2.5.7","svelte-preprocess":"^6.0.3","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.55.5"},"_npmOperationalInternal":{"tmp":"tmp/graphiql_0.4.0_1777263135486_0.3031499621180045","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@eeeooolll/graphiql","version":"0.4.1","license":"MIT","_id":"@eeeooolll/graphiql@0.4.1","maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"homepage":"https://code.webb.page/eol/graphiql.git/about","dist":{"shasum":"328703e03c6c82c64b044eca4a45bf258d4f130e","tarball":"https://registry.npmjs.org/@eeeooolll/graphiql/-/graphiql-0.4.1.tgz","fileCount":65,"integrity":"sha512-F16Cqbu34bTvZdvPQJc0j5j+k+fs2YOX5PgA7qK9kvg/6jzoP3PKOr9Ozv3TJciiKd+Tpta27rLPpVM0LTbGPA==","signatures":[{"sig":"MEUCIHCjGuXhkjQ4W3zWWuBTb0HRkDjvFHyW/SlLungrVf3UAiEAjaguQs2SU/Pe1rKsr5+PpU9Ux3CxSMs5qjile+k3pDE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4321475},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./splitter":{"types":"./dist/components/Splitter.svelte.d.ts","svelte":"./dist/components/Splitter.svelte","default":"./dist/components/Splitter.svelte"},"./component":{"types":"./dist/GraphiQL.svelte.d.ts","svelte":"./dist/GraphiQL.svelte","default":"./dist/GraphiQL.svelte"},"./standalone":"./dist/standalone.js","./standalone.css":"./dist/standalone.css"},"gitHead":"bc037fb22f7c5de34d0cad6d4e1c34f1f39a61d7","scripts":{"dev":"vite","test":"vitest run","build":"vite build","check":"svelte-check --tsconfig tsconfig.json","update":"updates --update","package":"svelte-package --input source/library --output dist && bun run build:standalone","preview":"vite preview","publish":"bun run package && bun publish","prepublishOnly":"bun run package","build:standalone":"vite build --config vite.standalone.config.ts"},"_npmUser":{"name":"netopwibby","email":"paul@webb.page"},"repository":{"url":"https://code.webb.page/eol/graphiql.git","type":"git"},"_npmVersion":"11.4.2","description":"A Svelte 5 GraphiQL alternative.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"graphql":"^16.13.2","@inc/uchu":"^2.2.0","codemirror":"^6.0.2","graphql-ws":"^6.0.8","cm6-graphql":"^0.2.1","graphql-sse":"^2.6.0","@codemirror/view":"^6.41.1","@lezer/highlight":"^1.2.3","@codemirror/state":"^6.6.0","@codemirror/commands":"^6.10.3","@codemirror/language":"^6.12.3","@codemirror/lang-json":"^6.0.2","@codemirror/autocomplete":"^6.20.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"npm:sass-embedded@^1.99.0","vite":"^8.0.10","svelte":"^5.55.5","vitest":"^4.1.5","updates":"^17.16.3","typescript":"^6.0.3","svelte-check":"^4.4.6","sass-embedded":"^1.99.0","@sveltejs/package":"^2.5.7","svelte-preprocess":"^6.0.3","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.55.5"},"_npmOperationalInternal":{"tmp":"tmp/graphiql_0.4.1_1777391145720_0.5936144413904554","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"dependencies":{"@codemirror/autocomplete":"^6.20.1","@codemirror/commands":"^6.10.3","@codemirror/lang-json":"^6.0.2","@codemirror/language":"^6.12.3","@codemirror/state":"^6.6.0","@codemirror/view":"^6.41.1","@inc/uchu":"^2.2.0","@lezer/highlight":"^1.2.3","cm6-graphql":"^0.2.1","codemirror":"^6.0.2","graphql":"^16.13.2","graphql-sse":"^2.6.0","graphql-ws":"^6.0.8"},"description":"A Svelte 5 GraphiQL alternative.","devDependencies":{"@sveltejs/package":"^2.5.7","@sveltejs/vite-plugin-svelte":"^7.0.0","sass":"npm:sass-embedded@^1.99.0","sass-embedded":"^1.99.0","svelte":"^5.55.5","svelte-check":"^4.4.6","svelte-preprocess":"^6.0.3","typescript":"^6.0.3","updates":"^17.16.3","vite":"^8.0.10","vitest":"^4.1.5"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./component":{"types":"./dist/GraphiQL.svelte.d.ts","svelte":"./dist/GraphiQL.svelte","default":"./dist/GraphiQL.svelte"},"./splitter":{"types":"./dist/components/Splitter.svelte.d.ts","svelte":"./dist/components/Splitter.svelte","default":"./dist/components/Splitter.svelte"},"./standalone":"./dist/standalone.js","./standalone.css":"./dist/standalone.css"},"homepage":"https://code.webb.page/eol/graphiql.git/about","license":"MIT","name":"@eeeooolll/graphiql","peerDependencies":{"svelte":"^5.55.5"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://code.webb.page/eol/graphiql.git"},"scripts":{"build":"vite build","build:standalone":"vite build --config vite.standalone.config.ts","check":"svelte-check --tsconfig tsconfig.json","dev":"vite","package":"svelte-package --input source/library --output dist && bun run build:standalone","prepublishOnly":"bun run package","preview":"vite preview","publish":"bun publish","test":"vitest run","update":"updates --update"},"type":"module","version":"0.4.2","_id":"@eeeooolll/graphiql@0.4.2","gitHead":"e35a4cd4b3661ae58c4d7cca30b6163ef26618c6","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-vhjNrvEKDAE4JwW4dCZL5D1Vpa4uZwXy2Fy8REBPcmmqGancWbfFPJMZXIjk357iaifz+L0jfTSpZX7S++7K2Q==","shasum":"5a57b172be131c7bf844223df8e45ff8cffda7cd","tarball":"https://registry.npmjs.org/@eeeooolll/graphiql/-/graphiql-0.4.2.tgz","fileCount":65,"unpackedSize":4321456,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDWDyX05zckE2VUaPzUFXLCoAKPUdoTwJjSEIWZEdlrwAIhANeZDf7uG15wkLTsuBFjyLRvk46F7Ok2RqGiqkPctlzx"}]},"_npmUser":{"name":"netopwibby","email":"paul@webb.page"},"directories":{},"maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/graphiql_0.4.2_1777391293974_0.9573751324582769"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-27T03:19:04.811Z","modified":"2026-04-28T15:48:14.372Z","0.1.0":"2026-04-27T03:19:05.061Z","0.2.0":"2026-04-27T03:19:39.501Z","0.3.0":"2026-04-27T03:51:29.608Z","0.4.0":"2026-04-27T04:12:15.693Z","0.4.1":"2026-04-28T15:45:45.944Z","0.4.2":"2026-04-28T15:48:14.215Z"},"license":"MIT","homepage":"https://code.webb.page/eol/graphiql.git/about","repository":{"type":"git","url":"https://code.webb.page/eol/graphiql.git"},"description":"A Svelte 5 GraphiQL alternative.","maintainers":[{"name":"netopwibby","email":"paul@webb.page"}],"readme":"# @eeeooolll/graphiql\n\nA Svelte 5 GraphiQL alternative. CodeMirror 6 under the hood, runes-only state, SSR-safe, zero build config for SvelteKit consumers.\n\nPublished on npm as [`@eeeooolll/graphiql`](https://www.npmjs.com/package/@eeeooolll/graphiql).\n\n## Install\n\n```sh\nbun add @eeeooolll/graphiql\n```\n\nRequires Svelte 5. The package ships `.svelte` sources — your SvelteKit/Vite build compiles them against your own Svelte version.\n\n## Entry points\n\n- `@eeeooolll/graphiql` — utilities, fetchers, stores, types (TS-only)\n- `@eeeooolll/graphiql/component` — the `GraphiQL` Svelte component (default export)\n- `@eeeooolll/graphiql/splitter` — the `Splitter` Svelte component (default export)\n\nComponent entry points are separate from the TS API so SvelteKit/Vite can resolve `.svelte` SFCs through their dedicated bundler hooks.\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { createHttpFetcher } from \"@eeeooolll/graphiql\";\n  import GraphiQL from \"@eeeooolll/graphiql/component\";\n\n  const fetcher = createHttpFetcher({ url: \"/graphql\" });\n</script>\n\n<GraphiQL {fetcher}/>\n```\n\nFull prop list:\n\n| Prop               | Type                            | Default              |\n| ------------------ | ------------------------------- | -------------------- |\n| `fetcher`          | `Fetcher` (required)            | —                    |\n| `initialQuery`     | `string`                        | `\"\"`                 |\n| `namespace`        | `string`                        | `\"eol-graphiql\"`     |\n| `resultFooter`     | `Snippet<[{ result: string }]>` | `undefined`          |\n| `storage`          | `Storage`                       | `localStorage`-based |\n| `subscriptionMode` | `\"append\" \\| \"replace\"`         | `\"append\"`           |\n| `tabExtras`        | `Snippet<[{ tab: Tab }]>`       | `undefined`          |\n| `theme`            | `Extension` (CodeMirror)        | `lightTheme`         |\n| `toolbarExtras`    | `Snippet`                       | `undefined`          |\n\n## Integration\n\nThe component only needs a `Fetcher` — a function that takes `{ query, variables, operationName, headers }` and returns either a `Promise<FetcherResult>` (HTTP) or an `AsyncIterable<FetcherResult>` (SSE/WS). That's the full seam. Any GraphQL server that speaks HTTP JSON works out of the box via `createHttpFetcher`.\n\n### GraphQL Yoga\n\n```ts\n// server.ts\nimport { createYoga, createSchema } from \"graphql-yoga\";\n\nexport const yoga = createYoga({\n  schema: createSchema({\n    resolvers: { Query: { hello: () => \"world\" } },\n    typeDefs: /* GraphQL */ `type Query { hello: String }`\n  })\n});\n```\n\n```svelte\n<!-- +page.svelte -->\n<script lang=\"ts\">\n  import { createHttpFetcher } from \"@eeeooolll/graphiql\";\n  import GraphiQL from \"@eeeooolll/graphiql/component\";\n\n  const fetcher = createHttpFetcher({ url: \"/graphql\" });\n</script>\n\n<GraphiQL {fetcher}/>\n```\n\nYoga's `/graphql` endpoint speaks standard JSON; no adapter needed.\n\n### Apollo Server\n\n```ts\n// server.ts\nimport { ApolloServer } from \"@apollo/server\";\nimport { startStandaloneServer } from \"@apollo/server/standalone\";\n\nconst server = new ApolloServer({ typeDefs, resolvers });\nconst { url } = await startStandaloneServer(server, { listen: { port: 4000 } });\n```\n\n```ts\nconst fetcher = createHttpFetcher({\n  headers: { \"apollo-require-preflight\": \"true\" },\n  url: \"http://localhost:4000/\"\n});\n```\n\nThe `apollo-require-preflight` header satisfies Apollo's CSRF mitigation for non-browser clients; drop it if you disable that check.\n\n### `graphql-modules`\n\n`graphql-modules` builds a composed schema; you still expose it over HTTP via Yoga, Apollo, or raw `graphql-http`. The GraphiQL wiring is identical — point the fetcher at whatever endpoint you mounted.\n\n```ts\n// modules/app.ts\nimport { createApplication, createModule, gql } from \"graphql-modules\";\n\nconst userModule = createModule({\n  id: \"user\",\n  resolvers: { Query: { me: () => ({ id: \"1\", name: \"Ada\" }) } },\n  typeDefs: gql`type Query { me: User } type User { id: ID! name: String! }`\n});\n\nexport const app = createApplication({ modules: [userModule] });\n```\n\n```ts\n// server.ts (Yoga host)\nimport { createYoga } from \"graphql-yoga\";\nimport { app } from \"./modules/app.ts\";\n\nexport const yoga = createYoga({\n  plugins: [app.createSubscription()],\n  schema: app.createSchemaForApollo()\n});\n```\n\n```svelte\n<script lang=\"ts\">\n  import { createHttpFetcher } from \"@eeeooolll/graphiql\";\n  import GraphiQL from \"@eeeooolll/graphiql/component\";\n\n  const fetcher = createHttpFetcher({ url: \"/graphql\" });\n</script>\n\n<GraphiQL {fetcher}/>\n```\n\n### Hono / Bun / Deno\n\n```ts\n// deno\nimport { createHttpFetcher } from \"@eeeooolll/graphiql\";\n\nconst fetcher = createHttpFetcher({\n  fetch: globalThis.fetch,\n  url: \"https://countries.trevorblades.com/\"\n});\n```\n\nThe injectable `fetch` is how you plug in `undici`, a mocked fetch for tests, or a custom one that attaches auth headers.\n\n### Custom headers (auth, tenancy)\n\nTwo places to set headers:\n\n- **Per-request, server-wide** — pass `headers` to `createHttpFetcher`. Applied to every request.\n- **Per-tab, user-editable** — use the Headers pane in the UI. Merged on top of fetcher-level headers.\n\n```ts\nconst fetcher = createHttpFetcher({\n  headers: { authorization: `Bearer ${token}` },\n  url: \"/graphql\"\n});\n```\n\n### Subscriptions\n\n**SSE** (`graphql-sse` protocol):\n\n```ts\nimport { createSseFetcher, createHttpFetcher } from \"@eeeooolll/graphiql\";\n\nconst http = createHttpFetcher({ url: \"/graphql\" });\nconst sse = createSseFetcher({ url: \"/graphql/stream\" });\n\n// Dispatch by operation type in a wrapper:\nconst fetcher: Fetcher = (req) => /subscription\\s/.test(req.query) ? sse(req) : http(req);\n```\n\n**WebSocket** (`graphql-ws` protocol):\n\n```ts\nimport { createWsFetcher } from \"@eeeooolll/graphiql\";\n\nconst ws = createWsFetcher({ url: \"ws://localhost:4000/graphql\" });\n```\n\nEither transport returns an `AsyncIterable<FetcherResult>`; the component handles streaming into the result pane per the `subscriptionMode` prop.\n\n### Custom fetcher\n\nAnything that matches the `Fetcher` signature works. Useful for request batching or injecting trace headers:\n\n```ts\nimport type { Fetcher } from \"@eeeooolll/graphiql\";\n\nconst traced: Fetcher = async (req) => {\n  const traceId = crypto.randomUUID();\n\n  const response = await fetch(\"/graphql\", {\n    body: JSON.stringify(req),\n    headers: { \"content-type\": \"application/json\", \"x-trace-id\": traceId },\n    method: \"POST\"\n  });\n\n  return response.json();\n};\n```\n\n### Persisted queries (APQ)\n\n`createApqFetcher` implements the Apollo Automatic Persisted Queries protocol — first request sends only the SHA-256 hash; on `PersistedQueryNotFound` the fetcher retries with the full query and the server caches the mapping. HTTP-only.\n\n```ts\nimport { createApqFetcher } from \"@eeeooolll/graphiql\";\n\nconst fetcher = createApqFetcher({\n  url: \"/graphql\"\n});\n```\n\nPass `disable: true` to bypass the two-step dance (full query on every request) for debugging. Hashes are cached per-fetcher in memory; no disk persistence.\n\n## Keyboard shortcuts\n\n| Shortcut                      | Action          |\n| ----------------------------- | --------------- |\n| `Cmd/Ctrl + Enter`            | Run query       |\n| `Cmd/Ctrl + Shift + Enter`    | New tab         |\n| `Cmd/Ctrl + Shift + W`        | Close tab       |\n| `Cmd/Ctrl + Shift + F`        | Format query    |\n| `Cmd/Ctrl + Alt + Right/Left` | Next / prev tab |\n\n`Cmd+T` and `Cmd+W` aren't used because browsers reserve them; embedders running in Tauri/Electron can remap via `matchShortcut` (exported from the package).\n\n## Session export/import\n\n```ts\nimport { validateSessionExport } from \"@eeeooolll/graphiql\";\n\nconst json = JSON.parse(rawText);\nconst result = validateSessionExport(json);\n\nif (\"error\" in result)\n  console.error(result.error);\nelse\n  console.log(`${result.tabs.length} tabs ready to import`);\n```\n\nThe History panel ships Export/Import buttons that round-trip through this validator. Import accepts version-1 exports, caps at 50 tabs, and rejects strings over 1 MB.\n\n## Theming\n\nThe editor theme is a separate CodeMirror `Extension` passed via the `theme` prop. Ships with `lightTheme` (default):\n\n```svelte\n<script lang=\"ts\">\n  import { lightTheme } from \"@eeeooolll/graphiql\";\n  import GraphiQL from \"@eeeooolll/graphiql/component\";\n</script>\n\n<GraphiQL {fetcher} theme={lightTheme}/>\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}