zudoku 0.66.0 → 0.66.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/validators/validate.d.ts +0 -2
- package/dist/config/validators/validate.js +0 -1
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/flat-config.d.ts +1 -1
- package/dist/lib/authentication/ui/ZudokuAuthUi.js +5 -1
- package/dist/lib/authentication/ui/ZudokuAuthUi.js.map +1 -1
- package/dist/vite/config.js +1 -4
- package/dist/vite/config.js.map +1 -1
- package/lib/ActionButton-DUgvSylL.js +25 -0
- package/lib/ActionButton-DUgvSylL.js.map +1 -0
- package/lib/{ClaudeLogo-PxFjou9w.js → ClaudeLogo-CGRfGTk2.js} +2 -2
- package/lib/{ClaudeLogo-PxFjou9w.js.map → ClaudeLogo-CGRfGTk2.js.map} +1 -1
- package/lib/Drawer-Ci7XwhqT.js.map +1 -1
- package/lib/{ErrorAlert-BqjbNHIn.js → ErrorAlert-BUlG32M9.js} +6 -6
- package/lib/{ErrorAlert-BqjbNHIn.js.map → ErrorAlert-BUlG32M9.js.map} +1 -1
- package/lib/{MdxPage-CVFatbHw.js → MdxPage-Bjf72BP3.js} +7 -7
- package/lib/{MdxPage-CVFatbHw.js.map → MdxPage-Bjf72BP3.js.map} +1 -1
- package/lib/{Mermaid-CIFixY6C.js → Mermaid-D_VSX7_Q.js} +3 -3
- package/lib/{Mermaid-CIFixY6C.js.map → Mermaid-D_VSX7_Q.js.map} +1 -1
- package/lib/{OAuthErrorPage-Dup79DJk.js → OAuthErrorPage-1Ekji0PK.js} +6 -6
- package/lib/{OAuthErrorPage-Dup79DJk.js.map → OAuthErrorPage-1Ekji0PK.js.map} +1 -1
- package/lib/{OasProvider-BJeMq29o.js → OasProvider-BZxmTyMM.js} +3 -3
- package/lib/{OasProvider-BJeMq29o.js.map → OasProvider-BZxmTyMM.js.map} +1 -1
- package/lib/{OperationList-ff3ZvQsO.js → OperationList-B7nPIFB8.js} +329 -348
- package/lib/OperationList-B7nPIFB8.js.map +1 -0
- package/lib/{RouteGuard-BXy13JSz.js → RouteGuard-9wjejsKm.js} +3 -3
- package/lib/{RouteGuard-BXy13JSz.js.map → RouteGuard-9wjejsKm.js.map} +1 -1
- package/lib/{RouterError-CKOZTsDD.js → RouterError-DfTZblpv.js} +2 -2
- package/lib/{RouterError-CKOZTsDD.js.map → RouterError-DfTZblpv.js.map} +1 -1
- package/lib/{SchemaList-BSC1KM3v.js → SchemaList-16_obkku.js} +7 -7
- package/lib/{SchemaList-BSC1KM3v.js.map → SchemaList-16_obkku.js.map} +1 -1
- package/lib/{SchemaView-CgwJ9gtb.js → SchemaView-eyvR4bRt.js} +3 -3
- package/lib/{SchemaView-CgwJ9gtb.js.map → SchemaView-eyvR4bRt.js.map} +1 -1
- package/lib/Select-CkxXP5I7.js +243 -0
- package/lib/Select-CkxXP5I7.js.map +1 -0
- package/lib/Separator-CTPSeW1S.js +27 -0
- package/lib/Separator-CTPSeW1S.js.map +1 -0
- package/lib/{SignUp-Pm_LGm6T.js → SignUp-D54_QWFy.js} +3 -3
- package/lib/{SignUp-Pm_LGm6T.js.map → SignUp-D54_QWFy.js.map} +1 -1
- package/lib/{SyntaxHighlight-bkmst3oV.js → SyntaxHighlight-j_HRSPCU.js} +1508 -1492
- package/lib/SyntaxHighlight-j_HRSPCU.js.map +1 -0
- package/lib/{Toc-TUXNFbKl.js → Toc-z05x698-.js} +2 -2
- package/lib/{Toc-TUXNFbKl.js.map → Toc-z05x698-.js.map} +1 -1
- package/lib/{ZudokuContext-np1wheDl.js → ZudokuContext-BXldanA8.js} +5 -5
- package/lib/{ZudokuContext-np1wheDl.js.map → ZudokuContext-BXldanA8.js.map} +1 -1
- package/lib/chunk-PVWAREVJ-dLIqswPy.js.map +1 -1
- package/lib/{circular-XPj_dwqA.js → circular-D5sYCIWL.js} +2 -2
- package/lib/{circular-XPj_dwqA.js.map → circular-D5sYCIWL.js.map} +1 -1
- package/lib/{createServer-D01nCTNp.js → createServer-BlwU7lIr.js} +4 -4
- package/lib/{createServer-D01nCTNp.js.map → createServer-BlwU7lIr.js.map} +1 -1
- package/lib/createVariantComponent-B9_dVBvu.js +35 -0
- package/lib/createVariantComponent-B9_dVBvu.js.map +1 -0
- package/lib/{errors-B0hNTPFO.js → errors-BtC4Kn2j.js} +2 -2
- package/lib/{errors-B0hNTPFO.js.map → errors-BtC4Kn2j.js.map} +1 -1
- package/lib/firebase-Ibm_tv3G.js +7366 -0
- package/lib/firebase-Ibm_tv3G.js.map +1 -0
- package/lib/{hook-CvSwcbk6.js → hook-BNxidGQq.js} +2 -2
- package/lib/{hook-CvSwcbk6.js.map → hook-BNxidGQq.js.map} +1 -1
- package/lib/{index-Bjc_QsUR.js → index-CeVTNcfF.js} +452 -476
- package/lib/index-CeVTNcfF.js.map +1 -0
- package/lib/index-CrcNWbel.js.map +1 -1
- package/lib/{index-DnMgJWrI.js → index-Css56y3F.js} +3 -3
- package/lib/{index-DnMgJWrI.js.map → index-Css56y3F.js.map} +1 -1
- package/lib/{index-mfkNWYG-.js → index-DSOi7zVM.js} +5 -5
- package/lib/{index-mfkNWYG-.js.map → index-DSOi7zVM.js.map} +1 -1
- package/lib/{index-DscsS121.js → index-eKVhlB94.js} +2 -2
- package/lib/{index-DscsS121.js.map → index-eKVhlB94.js.map} +1 -1
- package/lib/index.esm-BYObtETB.js.map +1 -1
- package/lib/index.esm-BoKBnRoT.js +32 -0
- package/lib/index.esm-BoKBnRoT.js.map +1 -0
- package/lib/index.esm-DtzT_KoE.js.map +1 -1
- package/lib/jsx-runtime-BzflLqGi.js.map +1 -1
- package/lib/{mutation-BlmnL5qL.js → mutation-BoVlx8yA.js} +2 -2
- package/lib/{mutation-BlmnL5qL.js.map → mutation-BoVlx8yA.js.map} +1 -1
- package/lib/ui/Carousel.js.map +1 -1
- package/lib/ui/SyntaxHighlight.js +2 -2
- package/lib/useMutation-C6RqWmTS.js +97 -0
- package/lib/useMutation-C6RqWmTS.js.map +1 -0
- package/lib/zudoku.__internal.js +6 -6
- package/lib/zudoku.__internal.js.map +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-azureb2c.js +4 -4
- package/lib/zudoku.auth-clerk.js +2 -2
- package/lib/zudoku.auth-firebase.js +9 -0
- package/lib/zudoku.auth-firebase.js.map +1 -0
- package/lib/zudoku.auth-openid.js +4 -4
- package/lib/zudoku.auth-supabase.js +4 -4
- package/lib/zudoku.components.js +5 -5
- package/lib/zudoku.hooks.js +3 -3
- package/lib/zudoku.mermaid.js +3 -3
- package/lib/zudoku.plugin-api-catalog.js +4 -4
- package/lib/zudoku.plugin-api-keys.js +162 -178
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +2 -2
- package/lib/zudoku.plugin-search-pagefind.js +2 -2
- package/lib/zudoku.router.js.map +1 -1
- package/package.json +19 -15
- package/src/lib/authentication/ui/ZudokuAuthUi.tsx +11 -1
- package/lib/OperationList-ff3ZvQsO.js.map +0 -1
- package/lib/Select-VmDZ-nKe.js +0 -337
- package/lib/Select-VmDZ-nKe.js.map +0 -1
- package/lib/SyntaxHighlight-bkmst3oV.js.map +0 -1
- package/lib/index-Bjc_QsUR.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-Bjc_QsUR.js","sources":["../src/lib/plugins/openapi/client/GraphQLClient.tsx","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/jsutils/devAssert.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/jsutils/isObjectLike.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/jsutils/invariant.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/location.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/printLocation.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/error/GraphQLError.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/error/syntaxError.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/ast.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/characterClasses.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/blockString.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/tokenKind.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/lexer.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/jsutils/inspect.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/jsutils/instanceOf.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/language/source.mjs","../../../node_modules/.pnpm/graphql@16.12.0/node_modules/graphql/utilities/stripIgnoredCharacters.mjs","../src/lib/plugins/openapi/client/GraphQLContext.tsx","../src/lib/plugins/openapi/client/useCreateQuery.ts","../src/lib/plugins/openapi/graphql/graphql.ts","../src/lib/plugins/openapi/graphql/gql.ts","../src/lib/ui/Collapsible.tsx","../src/lib/util/os.ts","../src/lib/hooks/useHotkey.ts","../src/lib/plugins/openapi/state.ts","../src/lib/ui/Textarea.tsx","../src/lib/util/humanFileSize.ts","../src/lib/plugins/openapi/playground/CollapsibleHeader.tsx","../src/lib/plugins/openapi/playground/ExamplesDropdown.tsx","../src/lib/ui/Input.tsx","../src/lib/util/createVariantComponent.tsx","../src/lib/plugins/openapi/playground/ParamsGrid.tsx","../src/lib/ui/Checkbox.tsx","../src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx","../src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts","../src/lib/plugins/openapi/playground/BodyPanel.tsx","../src/lib/plugins/openapi/playground/createUrl.ts","../src/lib/plugins/openapi/playground/fileUtils.ts","../src/lib/ui/Popover.tsx","../src/lib/components/Autocomplete.tsx","../src/lib/plugins/openapi/playground/Headers.tsx","../src/lib/ui/Label.tsx","../src/lib/ui/RadioGroup.tsx","../src/lib/plugins/openapi/playground/IdentitySelector.tsx","../src/lib/plugins/openapi/playground/IdentityDialog.tsx","../src/lib/util/pastellize.ts","../src/lib/plugins/openapi/ColorizedParam.tsx","../src/lib/plugins/openapi/playground/PathParams.tsx","../src/lib/plugins/openapi/playground/QueryParams.tsx","../src/lib/plugins/openapi/playground/RequestLoginDialog.tsx","../src/lib/plugins/openapi/playground/rememberedIdentity.ts","../src/lib/components/PathRenderer.tsx","../src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx","../src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx","../src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx","../src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts","../src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx","../src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx","../src/lib/plugins/openapi/playground/useRememberSkipLoginDialog.tsx","../src/lib/plugins/openapi/playground/Playground.tsx","../src/lib/plugins/openapi/playground/PlaygroundDialog.tsx","../src/lib/plugins/openapi/util/methodColorMap.tsx","../src/lib/plugins/openapi/util/createNavigationCategory.tsx","../src/lib/plugins/openapi/context.tsx","../src/lib/plugins/openapi/util/getRoutes.tsx","../src/lib/plugins/openapi/index.tsx"],"sourcesContent":["import type { GraphQLError } from \"graphql/error/index.js\";\nimport { ZudokuError } from \"../../../util/invariant.js\";\nimport type { TypedDocumentString } from \"../graphql/graphql.js\";\nimport type { OpenApiPluginOptions } from \"../index.js\";\nimport type { LocalServer } from \"./createServer.js\";\n\nlet localServerPromise: Promise<LocalServer> | undefined;\n\ntype GraphQLResponse<TResult> = {\n errors?: GraphQLError[];\n data: TResult;\n};\n\nconst throwIfError = (response: GraphQLResponse<unknown>) => {\n if (!response.errors?.[0]) return;\n\n throw new ZudokuError(response.errors[0].message, {\n developerHint:\n \"Check your configuration value `apis.type` and `apis.input` in the Zudoku config.\",\n });\n};\n\nexport class GraphQLClient {\n constructor(private readonly config: OpenApiPluginOptions) {}\n\n #getLocalServer = async () => {\n if (!localServerPromise) {\n localServerPromise = import(\"./createServer.js\").then((m) =>\n m.createServer(this.config),\n );\n }\n return localServerPromise;\n };\n\n #executeFetch = async (init: RequestInit): Promise<Response> => {\n if (this.config.server) {\n return fetch(this.config.server, init);\n }\n\n const localServer = await this.#getLocalServer();\n return localServer.fetch(\"http://localhost/graphql\", init);\n };\n\n fetch = async <TResult, TVariables>(\n query: TypedDocumentString<TResult, TVariables>,\n variables?: TVariables,\n ): Promise<TResult> => {\n const operationName = query.match(/query (\\w+)/)?.[1];\n\n const response = await this.#executeFetch({\n method: \"POST\",\n body: JSON.stringify({ query, variables, operationName }),\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n\n const result = (await response.json()) as GraphQLResponse<TResult>;\n throwIfError(result);\n\n return result.data;\n };\n}\n","export function devAssert(condition, message) {\n const booleanCondition = Boolean(condition);\n\n if (!booleanCondition) {\n throw new Error(message);\n }\n}\n","/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport function isObjectLike(value) {\n return typeof value == 'object' && value !== null;\n}\n","export function invariant(condition, message) {\n const booleanCondition = Boolean(condition);\n\n if (!booleanCondition) {\n throw new Error(\n message != null ? message : 'Unexpected invariant triggered.',\n );\n }\n}\n","import { invariant } from '../jsutils/invariant.mjs';\nconst LineRegExp = /\\r\\n|[\\n\\r]/g;\n/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n let lastLineStart = 0;\n let line = 1;\n\n for (const match of source.body.matchAll(LineRegExp)) {\n typeof match.index === 'number' || invariant(false);\n\n if (match.index >= position) {\n break;\n }\n\n lastLineStart = match.index + match[0].length;\n line += 1;\n }\n\n return {\n line,\n column: position + 1 - lastLineStart,\n };\n}\n","import { getLocation } from './location.mjs';\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nexport function printLocation(location) {\n return printSourceLocation(\n location.source,\n getLocation(location.source, location.start),\n );\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printSourceLocation(source, sourceLocation) {\n const firstLineColumnOffset = source.locationOffset.column - 1;\n const body = ''.padStart(firstLineColumnOffset) + source.body;\n const lineIndex = sourceLocation.line - 1;\n const lineOffset = source.locationOffset.line - 1;\n const lineNum = sourceLocation.line + lineOffset;\n const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n const columnNum = sourceLocation.column + columnOffset;\n const locationStr = `${source.name}:${lineNum}:${columnNum}\\n`;\n const lines = body.split(/\\r\\n|[\\n\\r]/g);\n const locationLine = lines[lineIndex]; // Special case for minified documents\n\n if (locationLine.length > 120) {\n const subLineIndex = Math.floor(columnNum / 80);\n const subLineColumnNum = columnNum % 80;\n const subLines = [];\n\n for (let i = 0; i < locationLine.length; i += 80) {\n subLines.push(locationLine.slice(i, i + 80));\n }\n\n return (\n locationStr +\n printPrefixedLines([\n [`${lineNum} |`, subLines[0]],\n ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine]),\n ['|', '^'.padStart(subLineColumnNum)],\n ['|', subLines[subLineIndex + 1]],\n ])\n );\n }\n\n return (\n locationStr +\n printPrefixedLines([\n // Lines specified like this: [\"prefix\", \"string\"],\n [`${lineNum - 1} |`, lines[lineIndex - 1]],\n [`${lineNum} |`, locationLine],\n ['|', '^'.padStart(columnNum)],\n [`${lineNum + 1} |`, lines[lineIndex + 1]],\n ])\n );\n}\n\nfunction printPrefixedLines(lines) {\n const existingLines = lines.filter(([_, line]) => line !== undefined);\n const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length));\n return existingLines\n .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : ''))\n .join('\\n');\n}\n","import { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { getLocation } from '../language/location.mjs';\nimport {\n printLocation,\n printSourceLocation,\n} from '../language/printLocation.mjs';\n\nfunction toNormalizedOptions(args) {\n const firstArg = args[0];\n\n if (firstArg == null || 'kind' in firstArg || 'length' in firstArg) {\n return {\n nodes: firstArg,\n source: args[1],\n positions: args[2],\n path: args[3],\n originalError: args[4],\n extensions: args[5],\n };\n }\n\n return firstArg;\n}\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nexport class GraphQLError extends Error {\n /**\n * An array of `{ line, column }` locations within the source GraphQL document\n * which correspond to this error.\n *\n * Errors during validation often contain multiple locations, for example to\n * point out two things with the same name. Errors during execution include a\n * single location, the field which produced the error.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array describing the JSON-path into the execution response which\n * corresponds to this error. Only included for errors during execution.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array of GraphQL AST Nodes corresponding to this error.\n */\n\n /**\n * The source GraphQL document for the first location of this error.\n *\n * Note that if this Error represents more than one node, the source may not\n * represent nodes after the first node.\n */\n\n /**\n * An array of character offsets within the source GraphQL document\n * which correspond to this error.\n */\n\n /**\n * The original error thrown from a field resolver during execution.\n */\n\n /**\n * Extension fields to add to the formatted error.\n */\n\n /**\n * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead.\n */\n constructor(message, ...rawArgs) {\n var _this$nodes, _nodeLocations$, _ref;\n\n const { nodes, source, positions, path, originalError, extensions } =\n toNormalizedOptions(rawArgs);\n super(message);\n this.name = 'GraphQLError';\n this.path = path !== null && path !== void 0 ? path : undefined;\n this.originalError =\n originalError !== null && originalError !== void 0\n ? originalError\n : undefined; // Compute list of blame nodes.\n\n this.nodes = undefinedIfEmpty(\n Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined,\n );\n const nodeLocations = undefinedIfEmpty(\n (_this$nodes = this.nodes) === null || _this$nodes === void 0\n ? void 0\n : _this$nodes.map((node) => node.loc).filter((loc) => loc != null),\n ); // Compute locations in the source for the given nodes/positions.\n\n this.source =\n source !== null && source !== void 0\n ? source\n : nodeLocations === null || nodeLocations === void 0\n ? void 0\n : (_nodeLocations$ = nodeLocations[0]) === null ||\n _nodeLocations$ === void 0\n ? void 0\n : _nodeLocations$.source;\n this.positions =\n positions !== null && positions !== void 0\n ? positions\n : nodeLocations === null || nodeLocations === void 0\n ? void 0\n : nodeLocations.map((loc) => loc.start);\n this.locations =\n positions && source\n ? positions.map((pos) => getLocation(source, pos))\n : nodeLocations === null || nodeLocations === void 0\n ? void 0\n : nodeLocations.map((loc) => getLocation(loc.source, loc.start));\n const originalExtensions = isObjectLike(\n originalError === null || originalError === void 0\n ? void 0\n : originalError.extensions,\n )\n ? originalError === null || originalError === void 0\n ? void 0\n : originalError.extensions\n : undefined;\n this.extensions =\n (_ref =\n extensions !== null && extensions !== void 0\n ? extensions\n : originalExtensions) !== null && _ref !== void 0\n ? _ref\n : Object.create(null); // Only properties prescribed by the spec should be enumerable.\n // Keep the rest as non-enumerable.\n\n Object.defineProperties(this, {\n message: {\n writable: true,\n enumerable: true,\n },\n name: {\n enumerable: false,\n },\n nodes: {\n enumerable: false,\n },\n source: {\n enumerable: false,\n },\n positions: {\n enumerable: false,\n },\n originalError: {\n enumerable: false,\n },\n }); // Include (non-enumerable) stack trace.\n\n /* c8 ignore start */\n // FIXME: https://github.com/graphql/graphql-js/issues/2317\n\n if (\n originalError !== null &&\n originalError !== void 0 &&\n originalError.stack\n ) {\n Object.defineProperty(this, 'stack', {\n value: originalError.stack,\n writable: true,\n configurable: true,\n });\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GraphQLError);\n } else {\n Object.defineProperty(this, 'stack', {\n value: Error().stack,\n writable: true,\n configurable: true,\n });\n }\n /* c8 ignore stop */\n }\n\n get [Symbol.toStringTag]() {\n return 'GraphQLError';\n }\n\n toString() {\n let output = this.message;\n\n if (this.nodes) {\n for (const node of this.nodes) {\n if (node.loc) {\n output += '\\n\\n' + printLocation(node.loc);\n }\n }\n } else if (this.source && this.locations) {\n for (const location of this.locations) {\n output += '\\n\\n' + printSourceLocation(this.source, location);\n }\n }\n\n return output;\n }\n\n toJSON() {\n const formattedError = {\n message: this.message,\n };\n\n if (this.locations != null) {\n formattedError.locations = this.locations;\n }\n\n if (this.path != null) {\n formattedError.path = this.path;\n }\n\n if (this.extensions != null && Object.keys(this.extensions).length > 0) {\n formattedError.extensions = this.extensions;\n }\n\n return formattedError;\n }\n}\n\nfunction undefinedIfEmpty(array) {\n return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * See: https://spec.graphql.org/draft/#sec-Errors\n */\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n *\n * @deprecated Please use `error.toString` instead. Will be removed in v17\n */\nexport function printError(error) {\n return error.toString();\n}\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n *\n * @deprecated Please use `error.toJSON` instead. Will be removed in v17\n */\n\nexport function formatError(error) {\n return error.toJSON();\n}\n","import { GraphQLError } from './GraphQLError.mjs';\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n\nexport function syntaxError(source, position, description) {\n return new GraphQLError(`Syntax Error: ${description}`, {\n source,\n positions: [position],\n });\n}\n","/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport class Location {\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The Token at which this Node begins.\n */\n\n /**\n * The Token at which this Node ends.\n */\n\n /**\n * The Source document the AST represents.\n */\n constructor(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n }\n\n get [Symbol.toStringTag]() {\n return 'Location';\n }\n\n toJSON() {\n return {\n start: this.start,\n end: this.end,\n };\n }\n}\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport class Token {\n /**\n * The kind of Token.\n */\n\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The 1-indexed line number on which this Token appears.\n */\n\n /**\n * The 1-indexed column number at which this Token begins.\n */\n\n /**\n * For non-punctuation tokens, represents the interpreted value of the token.\n *\n * Note: is undefined for punctuation tokens, but typed as string for\n * convenience in the parser.\n */\n\n /**\n * Tokens exist as nodes in a double-linked-list amongst all tokens\n * including ignored tokens. <SOF> is always the first node and <EOF>\n * the last.\n */\n constructor(kind, start, end, line, column, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n this.value = value;\n this.prev = null;\n this.next = null;\n }\n\n get [Symbol.toStringTag]() {\n return 'Token';\n }\n\n toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column,\n };\n }\n}\n/**\n * The list of all possible AST node types.\n */\n\n/**\n * @internal\n */\nexport const QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: [\n 'description',\n 'name',\n 'variableDefinitions',\n 'directives',\n 'selectionSet',\n ],\n VariableDefinition: [\n 'description',\n 'variable',\n 'type',\n 'defaultValue',\n 'directives',\n ],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: [\n 'description',\n 'name', // Note: fragment variable definitions are deprecated and will removed in v17.0.0\n 'variableDefinitions',\n 'typeCondition',\n 'directives',\n 'selectionSet',\n ],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['description', 'directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: [\n 'description',\n 'name',\n 'interfaces',\n 'directives',\n 'fields',\n ],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: [\n 'description',\n 'name',\n 'type',\n 'defaultValue',\n 'directives',\n ],\n InterfaceTypeDefinition: [\n 'description',\n 'name',\n 'interfaces',\n 'directives',\n 'fields',\n ],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields'],\n TypeCoordinate: ['name'],\n MemberCoordinate: ['name', 'memberName'],\n ArgumentCoordinate: ['name', 'fieldName', 'argumentName'],\n DirectiveCoordinate: ['name'],\n DirectiveArgumentCoordinate: ['name', 'argumentName'],\n};\nconst kindValues = new Set(Object.keys(QueryDocumentKeys));\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n const maybeKind =\n maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;\n return typeof maybeKind === 'string' && kindValues.has(maybeKind);\n}\n/** Name */\n\nvar OperationTypeNode;\n\n(function (OperationTypeNode) {\n OperationTypeNode['QUERY'] = 'query';\n OperationTypeNode['MUTATION'] = 'mutation';\n OperationTypeNode['SUBSCRIPTION'] = 'subscription';\n})(OperationTypeNode || (OperationTypeNode = {}));\n\nexport { OperationTypeNode };\n","/**\n * ```\n * WhiteSpace ::\n * - \"Horizontal Tab (U+0009)\"\n * - \"Space (U+0020)\"\n * ```\n * @internal\n */\nexport function isWhiteSpace(code) {\n return code === 0x0009 || code === 0x0020;\n}\n/**\n * ```\n * Digit :: one of\n * - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * ```\n * @internal\n */\n\nexport function isDigit(code) {\n return code >= 0x0030 && code <= 0x0039;\n}\n/**\n * ```\n * Letter :: one of\n * - `A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`\n * - `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`\n * - `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`\n * - `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`\n * ```\n * @internal\n */\n\nexport function isLetter(code) {\n return (\n (code >= 0x0061 && code <= 0x007a) || // A-Z\n (code >= 0x0041 && code <= 0x005a) // a-z\n );\n}\n/**\n * ```\n * NameStart ::\n * - Letter\n * - `_`\n * ```\n * @internal\n */\n\nexport function isNameStart(code) {\n return isLetter(code) || code === 0x005f;\n}\n/**\n * ```\n * NameContinue ::\n * - Letter\n * - Digit\n * - `_`\n * ```\n * @internal\n */\n\nexport function isNameContinue(code) {\n return isLetter(code) || isDigit(code) || code === 0x005f;\n}\n","import { isWhiteSpace } from './characterClasses.mjs';\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\n\nexport function dedentBlockStringLines(lines) {\n var _firstNonEmptyLine2;\n\n let commonIndent = Number.MAX_SAFE_INTEGER;\n let firstNonEmptyLine = null;\n let lastNonEmptyLine = -1;\n\n for (let i = 0; i < lines.length; ++i) {\n var _firstNonEmptyLine;\n\n const line = lines[i];\n const indent = leadingWhitespace(line);\n\n if (indent === line.length) {\n continue; // skip empty lines\n }\n\n firstNonEmptyLine =\n (_firstNonEmptyLine = firstNonEmptyLine) !== null &&\n _firstNonEmptyLine !== void 0\n ? _firstNonEmptyLine\n : i;\n lastNonEmptyLine = i;\n\n if (i !== 0 && indent < commonIndent) {\n commonIndent = indent;\n }\n }\n\n return lines // Remove common indentation from all lines but first.\n .map((line, i) => (i === 0 ? line : line.slice(commonIndent))) // Remove leading and trailing blank lines.\n .slice(\n (_firstNonEmptyLine2 = firstNonEmptyLine) !== null &&\n _firstNonEmptyLine2 !== void 0\n ? _firstNonEmptyLine2\n : 0,\n lastNonEmptyLine + 1,\n );\n}\n\nfunction leadingWhitespace(str) {\n let i = 0;\n\n while (i < str.length && isWhiteSpace(str.charCodeAt(i))) {\n ++i;\n }\n\n return i;\n}\n/**\n * @internal\n */\n\nexport function isPrintableAsBlockString(value) {\n if (value === '') {\n return true; // empty string is printable\n }\n\n let isEmptyLine = true;\n let hasIndent = false;\n let hasCommonIndent = true;\n let seenNonEmptyLine = false;\n\n for (let i = 0; i < value.length; ++i) {\n switch (value.codePointAt(i)) {\n case 0x0000:\n case 0x0001:\n case 0x0002:\n case 0x0003:\n case 0x0004:\n case 0x0005:\n case 0x0006:\n case 0x0007:\n case 0x0008:\n case 0x000b:\n case 0x000c:\n case 0x000e:\n case 0x000f:\n return false;\n // Has non-printable characters\n\n case 0x000d:\n // \\r\n return false;\n // Has \\r or \\r\\n which will be replaced as \\n\n\n case 10:\n // \\n\n if (isEmptyLine && !seenNonEmptyLine) {\n return false; // Has leading new line\n }\n\n seenNonEmptyLine = true;\n isEmptyLine = true;\n hasIndent = false;\n break;\n\n case 9: // \\t\n\n case 32:\n // <space>\n hasIndent || (hasIndent = isEmptyLine);\n break;\n\n default:\n hasCommonIndent && (hasCommonIndent = hasIndent);\n isEmptyLine = false;\n }\n }\n\n if (isEmptyLine) {\n return false; // Has trailing empty lines\n }\n\n if (hasCommonIndent && seenNonEmptyLine) {\n return false; // Has internal indent\n }\n\n return true;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value, options) {\n const escapedValue = value.replace(/\"\"\"/g, '\\\\\"\"\"'); // Expand a block string's raw value into independent lines.\n\n const lines = escapedValue.split(/\\r\\n|[\\n\\r]/g);\n const isSingleLine = lines.length === 1; // If common indentation is found we can fix some of those cases by adding leading new line\n\n const forceLeadingNewLine =\n lines.length > 1 &&\n lines\n .slice(1)\n .every((line) => line.length === 0 || isWhiteSpace(line.charCodeAt(0))); // Trailing triple quotes just looks confusing but doesn't force trailing new line\n\n const hasTrailingTripleQuotes = escapedValue.endsWith('\\\\\"\"\"'); // Trailing quote (single or double) or slash forces trailing new line\n\n const hasTrailingQuote = value.endsWith('\"') && !hasTrailingTripleQuotes;\n const hasTrailingSlash = value.endsWith('\\\\');\n const forceTrailingNewline = hasTrailingQuote || hasTrailingSlash;\n const printAsMultipleLines =\n !(options !== null && options !== void 0 && options.minimize) && // add leading and trailing new lines only if it improves readability\n (!isSingleLine ||\n value.length > 70 ||\n forceTrailingNewline ||\n forceLeadingNewLine ||\n hasTrailingTripleQuotes);\n let result = ''; // Format a multi-line block quote to account for leading space.\n\n const skipLeadingNewLine = isSingleLine && isWhiteSpace(value.charCodeAt(0));\n\n if ((printAsMultipleLines && !skipLeadingNewLine) || forceLeadingNewLine) {\n result += '\\n';\n }\n\n result += escapedValue;\n\n if (printAsMultipleLines || forceTrailingNewline) {\n result += '\\n';\n }\n\n return '\"\"\"' + result + '\"\"\"';\n}\n","/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nvar TokenKind;\n\n(function (TokenKind) {\n TokenKind['SOF'] = '<SOF>';\n TokenKind['EOF'] = '<EOF>';\n TokenKind['BANG'] = '!';\n TokenKind['DOLLAR'] = '$';\n TokenKind['AMP'] = '&';\n TokenKind['PAREN_L'] = '(';\n TokenKind['PAREN_R'] = ')';\n TokenKind['DOT'] = '.';\n TokenKind['SPREAD'] = '...';\n TokenKind['COLON'] = ':';\n TokenKind['EQUALS'] = '=';\n TokenKind['AT'] = '@';\n TokenKind['BRACKET_L'] = '[';\n TokenKind['BRACKET_R'] = ']';\n TokenKind['BRACE_L'] = '{';\n TokenKind['PIPE'] = '|';\n TokenKind['BRACE_R'] = '}';\n TokenKind['NAME'] = 'Name';\n TokenKind['INT'] = 'Int';\n TokenKind['FLOAT'] = 'Float';\n TokenKind['STRING'] = 'String';\n TokenKind['BLOCK_STRING'] = 'BlockString';\n TokenKind['COMMENT'] = 'Comment';\n})(TokenKind || (TokenKind = {}));\n\nexport { TokenKind };\n/**\n * The enum type representing the token kinds values.\n *\n * @deprecated Please use `TokenKind`. Will be remove in v17.\n */\n","import { syntaxError } from '../error/syntaxError.mjs';\nimport { Token } from './ast.mjs';\nimport { dedentBlockStringLines } from './blockString.mjs';\nimport { isDigit, isNameContinue, isNameStart } from './characterClasses.mjs';\nimport { TokenKind } from './tokenKind.mjs';\n/**\n * A Lexer interface which provides common properties and methods required for\n * lexing GraphQL source.\n *\n * @internal\n */\n\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\nexport class Lexer {\n /**\n * The previously focused non-ignored token.\n */\n\n /**\n * The currently focused non-ignored token.\n */\n\n /**\n * The (1-indexed) line containing the current token.\n */\n\n /**\n * The character offset at which the current line begins.\n */\n constructor(source) {\n const startOfFileToken = new Token(TokenKind.SOF, 0, 0, 0, 0);\n this.source = source;\n this.lastToken = startOfFileToken;\n this.token = startOfFileToken;\n this.line = 1;\n this.lineStart = 0;\n }\n\n get [Symbol.toStringTag]() {\n return 'Lexer';\n }\n /**\n * Advances the token stream to the next non-ignored token.\n */\n\n advance() {\n this.lastToken = this.token;\n const token = (this.token = this.lookahead());\n return token;\n }\n /**\n * Looks ahead and returns the next non-ignored token, but does not change\n * the state of Lexer.\n */\n\n lookahead() {\n let token = this.token;\n\n if (token.kind !== TokenKind.EOF) {\n do {\n if (token.next) {\n token = token.next;\n } else {\n // Read the next token and form a link in the token linked-list.\n const nextToken = readNextToken(this, token.end); // @ts-expect-error next is only mutable during parsing.\n\n token.next = nextToken; // @ts-expect-error prev is only mutable during parsing.\n\n nextToken.prev = token;\n token = nextToken;\n }\n } while (token.kind === TokenKind.COMMENT);\n }\n\n return token;\n }\n}\n/**\n * @internal\n */\n\nexport function isPunctuatorTokenKind(kind) {\n return (\n kind === TokenKind.BANG ||\n kind === TokenKind.DOLLAR ||\n kind === TokenKind.AMP ||\n kind === TokenKind.PAREN_L ||\n kind === TokenKind.PAREN_R ||\n kind === TokenKind.DOT ||\n kind === TokenKind.SPREAD ||\n kind === TokenKind.COLON ||\n kind === TokenKind.EQUALS ||\n kind === TokenKind.AT ||\n kind === TokenKind.BRACKET_L ||\n kind === TokenKind.BRACKET_R ||\n kind === TokenKind.BRACE_L ||\n kind === TokenKind.PIPE ||\n kind === TokenKind.BRACE_R\n );\n}\n/**\n * A Unicode scalar value is any Unicode code point except surrogate code\n * points. In other words, the inclusive ranges of values 0x0000 to 0xD7FF and\n * 0xE000 to 0x10FFFF.\n *\n * SourceCharacter ::\n * - \"Any Unicode scalar value\"\n */\n\nfunction isUnicodeScalarValue(code) {\n return (\n (code >= 0x0000 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0x10ffff)\n );\n}\n/**\n * The GraphQL specification defines source text as a sequence of unicode scalar\n * values (which Unicode defines to exclude surrogate code points). However\n * JavaScript defines strings as a sequence of UTF-16 code units which may\n * include surrogates. A surrogate pair is a valid source character as it\n * encodes a supplementary code point (above U+FFFF), but unpaired surrogate\n * code points are not valid source characters.\n */\n\nfunction isSupplementaryCodePoint(body, location) {\n return (\n isLeadingSurrogate(body.charCodeAt(location)) &&\n isTrailingSurrogate(body.charCodeAt(location + 1))\n );\n}\n\nfunction isLeadingSurrogate(code) {\n return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction isTrailingSurrogate(code) {\n return code >= 0xdc00 && code <= 0xdfff;\n}\n/**\n * Prints the code point (or end of file reference) at a given location in a\n * source for use in error messages.\n *\n * Printable ASCII is printed quoted, while other points are printed in Unicode\n * code point form (ie. U+1234).\n *\n * @internal\n */\n\nexport function printCodePointAt(lexer, location) {\n const code = lexer.source.body.codePointAt(location);\n\n if (code === undefined) {\n return TokenKind.EOF;\n } else if (code >= 0x0020 && code <= 0x007e) {\n // Printable ASCII\n const char = String.fromCodePoint(code);\n return char === '\"' ? \"'\\\"'\" : `\"${char}\"`;\n } // Unicode code point\n\n return 'U+' + code.toString(16).toUpperCase().padStart(4, '0');\n}\n/**\n * Create a token with line and column location information.\n *\n * @internal\n */\n\nexport function createToken(lexer, kind, start, end, value) {\n const line = lexer.line;\n const col = 1 + start - lexer.lineStart;\n return new Token(kind, start, end, line, col, value);\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n */\n\nfunction readNextToken(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // SourceCharacter\n\n switch (code) {\n // Ignored ::\n // - UnicodeBOM\n // - WhiteSpace\n // - LineTerminator\n // - Comment\n // - Comma\n //\n // UnicodeBOM :: \"Byte Order Mark (U+FEFF)\"\n //\n // WhiteSpace ::\n // - \"Horizontal Tab (U+0009)\"\n // - \"Space (U+0020)\"\n //\n // Comma :: ,\n case 0xfeff: // <BOM>\n\n case 0x0009: // \\t\n\n case 0x0020: // <space>\n\n case 0x002c:\n // ,\n ++position;\n continue;\n // LineTerminator ::\n // - \"New Line (U+000A)\"\n // - \"Carriage Return (U+000D)\" [lookahead != \"New Line (U+000A)\"]\n // - \"Carriage Return (U+000D)\" \"New Line (U+000A)\"\n\n case 0x000a:\n // \\n\n ++position;\n ++lexer.line;\n lexer.lineStart = position;\n continue;\n\n case 0x000d:\n // \\r\n if (body.charCodeAt(position + 1) === 0x000a) {\n position += 2;\n } else {\n ++position;\n }\n\n ++lexer.line;\n lexer.lineStart = position;\n continue;\n // Comment\n\n case 0x0023:\n // #\n return readComment(lexer, position);\n // Token ::\n // - Punctuator\n // - Name\n // - IntValue\n // - FloatValue\n // - StringValue\n //\n // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | }\n\n case 0x0021:\n // !\n return createToken(lexer, TokenKind.BANG, position, position + 1);\n\n case 0x0024:\n // $\n return createToken(lexer, TokenKind.DOLLAR, position, position + 1);\n\n case 0x0026:\n // &\n return createToken(lexer, TokenKind.AMP, position, position + 1);\n\n case 0x0028:\n // (\n return createToken(lexer, TokenKind.PAREN_L, position, position + 1);\n\n case 0x0029:\n // )\n return createToken(lexer, TokenKind.PAREN_R, position, position + 1);\n\n case 0x002e:\n // .\n if (\n body.charCodeAt(position + 1) === 0x002e &&\n body.charCodeAt(position + 2) === 0x002e\n ) {\n return createToken(lexer, TokenKind.SPREAD, position, position + 3);\n }\n\n break;\n\n case 0x003a:\n // :\n return createToken(lexer, TokenKind.COLON, position, position + 1);\n\n case 0x003d:\n // =\n return createToken(lexer, TokenKind.EQUALS, position, position + 1);\n\n case 0x0040:\n // @\n return createToken(lexer, TokenKind.AT, position, position + 1);\n\n case 0x005b:\n // [\n return createToken(lexer, TokenKind.BRACKET_L, position, position + 1);\n\n case 0x005d:\n // ]\n return createToken(lexer, TokenKind.BRACKET_R, position, position + 1);\n\n case 0x007b:\n // {\n return createToken(lexer, TokenKind.BRACE_L, position, position + 1);\n\n case 0x007c:\n // |\n return createToken(lexer, TokenKind.PIPE, position, position + 1);\n\n case 0x007d:\n // }\n return createToken(lexer, TokenKind.BRACE_R, position, position + 1);\n // StringValue\n\n case 0x0022:\n // \"\n if (\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022\n ) {\n return readBlockString(lexer, position);\n }\n\n return readString(lexer, position);\n } // IntValue | FloatValue (Digit | -)\n\n if (isDigit(code) || code === 0x002d) {\n return readNumber(lexer, position, code);\n } // Name\n\n if (isNameStart(code)) {\n return readName(lexer, position);\n }\n\n throw syntaxError(\n lexer.source,\n position,\n code === 0x0027\n ? 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?'\n : isUnicodeScalarValue(code) || isSupplementaryCodePoint(body, position)\n ? `Unexpected character: ${printCodePointAt(lexer, position)}.`\n : `Invalid character: ${printCodePointAt(lexer, position)}.`,\n );\n }\n\n return createToken(lexer, TokenKind.EOF, bodyLength, bodyLength);\n}\n/**\n * Reads a comment token from the source file.\n *\n * ```\n * Comment :: # CommentChar* [lookahead != CommentChar]\n *\n * CommentChar :: SourceCharacter but not LineTerminator\n * ```\n */\n\nfunction readComment(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // LineTerminator (\\n | \\r)\n\n if (code === 0x000a || code === 0x000d) {\n break;\n } // SourceCharacter\n\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n break;\n }\n }\n\n return createToken(\n lexer,\n TokenKind.COMMENT,\n start,\n position,\n body.slice(start + 1, position),\n );\n}\n/**\n * Reads a number token from the source file, either a FloatValue or an IntValue\n * depending on whether a FractionalPart or ExponentPart is encountered.\n *\n * ```\n * IntValue :: IntegerPart [lookahead != {Digit, `.`, NameStart}]\n *\n * IntegerPart ::\n * - NegativeSign? 0\n * - NegativeSign? NonZeroDigit Digit*\n *\n * NegativeSign :: -\n *\n * NonZeroDigit :: Digit but not `0`\n *\n * FloatValue ::\n * - IntegerPart FractionalPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n * - IntegerPart FractionalPart [lookahead != {Digit, `.`, NameStart}]\n * - IntegerPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *\n * FractionalPart :: . Digit+\n *\n * ExponentPart :: ExponentIndicator Sign? Digit+\n *\n * ExponentIndicator :: one of `e` `E`\n *\n * Sign :: one of + -\n * ```\n */\n\nfunction readNumber(lexer, start, firstCode) {\n const body = lexer.source.body;\n let position = start;\n let code = firstCode;\n let isFloat = false; // NegativeSign (-)\n\n if (code === 0x002d) {\n code = body.charCodeAt(++position);\n } // Zero (0)\n\n if (code === 0x0030) {\n code = body.charCodeAt(++position);\n\n if (isDigit(code)) {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, unexpected digit after 0: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n } else {\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n } // Full stop (.)\n\n if (code === 0x002e) {\n isFloat = true;\n code = body.charCodeAt(++position);\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n } // E e\n\n if (code === 0x0045 || code === 0x0065) {\n isFloat = true;\n code = body.charCodeAt(++position); // + -\n\n if (code === 0x002b || code === 0x002d) {\n code = body.charCodeAt(++position);\n }\n\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n } // Numbers cannot be followed by . or NameStart\n\n if (code === 0x002e || isNameStart(code)) {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, expected digit but got: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n\n return createToken(\n lexer,\n isFloat ? TokenKind.FLOAT : TokenKind.INT,\n start,\n position,\n body.slice(start, position),\n );\n}\n/**\n * Returns the new position in the source after reading one or more digits.\n */\n\nfunction readDigits(lexer, start, firstCode) {\n if (!isDigit(firstCode)) {\n throw syntaxError(\n lexer.source,\n start,\n `Invalid number, expected digit but got: ${printCodePointAt(\n lexer,\n start,\n )}.`,\n );\n }\n\n const body = lexer.source.body;\n let position = start + 1; // +1 to skip first firstCode\n\n while (isDigit(body.charCodeAt(position))) {\n ++position;\n }\n\n return position;\n}\n/**\n * Reads a single-quote string token from the source file.\n *\n * ```\n * StringValue ::\n * - `\"\"` [lookahead != `\"`]\n * - `\"` StringCharacter+ `\"`\n *\n * StringCharacter ::\n * - SourceCharacter but not `\"` or `\\` or LineTerminator\n * - `\\u` EscapedUnicode\n * - `\\` EscapedCharacter\n *\n * EscapedUnicode ::\n * - `{` HexDigit+ `}`\n * - HexDigit HexDigit HexDigit HexDigit\n *\n * EscapedCharacter :: one of `\"` `\\` `/` `b` `f` `n` `r` `t`\n * ```\n */\n\nfunction readString(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n let chunkStart = position;\n let value = '';\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // Closing Quote (\")\n\n if (code === 0x0022) {\n value += body.slice(chunkStart, position);\n return createToken(lexer, TokenKind.STRING, start, position + 1, value);\n } // Escape Sequence (\\)\n\n if (code === 0x005c) {\n value += body.slice(chunkStart, position);\n const escape =\n body.charCodeAt(position + 1) === 0x0075 // u\n ? body.charCodeAt(position + 2) === 0x007b // {\n ? readEscapedUnicodeVariableWidth(lexer, position)\n : readEscapedUnicodeFixedWidth(lexer, position)\n : readEscapedCharacter(lexer, position);\n value += escape.value;\n position += escape.size;\n chunkStart = position;\n continue;\n } // LineTerminator (\\n | \\r)\n\n if (code === 0x000a || code === 0x000d) {\n break;\n } // SourceCharacter\n\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character within String: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n }\n\n throw syntaxError(lexer.source, position, 'Unterminated string.');\n} // The string value and lexed size of an escape sequence.\n\nfunction readEscapedUnicodeVariableWidth(lexer, position) {\n const body = lexer.source.body;\n let point = 0;\n let size = 3; // Cannot be larger than 12 chars (\\u{00000000}).\n\n while (size < 12) {\n const code = body.charCodeAt(position + size++); // Closing Brace (})\n\n if (code === 0x007d) {\n // Must be at least 5 chars (\\u{0}) and encode a Unicode scalar value.\n if (size < 5 || !isUnicodeScalarValue(point)) {\n break;\n }\n\n return {\n value: String.fromCodePoint(point),\n size,\n };\n } // Append this hex digit to the code point.\n\n point = (point << 4) | readHexDigit(code);\n\n if (point < 0) {\n break;\n }\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid Unicode escape sequence: \"${body.slice(\n position,\n position + size,\n )}\".`,\n );\n}\n\nfunction readEscapedUnicodeFixedWidth(lexer, position) {\n const body = lexer.source.body;\n const code = read16BitHexCode(body, position + 2);\n\n if (isUnicodeScalarValue(code)) {\n return {\n value: String.fromCodePoint(code),\n size: 6,\n };\n } // GraphQL allows JSON-style surrogate pair escape sequences, but only when\n // a valid pair is formed.\n\n if (isLeadingSurrogate(code)) {\n // \\u\n if (\n body.charCodeAt(position + 6) === 0x005c &&\n body.charCodeAt(position + 7) === 0x0075\n ) {\n const trailingCode = read16BitHexCode(body, position + 8);\n\n if (isTrailingSurrogate(trailingCode)) {\n // JavaScript defines strings as a sequence of UTF-16 code units and\n // encodes Unicode code points above U+FFFF using a surrogate pair of\n // code units. Since this is a surrogate pair escape sequence, just\n // include both codes into the JavaScript string value. Had JavaScript\n // not been internally based on UTF-16, then this surrogate pair would\n // be decoded to retrieve the supplementary code point.\n return {\n value: String.fromCodePoint(code, trailingCode),\n size: 12,\n };\n }\n }\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid Unicode escape sequence: \"${body.slice(position, position + 6)}\".`,\n );\n}\n/**\n * Reads four hexadecimal characters and returns the positive integer that 16bit\n * hexadecimal string represents. For example, \"000f\" will return 15, and \"dead\"\n * will return 57005.\n *\n * Returns a negative number if any char was not a valid hexadecimal digit.\n */\n\nfunction read16BitHexCode(body, position) {\n // readHexDigit() returns -1 on error. ORing a negative value with any other\n // value always produces a negative value.\n return (\n (readHexDigit(body.charCodeAt(position)) << 12) |\n (readHexDigit(body.charCodeAt(position + 1)) << 8) |\n (readHexDigit(body.charCodeAt(position + 2)) << 4) |\n readHexDigit(body.charCodeAt(position + 3))\n );\n}\n/**\n * Reads a hexadecimal character and returns its positive integer value (0-15).\n *\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 if the provided character code was not a valid hexadecimal digit.\n *\n * HexDigit :: one of\n * - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * - `A` `B` `C` `D` `E` `F`\n * - `a` `b` `c` `d` `e` `f`\n */\n\nfunction readHexDigit(code) {\n return code >= 0x0030 && code <= 0x0039 // 0-9\n ? code - 0x0030\n : code >= 0x0041 && code <= 0x0046 // A-F\n ? code - 0x0037\n : code >= 0x0061 && code <= 0x0066 // a-f\n ? code - 0x0057\n : -1;\n}\n/**\n * | Escaped Character | Code Point | Character Name |\n * | ----------------- | ---------- | ---------------------------- |\n * | `\"` | U+0022 | double quote |\n * | `\\` | U+005C | reverse solidus (back slash) |\n * | `/` | U+002F | solidus (forward slash) |\n * | `b` | U+0008 | backspace |\n * | `f` | U+000C | form feed |\n * | `n` | U+000A | line feed (new line) |\n * | `r` | U+000D | carriage return |\n * | `t` | U+0009 | horizontal tab |\n */\n\nfunction readEscapedCharacter(lexer, position) {\n const body = lexer.source.body;\n const code = body.charCodeAt(position + 1);\n\n switch (code) {\n case 0x0022:\n // \"\n return {\n value: '\\u0022',\n size: 2,\n };\n\n case 0x005c:\n // \\\n return {\n value: '\\u005c',\n size: 2,\n };\n\n case 0x002f:\n // /\n return {\n value: '\\u002f',\n size: 2,\n };\n\n case 0x0062:\n // b\n return {\n value: '\\u0008',\n size: 2,\n };\n\n case 0x0066:\n // f\n return {\n value: '\\u000c',\n size: 2,\n };\n\n case 0x006e:\n // n\n return {\n value: '\\u000a',\n size: 2,\n };\n\n case 0x0072:\n // r\n return {\n value: '\\u000d',\n size: 2,\n };\n\n case 0x0074:\n // t\n return {\n value: '\\u0009',\n size: 2,\n };\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character escape sequence: \"${body.slice(\n position,\n position + 2,\n )}\".`,\n );\n}\n/**\n * Reads a block string token from the source file.\n *\n * ```\n * StringValue ::\n * - `\"\"\"` BlockStringCharacter* `\"\"\"`\n *\n * BlockStringCharacter ::\n * - SourceCharacter but not `\"\"\"` or `\\\"\"\"`\n * - `\\\"\"\"`\n * ```\n */\n\nfunction readBlockString(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let lineStart = lexer.lineStart;\n let position = start + 3;\n let chunkStart = position;\n let currentLine = '';\n const blockLines = [];\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position); // Closing Triple-Quote (\"\"\")\n\n if (\n code === 0x0022 &&\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022\n ) {\n currentLine += body.slice(chunkStart, position);\n blockLines.push(currentLine);\n const token = createToken(\n lexer,\n TokenKind.BLOCK_STRING,\n start,\n position + 3, // Return a string of the lines joined with U+000A.\n dedentBlockStringLines(blockLines).join('\\n'),\n );\n lexer.line += blockLines.length - 1;\n lexer.lineStart = lineStart;\n return token;\n } // Escaped Triple-Quote (\\\"\"\")\n\n if (\n code === 0x005c &&\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022 &&\n body.charCodeAt(position + 3) === 0x0022\n ) {\n currentLine += body.slice(chunkStart, position);\n chunkStart = position + 1; // skip only slash\n\n position += 4;\n continue;\n } // LineTerminator\n\n if (code === 0x000a || code === 0x000d) {\n currentLine += body.slice(chunkStart, position);\n blockLines.push(currentLine);\n\n if (code === 0x000d && body.charCodeAt(position + 1) === 0x000a) {\n position += 2;\n } else {\n ++position;\n }\n\n currentLine = '';\n chunkStart = position;\n lineStart = position;\n continue;\n } // SourceCharacter\n\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character within String: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n }\n\n throw syntaxError(lexer.source, position, 'Unterminated string.');\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * ```\n * Name ::\n * - NameStart NameContinue* [lookahead != NameContinue]\n * ```\n *\n * @internal\n */\n\nexport function readName(lexer, start) {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n if (isNameContinue(code)) {\n ++position;\n } else {\n break;\n }\n }\n\n return createToken(\n lexer,\n TokenKind.NAME,\n start,\n position,\n body.slice(start, position),\n );\n}\n","const MAX_ARRAY_LENGTH = 10;\nconst MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport function inspect(value) {\n return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n switch (typeof value) {\n case 'string':\n return JSON.stringify(value);\n\n case 'function':\n return value.name ? `[function ${value.name}]` : '[function]';\n\n case 'object':\n return formatObjectValue(value, seenValues);\n\n default:\n return String(value);\n }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n if (value === null) {\n return 'null';\n }\n\n if (previouslySeenValues.includes(value)) {\n return '[Circular]';\n }\n\n const seenValues = [...previouslySeenValues, value];\n\n if (isJSONable(value)) {\n const jsonValue = value.toJSON(); // check for infinite recursion\n\n if (jsonValue !== value) {\n return typeof jsonValue === 'string'\n ? jsonValue\n : formatValue(jsonValue, seenValues);\n }\n } else if (Array.isArray(value)) {\n return formatArray(value, seenValues);\n }\n\n return formatObject(value, seenValues);\n}\n\nfunction isJSONable(value) {\n return typeof value.toJSON === 'function';\n}\n\nfunction formatObject(object, seenValues) {\n const entries = Object.entries(object);\n\n if (entries.length === 0) {\n return '{}';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[' + getObjectTag(object) + ']';\n }\n\n const properties = entries.map(\n ([key, value]) => key + ': ' + formatValue(value, seenValues),\n );\n return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n if (array.length === 0) {\n return '[]';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[Array]';\n }\n\n const len = Math.min(MAX_ARRAY_LENGTH, array.length);\n const remaining = array.length - len;\n const items = [];\n\n for (let i = 0; i < len; ++i) {\n items.push(formatValue(array[i], seenValues));\n }\n\n if (remaining === 1) {\n items.push('... 1 more item');\n } else if (remaining > 1) {\n items.push(`... ${remaining} more items`);\n }\n\n return '[' + items.join(', ') + ']';\n}\n\nfunction getObjectTag(object) {\n const tag = Object.prototype.toString\n .call(object)\n .replace(/^\\[object /, '')\n .replace(/]$/, '');\n\n if (tag === 'Object' && typeof object.constructor === 'function') {\n const name = object.constructor.name;\n\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n }\n\n return tag;\n}\n","import { inspect } from './inspect.mjs';\n/* c8 ignore next 3 */\n\nconst isProduction =\n globalThis.process && // eslint-disable-next-line no-undef\n process.env.NODE_ENV === 'production';\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n * See: https://webpack.js.org/guides/production/\n */\n\nexport const instanceOf =\n /* c8 ignore next 6 */\n // FIXME: https://github.com/graphql/graphql-js/issues/2317\n isProduction\n ? function instanceOf(value, constructor) {\n return value instanceof constructor;\n }\n : function instanceOf(value, constructor) {\n if (value instanceof constructor) {\n return true;\n }\n\n if (typeof value === 'object' && value !== null) {\n var _value$constructor;\n\n // Prefer Symbol.toStringTag since it is immune to minification.\n const className = constructor.prototype[Symbol.toStringTag];\n const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.\n Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009\n ? value[Symbol.toStringTag]\n : (_value$constructor = value.constructor) === null ||\n _value$constructor === void 0\n ? void 0\n : _value$constructor.name;\n\n if (className === valueClassName) {\n const stringifiedValue = inspect(value);\n throw new Error(`Cannot use ${className} \"${stringifiedValue}\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`);\n }\n }\n\n return false;\n };\n","import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\n\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nexport class Source {\n constructor(\n body,\n name = 'GraphQL request',\n locationOffset = {\n line: 1,\n column: 1,\n },\n ) {\n typeof body === 'string' ||\n devAssert(false, `Body must be a string. Received: ${inspect(body)}.`);\n this.body = body;\n this.name = name;\n this.locationOffset = locationOffset;\n this.locationOffset.line > 0 ||\n devAssert(\n false,\n 'line in locationOffset is 1-indexed and must be positive.',\n );\n this.locationOffset.column > 0 ||\n devAssert(\n false,\n 'column in locationOffset is 1-indexed and must be positive.',\n );\n }\n\n get [Symbol.toStringTag]() {\n return 'Source';\n }\n}\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\n\nexport function isSource(source) {\n return instanceOf(source, Source);\n}\n","import { printBlockString } from '../language/blockString.mjs';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.mjs';\nimport { isSource, Source } from '../language/source.mjs';\nimport { TokenKind } from '../language/tokenKind.mjs';\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n *\n * Query example:\n *\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n *\n * SDL example:\n *\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n */\n\nexport function stripIgnoredCharacters(source) {\n const sourceObj = isSource(source) ? source : new Source(source);\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n let wasLastAddedTokenNonPunctuator = false;\n\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n */\n\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, {\n minimize: true,\n });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n","import { createContext, type ReactNode } from \"react\";\nimport type { GraphQLClient } from \"./GraphQLClient.js\";\n\nexport const GraphQLContext = createContext<GraphQLClient | undefined>(\n undefined,\n);\n\nexport const GraphQLProvider = ({\n children,\n client,\n}: {\n children: ReactNode;\n client: GraphQLClient;\n}) => (\n <GraphQLContext.Provider value={client}>{children}</GraphQLContext.Provider>\n);\n","import { stripIgnoredCharacters } from \"graphql\";\nimport { use } from \"react\";\nimport type { TypedDocumentString } from \"../graphql/graphql.js\";\nimport type { GraphQLClient } from \"./GraphQLClient.js\";\nimport { GraphQLContext } from \"./GraphQLContext.js\";\n\ntype NoExtraProps<T, U extends T = T> = U & {\n [K in Exclude<keyof U, keyof T>]?: never;\n};\n\ntype VarArgs<TVariables> = TVariables extends Record<string, never>\n ? []\n : [NoExtraProps<TVariables>];\n\nexport const createQuery = <TResult, TVariables>(\n client: GraphQLClient,\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never>\n ? []\n : [NoExtraProps<TVariables>]\n) => {\n return {\n queryFn: () => client.fetch(query, variables),\n queryKey: [stripIgnoredCharacters(query.toString()), variables],\n } as const;\n};\n\nexport const useCreateQuery = <TResult, TVariables>(\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never>\n ? []\n : [NoExtraProps<TVariables>]\n) => {\n const graphQLClient = use(GraphQLContext);\n\n if (graphQLClient === undefined) {\n throw new Error(\"useGraphQL must be used within a GraphQLProvider\");\n }\n\n const args =\n variables === undefined\n ? ([] as VarArgs<TVariables>)\n : ([variables] as VarArgs<TVariables>);\n\n return createQuery(graphQLClient, query, ...args);\n};\n","/* eslint-disable */\nimport type { DocumentTypeDecoration } from \"@graphql-typed-document-node/core\";\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = T | null | undefined;\nexport type Exact<T extends { [key: string]: unknown }> = {\n [K in keyof T]: T[K];\n};\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]?: Maybe<T[SubKey]>;\n};\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]: Maybe<T[SubKey]>;\n};\nexport type MakeEmpty<\n T extends { [key: string]: unknown },\n K extends keyof T,\n> = { [_ in K]?: never };\nexport type Incremental<T> =\n | T\n | {\n [P in keyof T]?: P extends \" $fragmentName\" | \"__typename\" ? T[P] : never;\n };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string };\n String: { input: string; output: string };\n Boolean: { input: boolean; output: boolean };\n Int: { input: number; output: number };\n Float: { input: number; output: number };\n /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSON: { input: any; output: any };\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSONObject: { input: any; output: any };\n /** OpenAPI schema scalar type that handles circular references */\n JSONSchema: { input: any; output: any };\n};\n\nexport type Components = {\n __typename?: \"Components\";\n schemas?: Maybe<Array<SchemaItem>>;\n};\n\nexport type EncodingItem = {\n __typename?: \"EncodingItem\";\n allowReserved?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n contentType?: Maybe<Scalars[\"String\"][\"output\"]>;\n explode?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n headers?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n style?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type ExampleItem = {\n __typename?: \"ExampleItem\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n externalValue?: Maybe<Scalars[\"String\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n value?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n};\n\nexport type MediaTypeObject = {\n __typename?: \"MediaTypeObject\";\n encoding?: Maybe<Array<EncodingItem>>;\n examples?: Maybe<Array<ExampleItem>>;\n mediaType: Scalars[\"String\"][\"output\"];\n schema?: Maybe<Scalars[\"JSONSchema\"][\"output\"]>;\n};\n\nexport type OperationItem = {\n __typename?: \"OperationItem\";\n contentTypes: Array<Scalars[\"String\"][\"output\"]>;\n deprecated?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n method: Scalars[\"String\"][\"output\"];\n operationId?: Maybe<Scalars[\"String\"][\"output\"]>;\n parameters?: Maybe<Array<ParameterItem>>;\n path: Scalars[\"String\"][\"output\"];\n requestBody?: Maybe<RequestBodyObject>;\n responses: Array<ResponseItem>;\n servers: Array<Server>;\n slug: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n tags?: Maybe<Array<TagItem>>;\n};\n\nexport type ParameterIn = \"cookie\" | \"header\" | \"path\" | \"query\";\n\nexport type ParameterItem = {\n __typename?: \"ParameterItem\";\n allowEmptyValue?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n allowReserved?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n deprecated?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n examples?: Maybe<Array<ExampleItem>>;\n explode?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n in: ParameterIn;\n name: Scalars[\"String\"][\"output\"];\n required?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n schema?: Maybe<Scalars[\"JSONSchema\"][\"output\"]>;\n style?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type PathItem = {\n __typename?: \"PathItem\";\n methods: Array<Scalars[\"String\"][\"output\"]>;\n path: Scalars[\"String\"][\"output\"];\n};\n\nexport type Query = {\n __typename?: \"Query\";\n schema: Schema;\n};\n\nexport type QuerySchemaArgs = {\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n};\n\nexport type RequestBodyObject = {\n __typename?: \"RequestBodyObject\";\n content?: Maybe<Array<MediaTypeObject>>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n required?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n};\n\nexport type ResponseItem = {\n __typename?: \"ResponseItem\";\n content?: Maybe<Array<MediaTypeObject>>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n headers?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n links?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n statusCode: Scalars[\"String\"][\"output\"];\n};\n\nexport type Schema = {\n __typename?: \"Schema\";\n components?: Maybe<Components>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n openapi: Scalars[\"String\"][\"output\"];\n operations: Array<OperationItem>;\n paths: Array<PathItem>;\n servers: Array<Server>;\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n tag?: Maybe<SchemaTag>;\n tags: Array<SchemaTag>;\n title: Scalars[\"String\"][\"output\"];\n url?: Maybe<Scalars[\"String\"][\"output\"]>;\n version: Scalars[\"String\"][\"output\"];\n};\n\nexport type SchemaOperationsArgs = {\n method?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n operationId?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n path?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n tag?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n};\n\nexport type SchemaTagArgs = {\n name?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n slug?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n};\n\nexport type SchemaItem = {\n __typename?: \"SchemaItem\";\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n schema: Scalars[\"JSONSchema\"][\"output\"];\n};\n\nexport type SchemaTag = {\n __typename?: \"SchemaTag\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n isUntagged: Scalars[\"Boolean\"][\"output\"];\n name?: Maybe<Scalars[\"String\"][\"output\"]>;\n next?: Maybe<SchemaTag>;\n operations: Array<OperationItem>;\n prev?: Maybe<SchemaTag>;\n slug?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type SchemaType = \"file\" | \"raw\" | \"url\";\n\nexport type Server = {\n __typename?: \"Server\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n url: Scalars[\"String\"][\"output\"];\n};\n\nexport type TagItem = {\n __typename?: \"TagItem\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n extensions?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n};\n\nexport type ServersQueryQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type ServersQueryQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url?: string | null;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n };\n};\n\nexport type OperationsFragmentFragment = {\n __typename?: \"OperationItem\";\n slug: string;\n summary?: string | null;\n method: string;\n description?: string | null;\n operationId?: string | null;\n contentTypes: Array<string>;\n path: string;\n deprecated?: boolean | null;\n extensions?: any | null;\n servers: Array<{\n __typename?: \"Server\";\n url: string;\n description?: string | null;\n }>;\n parameters?: Array<{\n __typename?: \"ParameterItem\";\n name: string;\n in: ParameterIn;\n description?: string | null;\n required?: boolean | null;\n schema?: any | null;\n style?: string | null;\n explode?: boolean | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n }> | null;\n requestBody?: {\n __typename?: \"RequestBodyObject\";\n description?: string | null;\n required?: boolean | null;\n content?: Array<{\n __typename?: \"MediaTypeObject\";\n mediaType: string;\n schema?: any | null;\n encoding?: Array<{ __typename?: \"EncodingItem\"; name: string }> | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n }> | null;\n } | null;\n responses: Array<{\n __typename?: \"ResponseItem\";\n statusCode: string;\n links?: any | null;\n description?: string | null;\n content?: Array<{\n __typename?: \"MediaTypeObject\";\n mediaType: string;\n schema?: any | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n encoding?: Array<{ __typename?: \"EncodingItem\"; name: string }> | null;\n }> | null;\n }>;\n} & { \" $fragmentName\"?: \"OperationsFragmentFragment\" };\n\nexport type SchemaWarmupQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type SchemaWarmupQuery = {\n __typename?: \"Query\";\n schema: { __typename?: \"Schema\"; openapi: string };\n};\n\nexport type OperationsForTagQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n tag?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n untagged?: InputMaybe<Scalars[\"Boolean\"][\"input\"]>;\n}>;\n\nexport type OperationsForTagQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n description?: string | null;\n summary?: string | null;\n title: string;\n url?: string | null;\n version: string;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n tag?: {\n __typename?: \"SchemaTag\";\n name?: string | null;\n description?: string | null;\n extensions?: any | null;\n operations: Array<\n { __typename?: \"OperationItem\"; slug: string } & {\n \" $fragmentRefs\"?: {\n OperationsFragmentFragment: OperationsFragmentFragment;\n };\n }\n >;\n next?: {\n __typename?: \"SchemaTag\";\n name?: string | null;\n slug?: string | null;\n extensions?: any | null;\n } | null;\n prev?: {\n __typename?: \"SchemaTag\";\n name?: string | null;\n slug?: string | null;\n extensions?: any | null;\n } | null;\n } | null;\n };\n};\n\nexport type GetSchemasQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetSchemasQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n title: string;\n description?: string | null;\n summary?: string | null;\n components?: {\n __typename?: \"Components\";\n schemas?: Array<{\n __typename?: \"SchemaItem\";\n name: string;\n schema: any;\n extensions?: any | null;\n }> | null;\n } | null;\n };\n};\n\nexport type GetServerQueryQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetServerQueryQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url?: string | null;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n };\n};\n\nexport type GetNavigationOperationsQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetNavigationOperationsQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n extensions?: any | null;\n tags: Array<{\n __typename?: \"SchemaTag\";\n slug?: string | null;\n name?: string | null;\n extensions?: any | null;\n operations: Array<{\n __typename?: \"OperationItem\";\n summary?: string | null;\n slug: string;\n method: string;\n operationId?: string | null;\n path: string;\n }>;\n }>;\n components?: {\n __typename?: \"Components\";\n schemas?: Array<{ __typename: \"SchemaItem\" }> | null;\n } | null;\n };\n};\n\nexport class TypedDocumentString<TResult, TVariables>\n extends String\n implements DocumentTypeDecoration<TResult, TVariables>\n{\n __apiType?: NonNullable<\n DocumentTypeDecoration<TResult, TVariables>[\"__apiType\"]\n >;\n private value: string;\n public __meta__?: Record<string, any> | undefined;\n\n constructor(value: string, __meta__?: Record<string, any> | undefined) {\n super(value);\n this.value = value;\n this.__meta__ = __meta__;\n }\n\n override toString(): string & DocumentTypeDecoration<TResult, TVariables> {\n return this.value;\n }\n}\nexport const OperationsFragmentFragmentDoc = new TypedDocumentString(\n `\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n deprecated\n extensions\n servers {\n url\n description\n }\n parameters {\n name\n in\n description\n required\n schema\n style\n explode\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n}\n `,\n { fragmentName: \"OperationsFragment\" },\n) as unknown as TypedDocumentString<OperationsFragmentFragment, unknown>;\nexport const ServersQueryDocument = new TypedDocumentString(`\n query ServersQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n}\n `) as unknown as TypedDocumentString<\n ServersQueryQuery,\n ServersQueryQueryVariables\n>;\nexport const SchemaWarmupDocument = new TypedDocumentString(`\n query SchemaWarmup($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n openapi\n }\n}\n `) as unknown as TypedDocumentString<\n SchemaWarmupQuery,\n SchemaWarmupQueryVariables\n>;\nexport const OperationsForTagDocument = new TypedDocumentString(`\n query OperationsForTag($input: JSON!, $type: SchemaType!, $tag: String, $untagged: Boolean) {\n schema(input: $input, type: $type) {\n servers {\n url\n }\n description\n summary\n title\n url\n version\n tag(slug: $tag, untagged: $untagged) {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n extensions\n next {\n name\n slug\n extensions\n }\n prev {\n name\n slug\n extensions\n }\n }\n }\n}\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n deprecated\n extensions\n servers {\n url\n description\n }\n parameters {\n name\n in\n description\n required\n schema\n style\n explode\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n}`) as unknown as TypedDocumentString<\n OperationsForTagQuery,\n OperationsForTagQueryVariables\n>;\nexport const GetSchemasDocument = new TypedDocumentString(`\n query GetSchemas($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n title\n description\n summary\n components {\n schemas {\n name\n schema\n extensions\n }\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetSchemasQuery,\n GetSchemasQueryVariables\n>;\nexport const GetServerQueryDocument = new TypedDocumentString(`\n query getServerQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetServerQueryQuery,\n GetServerQueryQueryVariables\n>;\nexport const GetNavigationOperationsDocument = new TypedDocumentString(`\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n extensions\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetNavigationOperationsQuery,\n GetNavigationOperationsQueryVariables\n>;\n","/* eslint-disable */\nimport * as types from \"./graphql.js\";\n\n/**\n * Map of all GraphQL operations in the project.\n *\n * This map has several performance disadvantages:\n * 1. It is not tree-shakeable, so it will include all operations in the project.\n * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle.\n * 3. It does not support dead code elimination, so it will add unused operations.\n *\n * Therefore it is highly recommended to use the babel or swc plugin for production.\n * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size\n */\ntype Documents = {\n \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\": typeof types.ServersQueryDocument;\n \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n deprecated\\n extensions\\n servers {\\n url\\n description\\n }\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n explode\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\": typeof types.OperationsFragmentFragmentDoc;\n \"\\n query SchemaWarmup($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n openapi\\n }\\n }\\n\": typeof types.SchemaWarmupDocument;\n \"\\n query OperationsForTag(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n servers {\\n url\\n }\\n description\\n summary\\n title\\n url\\n version\\n tag(slug: $tag, untagged: $untagged) {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n extensions\\n next {\\n name\\n slug\\n extensions\\n }\\n prev {\\n name\\n slug\\n extensions\\n }\\n }\\n }\\n }\\n\": typeof types.OperationsForTagDocument;\n \"\\n query GetSchemas($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n title\\n description\\n summary\\n components {\\n schemas {\\n name\\n schema\\n extensions\\n }\\n }\\n }\\n }\\n\": typeof types.GetSchemasDocument;\n \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\": typeof types.GetServerQueryDocument;\n \"\\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n extensions\\n tags {\\n slug\\n name\\n extensions\\n operations {\\n summary\\n slug\\n method\\n operationId\\n path\\n }\\n }\\n components {\\n schemas {\\n __typename\\n }\\n }\\n }\\n }\\n\": typeof types.GetNavigationOperationsDocument;\n};\nconst documents: Documents = {\n \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\":\n types.ServersQueryDocument,\n \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n deprecated\\n extensions\\n servers {\\n url\\n description\\n }\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n explode\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\":\n types.OperationsFragmentFragmentDoc,\n \"\\n query SchemaWarmup($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n openapi\\n }\\n }\\n\":\n types.SchemaWarmupDocument,\n \"\\n query OperationsForTag(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n servers {\\n url\\n }\\n description\\n summary\\n title\\n url\\n version\\n tag(slug: $tag, untagged: $untagged) {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n extensions\\n next {\\n name\\n slug\\n extensions\\n }\\n prev {\\n name\\n slug\\n extensions\\n }\\n }\\n }\\n }\\n\":\n types.OperationsForTagDocument,\n \"\\n query GetSchemas($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n title\\n description\\n summary\\n components {\\n schemas {\\n name\\n schema\\n extensions\\n }\\n }\\n }\\n }\\n\":\n types.GetSchemasDocument,\n \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\":\n types.GetServerQueryDocument,\n \"\\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n extensions\\n tags {\\n slug\\n name\\n extensions\\n operations {\\n summary\\n slug\\n method\\n operationId\\n path\\n }\\n }\\n components {\\n schemas {\\n __typename\\n }\\n }\\n }\\n }\\n\":\n types.GetNavigationOperationsDocument,\n};\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").ServersQueryDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n deprecated\\n extensions\\n servers {\\n url\\n description\\n }\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n explode\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").OperationsFragmentFragmentDoc;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query SchemaWarmup($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n openapi\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").SchemaWarmupDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query OperationsForTag(\\n $input: JSON!\\n $type: SchemaType!\\n $tag: String\\n $untagged: Boolean\\n ) {\\n schema(input: $input, type: $type) {\\n servers {\\n url\\n }\\n description\\n summary\\n title\\n url\\n version\\n tag(slug: $tag, untagged: $untagged) {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n extensions\\n next {\\n name\\n slug\\n extensions\\n }\\n prev {\\n name\\n slug\\n extensions\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").OperationsForTagDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query GetSchemas($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n title\\n description\\n summary\\n components {\\n schemas {\\n name\\n schema\\n extensions\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetSchemasDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetServerQueryDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n extensions\\n tags {\\n slug\\n name\\n extensions\\n operations {\\n summary\\n slug\\n method\\n operationId\\n path\\n }\\n }\\n components {\\n schemas {\\n __typename\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetNavigationOperationsDocument;\n\nexport function graphql(source: string) {\n return (documents as any)[source] ?? {};\n}\n","import * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n );\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n );\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","export function getOS(): \"apple\" | \"linux\" | \"unix\" | \"windows\" | undefined {\n const notFound = -1;\n const userAgent = navigator.userAgent.toLowerCase();\n if (userAgent.indexOf(\"win\") !== notFound) {\n return \"windows\";\n } else if (userAgent.indexOf(\"mac\") !== notFound) {\n return \"apple\";\n } else if (userAgent.indexOf(\"linux\") !== notFound) {\n return \"linux\";\n } else if (userAgent.indexOf(\"x11\") !== notFound) {\n return \"unix\";\n }\n return;\n}\n\nexport function isAppleDevice(): boolean {\n return getOS() === \"apple\";\n}\n","import { useEffect, useRef } from \"react\";\nimport { isAppleDevice } from \"../util/os.js\";\n\nconst keymap = {\n other: {\n alt: \"Alt\",\n meta: \"Ctrl\",\n ctrl: \"Ctrl\",\n shift: \"⇧\",\n option: \"Alt\",\n },\n apple: {\n alt: \"⌥\",\n meta: \"⌘\",\n ctrl: \"Ctrl\",\n shift: \"⇧\",\n option: \"⌥\",\n },\n};\n\nexport const useHotkey = (hotkey: string, callback: () => void) => {\n const hotkeySanitized = hotkey.toLowerCase().split(\"+\");\n const meta = hotkeySanitized.includes(\"meta\");\n const shift = hotkeySanitized.includes(\"shift\");\n const alt =\n hotkeySanitized.includes(\"option\") || hotkeySanitized.includes(\"alt\");\n const ctrl = hotkeySanitized.includes(\"ctrl\");\n\n const key = hotkey.split(\"+\").pop();\n\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n if (\n (event.code === `Key${key?.toUpperCase()}` ||\n event.code.toLowerCase() === key?.toLowerCase()) &&\n event.metaKey === meta &&\n event.shiftKey === shift &&\n event.altKey === alt &&\n event.ctrlKey === ctrl\n ) {\n event.preventDefault();\n callbackRef.current();\n }\n };\n\n window.addEventListener(\"keydown\", handler);\n return () => {\n window.removeEventListener(\"keydown\", handler);\n };\n }, [key, meta, shift, alt, ctrl]);\n\n return {\n trigger: () => callbackRef.current(),\n label: hotkeySanitized.map((key: string) =>\n key === \"meta\" ||\n key === \"ctrl\" ||\n key === \"alt\" ||\n key === \"shift\" ||\n key === \"option\"\n ? keymap[isAppleDevice() ? \"apple\" : \"other\"][key]\n : key,\n ),\n };\n};\n","import { useMemo } from \"react\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\ninterface SelectedServerState {\n selectedServer?: string;\n setSelectedServer: (newServer: string) => void;\n}\n\nexport const useSelectedServerStore = create<SelectedServerState>()(\n persist(\n (set) => ({\n selectedServer: undefined,\n setSelectedServer: (newServer: string) =>\n set({ selectedServer: newServer }),\n }),\n { name: \"zudoku-selected-server\" },\n ),\n);\n\n/**\n * Simple wrapper for `useSelectedServerStore` to fall back to first of the provided servers\n */\nexport const useSelectedServer = (servers: Array<{ url: string }>) => {\n const { selectedServer, setSelectedServer } = useSelectedServerStore();\n\n const finalSelectedServer = useMemo(\n () =>\n selectedServer && servers.some((s) => s.url === selectedServer)\n ? selectedServer\n : (servers.at(0)?.url ?? \"\"),\n [selectedServer, servers],\n );\n\n return { selectedServer: finalSelectedServer, setSelectedServer };\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","/**\n * Converts a number of bytes to a human-readable file size string\n * @param bytes - The number of bytes (defaults to 0)\n * @returns A formatted string like \"1.23 MB\" or \"456 B\"\n */\nexport const humanFileSize = (bytes = 0) => {\n if (bytes === 0) {\n return \"0 B\";\n }\n\n const exponent = Math.floor(Math.log(bytes) / Math.log(1000.0));\n const decimal = (bytes / 1000.0 ** exponent).toFixed(exponent ? 2 : 0);\n\n return `${decimal} ${exponent ? `${\"kMGTPEZY\"[exponent - 1]}B` : \"B\"}`;\n};\n","import { ChevronsDownUpIcon, ChevronsUpDownIcon } from \"lucide-react\";\nimport { CollapsibleTrigger } from \"zudoku/ui/Collapsible.js\";\nimport { cn } from \"../../../util/cn.js\";\n\nexport const CollapsibleHeaderTrigger = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n \"grid grid-cols-[max-content_1fr_max-content] items-center gap-2 group bg-muted w-full h-10 ps-4 pe-2 border-b\",\n className,\n )}\n >\n {children}\n <CollapsibleTrigger\n className={cn(\n \"flex items-center gap-4 group bg-muted w-full p-2 hover:bg-accent hover:brightness-95 opacity-75 rounded-md\",\n className,\n )}\n >\n <ChevronsDownUpIcon\n className=\"group-data-[state=closed]:hidden shrink-0\"\n size={14}\n />\n <ChevronsUpDownIcon\n className=\"group-data-[state=open]:hidden shrink-0\"\n size={14}\n />\n </CollapsibleTrigger>\n </div>\n );\n};\n\nexport const CollapsibleHeader = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <span className={cn(\"font-semibold w-full text-start\", className)}>\n {children}\n </span>\n );\n};\n","import { PlusCircleIcon } from \"lucide-react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"zudoku/ui/DropdownMenu.js\";\nimport type { ExampleItem, MediaTypeObject } from \"../graphql/graphql.js\";\n\nconst ExamplesDropdown = ({\n examples,\n onSelect,\n}: {\n examples: MediaTypeObject[];\n onSelect: (example: ExampleItem, mediaType: string) => void;\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"hover:bg-accent hover:brightness-95 gap-2\"\n >\n Use Example\n <PlusCircleIcon size={14} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"max-w-72\">\n {examples.map((mediaTypeObject) => (\n <div key={mediaTypeObject.mediaType}>\n <DropdownMenuLabel>{mediaTypeObject.mediaType}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n {mediaTypeObject.examples?.map((example) => (\n <DropdownMenuItem\n key={example.name}\n onSelect={() => onSelect(example, mediaTypeObject.mediaType)}\n >\n <span\n className=\"line-clamp-1\"\n title={example.summary ?? example.name}\n >\n {example.summary ?? example.name}\n </span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </div>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default ExamplesDropdown;\n","import * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\ntype InputProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import { Slot } from \"@radix-ui/react-slot\";\nimport type { cva } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport type { HTMLElementType, JSX } from \"react\";\nimport * as React from \"react\";\nimport { cn } from \"./cn.js\";\n\ntype ComponentOrElement =\n | HTMLElementType\n // biome-ignore lint/suspicious/noExplicitAny: Need to accept any component type\n | React.ComponentType<any>\n // biome-ignore lint/suspicious/noExplicitAny: Need to accept any component type\n | React.ForwardRefExoticComponent<any>;\n\ntype PropsOf<T> = T extends HTMLElementType\n ? JSX.IntrinsicElements[T]\n : T extends React.ComponentType<infer P>\n ? P\n : T extends React.ForwardRefExoticComponent<infer P>\n ? P\n : never;\n\ntype RefOf<T> = T extends HTMLElementType\n ? T extends keyof HTMLElementTagNameMap\n ? HTMLElementTagNameMap[T]\n : HTMLElement\n : T extends React.ForwardRefExoticComponent<React.RefAttributes<infer R>>\n ? R\n : HTMLElement;\n\nconst createVariantComponent = <\n E extends ComponentOrElement,\n C extends ReturnType<typeof cva>,\n>(\n tag: E,\n cvx: ClassValue | C,\n // variantProps: Array<keyof VariantProps<C>> = [],\n) => {\n const MyVariant = React.forwardRef<\n RefOf<E>,\n PropsOf<E> & { className?: ClassValue; asChild?: boolean }\n >(({ className, asChild, ...props }, ref) => {\n const Comp = asChild ? Slot : tag;\n\n return React.createElement(Comp, {\n ...props,\n ref: ref as React.Ref<HTMLElement>,\n className:\n typeof cvx === \"function\" ? cvx({ className }) : cn(cvx, className),\n });\n });\n\n MyVariant.displayName =\n typeof tag === \"string\"\n ? `VariantComponent(${tag})`\n : `VariantComponent(${tag.displayName || tag.name || \"Component\"})`;\n\n return MyVariant;\n};\n\nexport default createVariantComponent;\n","import { XIcon } from \"lucide-react\";\nimport { Button } from \"zudoku/components\";\nimport { Input } from \"zudoku/ui/Input.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport createVariantComponent from \"../../../util/createVariantComponent.js\";\n\nconst ParamsGrid = createVariantComponent(\n \"div\",\n \"grid grid-cols-[min-content_2fr_3fr] items-center gap-x-5 [&>*:last-child_[data-slot=remove-button]]:invisible\",\n);\n\nexport const ParamsGridItem = createVariantComponent(\n \"div\",\n \"group h-9 hover:bg-accent/75 ps-4 pe-2 grid col-span-full grid-cols-subgrid items-center border-b\",\n);\n\nexport const ParamsGridInput = createVariantComponent(\n Input,\n \"w-full truncate border-0 p-0 m-0 shadow-none text-xs focus-visible:ring-0 font-mono\",\n);\n\nexport const ParamsGridRemoveButton = ({\n onClick,\n className,\n}: {\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n className?: string;\n}) => (\n <Button\n size=\"icon-xs\"\n variant=\"ghost\"\n className={cn(\n \"text-muted-foreground opacity-0 group-hover:brightness-95 focus-visible:opacity-100 group-hover:opacity-100\",\n className,\n )}\n onClick={onClick}\n type=\"button\"\n // In the last row the remove button will be hidden by the ParamsGridItem selector\n data-slot=\"remove-button\"\n >\n <XIcon size={14} />\n </Button>\n);\n\nexport default ParamsGrid;\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"../util/cn.js\";\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\nexport { Checkbox };\n","import { PaperclipIcon, TrashIcon } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { Button } from \"zudoku/components\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport { humanFileSize } from \"../../../../util/humanFileSize.js\";\nimport {\n ParamsGridInput,\n ParamsGridItem,\n ParamsGridRemoveButton,\n} from \"../ParamsGrid.js\";\nimport type { PlaygroundForm } from \"../Playground.js\";\nimport type { useKeyValueFieldManager } from \"./useKeyValueFieldManager.js\";\n\ntype MultipartFieldProps = {\n index: number;\n manager: ReturnType<\n typeof useKeyValueFieldManager<PlaygroundForm, \"multipartFormFields\">\n >;\n};\n\nexport const MultipartField = ({ index, manager }: MultipartFieldProps) => {\n const fieldFileInputRef = useRef<HTMLInputElement>(null);\n const fieldValue = manager.getValue(index, \"value\");\n\n return (\n <ParamsGridItem>\n <Checkbox\n {...manager.getCheckboxProps(index)}\n disabled={!manager.getValue(index, \"name\")}\n />\n <ParamsGridInput\n {...manager.getNameInputProps(index)}\n placeholder=\"Key\"\n />\n <div className=\"flex items-center gap-1 flex-1\">\n {fieldValue instanceof File ? (\n <div className=\"flex items-center gap-1 flex-1 min-w-0\">\n <div className=\"flex items-center gap-1 border-b cursor-default\">\n <PaperclipIcon size={12} className=\"text-muted-foreground\" />\n <span\n className=\"text-xs truncate\"\n title={`${fieldValue.name} (${humanFileSize(fieldValue.size)})`}\n >\n {fieldValue.name}\n </span>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"opacity-50 hover:opacity-100 hover:brightness-95 transition-opacity\"\n onClick={() => manager.setValue(index, \"value\", \"\")}\n >\n <TrashIcon size={13} />\n </Button>\n </div>\n ) : (\n <>\n <ParamsGridInput\n {...manager.getValueInputProps(index)}\n placeholder=\"Value\"\n />\n <input\n ref={fieldFileInputRef}\n type=\"file\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n manager.setValue(index, \"value\", file);\n manager.setValue(index, \"active\", true);\n }}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => fieldFileInputRef.current?.click()}\n title=\"Attach file\"\n className=\"opacity-0 focus-visible:opacity-100 group-hover:opacity-100 group-hover:brightness-95 transition-opacity\"\n >\n <PaperclipIcon size={14} />\n </Button>\n </>\n )}\n <ParamsGridRemoveButton {...manager.getRemoveButtonProps(index)} />\n </div>\n </ParamsGridItem>\n );\n};\n","import {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n startTransition,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type {\n Control,\n FieldArrayPath,\n FieldArrayWithId,\n FieldValues,\n PathValue,\n} from \"react-hook-form\";\nimport { useFieldArray, useFormContext } from \"react-hook-form\";\n\nexport type Value =\n | string\n | number\n | readonly string[]\n | File\n | boolean\n | undefined;\n\nexport type KeyValueField = {\n name: string;\n value: Value;\n active: boolean;\n};\n\nexport type KeyValueFieldManagerOptions<\n TFormData extends FieldValues,\n TName extends FieldArrayPath<TFormData>,\n T extends KeyValueField = PathValue<TFormData, TName>[number],\n> = {\n control: Control<TFormData>;\n name: TName;\n defaultValue: T;\n isEmpty?: (item: T) => boolean;\n shouldSetActive?: (item: T) => boolean;\n};\n\nexport type CheckboxProps = {\n checked: boolean;\n disabled?: boolean;\n onCheckedChange: (checked: boolean) => void;\n};\n\nexport type RemoveButtonProps = { onClick: () => void; disabled?: boolean };\n\ntype SetValueFn = (\n index: number,\n field: keyof KeyValueField,\n value: Value,\n options?: { focus?: \"next\" | \"previous\" },\n) => void;\n\ntype GetValueFn = (index: number, field: keyof KeyValueField) => Value;\n\nexport type UseKeyValueFieldManagerReturn<TFormData extends FieldValues> = {\n fields: FieldArrayWithId<TFormData>[];\n getNameInputProps: GetInputPropsFn;\n getValueInputProps: GetInputPropsFn;\n getCheckboxProps: (index: number) => CheckboxProps;\n getRemoveButtonProps: (index: number) => RemoveButtonProps;\n setValue: SetValueFn;\n getValue: GetValueFn;\n};\n\ntype GetInputPropsFn = (index: number) => ComponentPropsWithoutRef<\"input\">;\n\nexport const useKeyValueFieldManager = <\n TFormData extends FieldValues,\n TName extends FieldArrayPath<TFormData>,\n T extends KeyValueField = PathValue<TFormData, TName>[number],\n>(\n options: KeyValueFieldManagerOptions<TFormData, TName>,\n): UseKeyValueFieldManagerReturn<TFormData> => {\n const {\n control,\n name,\n defaultValue,\n isEmpty: customIsEmpty,\n shouldSetActive: customShouldSetActive,\n } = options;\n const {\n setValue: internalSetValue,\n watch,\n setFocus,\n register,\n } = useFormContext();\n const { fields, append, remove } = useFieldArray({ control, name });\n const watchedFields = watch(name) as T[];\n const lastEditedIndexRef = useRef(-1);\n const prevLengthRef = useRef(-1);\n\n const setValue = useCallback<SetValueFn>(\n (index, field, value, options) => {\n if (field === \"value\" || field === \"name\") {\n lastEditedIndexRef.current = index;\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: Can't infer the type of the value here\n internalSetValue(`${name}.${index}.${field}`, value as any);\n\n if (options?.focus === \"next\") {\n setFocus(\n field === \"name\"\n ? `${name}.${index}.value`\n : `${name}.${index + 1}.name`,\n );\n } else if (options?.focus === \"previous\") {\n setFocus(\n field === \"name\"\n ? `${name}.${index - 1}.value`\n : `${name}.${index}.name`,\n );\n }\n },\n [name, internalSetValue, setFocus],\n );\n\n const isEmpty = useCallback(\n (item: T) => {\n if (customIsEmpty) return customIsEmpty(item);\n return !item.name && !item.value;\n },\n [customIsEmpty],\n );\n\n const shouldSetActive = useCallback(\n (item: T) => {\n if (customShouldSetActive) return customShouldSetActive(item);\n return Boolean(item.name || item.value);\n },\n [customShouldSetActive],\n );\n\n // Handle auto append/remove of rows\n useEffect(() => {\n if (!watchedFields) return;\n\n // Prevents double-appending in Strict Mode\n if (prevLengthRef.current === -1) {\n prevLengthRef.current = watchedFields.length;\n\n if (watchedFields.length === 0) {\n // biome-ignore lint/suspicious/noExplicitAny: Generic field array type\n append(defaultValue as any, {\n shouldFocus: false,\n });\n }\n return;\n }\n\n prevLengthRef.current = watchedFields.length;\n\n // If no fields, append one\n if (watchedFields.length === 0) {\n // biome-ignore lint/suspicious/noExplicitAny: Generic field array type\n append(defaultValue as any, {\n shouldFocus: false,\n });\n return;\n }\n\n // Auto-remove empty fields (except the last one, keep at least one)\n if (watchedFields.length > 1) {\n const emptyIndices: number[] = [];\n\n // Check all fields except the last one\n for (let i = 0; i < watchedFields.length - 1; i++) {\n const field = watchedFields[i];\n if (field && isEmpty(field) && !shouldSetActive(field)) {\n emptyIndices.push(i);\n }\n }\n\n // Remove from highest index to lowest to avoid index shifting\n if (emptyIndices.length > 0) {\n const lowestRemovedIndex = emptyIndices[0];\n\n if (lowestRemovedIndex === undefined) return;\n\n for (let i = emptyIndices.length - 1; i >= 0; i--) {\n const indexToRemove = emptyIndices[i];\n if (indexToRemove !== undefined) {\n remove(indexToRemove);\n }\n }\n\n // If we just edited this field, focus the name field at the same index\n // (which now contains what was the next row), or previous row if needed\n if (lastEditedIndexRef.current === lowestRemovedIndex) {\n const newLength = watchedFields.length - emptyIndices.length;\n\n if (lowestRemovedIndex < newLength) {\n // Next row moved into this position, focus its name field\n setFocus(`${name}.${lowestRemovedIndex}.name`);\n } else if (lowestRemovedIndex > 0) {\n // Removed row was at the end, focus previous row's name\n setFocus(`${name}.${lowestRemovedIndex - 1}.name`);\n } else {\n setFocus(`${name}.0.name`);\n }\n }\n lastEditedIndexRef.current = -1;\n }\n }\n\n // If last field has content, append empty one\n const lastField = watchedFields[watchedFields.length - 1];\n if (lastField && !isEmpty(lastField)) {\n // biome-ignore lint/suspicious/noExplicitAny: Generic field array type\n append(defaultValue as any, {\n shouldFocus: false,\n });\n }\n }, [\n watchedFields,\n append,\n remove,\n defaultValue,\n isEmpty,\n name,\n setFocus,\n shouldSetActive,\n ]);\n\n // Auto set active state of row checkbox\n useEffect(() => {\n if (!watchedFields) return;\n\n const updates: Array<() => void> = [];\n\n for (let i = 0; i < watchedFields.length; i++) {\n const field = watchedFields[i];\n if (!field) continue;\n\n const shouldBeActive = shouldSetActive(field);\n if (field.active === shouldBeActive) continue;\n\n updates.push(() => setValue(i, \"active\", shouldBeActive));\n }\n\n if (updates.length === 0) return;\n\n startTransition(() => updates.forEach((update) => update()));\n }, [watchedFields, shouldSetActive, setValue]);\n\n const isFieldEmpty = useCallback(\n (index: number) => {\n const field = watchedFields?.[index];\n return field ? isEmpty(field) : true;\n },\n [watchedFields, isEmpty],\n );\n\n const createKeyDownHandler = useCallback(\n (index: number, field: \"name\" | \"value\") => {\n const next =\n field === \"name\"\n ? `${name}.${index}.value`\n : `${name}.${index + 1}.name`;\n\n const previous =\n field === \"name\"\n ? `${name}.${index - 1}.value`\n : `${name}.${index}.name`;\n const canNavigatePrevious = field === \"value\" || index > 0;\n\n return (e: KeyboardEvent<HTMLInputElement>) => {\n if (!(e.target instanceof HTMLInputElement)) return;\n\n const isAtStart = e.target.selectionStart === 0;\n const isAtEnd = e.target.selectionStart === e.target.value.length;\n const isEmpty = !e.target.value;\n\n if (e.key === \"Enter\") {\n setFocus(next);\n } else if (e.key === \"Backspace\" && isEmpty && canNavigatePrevious) {\n e.preventDefault();\n setFocus(previous);\n } else if (e.key === \"ArrowLeft\" && isAtStart && canNavigatePrevious) {\n e.preventDefault();\n setFocus(previous);\n } else if (e.key === \"ArrowRight\" && isAtEnd) {\n e.preventDefault();\n setFocus(next);\n }\n };\n },\n [name, setFocus],\n );\n\n const getNameInputProps = useCallback<GetInputPropsFn>(\n (index) => ({\n ...register(`${name}.${index}.name`),\n onChange: (e) => setValue(index, \"name\", e.target.value),\n onKeyDown: createKeyDownHandler(index, \"name\"),\n }),\n [register, name, setValue, createKeyDownHandler],\n );\n\n const getValueInputProps = useCallback<GetInputPropsFn>(\n (index) => ({\n ...register(`${name}.${index}.value`),\n onChange: (e) => setValue(index, \"value\", e.target.value),\n onKeyDown: createKeyDownHandler(index, \"value\"),\n }),\n [register, name, setValue, createKeyDownHandler],\n );\n\n const getCheckboxProps = useCallback<(index: number) => CheckboxProps>(\n (index) => ({\n ...register(`${name}.${index}.active`),\n checked: watch(`${name}.${index}.active`) ?? false,\n disabled: isFieldEmpty(index),\n onCheckedChange: (checked: boolean) => {\n setValue(index, \"active\", checked === true);\n },\n }),\n [name, register, isFieldEmpty, watch, setValue],\n );\n\n const getValue = useCallback<GetValueFn>(\n (index, field) => watchedFields?.[index]?.[field],\n [watchedFields],\n );\n\n const getRemoveButtonProps = useCallback(\n (index: number) => ({\n onClick: () => remove(index),\n disabled: index === fields.length - 1,\n }),\n [remove, fields.length],\n );\n\n return {\n fields,\n getNameInputProps,\n getValueInputProps,\n getCheckboxProps,\n getRemoveButtonProps,\n setValue,\n getValue,\n };\n};\n","import {\n ChevronDownIcon,\n FileInput,\n Grid2x2PlusIcon,\n PaperclipIcon,\n ScanTextIcon,\n XIcon,\n} from \"lucide-react\";\nimport { useRef, useState } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { Button } from \"zudoku/components\";\nimport { Collapsible, CollapsibleContent } from \"zudoku/ui/Collapsible.js\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"zudoku/ui/DropdownMenu.js\";\nimport { Textarea } from \"zudoku/ui/Textarea.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { humanFileSize } from \"../../../util/humanFileSize.js\";\nimport type { MediaTypeObject } from \"../graphql/graphql.js\";\nimport {\n CollapsibleHeader,\n CollapsibleHeaderTrigger,\n} from \"./CollapsibleHeader.js\";\nimport ExamplesDropdown from \"./ExamplesDropdown.js\";\nimport ParamsGrid from \"./ParamsGrid.js\";\nimport type { PlaygroundForm } from \"./Playground.js\";\nimport { MultipartField } from \"./request-panel/MultipartField.js\";\nimport { useKeyValueFieldManager } from \"./request-panel/useKeyValueFieldManager.js\";\n\nexport const BodyPanel = ({ content }: { content?: MediaTypeObject[] }) => {\n const { register, setValue, watch, control } =\n useFormContext<PlaygroundForm>();\n const examples = (content ?? []).flatMap((e) => e.examples);\n const [headers, file, bodyMode, body, multipartFormFields] = watch([\n \"headers\",\n \"file\",\n \"bodyMode\",\n \"body\",\n \"multipartFormFields\",\n ]);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const handleFileSelect = (selectedFile: File | null) => {\n setValue(\"file\", selectedFile);\n if (!selectedFile) return;\n setValue(\n \"headers\",\n headers.filter(\n (h) => h.name.toLowerCase() !== \"content-type\" || !h.active,\n ),\n );\n };\n\n const handleFileInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selectedFile = e.target.files?.[0] ?? null;\n handleFileSelect(selectedFile);\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDrop = (e: React.DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n const droppedFile = e.dataTransfer.files?.[0] ?? null;\n handleFileSelect(droppedFile);\n };\n\n const manager = useKeyValueFieldManager<\n PlaygroundForm,\n \"multipartFormFields\"\n >({\n control,\n name: \"multipartFormFields\",\n defaultValue: { name: \"\", value: \"\", active: false },\n isEmpty: (item) => {\n if (item.value instanceof File) return false;\n return !item.name && !item.value;\n },\n });\n\n return (\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger className=\"items-center\">\n <FileInput size={16} />\n <CollapsibleHeader className=\"flex items-center justify-between\">\n Body\n <div className=\"flex items-center\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"hover:bg-accent hover:brightness-95 gap-2\"\n >\n {bodyMode === \"text\" ? (\n <>\n <ScanTextIcon size={14} />\n Text\n </>\n ) : bodyMode === \"file\" ? (\n <>\n <PaperclipIcon size={14} />\n File\n </>\n ) : (\n <>\n <Grid2x2PlusIcon size={14} />\n Multipart\n </>\n )}\n <ChevronDownIcon size={14} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"min-w-40\">\n <DropdownMenuItem\n onSelect={() => setValue(\"bodyMode\", \"text\")}\n className=\"gap-2\"\n >\n <ScanTextIcon size={14} />\n <span className=\"flex-1\">Text</span>\n <span>\n {body.length > 0 && (\n <div className=\"w-1.5 h-1.5 bg-primary rounded-full\" />\n )}\n </span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => setValue(\"bodyMode\", \"file\")}\n className=\"gap-2\"\n >\n <PaperclipIcon size={14} />\n <span className=\"flex-1\">File</span>\n <span>\n {file && (\n <div className=\"w-1.5 h-1.5 bg-primary rounded-full\" />\n )}\n </span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => setValue(\"bodyMode\", \"multipart\")}\n className=\"gap-2\"\n >\n <Grid2x2PlusIcon size={14} strokeWidth={1.5} />\n <span className=\"flex-1\">Multipart</span>\n <span>\n {multipartFormFields?.some((field) => field.active) && (\n <div className=\"w-1.5 h-1.5 bg-primary rounded-full\" />\n )}\n </span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <input\n ref={fileInputRef}\n type=\"file\"\n className=\"hidden\"\n onChange={handleFileInputChange}\n />\n <div className=\"w-px mx-1 h-5 bg-border\" />\n {content && examples.length > 0 ? (\n <ExamplesDropdown\n examples={content}\n onSelect={(example, mediaType) => {\n setValue(\"body\", JSON.stringify(example.value, null, 2));\n setValue(\"headers\", [\n ...headers.filter((h) => h.name !== \"Content-Type\"),\n {\n name: \"Content-Type\",\n value: mediaType,\n active: true,\n },\n ]);\n }}\n />\n ) : (\n <div />\n )}\n </div>\n </CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent className=\"CollapsibleContent flex flex-col gap-2\">\n {bodyMode === \"text\" && (\n <Textarea\n {...register(\"body\")}\n className={cn(\n \"w-full px-4 py-2.5 h-64 font-mono md:text-xs border-none rounded-none focus-visible:ring-0 transition-colors\",\n )}\n placeholder=\"Body content\"\n />\n )}\n {bodyMode === \"file\" && (\n <div\n role=\"region\"\n aria-label=\"File upload drop zone\"\n className={cn(\n \"flex flex-col items-center justify-center gap-4 min-h-[300px]\",\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className={cn(\n \"flex items-center justify-center gap-2 rounded-full size-20 p-0 border border-dashed border-muted-foreground/50 hover:bg-accent/75 transition-colors\",\n (file || isDragging) && \"border-solid\",\n isDragging && \"bg-accent border-primary\",\n )}\n >\n <PaperclipIcon\n className={cn(\n \"text-muted-foreground\",\n isDragging && \"text-primary\",\n )}\n size={30}\n />\n </button>\n {file ? (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1.5 rounded-md border\">\n <span className=\"text-sm truncate\" title={file.name}>\n {file.name}{\" \"}\n <span className=\"text-muted-foreground\">\n ({humanFileSize(file.size)})\n </span>\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xxs\"\n onClick={() => handleFileSelect(null)}\n >\n <XIcon size={14} />\n </Button>\n </div>\n ) : (\n <span className=\"text-lg font-semibold text-muted-foreground\">\n Select or drop a file\n </span>\n )}\n </div>\n )}\n {bodyMode === \"multipart\" && (\n <ParamsGrid>\n {manager.fields.map((field, index) => (\n <MultipartField key={field.id} index={index} manager={manager} />\n ))}\n </ParamsGrid>\n )}\n </CollapsibleContent>\n </Collapsible>\n );\n};\n\nexport default BodyPanel;\n","import type { PlaygroundForm } from \"./Playground.js\";\n\nexport const createUrl = (host: string, path: string, data: PlaygroundForm) => {\n const filledPath = path.replace(/(:\\w+|\\{\\w+})/g, (match) => {\n const key = match.replace(/[:{}]/g, \"\");\n const value = data.pathParams.find((part) => part.name === key)?.value;\n\n return value ?? match;\n });\n\n // Ensure host ends with a slash and path doesn't start with one,\n // so they form a correct URL, without overriding the host's path.\n const url = new URL(\n filledPath.replace(/^\\//, \"\"),\n host.endsWith(\"/\") ? host : `${host}/`,\n );\n\n data.queryParams\n .filter((param) => param.active)\n .forEach((param) => {\n url.searchParams.set(param.name, param.value);\n });\n\n return url;\n};\n","export function isBinaryContentType(contentType: string) {\n return /^(application\\/octet-stream|image\\/|audio\\/|video\\/|font\\/|application\\/pdf|application\\/zip|application\\/x-protobuf|application\\/x-binary)/i.test(\n contentType,\n );\n}\n\nexport const extractFileName = (\n headers: Array<[string, string]>,\n url: string,\n): string => {\n const contentDisposition = headers.find(\n ([key]) => key.toLowerCase() === \"content-disposition\",\n )?.[1];\n\n if (contentDisposition) {\n const filenameMatch = contentDisposition.match(\n /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/,\n );\n if (filenameMatch?.[1]) {\n return filenameMatch[1].replace(/['\"]/g, \"\");\n }\n }\n\n // Extract filename from URL as fallback\n try {\n const urlPath = new URL(url).pathname;\n const fileName = urlPath.split(\"/\").pop() || \"download\";\n return fileName.includes(\".\") ? fileName : \"download\";\n } catch {\n return \"download\";\n }\n};\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverContent, PopoverTrigger };\n","import { PopoverAnchor } from \"@radix-ui/react-popover\";\nimport { useCommandState } from \"cmdk\";\nimport { type KeyboardEvent, type Ref, useRef, useState } from \"react\";\nimport {\n Command,\n CommandInlineInput,\n CommandItem,\n CommandList,\n} from \"zudoku/ui/Command.js\";\nimport { Popover, PopoverContent } from \"zudoku/ui/Popover.js\";\nimport { cn } from \"../util/cn.js\";\n\ntype AutocompleteProps = {\n value?: string | number | readonly string[] | undefined;\n options: readonly string[];\n onChange: (e: string) => void;\n onSelect?: (e: string) => void;\n className?: string;\n placeholder?: string;\n onEnterPress?: (e: KeyboardEvent<HTMLInputElement>) => void;\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n ref?: Ref<HTMLInputElement>;\n shouldFilter?: boolean;\n};\n\nconst AutocompletePopover = ({\n value,\n options,\n onChange,\n className,\n placeholder = \"Value\",\n onEnterPress,\n onKeyDown,\n ref,\n onSelect,\n}: AutocompleteProps) => {\n const [open, setOpen] = useState(false);\n const [dontClose, setDontClose] = useState(false);\n const count = useCommandState((state) => state.filtered.count);\n const inputRef = useRef<HTMLInputElement>(null);\n\n return (\n <Popover open={open}>\n <PopoverAnchor>\n <CommandInlineInput\n autoComplete=\"off\"\n ref={(el) => {\n inputRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n value={value ? String(value) : undefined}\n placeholder={placeholder}\n className={cn(\"h-9 bg-transparent\", className)}\n onFocus={() => setOpen(true)}\n onBlur={() => {\n if (dontClose) {\n return;\n }\n setOpen(false);\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n\n if (e.defaultPrevented) return;\n\n if (e.key === \"Enter\") {\n setOpen(false);\n inputRef.current?.blur();\n onEnterPress?.(e);\n }\n }}\n onValueChange={(e) => onChange(e)}\n />\n </PopoverAnchor>\n <PopoverContent\n onMouseEnter={() => setDontClose(true)}\n onMouseLeave={() => setDontClose(false)}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className={cn(\"p-0 w-(--radix-popover-trigger-width)\", {\n \"border-0\": count === 0,\n })}\n align=\"start\"\n side=\"bottom\"\n onWheel={(e) => {\n // See: https://github.com/radix-ui/primitives/issues/1159\n e.stopPropagation();\n }}\n onTouchMove={(e) => {\n e.stopPropagation();\n }}\n >\n <CommandList className=\"max-h-[140px]\">\n {options.map((enumValue) => (\n <CommandItem\n key={enumValue}\n value={enumValue}\n onSelect={(selected) => {\n onSelect?.(selected);\n onChange(selected);\n setOpen(false);\n }}\n className=\"cursor-pointer\"\n >\n {enumValue}\n </CommandItem>\n ))}\n </CommandList>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport const Autocomplete = ({ shouldFilter, ...props }: AutocompleteProps) => {\n return (\n <Command className=\"bg-transparent\" shouldFilter={shouldFilter}>\n <AutocompletePopover {...props} />\n </Command>\n );\n};\n","import { CircleAlertIcon, LockIcon, TableOfContentsIcon } from \"lucide-react\";\nimport { type Control, useFormContext } from \"react-hook-form\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport { Collapsible, CollapsibleContent } from \"zudoku/ui/Collapsible.js\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"zudoku/ui/Tooltip.js\";\nimport { Autocomplete } from \"../../../components/Autocomplete.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport {\n CollapsibleHeader,\n CollapsibleHeaderTrigger,\n} from \"./CollapsibleHeader.js\";\nimport ParamsGrid, {\n ParamsGridInput,\n ParamsGridItem,\n ParamsGridRemoveButton,\n} from \"./ParamsGrid.js\";\nimport type { Header, PlaygroundForm } from \"./Playground.js\";\nimport { useKeyValueFieldManager } from \"./request-panel/useKeyValueFieldManager.js\";\n\n// biome-ignore format: Easier to read\nconst headerOptions = Object.freeze([\n \"Accept\", \"Accept-Encoding\", \"Accept-Language\", \"Authorization\", \"Cache-Control\", \"Connection\",\n \"Content-Disposition\", \"Content-Encoding\", \"Content-Language\", \"Content-Length\", \"Content-Range\",\n \"Content-Security-Policy\", \"Content-Type\", \"Cookie\", \"Date\", \"ETag\", \"Expires\", \"Host\",\n \"If-Modified-Since\", \"Location\", \"Origin\", \"Pragma\", \"Referer\", \"Set-Cookie\", \"User-Agent\",\n \"X-Requested-With\",\n]);\n\nexport const Headers = ({\n control,\n schemaHeaders,\n lockedHeaders,\n}: {\n control: Control<PlaygroundForm>;\n schemaHeaders: Header[];\n lockedHeaders?: string[];\n}) => {\n const { watch, formState } = useFormContext<PlaygroundForm>();\n const watchedHeaders = watch(\"headers\");\n\n const manager = useKeyValueFieldManager<PlaygroundForm, \"headers\">({\n control,\n name: \"headers\",\n defaultValue: { name: \"\", value: \"\", active: false },\n });\n\n const missingHeaders = schemaHeaders\n .filter((h) => !watchedHeaders.some((f) => f.name === h.name))\n .map(({ name }) => name);\n\n const hiddenHeadersIndex = manager.fields.flatMap((f, index) => {\n const keep = !lockedHeaders\n ?.map((h) => h.toLowerCase())\n .includes(f.name.toLowerCase());\n\n return keep ? [] : [index];\n });\n\n const lockedHeaderFields =\n lockedHeaders?.map((h) => ({\n name: h,\n id: `locked-${h}`,\n value: \"••••••••••\",\n active: true,\n locked: true,\n })) ?? [];\n\n return (\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger>\n <TableOfContentsIcon size={14} />\n <CollapsibleHeader>Headers</CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent className=\"CollapsibleContent\">\n <div className=\"flex flex-col gap-2\">\n <div className=\"overflow-hidden\">\n <ParamsGrid>\n {lockedHeaderFields.map((field) => (\n <Tooltip key={field.id}>\n <TooltipTrigger asChild>\n <ParamsGridItem\n key={field.id}\n className=\"opacity-50 cursor-not-allowed font-mono text-xs min-h-10\"\n >\n <LockIcon size={16} />\n <ParamsGridInput value={field.name} disabled />\n <div>{field.value}</div>\n </ParamsGridItem>\n </TooltipTrigger>\n <TooltipContent alignOffset={10} side=\"bottom\" align=\"start\">\n <p>This header is set by the selected authentication.</p>\n </TooltipContent>\n </Tooltip>\n ))}\n {manager.fields.map((field, i) => {\n const currentSchemaHeader = schemaHeaders.find(\n (h) => h.name === watchedHeaders.at(i)?.name,\n );\n const hasEnum =\n currentSchemaHeader?.enum &&\n currentSchemaHeader.enum.length > 0;\n const isHidden = hiddenHeadersIndex.includes(i);\n const nameInputProps = manager.getNameInputProps(i);\n const valueInputProps = manager.getValueInputProps(i);\n\n return (\n <ParamsGridItem\n key={field.id}\n className={cn(\n isHidden && \"text-amber-600\",\n isHidden &&\n !formState.dirtyFields.headers?.[i]?.value &&\n \"hidden\",\n )}\n >\n <Checkbox\n className={cn(isHidden && \"hidden\")}\n {...manager.getCheckboxProps(i)}\n />\n <Tooltip>\n <TooltipTrigger asChild>\n <CircleAlertIcon\n className={cn(\n \"text-amber-600\",\n !isHidden && \"hidden\",\n )}\n size={16}\n />\n </TooltipTrigger>\n <TooltipContent\n alignOffset={10}\n side=\"bottom\"\n align=\"start\"\n >\n <p>\n This header will be overwritten by the selected\n authentication.\n </p>\n </TooltipContent>\n </Tooltip>\n <ParamsGridInput asChild>\n <Autocomplete\n {...nameInputProps}\n value={String(manager.getValue(i, \"name\"))}\n placeholder=\"Name\"\n options={[...missingHeaders, ...headerOptions]}\n onChange={(v) => manager.setValue(i, \"name\", v)}\n onSelect={(v) =>\n manager.setValue(i, \"name\", v, { focus: \"next\" })\n }\n />\n </ParamsGridInput>\n <div className=\"flex items-center gap-2\">\n {!hasEnum ? (\n <ParamsGridInput\n placeholder=\"Value\"\n autoComplete=\"off\"\n {...valueInputProps}\n />\n ) : (\n <ParamsGridInput asChild>\n <Autocomplete\n {...valueInputProps}\n value={String(manager.getValue(i, \"value\"))}\n shouldFilter={false}\n options={currentSchemaHeader.enum ?? []}\n onChange={(v) => manager.setValue(i, \"value\", v)}\n onSelect={(v) =>\n manager.setValue(i, \"value\", v, { focus: \"next\" })\n }\n />\n </ParamsGridInput>\n )}\n <ParamsGridRemoveButton\n {...manager.getRemoveButtonProps(i)}\n />\n </div>\n </ParamsGridItem>\n );\n })}\n </ParamsGrid>\n </div>\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n};\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../util/cn.js\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import { Label } from \"zudoku/ui/Label.js\";\nimport { RadioGroup, RadioGroupItem } from \"zudoku/ui/RadioGroup.js\";\nimport type { ApiIdentity } from \"../../../core/ZudokuContext.js\";\nimport { NO_IDENTITY } from \"./Playground.js\";\n\nconst IdentitySelector = ({\n identities,\n setValue,\n value,\n}: {\n identities?: ApiIdentity[];\n setValue: (value: string) => void;\n value?: string;\n}) => (\n <div className=\"w-full overflow-hidden\">\n <RadioGroup\n onValueChange={(value) => setValue(value)}\n value={value}\n defaultValue={NO_IDENTITY}\n className=\"gap-0\"\n disabled={identities?.length === 0}\n >\n {[{ id: NO_IDENTITY, label: \"None\" }, ...(identities ?? [])].map(\n (identity) => (\n <Label\n key={identity.id}\n className=\"h-10 items-center border-b font-normal flex gap-4 p-4 cursor-pointer hover:bg-accent/75\"\n >\n <RadioGroupItem value={identity.id} id={identity.id} />\n <span>{identity.label}</span>\n </Label>\n ),\n )}\n </RadioGroup>\n </div>\n);\n\nexport default IdentitySelector;\n","import { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Card } from \"zudoku/ui/Card.js\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogTitle,\n} from \"zudoku/ui/Dialog.js\";\nimport { Label } from \"zudoku/ui/Label.js\";\nimport type { ApiIdentity } from \"../../../core/ZudokuContext.js\";\nimport IdentitySelector from \"./IdentitySelector.js\";\n\nconst IdentityDialog = ({\n onSubmit,\n identities,\n open,\n onOpenChange,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSubmit: ({\n rememberedIdentity,\n identity,\n }: {\n rememberedIdentity: boolean;\n identity?: string;\n }) => void;\n identities: ApiIdentity[];\n}) => {\n const [identity, setIdentity] = useState<string | undefined>(undefined);\n const [rememberedIdentity, setRememberedIdentity] = useState<boolean>(false);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogTitle>Select an auth identity</DialogTitle>\n <DialogDescription>\n Please select an identity for this request.\n </DialogDescription>\n <Card className=\"max-h-80 overflow-auto\">\n <IdentitySelector\n identities={identities}\n setValue={setIdentity}\n value={identity}\n />\n </Card>\n <DialogFooter className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"remember\"\n checked={rememberedIdentity}\n onCheckedChange={(checked) =>\n setRememberedIdentity(\n checked === \"indeterminate\" ? false : !!checked,\n )\n }\n />\n <Label htmlFor=\"remember\">Remember my choice</Label>\n </div>\n\n <Button\n onClick={() => onSubmit({ identity: identity, rememberedIdentity })}\n >\n Send\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { IdentityDialog };\n","const c2n = (c: string) =>\n Math.abs(\n Number.isNaN(Number(c))\n ? c.toLowerCase().charCodeAt(0) - 96\n : Number.isNaN(Number(c))\n ? 0\n : Number(c),\n );\nconst s2n = (s: string) =>\n s.length > 1\n ? Number(s.split(\"\").reduce((a, c) => `${c2n(a) + c2n(c)}`))\n : c2n(s);\n\nexport const pastellize = (\n s: string,\n options: {\n saturation?: number;\n lightness?: number;\n } = {},\n) => {\n const hue = (3 * s2n(s) + 2 * s2n(s) + s2n(s)) % 360;\n const { saturation = 75, lightness = 60 } = options;\n\n return `${hue}deg ${saturation}% ${lightness}%`;\n};\n","import { useTheme } from \"next-themes\";\nimport { type CSSProperties, type ReactNode, useEffect, useRef } from \"react\";\nimport { cn } from \"../../util/cn.js\";\nimport { pastellize } from \"../../util/pastellize.js\";\n\nexport const DATA_ATTR = \"data-linked-param\";\n\nexport const usePastellizedColor = (name: string) => {\n const { resolvedTheme } = useTheme();\n\n return {\n text: pastellize(\n name,\n resolvedTheme === \"light\" ? { saturation: 95, lightness: 38 } : {},\n ),\n background: pastellize(\n name,\n resolvedTheme === \"light\" ? { saturation: 85, lightness: 40 } : {},\n ),\n };\n};\n\nexport const useParamColor = (name: string) => {\n const normalized = name.replace(/[{}]/g, \"\");\n return usePastellizedColor(normalized);\n};\n\nexport const ColorizedParam = ({\n name,\n className,\n slug,\n title,\n children,\n onClick,\n}: {\n name: string;\n className?: string;\n backgroundOpacity?: string;\n borderOpacity?: string;\n slug?: string;\n children?: ReactNode;\n title?: string;\n onClick?: () => void;\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const normalizedSlug = slug?.replace(/[{}]/g, \"\");\n const normalized = name.replace(/[{}]/g, \"\");\n const { text, background } = usePastellizedColor(normalized);\n\n const textColor = `hsl(${text} / 100%)`;\n const backgroundColor = `hsl(${background} / 10%)`;\n const borderColor = `hsl(${background} / 50%)`;\n\n useEffect(() => {\n if (!normalizedSlug) return;\n if (!ref.current) return;\n\n const onMouseEnter = () => {\n document\n .querySelectorAll(`[${DATA_ATTR}=\"${normalizedSlug}\"]`)\n .forEach((el) => {\n if (el instanceof HTMLElement) {\n el.dataset.active = \"true\";\n }\n });\n };\n const onMouseLeave = () => {\n document\n .querySelectorAll(`[${DATA_ATTR}=\"${normalizedSlug}\"]`)\n .forEach((el) => {\n if (el instanceof HTMLElement) {\n el.dataset.active = \"false\";\n }\n });\n };\n\n const el = ref.current;\n\n el.addEventListener(\"mouseenter\", onMouseEnter);\n el.addEventListener(\"mouseleave\", onMouseLeave);\n\n return () => {\n el.removeEventListener(\"mouseenter\", onMouseEnter);\n el.removeEventListener(\"mouseleave\", onMouseLeave);\n };\n }, [normalizedSlug]);\n\n return (\n // biome-ignore lint/a11y/noStaticElementInteractions: Just passing props through\n // biome-ignore lint/a11y/useKeyWithClickEvents: Just passing props through\n <span\n {...{ [DATA_ATTR]: normalizedSlug }}\n className={cn(\n // This may not contain (inline-)flex or (inline-)block otherwise it breaks the browser's full text search\n \"relative transition-all duration-100 rounded-lg\",\n \"border border-(--border-color) p-0.5 text-(--param-color) bg-(--background-color)\",\n \"data-[active=true]:border-(--param-color) data-[active=true]:shadow-sm data-[active=true]:bottom-px\",\n className,\n )}\n title={title}\n suppressHydrationWarning\n ref={ref}\n onClick={onClick}\n style={\n {\n \"--param-color\": textColor,\n \"--border-color\": borderColor,\n \"--background-color\": backgroundColor,\n } as CSSProperties\n }\n >\n {children ?? name}\n </span>\n );\n};\n","import { type Control, Controller, useFieldArray } from \"react-hook-form\";\nimport { ColorizedParam } from \"../ColorizedParam.js\";\nimport ParamsGrid, { ParamsGridInput, ParamsGridItem } from \"./ParamsGrid.js\";\nimport type { PlaygroundForm } from \"./Playground.js\";\n\nexport const PathParams = ({\n control,\n url,\n}: {\n control: Control<PlaygroundForm>;\n url: string;\n}) => {\n const { fields } = useFieldArray<PlaygroundForm, \"pathParams\">({\n control,\n name: \"pathParams\",\n });\n\n const sortedFields = [...fields].sort(\n (a, b) => url.indexOf(`{${a.name}}`) - url.indexOf(`{${b.name}}`),\n );\n\n return (\n <ParamsGrid>\n {sortedFields.map((field, i) => (\n <ParamsGridItem key={field.id}>\n <Controller\n control={control}\n name={`pathParams.${i}.name`}\n render={() => (\n <div className=\"flex items-center\">\n <ColorizedParam\n slug={field.name}\n name={field.name}\n className=\"font-mono text-xs px-2\"\n />\n </div>\n )}\n />\n\n <div className=\"flex justify-between items-center col-span-2\">\n <Controller\n control={control}\n name={`pathParams.${i}.value`}\n render={({ field }) => (\n <ParamsGridInput {...field} required placeholder=\"Value\" />\n )}\n />\n </div>\n </ParamsGridItem>\n ))}\n </ParamsGrid>\n );\n};\n","import { Unlink2Icon } from \"lucide-react\";\nimport { type Control, useFormContext } from \"react-hook-form\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport { Collapsible, CollapsibleContent } from \"zudoku/ui/Collapsible.js\";\nimport { Autocomplete } from \"../../../components/Autocomplete.js\";\nimport {\n CollapsibleHeader,\n CollapsibleHeaderTrigger,\n} from \"./CollapsibleHeader.js\";\nimport ParamsGrid, {\n ParamsGridInput,\n ParamsGridItem,\n ParamsGridRemoveButton,\n} from \"./ParamsGrid.js\";\nimport type { PlaygroundForm, QueryParam } from \"./Playground.js\";\nimport { useKeyValueFieldManager } from \"./request-panel/useKeyValueFieldManager.js\";\n\nexport const QueryParams = ({\n control,\n schemaQueryParams,\n}: {\n control: Control<PlaygroundForm>;\n schemaQueryParams: QueryParam[];\n}) => {\n const { watch } = useFormContext<PlaygroundForm>();\n const watchedQueryParams = watch(\"queryParams\");\n\n const manager = useKeyValueFieldManager<PlaygroundForm, \"queryParams\">({\n control,\n name: \"queryParams\",\n defaultValue: { name: \"\", value: \"\", active: false },\n });\n\n const requiredFields = schemaQueryParams.map((param) =>\n Boolean(param.isRequired),\n );\n\n const hasSchemaParams = schemaQueryParams.length > 0;\n\n return (\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger>\n <Unlink2Icon size={16} />\n <CollapsibleHeader>Query Parameters</CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent className=\"CollapsibleContent\">\n <ParamsGrid>\n {manager.fields.map((field, i) => {\n const currentParam = schemaQueryParams.find(\n (param) => param.name === watchedQueryParams.at(i)?.name,\n );\n const hasEnum = currentParam?.enum && currentParam.enum.length > 0;\n const nameInputProps = manager.getNameInputProps(i);\n const valueInputProps = manager.getValueInputProps(i);\n\n return (\n <ParamsGridItem key={field.id}>\n <Checkbox {...manager.getCheckboxProps(i)} />\n {!requiredFields[i] ? (\n hasSchemaParams ? (\n <ParamsGridInput asChild>\n <Autocomplete\n {...nameInputProps}\n value={String(manager.getValue(i, \"name\"))}\n placeholder=\"Name\"\n options={schemaQueryParams.map((param) => param.name)}\n onChange={(v) => manager.setValue(i, \"name\", v)}\n onSelect={(v) =>\n manager.setValue(i, \"name\", v, { focus: \"next\" })\n }\n />\n </ParamsGridInput>\n ) : (\n <ParamsGridInput {...nameInputProps} placeholder=\"Name\" />\n )\n ) : (\n <ParamsGridInput asChild>\n <label\n className=\"flex items-center cursor-pointer gap-1\"\n htmlFor={`queryParams.${i}.active`}\n title={requiredFields[i] ? \"Required field\" : undefined}\n >\n {watchedQueryParams[i]?.name}\n {requiredFields[i] && <sup> *</sup>}\n </label>\n </ParamsGridInput>\n )}\n <div className=\"flex justify-between items-center\">\n {!hasEnum ? (\n <ParamsGridInput\n placeholder=\"Value\"\n aria-label=\"Query parameter value\"\n {...valueInputProps}\n />\n ) : (\n <ParamsGridInput asChild>\n <Autocomplete\n {...valueInputProps}\n value={String(manager.getValue(i, \"value\"))}\n shouldFilter={false}\n options={currentParam.enum ?? []}\n onChange={(v) => manager.setValue(i, \"value\", v)}\n onSelect={(v) =>\n manager.setValue(i, \"value\", v, { focus: \"next\" })\n }\n />\n </ParamsGridInput>\n )}\n <ParamsGridRemoveButton\n {...manager.getRemoveButtonProps(i)}\n />\n </div>\n </ParamsGridItem>\n );\n })}\n </ParamsGrid>\n </CollapsibleContent>\n </Collapsible>\n );\n};\n","import { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Checkbox } from \"zudoku/ui/Checkbox.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogTitle,\n} from \"zudoku/ui/Dialog.js\";\nimport { Label } from \"zudoku/ui/Label.js\";\n\nconst RequestLoginDialog = ({\n open,\n setOpen,\n onSignUp,\n onLogin,\n onSkip,\n}: {\n open: boolean;\n onSignUp?: () => void;\n onLogin?: () => void;\n setOpen: (open: boolean) => void;\n onSkip?: (rememberSkip: boolean) => void;\n}) => {\n const [rememberSkip, setRememberSkip] = useState(false);\n\n const handleSkip = () => {\n onSkip?.(rememberSkip);\n setOpen(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent>\n <DialogTitle>Welcome to the Playground!</DialogTitle>\n <DialogDescription>\n The Playground is a tool for developers to test and explore our APIs.\n To use the Playground, you need to login.\n </DialogDescription>\n <Label className=\"flex items-center gap-2 font-normal\">\n <Checkbox\n checked={rememberSkip}\n onCheckedChange={(checked) => setRememberSkip(checked === true)}\n />\n Don't show this again\n </Label>\n <DialogFooter className=\"flex gap-2 sm:justify-between\">\n <Button type=\"button\" variant=\"outline\" onClick={handleSkip}>\n Skip\n </Button>\n <div className=\"flex gap-2\">\n {onSignUp && (\n <Button type=\"button\" variant=\"outline\" onClick={onSignUp}>\n Sign Up\n </Button>\n )}\n {onLogin && (\n <Button type=\"button\" variant=\"default\" onClick={onLogin}>\n Login\n </Button>\n )}\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default RequestLoginDialog;\n","import { create } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\n\ninterface IdentityState {\n rememberedIdentity: string | null;\n setRememberedIdentity: (identity: string | null) => void;\n getRememberedIdentity: (availableIdentities: string[]) => string | undefined;\n}\n\nexport const useIdentityStore = create<IdentityState>()(\n persist(\n (set, get) => ({\n rememberedIdentity: null,\n setRememberedIdentity: (identity: string | null) =>\n set({ rememberedIdentity: identity }),\n getRememberedIdentity: (availableIdentities: string[]) =>\n availableIdentities.find(\n (identity) => identity === get().rememberedIdentity,\n ),\n }),\n {\n name: \"identity-storage\",\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n","import { Fragment, type ReactNode } from \"react\";\n\ntype PathParamProps = {\n name: string;\n index: number;\n originalValue?: string;\n};\n\nexport const PathRenderer = ({\n path,\n renderParam,\n}: {\n path: string;\n renderParam: (props: PathParamProps) => ReactNode;\n}) => {\n let paramIndex = 0;\n return path.split(\"/\").map((part, i, arr) => {\n const matches = Array.from(part.matchAll(/{([^}]+)}/g));\n const elements: ReactNode[] = [];\n let lastIndex = 0;\n\n matches.forEach((match) => {\n const [originalValue, name] = match;\n if (!name) return;\n const startIndex = match.index;\n\n if (startIndex > lastIndex) {\n elements.push(\n <Fragment key={`text-${lastIndex}-${startIndex}`}>\n {part.slice(lastIndex, startIndex)}\n </Fragment>,\n );\n }\n\n elements.push(\n <Fragment key={`param-${name}`}>\n {renderParam({ name, originalValue, index: paramIndex++ })}\n </Fragment>,\n );\n\n lastIndex = startIndex + originalValue.length;\n });\n\n if (lastIndex < part.length) {\n elements.push(\n <Fragment key={`text-${lastIndex}-${part.length}`}>\n {part.slice(lastIndex)}\n </Fragment>,\n );\n }\n\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: index should be stable\n <Fragment key={`${part}-${i}`}>\n {elements}\n {i < arr.length - 1 && \"/\"}\n <wbr />\n </Fragment>\n );\n });\n};\n","import { useFormContext } from \"react-hook-form\";\nimport { PathRenderer } from \"../../../../components/PathRenderer.js\";\nimport { ColorizedParam } from \"../../ColorizedParam.js\";\nimport type { PlaygroundForm } from \"../Playground.js\";\n\nexport const UrlPath = ({ url }: { url: string }) => {\n const { watch, setFocus } = useFormContext<PlaygroundForm>();\n const [pathParams] = watch([\"pathParams\"]);\n\n return (\n <PathRenderer\n path={url}\n renderParam={({ name, originalValue, index }) => {\n const formValue = pathParams.find(\n (param) => param.name === name,\n )?.value;\n\n return (\n <ColorizedParam\n name={name}\n backgroundOpacity=\"0\"\n slug={name}\n onClick={() => setFocus(`pathParams.${index}.value`)}\n >\n {formValue || originalValue}\n </ColorizedParam>\n );\n }}\n />\n );\n};\n","import { Fragment } from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport type { PlaygroundForm } from \"../Playground.js\";\n\nexport const UrlQueryParams = () => {\n const { watch } = useFormContext<PlaygroundForm>();\n const queryParams = watch(\"queryParams\");\n\n const urlQueryParams = queryParams\n .filter((p) => p.active && p.name)\n .map((p, i, arr) => (\n <Fragment key={`${i}-${p.name}`}>\n {p.name}={encodeURIComponent(p.value).replaceAll(\"%20\", \"+\")}\n {i < arr.length - 1 && \"&\"}\n <wbr />\n </Fragment>\n ));\n\n return (\n <>\n {urlQueryParams.length > 0 ? `?` : \"\"}\n {urlQueryParams}\n </>\n );\n};\n","import { useCallback, useLayoutEffect, useRef } from \"react\";\nimport { humanFileSize } from \"../../../../util/humanFileSize.js\";\n\nconst ResponseCodeCircle = ({ status }: { status?: number }) => {\n if (!status) return <div className=\"w-2 h-2 rounded-full bg-gray-500\" />;\n\n switch (Number(status.toString().slice(0, 1))) {\n case 2:\n return <div className=\"w-2 h-2 rounded-full bg-green-500\" />;\n case 4:\n return <div className=\"w-2 h-2 rounded-full bg-yellow-400\" />;\n case 5:\n return <div className=\"w-2 h-2 rounded-full bg-red-500\" />;\n default:\n return <div className=\"w-2 h-2 rounded-full bg-gray-500\" />;\n }\n};\n\nconst RealTimeCounter = () => {\n const spanRef = useRef<HTMLSpanElement>(null);\n const textRef = useRef<Text | null>(null);\n const startTimeRef = useRef<number>(Date.now());\n const animationFrameRef = useRef<number>(null);\n\n const updateTime = useCallback(() => {\n if (textRef.current) {\n const elapsed = Date.now() - startTimeRef.current;\n textRef.current.nodeValue = elapsed.toFixed();\n }\n animationFrameRef.current = requestAnimationFrame(updateTime);\n }, []);\n\n useLayoutEffect(() => {\n const currentSpanRef = spanRef.current;\n if (!currentSpanRef) return;\n\n // Create a text node and attach it to the span\n const textNode = document.createTextNode(\"0\");\n\n currentSpanRef.appendChild(textNode);\n textRef.current = textNode;\n\n // Start the real-time counter\n startTimeRef.current = Date.now();\n animationFrameRef.current = requestAnimationFrame(updateTime);\n\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n if (textRef.current && currentSpanRef.contains(textNode)) {\n currentSpanRef.removeChild(textNode);\n }\n };\n }, [updateTime]);\n\n return <span className=\"inline-block text-end w-[3ch]\" ref={spanRef} />;\n};\n\nexport const ResponseStatusBar = ({\n status,\n time,\n size,\n isFinished,\n progress,\n}: {\n status?: number;\n time?: number;\n size?: number;\n isFinished: boolean;\n progress: number;\n}) => {\n const statusCodeMap: Record<number, string> = {\n 200: \"OK\",\n 201: \"Created\",\n 202: \"Accepted\",\n 204: \"No Content\",\n 400: \"Bad Request\",\n 401: \"Unauthorized\",\n 403: \"Forbidden\",\n 404: \"Not Found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\",\n };\n\n return (\n <div className=\"relative shrink-0 flex h-10 text-xs gap-4 px-4 items-center justify-between font-mono border-b\">\n <div className=\"flex items-center gap-2\">\n <ResponseCodeCircle status={status} /> {status ?? \"Sending Request...\"}\n {status ? ` ${statusCodeMap[status]}` : \"\"}\n </div>\n <div className=\"flex gap-2\">\n <div>\n <span className=\"text-muted-foreground\">Size</span>{\" \"}\n <span className=\"inline-block text-end min-w-[5ch]\">\n {size ? humanFileSize(size) : \"- B\"}\n </span>\n </div>\n\n <div>\n <span className=\"text-muted-foreground\">Time</span>{\" \"}\n {time !== undefined ? `${time.toFixed(0)}` : <RealTimeCounter />}\n ms\n </div>\n </div>\n <div\n className=\"h-full bg-neutral-500/10 absolute left-0 bottom-0 z-10 transition-all duration-200 ease-in-out\"\n style={{\n opacity: isFinished ? 0 : 1,\n width: isFinished ? 0 : `${progress * 100}%`,\n }}\n />\n </div>\n );\n};\n\nexport default ResponseStatusBar;\n","type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonArray = JsonValue[];\n\nfunction inferType(value: JsonValue): string {\n if (value === null) return \"null\";\n if (Array.isArray(value)) {\n if (value.length === 0) return \"any[]\";\n const firstValue = value[0];\n if (firstValue === undefined) return \"any[]\";\n const elementType = inferType(firstValue);\n return `${elementType}[]`;\n }\n if (typeof value === \"object\") {\n return generateInterface(value);\n }\n return typeof value;\n}\n\nexport function generateInterface(obj: JsonObject, _indentation = \"\"): string {\n const lines: string[] = [\"{\"];\n\n for (const [key, value] of Object.entries(obj)) {\n const propertyType = inferType(value);\n lines.push(` ${key}: ${propertyType};`);\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n}\n\nexport function convertToTypes(json: JsonValue): { lines: string[] } {\n const typeDefinition = inferType(json);\n const lines = [`type GeneratedType = ${typeDefinition};`];\n return { lines };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport {\n CornerDownLeftIcon,\n CornerDownRightIcon,\n DownloadIcon,\n EyeIcon,\n EyeOffIcon,\n MinusCircleIcon,\n PlusCircleIcon,\n SquareCodeIcon,\n} from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"zudoku/ui/Collapsible.js\";\nimport { SecretText } from \"zudoku/ui/Secret.js\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"zudoku/ui/Select.js\";\nimport { SyntaxHighlight } from \"zudoku/ui/SyntaxHighlight.js\";\nimport { cn } from \"../../../../util/cn.js\";\nimport createVariantComponent from \"../../../../util/createVariantComponent.js\";\nimport { humanFileSize } from \"../../../../util/humanFileSize.js\";\nimport {\n CollapsibleHeader,\n CollapsibleHeaderTrigger,\n} from \"../CollapsibleHeader.js\";\nimport { convertToTypes } from \"./convertToTypes.js\";\n\nconst mimeTypeToLanguage = (mimeType: string) => {\n const mimeTypeMapping = {\n \"application/json\": \"json\",\n \"text/json\": \"json\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/javascript\": \"javascript\",\n \"application/xml\": \"xml\",\n \"application/xhtml+xml\": \"xhtml\",\n };\n\n return Object.entries(mimeTypeMapping).find(([mime]) =>\n mimeType.includes(mime),\n )?.[1];\n};\n\nconst detectLanguage = (headers: Array<[string, string]>) => {\n const contentType =\n headers.find(([key]) => key.toLowerCase() === \"content-type\")?.[1] || \"\";\n return mimeTypeToLanguage(contentType);\n};\n\nconst tryParseJson = (body: string) => {\n try {\n return JSON.stringify(JSON.parse(body), null, 2);\n } catch {\n return null;\n }\n};\n\nconst sortHeadersByRelevance = (\n headers: Array<[string, string]>,\n): Array<[string, string]> => {\n const priorityOrder = [\n \"Content-Type\",\n \"Content-Length\",\n \"Authorization\",\n \"X-RateLimit-Remaining\",\n \"X-RateLimit-Limit\",\n \"Cache-Control\",\n \"ETag\",\n ].map((key) => key.toLowerCase());\n\n return [...headers].sort(([keyA], [keyB]) => {\n const indexA = priorityOrder.indexOf(keyA.toLowerCase());\n const indexB = priorityOrder.indexOf(keyB.toLowerCase());\n if (indexA === indexB) return 0;\n if (indexA === -1) return 1;\n if (indexB === -1) return -1;\n return indexA - indexB;\n });\n};\n\nconst MAX_HEADERS_TO_SHOW = 3;\n\nconst Row = createVariantComponent(\n \"div\",\n \"grid-cols-subgrid grid border-b col-span-full px-4 py-1.5 font-mono text-xs\",\n);\n\nconst RowContent = createVariantComponent(\"div\", \"py-1 break-words\");\nconst RowValue = ({ value, header }: { value: string; header: string }) => {\n const secretHeaders = [\"authorization\", \"key\", \"secret\", \"token\"];\n const isSecret = secretHeaders.includes(header.toLowerCase());\n const [revealed, setRevealed] = useState(!isSecret);\n return (\n <RowContent\n className={cn(\n \"max-h-28 overflow-auto\",\n isSecret && \"cursor-pointer flex group\",\n )}\n onClick={() => {\n if (isSecret) {\n setRevealed((prev) => !prev);\n }\n }}\n >\n {!isSecret ? (\n value\n ) : (\n <>\n <SecretText secret={value} previewChars={0} revealed={revealed} />\n {revealed ? (\n <EyeOffIcon size={14} className={cn(\"hidden group-hover:block\")} />\n ) : (\n <EyeIcon size={14} className={cn(\"hidden group-hover:block\")} />\n )}\n </>\n )}\n </RowContent>\n );\n};\n\nexport const ResponseTab = ({\n body = \"\",\n headers,\n request,\n size,\n isBinary = false,\n fileName,\n blob,\n}: {\n body?: string;\n headers: Array<[string, string]>;\n request: {\n method: string;\n url: string;\n headers: Array<[string, string]>;\n body?: string;\n };\n size: number;\n isBinary?: boolean;\n fileName?: string;\n blob?: Blob;\n}) => {\n const detectedLanguage = detectLanguage(headers);\n const jsonContent = tryParseJson(body);\n const beautifiedBody = jsonContent || body;\n const [view, setView] = useState<\"formatted\" | \"raw\" | \"types\">(\n jsonContent ? \"formatted\" : \"raw\",\n );\n\n const types = useQuery({\n queryKey: [\"types\", beautifiedBody],\n queryFn: async () => {\n return convertToTypes(JSON.parse(beautifiedBody));\n },\n enabled: view === \"types\" && !isBinary,\n });\n\n const handleDownload = () => {\n if (blob && fileName) {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n };\n\n const sortedHeaders = sortHeadersByRelevance([...headers]);\n\n return (\n <>\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger>\n <CornerDownRightIcon size={14} />\n <CollapsibleHeader>Request Headers</CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[2fr_3fr] gap-x-6 text-sm\">\n {request.headers\n .slice(0, MAX_HEADERS_TO_SHOW)\n .map(([key, value]) => (\n <Row key={key}>\n <RowContent>{key}</RowContent>\n <RowValue value={value} header={key} />\n </Row>\n ))}\n {request.headers.length > MAX_HEADERS_TO_SHOW && (\n <Collapsible className=\"col-span-full grid-cols-subgrid grid group\">\n <CollapsibleTrigger className=\"data-[state=open]:hidden justify-center col-span-2 text-xs text-muted-foreground hover:text-primary border-b h-8 flex items-center gap-2\">\n Show {request.headers.length - MAX_HEADERS_TO_SHOW} more\n headers\n <PlusCircleIcon size={12} className=\"text-muted-foreground\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"col-span-full grid grid-cols-subgrid\">\n {request.headers\n .slice(MAX_HEADERS_TO_SHOW)\n .map(([key, value]) => (\n <Row key={key}>\n <RowContent>{key}</RowContent>\n <RowValue value={value} header={key} />\n </Row>\n ))}\n <CollapsibleTrigger className=\"justify-center col-span-2 text-xs text-muted-foreground hover:text-primary border-b h-8 flex items-center gap-2\">\n Hide {request.headers.length - MAX_HEADERS_TO_SHOW} headers\n <MinusCircleIcon\n size={12}\n className=\"text-muted-foreground\"\n />\n </CollapsibleTrigger>\n </CollapsibleContent>\n </Collapsible>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger>\n <CornerDownLeftIcon size={14} />\n <CollapsibleHeader>Response Headers</CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent>\n <div className=\"grid grid-cols-[2fr_3fr] gap-x-6 text-sm\">\n {sortedHeaders.slice(0, MAX_HEADERS_TO_SHOW).map(([key, value]) => (\n <Row key={key}>\n <RowContent>{key}</RowContent>\n <RowValue value={value} header={key} />\n </Row>\n ))}\n {sortedHeaders.length > MAX_HEADERS_TO_SHOW && (\n <Collapsible className=\"col-span-full grid-cols-subgrid grid group\">\n <CollapsibleTrigger className=\"data-[state=open]:hidden justify-center col-span-2 text-xs text-muted-foreground hover:text-primary border-b h-8 flex items-center gap-2\">\n Show {sortedHeaders.length - MAX_HEADERS_TO_SHOW} more headers\n <PlusCircleIcon size={12} className=\"text-muted-foreground\" />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"col-span-full grid grid-cols-subgrid\">\n {sortedHeaders\n .slice(MAX_HEADERS_TO_SHOW)\n .map(([key, value]) => (\n <Row key={key}>\n <RowContent>{key}</RowContent>\n <RowValue value={value} header={key} />\n </Row>\n ))}\n <CollapsibleTrigger className=\"justify-center col-span-2 text-xs text-muted-foreground hover:text-primary border-b h-8 flex items-center gap-2\">\n Hide {sortedHeaders.length - MAX_HEADERS_TO_SHOW} headers\n <MinusCircleIcon\n size={12}\n className=\"text-muted-foreground\"\n />\n </CollapsibleTrigger>\n </CollapsibleContent>\n </Collapsible>\n )}\n </div>\n </CollapsibleContent>\n </Collapsible>\n\n <div className=\"flex gap-2 justify-between items-center border-b px-2 flex-0\">\n <CollapsibleHeader className=\"flex items-center gap-2\">\n <SquareCodeIcon size={14} />\n Response body\n </CollapsibleHeader>\n {jsonContent && !isBinary && (\n <Select\n value={view}\n onValueChange={(value) =>\n setView(value as \"formatted\" | \"raw\" | \"types\")\n }\n >\n <SelectTrigger className=\"max-w-32 border-0 bg-transparent\">\n <SelectValue placeholder=\"View\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"formatted\">Formatted</SelectItem>\n <SelectItem value=\"raw\">Raw</SelectItem>\n <SelectItem value=\"types\">Types</SelectItem>\n </SelectContent>\n </Select>\n )}\n </div>\n <div className=\"flex-1\">\n {isBinary ? (\n <div className=\"p-4 text-center\">\n <div className=\"flex flex-col items-center gap-4\">\n <div className=\"text-lg font-semibold\">Binary Content</div>\n <div className=\"text-sm text-muted-foreground\">\n This response contains binary data that cannot be displayed as\n text.\n </div>\n <Button\n onClick={handleDownload}\n className=\"flex items-center gap-2\"\n disabled={!blob}\n >\n <DownloadIcon className=\"h-4 w-4\" />\n Download {fileName || \"file\"} ({humanFileSize(size)})\n </Button>\n </div>\n </div>\n ) : (\n <SyntaxHighlight\n className=\"text-xs flex-1\"\n embedded\n fullHeight\n language={\n view === \"types\"\n ? \"typescript\"\n : view === \"raw\"\n ? jsonContent\n ? \"plain\"\n : detectedLanguage\n : \"json\"\n }\n code={\n (view === \"raw\"\n ? body\n : view === \"types\"\n ? types.data?.lines.join(\"\\n\")\n : beautifiedBody) ?? \"\"\n }\n />\n )}\n </div>\n </>\n );\n};\n","import type { UseMutationResult } from \"@tanstack/react-query\";\nimport { SendIcon, UnplugIcon } from \"lucide-react\";\nimport { Spinner } from \"zudoku/components\";\nimport { Alert, AlertDescription, AlertTitle } from \"zudoku/ui/Alert.js\";\nimport { Button } from \"../../../../ui/Button.js\";\nimport { cn } from \"../../../../util/cn.js\";\nimport type { PlaygroundResult } from \"../Playground.js\";\nimport ResponseStatusBar from \"./ResponseStatusBar.js\";\nimport { ResponseTab } from \"./ResponseTab.js\";\n\nexport const ResultPanel = ({\n queryMutation,\n showLongRunningWarning,\n onCancel,\n tip,\n isFinished,\n progress,\n}: {\n // biome-ignore lint/suspicious/noExplicitAny: Allow any type\n queryMutation: UseMutationResult<PlaygroundResult, Error, any>;\n showLongRunningWarning?: boolean;\n onCancel?: () => void;\n isFinished: boolean;\n progress: number;\n tip?: React.ReactNode;\n}) => {\n return (\n <div className=\"flex flex-col overflow-y-auto h-[80vh] bg-muted/50\">\n {(queryMutation.isPending || queryMutation.data) && (\n <ResponseStatusBar\n status={queryMutation.data?.status}\n time={queryMutation.data?.time}\n size={queryMutation.data?.size}\n isFinished={isFinished}\n progress={progress}\n />\n )}\n {queryMutation.error ? (\n <div className=\"max-w-2/3 mx-auto mt-20\">\n <Alert>\n <UnplugIcon size={24} strokeWidth={1.5} className=\"me-5\" />\n <AlertTitle>Request failed</AlertTitle>\n <AlertDescription>\n {queryMutation.error.message ||\n String(queryMutation.error) ||\n \"Unexpected error\"}\n </AlertDescription>\n </Alert>\n </div>\n ) : queryMutation.data ? (\n <ResponseTab\n request={queryMutation.data.request}\n size={queryMutation.data.size}\n headers={queryMutation.data.headers}\n body={queryMutation.data.body}\n isBinary={queryMutation.data.isBinary}\n fileName={queryMutation.data.fileName}\n blob={queryMutation.data.blob}\n />\n ) : queryMutation.isPending ? (\n <div className=\"grid place-items-center h-full\">\n <div className=\"flex flex-col gap-2 items-center mt-20\">\n <Spinner />\n <div\n className={cn(\n \"opacity-0 pointer-events-none transition-opacity h-20 text-sm text-muted-foreground duration-300 flex flex-col gap-2 items-center\",\n showLongRunningWarning && \"opacity-100 pointer-events-auto\",\n )}\n >\n Looks like the request is taking longer than expected.\n <Button\n type=\"button\"\n onClick={onCancel}\n size=\"sm\"\n className=\"w-fit\"\n variant=\"outline\"\n >\n Cancel\n </Button>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"h-full grid place-items-center\">\n <div className=\"flex flex-col gap-4 items-center\">\n <SendIcon\n size={64}\n className=\"text-muted-foreground\"\n strokeWidth={1.2}\n />\n <span className=\"text-[16px] font-semibold text-muted-foreground\">\n Send your first request\n </span>\n {tip}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ResultPanel;\n","import { create } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { syncZustandState } from \"../../../util/syncZustandState.js\";\n\ntype RememberSkipLoginState = {\n skipLogin: boolean;\n setSkipLogin: (skipLogin: boolean) => void;\n};\n\nexport const useRememberSkipLoginDialog = create<RememberSkipLoginState>()(\n persist(\n (set) => ({\n skipLogin: false,\n setSkipLogin: (skipLogin: boolean) => set({ skipLogin }),\n }),\n {\n name: \"remember-skip-login\",\n storage: createJSONStorage(() => sessionStorage),\n },\n ),\n);\n\nsyncZustandState(useRememberSkipLoginDialog);\n","import { useNProgress } from \"@tanem/react-nprogress\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport {\n CheckIcon,\n CopyIcon,\n IdCardLanyardIcon,\n ShapesIcon,\n} from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState, useTransition } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { Collapsible, CollapsibleContent } from \"zudoku/ui/Collapsible.js\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"zudoku/ui/Select.js\";\nimport { TooltipProvider } from \"zudoku/ui/Tooltip.js\";\nimport { useApiIdentities } from \"../../../components/context/ZudokuContext.js\";\nimport { useHotkey } from \"../../../hooks/useHotkey.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { useCopyToClipboard } from \"../../../util/useCopyToClipboard.js\";\nimport { useLatest } from \"../../../util/useLatest.js\";\nimport type { MediaTypeObject } from \"../graphql/graphql.js\";\nimport { useSelectedServer } from \"../state.js\";\nimport BodyPanel from \"./BodyPanel.js\";\nimport {\n CollapsibleHeader,\n CollapsibleHeaderTrigger,\n} from \"./CollapsibleHeader.js\";\nimport { createUrl } from \"./createUrl.js\";\nimport { extractFileName, isBinaryContentType } from \"./fileUtils.js\";\nimport { Headers } from \"./Headers.js\";\nimport { IdentityDialog } from \"./IdentityDialog.js\";\nimport IdentitySelector from \"./IdentitySelector.js\";\nimport { PathParams } from \"./PathParams.js\";\nimport { QueryParams } from \"./QueryParams.js\";\nimport RequestLoginDialog from \"./RequestLoginDialog.js\";\nimport { useIdentityStore } from \"./rememberedIdentity.js\";\nimport { UrlPath } from \"./request-panel/UrlPath.js\";\nimport { UrlQueryParams } from \"./request-panel/UrlQueryParams.js\";\nimport { ResultPanel } from \"./result-panel/ResultPanel.js\";\nimport { useRememberSkipLoginDialog } from \"./useRememberSkipLoginDialog.js\";\n\nexport const NO_IDENTITY = \"__none\";\n\nexport type Header = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n isRequired?: boolean;\n enum?: string[];\n type?: string;\n};\n\nexport type QueryParam = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n isRequired?: boolean;\n enum?: string[];\n type?: string;\n};\n\nexport type PathParam = {\n name: string;\n defaultValue?: string;\n isRequired?: boolean;\n};\n\nexport type PlaygroundForm = {\n body: string;\n bodyMode?: \"text\" | \"file\" | \"multipart\";\n file?: File | null;\n multipartFormFields: Array<{\n name: string;\n value: File | string;\n active: boolean;\n }>;\n queryParams: Array<{\n name: string;\n value: string;\n active: boolean;\n enum?: string[];\n }>;\n pathParams: Array<{ name: string; value: string }>;\n headers: Array<{\n name: string;\n value: string;\n active: boolean;\n enum?: string[];\n }>;\n identity?: string;\n};\n\nexport type PlaygroundResult = {\n status: number;\n headers: Array<[string, string]>;\n size: number;\n body: string;\n time: number;\n isBinary?: boolean;\n fileName?: string;\n blob?: Blob;\n request: {\n method: string;\n url: string;\n headers: Array<[string, string]>;\n body?: string;\n };\n};\n\nexport type PlaygroundContentProps = {\n server?: string;\n servers?: string[];\n url: string;\n method: string;\n headers?: Header[];\n queryParams?: QueryParam[];\n pathParams?: PathParam[];\n defaultBody?: string;\n examples?: MediaTypeObject[];\n requiresLogin?: boolean;\n onLogin?: () => void;\n onSignUp?: () => void;\n};\n\nexport const Playground = ({\n server,\n servers = [],\n url,\n method,\n headers = [],\n queryParams = [],\n pathParams = [],\n defaultBody = \"\",\n examples,\n requiresLogin = false,\n onLogin,\n onSignUp,\n}: PlaygroundContentProps) => {\n const { selectedServer, setSelectedServer } = useSelectedServer(\n servers.map((url) => ({ url })),\n );\n const [showSelectIdentity, setShowSelectIdentity] = useState(false);\n const identities = useApiIdentities();\n const { setRememberedIdentity, getRememberedIdentity } = useIdentityStore();\n const [, startTransition] = useTransition();\n const { skipLogin, setSkipLogin } = useRememberSkipLoginDialog();\n const [isLoginDialogDismissed, setIsLoginDialogDismissed] = useState(false);\n const [showLongRunningWarning, setShowLongRunningWarning] = useState(false);\n const abortControllerRef = useRef<AbortController | undefined>(undefined);\n const latestSetRememberedIdentity = useLatest(setRememberedIdentity);\n const formRef = useRef<HTMLFormElement>(null);\n\n const { label: hotkeyLabel } = useHotkey(\"meta+enter\", () => {\n formRef.current?.requestSubmit();\n });\n\n const pathParamOrder =\n url.match(/\\{([^}]+)\\}/g)?.map((match) => match.slice(1, -1)) ?? [];\n const sortedPathParams = [...pathParams].sort(\n (a, b) => pathParamOrder.indexOf(a.name) - pathParamOrder.indexOf(b.name),\n );\n\n const { register, control, handleSubmit, watch, setValue, ...form } =\n useForm<PlaygroundForm>({\n defaultValues: {\n body: defaultBody,\n bodyMode: \"text\",\n file: null,\n multipartFormFields: [],\n queryParams:\n queryParams.length > 0\n ? queryParams.map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n active: param.defaultActive ?? false,\n enum: param.enum ?? [],\n }))\n : [{ name: \"\", value: \"\", active: false, enum: [] }],\n pathParams: sortedPathParams.map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n })),\n headers:\n headers.length > 0\n ? headers.map((header) => ({\n name: header.name,\n value: header.defaultValue ?? \"\",\n active: header.defaultActive ?? false,\n }))\n : [{ name: \"\", value: \"\", active: false }],\n identity: getRememberedIdentity([\n NO_IDENTITY,\n ...(identities.data?.map((i) => i.id) ?? []),\n ]),\n },\n });\n const identity = watch(\"identity\");\n\n const authorizationFields = useMemo(\n () => identities.data?.find((i) => i.id === identity)?.authorizationFields,\n [identities.data, identity],\n );\n\n useEffect(() => {\n if (identity) {\n latestSetRememberedIdentity.current(identity);\n }\n }, [latestSetRememberedIdentity, identity]);\n\n const queryMutation = useMutation({\n gcTime: 0,\n mutationFn: async (data: PlaygroundForm) => {\n const start = performance.now();\n\n const headers = new window.Headers(\n data.headers\n .filter((h) => h.name && h.active)\n .map<[string, string]>((h) => [h.name, h.value]),\n );\n\n let body: string | FormData | File | undefined;\n\n switch (data.bodyMode) {\n case \"file\":\n body = data.file || undefined;\n headers.delete(\"Content-Type\");\n break;\n case \"multipart\": {\n const formData = new FormData();\n data.multipartFormFields\n ?.filter((field) => field.name && field.active)\n .forEach((field) => formData.append(field.name, field.value));\n\n body = formData;\n headers.delete(\"Content-Type\");\n break;\n }\n default:\n body = data.body || undefined;\n break;\n }\n\n const request = new Request(\n createUrl(server ?? selectedServer, url, data),\n {\n method,\n headers,\n body: [\"GET\", \"HEAD\"].includes(method.toUpperCase()) ? null : body,\n },\n );\n\n if (data.identity !== NO_IDENTITY) {\n await identities.data\n ?.find((i) => i.id === data.identity)\n ?.authorizeRequest(request);\n }\n\n const warningTimeout = setTimeout(\n () => setShowLongRunningWarning(true),\n 3210,\n );\n abortControllerRef.current = new AbortController();\n\n abortControllerRef.current.signal.addEventListener(\"abort\", () => {\n clearTimeout(warningTimeout);\n });\n\n try {\n const response = await fetch(request, {\n cache: \"no-store\",\n signal: abortControllerRef.current.signal,\n });\n\n clearTimeout(warningTimeout);\n setShowLongRunningWarning(false);\n\n const time = performance.now() - start;\n const url = new URL(request.url);\n const responseHeaders = Array.from(response.headers.entries());\n const contentType = response.headers.get(\"content-type\") || \"\";\n const isBinary = isBinaryContentType(contentType);\n\n let body = \"\";\n let blob: Blob | undefined;\n let fileName: string | undefined;\n\n if (isBinary) {\n blob = await response.blob();\n fileName = extractFileName(responseHeaders, request.url);\n body = `Binary content (${contentType})`;\n } else {\n body = await response.text();\n }\n\n const responseSize = response.headers.get(\"content-length\");\n\n let requestBody = \"\";\n\n switch (data.bodyMode) {\n case \"text\":\n requestBody = data.body;\n break;\n case \"file\":\n requestBody = `[File: ${data.file?.name ?? \"Unknown\"}]`;\n break;\n case \"multipart\":\n requestBody = \"[Multipart Form Data]\\n\";\n requestBody += data.multipartFormFields\n ?.filter((f) => f.name && f.active)\n .map((f) =>\n f.value instanceof File\n ? `${f.name}: [File: ${f.value.name}]`\n : `${f.name}: ${f.value}`,\n )\n .join(\"\\n\");\n break;\n default:\n requestBody = data.body;\n break;\n }\n\n return {\n status: response.status,\n headers: responseHeaders,\n size: responseSize ? Number(responseSize) : body.length,\n body,\n time,\n isBinary,\n fileName,\n blob,\n request: {\n method: request.method.toUpperCase(),\n url: request.url,\n headers: [\n [\"Host\", url.host],\n [\"User-Agent\", \"Zudoku Playground\"],\n ...Array.from(request.headers.entries()),\n ],\n body: requestBody,\n },\n } satisfies PlaygroundResult;\n } catch (error) {\n clearTimeout(warningTimeout);\n setShowLongRunningWarning(false);\n if (error instanceof TypeError) {\n throw new Error(\n \"The request failed, possibly due to network issues or CORS policy.\",\n );\n } else {\n throw error;\n }\n }\n },\n });\n\n const isRequestAnimating = queryMutation.isPending;\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => setIsAnimating(isRequestAnimating), 100);\n return () => clearTimeout(timer);\n }, [isRequestAnimating]);\n\n const { isFinished, progress } = useNProgress({ isAnimating });\n\n useEffect(() => {\n return () => {\n abortControllerRef.current?.abort();\n };\n }, []);\n\n const serverSelect = (\n <div className=\"inline-block opacity-50 hover:opacity-100 transition\">\n {server ? (\n <span>{server.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\")}</span>\n ) : (\n servers.length > 1 && (\n <Select\n onValueChange={(value) => {\n startTransition(() => setSelectedServer(value));\n }}\n value={selectedServer}\n defaultValue={selectedServer}\n >\n <SelectTrigger className=\"p-0 h-fit shadow-none border-none flex-row-reverse bg-transparent text-xs gap-0.5 translate-y-[4px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {servers.map((s) => (\n <SelectItem key={s} value={s}>\n {s.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\")}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n )}\n </div>\n );\n\n const showLogin = requiresLogin && !skipLogin && !isLoginDialogDismissed;\n const isBodySupported = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n );\n const [isCopied, copyToClipboard] = useCopyToClipboard();\n\n return (\n <FormProvider\n {...{ register, control, handleSubmit, watch, setValue, ...form }}\n >\n <TooltipProvider delayDuration={150}>\n <form\n ref={formRef}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && e.target instanceof HTMLInputElement) {\n e.preventDefault();\n }\n }}\n onSubmit={handleSubmit((data) => {\n if (identities.data?.length === 0 || data.identity) {\n queryMutation.mutate(data);\n } else {\n setShowSelectIdentity(true);\n }\n })}\n className=\"relative\"\n >\n <IdentityDialog\n identities={identities.data ?? []}\n open={showSelectIdentity}\n onOpenChange={setShowSelectIdentity}\n onSubmit={({ rememberedIdentity, identity }) => {\n if (rememberedIdentity) {\n setValue(\"identity\", identity ?? NO_IDENTITY);\n }\n setShowSelectIdentity(false);\n queryMutation.mutate({ ...form.getValues(), identity });\n }}\n />\n <RequestLoginDialog\n open={showLogin}\n setOpen={(open) => {\n if (!open) {\n setIsLoginDialogDismissed(true);\n }\n }}\n onSkip={(rememberSkip) => {\n setIsLoginDialogDismissed(true);\n if (rememberSkip) {\n setSkipLogin(true);\n }\n }}\n onSignUp={onSignUp}\n onLogin={onLogin}\n />\n\n <div className=\"grid grid-cols-[1fr_1px_1fr] text-sm\">\n <div className=\"col-span-3 p-4 border-b flex gap-2 items-stretch\">\n <div className=\"flex flex-1 items-center w-full border rounded-md relative overflow-hidden\">\n <div className=\"border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center\">\n {method.toUpperCase()}\n </div>\n <div className=\"items-center px-2 font-mono text-xs break-all leading-6 relative h-full w-full\">\n <div className=\"h-full py-1.5\">\n {serverSelect}\n <UrlPath url={url} />\n <UrlQueryParams />\n </div>\n </div>\n <div className=\"px-1\">\n <Button\n type=\"button\"\n onClick={() => {\n copyToClipboard(\n createUrl(\n server ?? selectedServer,\n url,\n form.getValues(),\n ).toString(),\n );\n }}\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\n \"hover:opacity-100 transition\",\n isCopied ? \"text-emerald-600 opacity-100\" : \"opacity-50\",\n )}\n >\n {isCopied ? (\n <CheckIcon className=\"text-green-500\" size={14} />\n ) : (\n <CopyIcon size={14} />\n )}\n </Button>\n </div>\n </div>\n\n <Button\n type=\"submit\"\n variant={queryMutation.isPending ? \"destructive\" : \"default\"}\n onClick={(e) => {\n if (queryMutation.isPending) {\n abortControllerRef.current?.abort(\n \"Request cancelled by user\",\n );\n e.preventDefault();\n }\n }}\n className=\"w-18\"\n >\n {queryMutation.isPending ? \"Cancel\" : \"Send\"}\n </Button>\n </div>\n <div className=\"relative overflow-y-auto h-[80vh]\">\n {identities.data?.length !== 0 && (\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger>\n <IdCardLanyardIcon size={16} />\n <CollapsibleHeader>Authentication</CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent className=\"CollapsibleContent\">\n <IdentitySelector\n value={identity}\n identities={identities.data ?? []}\n setValue={(value) => setValue(\"identity\", value)}\n />\n </CollapsibleContent>\n </Collapsible>\n )}\n\n {sortedPathParams.length > 0 && (\n <Collapsible defaultOpen>\n <CollapsibleHeaderTrigger>\n <ShapesIcon size={16} />\n <CollapsibleHeader>Path Parameters</CollapsibleHeader>\n </CollapsibleHeaderTrigger>\n <CollapsibleContent className=\"CollapsibleContent\">\n <PathParams url={url} control={control} />\n </CollapsibleContent>\n </Collapsible>\n )}\n\n <QueryParams control={control} schemaQueryParams={queryParams} />\n\n <Headers\n control={control}\n schemaHeaders={headers}\n lockedHeaders={authorizationFields?.headers}\n />\n {isBodySupported && <BodyPanel content={examples} />}\n </div>\n <div className=\"w-full bg-muted-foreground/20\" />\n <ResultPanel\n queryMutation={queryMutation}\n showLongRunningWarning={showLongRunningWarning}\n isFinished={isFinished}\n progress={progress}\n tip={\n <div className=\"text-xs w-full\">\n <span className=\"text-muted-foreground\">\n Press{\" \"}\n <kbd className=\"text-foreground border rounded m-0.5 px-1 py-0.5 capitalize\">\n {hotkeyLabel.join(\" + \")}\n </kbd>{\" \"}\n to send a request\n </span>\n </div>\n }\n onCancel={() => {\n abortControllerRef.current?.abort(\n \"Request cancelled by the user\",\n );\n setShowLongRunningWarning(false);\n }}\n />\n </div>\n </form>\n </TooltipProvider>\n </FormProvider>\n );\n};\n\nexport default Playground;\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { PlayIcon } from \"lucide-react\";\nimport { type PropsWithChildren, useState } from \"react\";\nimport { useAuth } from \"zudoku/hooks\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n DialogTrigger,\n} from \"zudoku/ui/Dialog.js\";\nimport { Playground, type PlaygroundContentProps } from \"./Playground.js\";\n\nexport type PlaygroundDialogProps = PropsWithChildren<PlaygroundContentProps>;\n\nconst PlaygroundDialog = (props: PlaygroundDialogProps) => {\n const [open, setOpen] = useState(false);\n const { isAuthEnabled, login, signup, isPending, isAuthenticated } =\n useAuth();\n\n return (\n <Dialog onOpenChange={(open) => setOpen(open)}>\n <DialogTrigger asChild>\n {props.children ?? (\n <Button variant=\"ghost\" size=\"icon-xs\" className=\"group\">\n <PlayIcon\n className=\"fill-muted-foreground group-hover:fill-foreground transition\"\n size={16}\n strokeWidth={1.5}\n />\n </Button>\n )}\n </DialogTrigger>\n\n <DialogContent\n className=\"max-w-screen-xl! w-full overflow-hidden p-0\"\n aria-describedby={undefined}\n showCloseButton={true}\n >\n <VisuallyHidden>\n <DialogTitle>Playground</DialogTitle>\n </VisuallyHidden>\n {open && (\n <Playground\n requiresLogin={isAuthEnabled && !isAuthenticated && !isPending}\n onLogin={() => login()}\n onSignUp={() => signup()}\n {...props}\n />\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { PlaygroundDialog };\n","import type { ColorMap } from \"../../../components/navigation/NavigationBadge.js\";\n\nexport const MethodColorMap: Record<string, keyof typeof ColorMap> = {\n get: \"green\",\n post: \"blue\",\n put: \"yellow\",\n delete: \"red\",\n patch: \"purple\",\n options: \"gray\",\n head: \"gray\",\n};\n","import type { NavigationItem } from \"../../../../config/validators/NavigationSchema.js\";\nimport type { OperationResult } from \"../index.js\";\nimport { MethodColorMap } from \"./methodColorMap.js\";\n\nexport const createNavigationCategory = ({\n label,\n path,\n operations,\n collapsible,\n collapsed,\n}: {\n label: string;\n path: string;\n operations: OperationResult[];\n collapsible?: boolean;\n collapsed?: boolean;\n}): NavigationItem => ({\n type: \"category\",\n label,\n link: {\n type: \"doc\" as const,\n path,\n file: path,\n label,\n },\n collapsible,\n collapsed,\n items: operations.map((operation) => ({\n type: \"link\" as const,\n label: operation.summary ?? operation.path,\n to: `${path}#${operation.slug}`,\n badge: {\n label: operation.method,\n // biome-ignore lint/style/noNonNullAssertion: is guaranteed to be defined\n color: MethodColorMap[operation.method.toLowerCase()]!,\n invert: true,\n },\n })),\n});\n","import { createContext, useContext } from \"react\";\nimport type { OasPluginContext } from \"./interfaces.js\";\n\nconst OasContext = createContext<{ config: OasPluginContext } | undefined>(\n undefined,\n);\n\nexport const OasConfigProvider = OasContext.Provider;\n\nexport const useOasConfig = () => {\n const ctx = useContext(OasContext);\n if (!ctx) {\n throw new Error(\"useOasConfig must be used within a OasConfigProvider\");\n }\n return ctx.config;\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport {\n generatePath,\n Navigate,\n type RouteObject,\n redirect,\n useLocation,\n useParams,\n} from \"react-router\";\nimport { joinUrl } from \"../../../util/joinUrl.js\";\nimport type { GraphQLClient } from \"../client/GraphQLClient.js\";\nimport { useCreateQuery } from \"../client/useCreateQuery.js\";\nimport { useOasConfig } from \"../context.js\";\nimport {\n GetNavigationOperationsQuery,\n type OpenApiPluginOptions,\n UNTAGGED_PATH,\n} from \"../index.js\";\nimport type { OasPluginConfig } from \"../interfaces.js\";\n\n// Creates the main provider route that wraps operation routes.\nconst createOasProvider = (opts: {\n routePath: string;\n basePath: string;\n version?: string;\n routes: RouteObject[];\n client: GraphQLClient;\n config: OpenApiPluginOptions;\n}): RouteObject => ({\n path: opts.routePath,\n async lazy() {\n const { OasProvider } = await import(\"../OasProvider.js\");\n return {\n element: (\n <OasProvider\n basePath={opts.basePath}\n version={opts.version}\n client={opts.client}\n config={opts.config}\n />\n ),\n };\n },\n children: opts.routes,\n});\n\n// Creates a route for displaying the operation list used for both tagged and untagged operations.\nconst createRoute = ({\n path,\n tag,\n untagged,\n}: {\n path: string;\n tag?: string;\n untagged?: boolean;\n}): RouteObject => ({\n path,\n async lazy() {\n const { OperationList } = await import(\"../OperationList.js\");\n return { element: <OperationList tag={tag} untagged={untagged} /> };\n },\n});\n\nconst NonTagPagesOperationList = ({\n render,\n path,\n}: {\n render: (tag: string) => React.ReactNode;\n path: string;\n}) => {\n const { type, input } = useOasConfig();\n const { tag: currentTag } = useParams();\n const location = useLocation();\n const query = useCreateQuery(GetNavigationOperationsQuery, { type, input });\n const {\n data: { schema },\n } = useSuspenseQuery(query);\n\n const firstTag = schema.tags.at(0);\n\n if (!currentTag && firstTag?.slug) {\n return (\n <Navigate\n to={{\n pathname: generatePath(path, { tag: firstTag.slug }),\n search: location.search,\n }}\n />\n );\n }\n\n if (currentTag && schema.tags.some((t) => t.slug === currentTag)) {\n return render(currentTag);\n }\n\n return null;\n};\n\nconst createNonTagPagesRoute = ({ path }: { path: string }): RouteObject => ({\n path,\n async lazy() {\n const { OperationList } = await import(\"../OperationList.js\");\n return {\n element: (\n <NonTagPagesOperationList\n path={path}\n render={(tag) => <OperationList tag={tag} />}\n />\n ),\n };\n },\n});\n\nconst createAdditionalRoutes = (basePath: string) => [\n // Category without tagged operations\n createRoute({\n path: joinUrl(basePath, UNTAGGED_PATH),\n untagged: true,\n }),\n // Schema list route\n {\n path: joinUrl(basePath, \"~schemas\"),\n lazy: async () => {\n const { SchemaList } = await import(\"../SchemaList.js\");\n return { element: <SchemaList /> };\n },\n },\n];\n\n// Creates routes for a specific version, including tag-based routes and the untagged operations route.\nconst createVersionRoutes = (\n versionPath: string,\n tagPages: string[],\n): RouteObject[] => {\n const firstTagRoute = joinUrl(versionPath, tagPages.at(0) ?? UNTAGGED_PATH);\n\n return [\n // Redirect to first tag on the index route\n { index: true, loader: () => redirect(firstTagRoute) },\n // Create routes for each tag\n ...tagPages.map((tag) =>\n createRoute({\n path: joinUrl(versionPath, tag),\n tag,\n }),\n ),\n ...createAdditionalRoutes(versionPath),\n ];\n};\n\nexport const getVersionMetadata = (config: OasPluginConfig) => {\n if (config.type === \"raw\" || !Array.isArray(config.input)) {\n return { versions: [], labels: {} };\n }\n\n return {\n versions: config.input.map((v) => v.path),\n labels: Object.fromEntries(\n config.input.map((v) => [v.path, v.label ?? v.path]),\n ),\n };\n};\n\nexport const getRoutes = ({\n basePath,\n config,\n client,\n}: {\n client: GraphQLClient;\n config: OpenApiPluginOptions;\n basePath: string;\n}): RouteObject[] => {\n const tagPages = config.tagPages;\n const { versions } = getVersionMetadata(config);\n\n // If the config does not provide tag pages the catch-all\n // route handles all operations on a single page\n if (!tagPages) {\n // If there are versions, create versioned routes even without tag pages\n if (versions.length > 0) {\n const versionsInPath =\n versions.length > 1 ? [undefined, ...versions] : [undefined];\n\n return versionsInPath.map((version) => {\n const versionPath = joinUrl(basePath, version);\n return createOasProvider({\n basePath,\n version,\n routePath: versionPath,\n routes: [\n createNonTagPagesRoute({ path: `${versionPath}/:tag?` }),\n ...createAdditionalRoutes(versionPath),\n ],\n client,\n config,\n });\n });\n }\n\n // No versions, single route\n return [\n createOasProvider({\n basePath,\n routePath: basePath,\n routes: [\n createNonTagPagesRoute({ path: `${basePath}/:tag?` }),\n ...createAdditionalRoutes(basePath),\n ],\n client,\n config,\n }),\n ];\n }\n\n // The latest version always is added as index path\n const versionsInPath =\n versions.length > 1 ? [undefined, ...versions] : [undefined];\n\n return versionsInPath.map((version) => {\n const versionPath = joinUrl(basePath, version);\n return createOasProvider({\n basePath,\n version,\n routePath: versionPath,\n routes: createVersionRoutes(versionPath, tagPages),\n client,\n config,\n });\n });\n};\n","import { CirclePlayIcon } from \"lucide-react\";\nimport type { PropsWithChildren } from \"react\";\nimport { matchPath } from \"react-router\";\nimport type { NavigationItem } from \"../../../config/validators/NavigationSchema.js\";\nimport type { ZudokuPlugin } from \"../../core/plugins.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { joinUrl } from \"../../util/joinUrl.js\";\nimport { GraphQLClient } from \"./client/GraphQLClient.js\";\nimport { createQuery } from \"./client/useCreateQuery.js\";\nimport type { GetNavigationOperationsQuery as GetNavigationOperationsQueryResult } from \"./graphql/graphql.js\";\nimport { graphql } from \"./graphql/index.js\";\nimport type { OasPluginConfig } from \"./interfaces.js\";\nimport type { PlaygroundContentProps } from \"./playground/Playground.js\";\nimport { PlaygroundDialog } from \"./playground/PlaygroundDialog.js\";\nimport { createNavigationCategory } from \"./util/createNavigationCategory.js\";\nimport { getRoutes, getVersionMetadata } from \"./util/getRoutes.js\";\n\nexport const GetNavigationOperationsQuery = graphql(`\n query GetNavigationOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n extensions\n tags {\n slug\n name\n extensions\n operations {\n summary\n slug\n method\n operationId\n path\n }\n }\n components {\n schemas {\n __typename\n }\n }\n }\n }\n`);\n\nexport type OperationResult =\n GetNavigationOperationsQueryResult[\"schema\"][\"tags\"][number][\"operations\"][number];\n\nexport type OpenApiPluginOptions = OasPluginConfig;\n\nexport const UNTAGGED_PATH = \"~endpoints\";\n\nexport const openApiPlugin = (config: OasPluginConfig): ZudokuPlugin => {\n const basePath = joinUrl(config.path);\n const client = new GraphQLClient(config);\n\n return {\n getHead: () => {\n if (config.type === \"url\" && !config.skipPreload) {\n const urls = Array.isArray(config.input)\n ? config.input.map((v) => v.input)\n : [config.input];\n\n return urls.map((url) => (\n <link\n key={url}\n href={url}\n rel=\"preload\"\n as=\"fetch\"\n crossOrigin=\"anonymous\"\n />\n ));\n }\n\n if (config.server) {\n return <link rel=\"preconnect\" href={config.server} />;\n }\n },\n getMdxComponents: () => ({\n OpenPlaygroundButton: ({\n server,\n method = \"get\",\n url = \"/\",\n children,\n ...props\n }: PropsWithChildren<Partial<PlaygroundContentProps>>) => {\n if (!server) {\n throw new Error(\"Server is required\");\n }\n\n return (\n <PlaygroundDialog\n url={url}\n method={method}\n server={server}\n {...props}\n >\n <Button className=\"gap-2 items-center\" variant=\"outline\">\n {children ?? (\n <>\n Open in Playground\n <CirclePlayIcon size={16} />\n </>\n )}\n </Button>\n </PlaygroundDialog>\n );\n },\n }),\n getNavigation: async (path, context) => {\n if (!matchPath({ path: basePath, end: false }, path)) {\n return [];\n }\n\n const match = matchPath(\n { path: `${basePath}/:version?/:tag`, end: true },\n path,\n );\n\n try {\n const versionParam = match?.params.version;\n const { versions } = getVersionMetadata(config);\n const version = versionParam ?? versions.at(0);\n const { type } = config;\n\n const input = Array.isArray(config.input)\n ? (config.input.find((v) => v.path === version)?.input ??\n config.input[0]?.input)\n : config.input;\n\n const query = createQuery(client, GetNavigationOperationsQuery, {\n type,\n input,\n });\n const data = await context.queryClient.ensureQueryData(query);\n\n const tagCategories = new Map(\n data.schema.tags\n .filter((tag) => tag.name && tag.operations.length > 0)\n .map((tag) => {\n if (!tag.name) {\n throw new Error(`Tag ${tag.slug} has no name`);\n }\n\n const categoryPath = joinUrl(basePath, versionParam, tag.slug);\n\n const isCollapsed =\n tag.extensions?.[\"x-zudoku-collapsed\"] ??\n !config.options?.expandAllTags;\n const isCollapsible =\n tag.extensions?.[\"x-zudoku-collapsible\"] ?? true;\n\n return [\n tag.name,\n createNavigationCategory({\n label: tag.extensions?.[\"x-displayName\"] ?? tag.name,\n path: categoryPath,\n operations: tag.operations,\n collapsed: isCollapsed,\n collapsible: isCollapsible,\n }),\n ];\n }),\n );\n\n const tagGroups =\n (data.schema.extensions?.[\"x-tagGroups\"] as\n | { name: string; tags: string[] }[]\n | undefined) ?? [];\n\n const groupedTags = new Set(\n tagGroups.flatMap((group) =>\n group.tags.filter((name) => tagCategories.has(name)),\n ),\n );\n\n const groupedCategories: NavigationItem[] = tagGroups.flatMap(\n (group) => {\n const items = group.tags\n .map((name) => tagCategories.get(name))\n .filter(Boolean) as NavigationItem[];\n\n if (items.length === 0) {\n return [];\n }\n return [\n {\n type: \"category\",\n label: group.name,\n items,\n collapsible: true,\n collapsed: !config.options?.expandAllTags,\n },\n ];\n },\n );\n\n const categories: NavigationItem[] = [\n ...groupedCategories,\n ...Array.from(tagCategories.entries())\n .filter(([name]) => !groupedTags.has(name))\n .map(([, cat]) => cat),\n ];\n\n const untaggedOperations = data.schema.tags.find(\n (tag) => !tag.name,\n )?.operations;\n\n if (untaggedOperations && untaggedOperations.length > 0) {\n categories.push(\n createNavigationCategory({\n label: categories.length === 0 ? \"Endpoints\" : \"Other endpoints\",\n path: joinUrl(basePath, versionParam, UNTAGGED_PATH),\n operations: untaggedOperations,\n collapsed: !config.options?.expandAllTags,\n }),\n );\n }\n\n if (data.schema.components?.schemas?.length) {\n categories.push({\n type: \"link\" as const,\n label: \"Schemas\",\n to: joinUrl(basePath, versionParam, \"~schemas\"),\n });\n }\n\n return categories;\n } catch {\n return [];\n }\n },\n getRoutes: () => getRoutes({ basePath, config, client }),\n };\n};\n"],"names":["localServerPromise","throwIfError","response","ZudokuError","GraphQLClient","config","#getLocalServer","m","#executeFetch","init","query","variables","operationName","result","devAssert","condition","message","isObjectLike","value","invariant","LineRegExp","getLocation","source","position","lastLineStart","line","match","printLocation","location","printSourceLocation","sourceLocation","firstLineColumnOffset","body","lineIndex","lineOffset","lineNum","columnOffset","columnNum","locationStr","lines","locationLine","subLineIndex","subLineColumnNum","subLines","i","printPrefixedLines","subLine","existingLines","_","padLen","prefix","toNormalizedOptions","args","firstArg","GraphQLError","rawArgs","_this$nodes","_nodeLocations$","_ref","nodes","positions","path","originalError","extensions","undefinedIfEmpty","nodeLocations","node","loc","pos","originalExtensions","output","formattedError","array","syntaxError","description","Location","startToken","endToken","Token","kind","start","end","column","QueryDocumentKeys","kindValues","isNode","maybeNode","maybeKind","OperationTypeNode","isWhiteSpace","code","isDigit","isLetter","isNameStart","isNameContinue","dedentBlockStringLines","_firstNonEmptyLine2","commonIndent","firstNonEmptyLine","lastNonEmptyLine","_firstNonEmptyLine","indent","leadingWhitespace","str","printBlockString","options","escapedValue","isSingleLine","forceLeadingNewLine","hasTrailingTripleQuotes","hasTrailingQuote","hasTrailingSlash","forceTrailingNewline","printAsMultipleLines","skipLeadingNewLine","TokenKind","Lexer","startOfFileToken","token","nextToken","readNextToken","isPunctuatorTokenKind","isUnicodeScalarValue","isSupplementaryCodePoint","isLeadingSurrogate","isTrailingSurrogate","printCodePointAt","lexer","char","createToken","col","bodyLength","readComment","readBlockString","readString","readNumber","readName","firstCode","isFloat","readDigits","chunkStart","escape","readEscapedUnicodeVariableWidth","readEscapedUnicodeFixedWidth","readEscapedCharacter","point","size","readHexDigit","read16BitHexCode","trailingCode","lineStart","currentLine","blockLines","MAX_ARRAY_LENGTH","MAX_RECURSIVE_DEPTH","inspect","formatValue","seenValues","formatObjectValue","previouslySeenValues","isJSONable","jsonValue","formatArray","formatObject","object","entries","getObjectTag","key","len","remaining","items","tag","name","isProduction","instanceOf","constructor","_value$constructor","className","valueClassName","stringifiedValue","Source","locationOffset","isSource","stripIgnoredCharacters","sourceObj","strippedBody","wasLastAddedTokenNonPunctuator","currentToken","tokenKind","isNonPunctuator","tokenBody","GraphQLContext","createContext","GraphQLProvider","children","client","createQuery","useCreateQuery","graphQLClient","use","TypedDocumentString","__meta__","OperationsFragmentFragmentDoc","ServersQueryDocument","SchemaWarmupDocument","OperationsForTagDocument","GetSchemasDocument","GetServerQueryDocument","GetNavigationOperationsDocument","documents","types.ServersQueryDocument","types.OperationsFragmentFragmentDoc","types.SchemaWarmupDocument","types.OperationsForTagDocument","types.GetSchemasDocument","types.GetServerQueryDocument","types.GetNavigationOperationsDocument","graphql","Collapsible","props","CollapsiblePrimitive","CollapsibleTrigger","jsx","CollapsibleContent","getOS","userAgent","isAppleDevice","keymap","useHotkey","hotkey","callback","hotkeySanitized","meta","shift","alt","ctrl","callbackRef","useRef","useEffect","handler","event","useSelectedServerStore","create","persist","set","newServer","useSelectedServer","servers","selectedServer","setSelectedServer","useMemo","s","Textarea","React","ref","cn","humanFileSize","bytes","exponent","CollapsibleHeaderTrigger","jsxs","ChevronsDownUpIcon","ChevronsUpDownIcon","CollapsibleHeader","ExamplesDropdown","examples","onSelect","DropdownMenu","DropdownMenuTrigger","Button","PlusCircleIcon","DropdownMenuContent","mediaTypeObject","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuGroup","example","DropdownMenuItem","Input","type","createVariantComponent","cvx","MyVariant","asChild","Comp","Slot","ParamsGrid","ParamsGridItem","ParamsGridInput","ParamsGridRemoveButton","onClick","XIcon","Checkbox","CheckboxPrimitive","CheckIcon","MultipartField","index","manager","fieldFileInputRef","fieldValue","PaperclipIcon","TrashIcon","Fragment","e","file","useKeyValueFieldManager","control","defaultValue","customIsEmpty","customShouldSetActive","internalSetValue","watch","setFocus","register","useFormContext","fields","append","remove","useFieldArray","watchedFields","lastEditedIndexRef","prevLengthRef","setValue","useCallback","field","isEmpty","item","shouldSetActive","emptyIndices","lowestRemovedIndex","indexToRemove","newLength","lastField","updates","shouldBeActive","startTransition","update","isFieldEmpty","createKeyDownHandler","next","previous","canNavigatePrevious","isAtStart","isAtEnd","getNameInputProps","getValueInputProps","getCheckboxProps","checked","getValue","getRemoveButtonProps","BodyPanel","content","headers","bodyMode","multipartFormFields","fileInputRef","isDragging","setIsDragging","useState","handleFileSelect","selectedFile","h","handleFileInputChange","handleDragOver","handleDragLeave","handleDrop","droppedFile","FileInput","ScanTextIcon","Grid2x2PlusIcon","ChevronDownIcon","mediaType","createUrl","host","data","filledPath","part","url","param","isBinaryContentType","contentType","extractFileName","contentDisposition","filenameMatch","fileName","Popover","PopoverPrimitive","PopoverContent","align","sideOffset","AutocompletePopover","onChange","placeholder","onEnterPress","onKeyDown","open","setOpen","dontClose","setDontClose","count","useCommandState","state","inputRef","PopoverAnchor","CommandInlineInput","el","CommandList","enumValue","CommandItem","selected","Autocomplete","shouldFilter","Command","headerOptions","Headers","schemaHeaders","lockedHeaders","formState","watchedHeaders","missingHeaders","hiddenHeadersIndex","f","lockedHeaderFields","TableOfContentsIcon","Tooltip","TooltipTrigger","LockIcon","TooltipContent","currentSchemaHeader","hasEnum","isHidden","nameInputProps","valueInputProps","CircleAlertIcon","v","labelVariants","cva","Label","LabelPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","Circle","IdentitySelector","identities","NO_IDENTITY","identity","IdentityDialog","onSubmit","onOpenChange","setIdentity","rememberedIdentity","setRememberedIdentity","Dialog","DialogContent","DialogTitle","DialogDescription","Card","DialogFooter","c2n","c","s2n","a","pastellize","hue","saturation","lightness","DATA_ATTR","usePastellizedColor","resolvedTheme","useTheme","ColorizedParam","slug","title","normalizedSlug","normalized","text","background","textColor","backgroundColor","borderColor","onMouseEnter","onMouseLeave","PathParams","sortedFields","b","Controller","QueryParams","schemaQueryParams","watchedQueryParams","requiredFields","hasSchemaParams","Unlink2Icon","currentParam","RequestLoginDialog","onSignUp","onLogin","onSkip","rememberSkip","setRememberSkip","handleSkip","useIdentityStore","get","availableIdentities","createJSONStorage","PathRenderer","renderParam","paramIndex","arr","matches","elements","lastIndex","originalValue","startIndex","UrlPath","pathParams","formValue","UrlQueryParams","urlQueryParams","p","ResponseCodeCircle","status","RealTimeCounter","spanRef","textRef","startTimeRef","animationFrameRef","updateTime","elapsed","useLayoutEffect","currentSpanRef","textNode","ResponseStatusBar","time","isFinished","progress","statusCodeMap","inferType","firstValue","generateInterface","obj","_indentation","propertyType","convertToTypes","json","mimeTypeToLanguage","mimeType","mime","detectLanguage","tryParseJson","sortHeadersByRelevance","priorityOrder","keyA","keyB","indexA","indexB","MAX_HEADERS_TO_SHOW","Row","RowContent","RowValue","header","isSecret","revealed","setRevealed","prev","SecretText","EyeOffIcon","EyeIcon","ResponseTab","request","isBinary","blob","detectedLanguage","jsonContent","beautifiedBody","view","setView","types","useQuery","handleDownload","link","sortedHeaders","CornerDownRightIcon","MinusCircleIcon","CornerDownLeftIcon","SquareCodeIcon","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","DownloadIcon","SyntaxHighlight","ResultPanel","queryMutation","showLongRunningWarning","onCancel","tip","Alert","UnplugIcon","AlertTitle","AlertDescription","Spinner","SendIcon","useRememberSkipLoginDialog","skipLogin","syncZustandState","Playground","server","method","queryParams","defaultBody","requiresLogin","showSelectIdentity","setShowSelectIdentity","useApiIdentities","getRememberedIdentity","useTransition","setSkipLogin","isLoginDialogDismissed","setIsLoginDialogDismissed","setShowLongRunningWarning","abortControllerRef","latestSetRememberedIdentity","useLatest","formRef","hotkeyLabel","pathParamOrder","sortedPathParams","handleSubmit","form","useForm","authorizationFields","useMutation","formData","warningTimeout","responseHeaders","responseSize","requestBody","error","isRequestAnimating","isAnimating","setIsAnimating","timer","useNProgress","serverSelect","showLogin","isBodySupported","isCopied","copyToClipboard","useCopyToClipboard","FormProvider","TooltipProvider","CopyIcon","IdCardLanyardIcon","ShapesIcon","PlaygroundDialog","isAuthEnabled","login","signup","isPending","isAuthenticated","useAuth","DialogTrigger","PlayIcon","VisuallyHidden","MethodColorMap","createNavigationCategory","label","operations","collapsible","collapsed","operation","OasContext","OasConfigProvider","useOasConfig","ctx","useContext","createOasProvider","opts","OasProvider","createRoute","untagged","OperationList","NonTagPagesOperationList","render","input","currentTag","useParams","useLocation","GetNavigationOperationsQuery","schema","useSuspenseQuery","firstTag","Navigate","generatePath","t","createNonTagPagesRoute","createAdditionalRoutes","basePath","joinUrl","UNTAGGED_PATH","SchemaList","createVersionRoutes","versionPath","tagPages","firstTagRoute","redirect","getVersionMetadata","getRoutes","versions","version","openApiPlugin","CirclePlayIcon","context","matchPath","versionParam","tagCategories","categoryPath","isCollapsed","isCollapsible","tagGroups","groupedTags","group","categories","cat","untaggedOperations"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}
|