@andesine/pages 0.0.0-stage → 0.4.0
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/CHANGELOG.md +99 -0
- package/LICENSE +21 -0
- package/README.md +92 -2
- package/dist/answers.d.ts +6 -0
- package/dist/astro/content.astro +118 -0
- package/dist/astro/middleware.js +39 -0
- package/dist/astro/middleware.js.map +1 -0
- package/dist/astro/routes/answers.js +129 -0
- package/dist/astro/routes/answers.js.map +1 -0
- package/dist/astro/routes/entry-pages.js +22 -0
- package/dist/astro/routes/entry-pages.js.map +1 -0
- package/dist/astro/routes/llms-full.js +12 -0
- package/dist/astro/routes/llms-full.js.map +1 -0
- package/dist/astro/routes/llms.js +12 -0
- package/dist/astro/routes/llms.js.map +1 -0
- package/dist/astro/routes/markdown-alias.js +14 -0
- package/dist/astro/routes/markdown-alias.js.map +1 -0
- package/dist/astro/routes/markdown.js +12 -0
- package/dist/astro/routes/markdown.js.map +1 -0
- package/dist/astro/routes/not-found.astro +12 -0
- package/dist/astro/routes/robots.js +9 -0
- package/dist/astro/routes/robots.js.map +1 -0
- package/dist/astro/routes/search.js +42 -0
- package/dist/astro/routes/search.js.map +1 -0
- package/dist/astro/routes/sitemap.js +12 -0
- package/dist/astro/routes/sitemap.js.map +1 -0
- package/dist/astro/routes/skill.js +13 -0
- package/dist/astro/routes/skill.js.map +1 -0
- package/dist/astro/routes/skills.js +24 -0
- package/dist/astro/routes/skills.js.map +1 -0
- package/dist/astro/routes/social.js +91 -0
- package/dist/astro/routes/social.js.map +1 -0
- package/dist/astro/routes/static.astro +53 -0
- package/dist/astro/routes/well-known-llms.js +2 -0
- package/dist/astro.d.ts +34 -0
- package/dist/astro.js +60 -0
- package/dist/astro.js.map +1 -0
- package/dist/chunks/assets-D6WJmZ05.js +21 -0
- package/dist/chunks/assets-D6WJmZ05.js.map +1 -0
- package/dist/chunks/catalog-DU4BUrpw.js +28 -0
- package/dist/chunks/catalog-DU4BUrpw.js.map +1 -0
- package/dist/chunks/config-CuH5JSI4.js +184 -0
- package/dist/chunks/config-CuH5JSI4.js.map +1 -0
- package/dist/chunks/files-BxqiQzFj.js +62 -0
- package/dist/chunks/files-BxqiQzFj.js.map +1 -0
- package/dist/chunks/hash-D4piIIQ6.js +11 -0
- package/dist/chunks/hash-D4piIIQ6.js.map +1 -0
- package/dist/chunks/index-D8wL2B5s.d.ts +571 -0
- package/dist/chunks/index-vsu3hISM.d.ts +62 -0
- package/dist/chunks/limits-Ppc7BQPG.js +45 -0
- package/dist/chunks/limits-Ppc7BQPG.js.map +1 -0
- package/dist/chunks/markdown-DKJSQxR2.js +42 -0
- package/dist/chunks/markdown-DKJSQxR2.js.map +1 -0
- package/dist/chunks/mdx-components-CUUDTapN.d.ts +9 -0
- package/dist/chunks/normalize-DG5nxOLm.js +361 -0
- package/dist/chunks/normalize-DG5nxOLm.js.map +1 -0
- package/dist/chunks/paths-75QgA3Qs.js +16 -0
- package/dist/chunks/paths-75QgA3Qs.js.map +1 -0
- package/dist/chunks/prepare-lnuw_ycM.js +219 -0
- package/dist/chunks/prepare-lnuw_ycM.js.map +1 -0
- package/dist/chunks/read-DCv1lmcM.js +57 -0
- package/dist/chunks/read-DCv1lmcM.js.map +1 -0
- package/dist/chunks/request-DOuBHGQs.js +92 -0
- package/dist/chunks/request-DOuBHGQs.js.map +1 -0
- package/dist/chunks/response-CtzaKMWH.js +15 -0
- package/dist/chunks/response-CtzaKMWH.js.map +1 -0
- package/dist/chunks/site-DY-uZ0PP.js +419 -0
- package/dist/chunks/site-DY-uZ0PP.js.map +1 -0
- package/dist/chunks/skill-CBTGUHQH.js +85 -0
- package/dist/chunks/skill-CBTGUHQH.js.map +1 -0
- package/dist/chunks/sources-Cm6NdIen.js +236 -0
- package/dist/chunks/sources-Cm6NdIen.js.map +1 -0
- package/dist/chunks/stored-CabomV-C.js +354 -0
- package/dist/chunks/stored-CabomV-C.js.map +1 -0
- package/dist/chunks/stored-CcEfvCQH.js +475 -0
- package/dist/chunks/stored-CcEfvCQH.js.map +1 -0
- package/dist/chunks/types-DBzuXfSe.d.ts +53 -0
- package/dist/chunks/view-C-9ZM1zK.js +745 -0
- package/dist/chunks/view-C-9ZM1zK.js.map +1 -0
- package/dist/chunks/view-Dlf_VRI7.d.ts +151 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.js +295 -0
- package/dist/client.js.map +1 -0
- package/dist/collections.d.ts +7 -0
- package/dist/collections.js +215 -0
- package/dist/collections.js.map +1 -0
- package/dist/entry-pages.d.ts +10 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +16 -0
- package/dist/integration.js +435 -0
- package/dist/integration.js.map +1 -0
- package/dist/llms-full.d.ts +5 -0
- package/dist/llms.d.ts +5 -0
- package/dist/markdown-alias.d.ts +7 -0
- package/dist/markdown.d.ts +7 -0
- package/dist/middleware.d.ts +8 -0
- package/dist/robots.d.ts +5 -0
- package/dist/runtime.d.ts +81 -0
- package/dist/runtime.js +56 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scripts/restore-navigation.js +1 -0
- package/dist/search.d.ts +6 -0
- package/dist/sitemap.d.ts +5 -0
- package/dist/skill.d.ts +5 -0
- package/dist/skills.d.ts +10 -0
- package/dist/social.d.ts +7 -0
- package/dist/well-known-llms.d.ts +2 -0
- package/package.json +103 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-C-9ZM1zK.js","names":["maxDepth"],"sources":["../../src/sources/openapi/styles.ts","../../src/sources/openapi/samples.ts","../../src/sources/openapi/forms.ts","../../src/sources/openapi/examples.ts","../../src/sources/openapi/fields.ts","../../src/sources/openapi/view.ts"],"sourcesContent":["import type { ApiParameter } from \"./model\";\nimport { isObject } from \"./normalize\";\n\n/** A value in the default `simple` style of path and header parameters, e.g. `a,b`. */\nconst toSimpleValue = (value: unknown, encode: (value: unknown) => string = String): string => {\n if (Array.isArray(value)) return value.map(encode).join(\",\");\n if (isObject(value)) return Object.entries(value).flat().map(encode).join(\",\");\n\n return encode(value);\n};\n/** A value in the `simple` style; `explode` writes object values as `key=value` pairs. */\nconst toSimpleStyleValue = (parameter: ApiParameter, value: unknown): string => {\n if (!parameter.explode || !isObject(value)) return toSimpleValue(value);\n\n return Object.entries(value)\n .map(([key, item]) => `${key}=${String(item)}`)\n .join(\",\");\n};\n/** A path value in the parameter's style: `simple` by default, `label` (`.a`), or `matrix` (`;id=a`). */\nconst toPathValue = (parameter: ApiParameter, value: unknown): string => {\n const isObjectValue = isObject(value);\n const encode = (item: unknown): string => encodeURIComponent(String(item));\n const items = isObjectValue\n ? Object.entries(value).flatMap(([key, item]) => {\n return parameter.explode ? [`${encode(key)}=${encode(item)}`] : [encode(key), encode(item)];\n })\n : (Array.isArray(value) ? value : [value]).map(encode);\n\n if (parameter.style === \"label\") return `.${items.join(parameter.explode ? \".\" : \",\")}`;\n\n if (parameter.style === \"matrix\") {\n return parameter.explode\n ? items.map((item) => `;${isObjectValue ? \"\" : `${encode(parameter.name)}=`}${item}`).join(\"\")\n : `;${encode(parameter.name)}=${items.join(\",\")}`;\n }\n\n return items.join(\",\");\n};\n/** Query entries in the parameter's style: by default `form`, which repeats the name for each array item. */\nconst toQueryEntries = (\n parameter: Pick<ApiParameter, \"name\" | \"style\" | \"explode\">,\n value: unknown,\n encode: (value: unknown) => string = String\n): Array<[string, string]> => {\n const { name, style = \"form\" } = parameter;\n const explode = parameter.explode ?? style === \"form\";\n const delimiter = { spaceDelimited: \" \", pipeDelimited: \"|\" }[style];\n\n if (style === \"deepObject\" && isObject(value)) {\n return Object.entries(value).map(([key, item]) => [`${name}[${key}]`, encode(item)]);\n }\n\n if (Array.isArray(value) && delimiter) {\n return [\n [name, value.map(encode).join(style === \"spaceDelimited\" ? encode(delimiter) : delimiter)]\n ];\n }\n\n if (!explode) return [[name, toSimpleValue(value, encode)]];\n if (Array.isArray(value)) return value.map((item) => [name, encode(item)]);\n if (isObject(value)) return Object.entries(value).map(([key, item]) => [key, encode(item)]);\n\n return [[name, encode(value)]];\n};\n\nexport { toSimpleValue, toSimpleStyleValue, toPathValue, toQueryEntries };\n","import { resolveSchema, type ApiModel, type ApiSchema } from \"./model\";\nimport { isObject } from \"./normalize\";\n\n/** Requests leave out read-only fields; responses leave out write-only fields. */\ntype SampleMode = \"request\" | \"response\";\n\nconst maxDepth = 8;\nconst formatSamples: Record<string, string> = {\n \"date-time\": \"2026-01-01T00:00:00Z\",\n \"date\": \"2026-01-01\",\n \"time\": \"00:00:00Z\",\n \"email\": \"user@example.com\",\n \"uri\": \"https://example.com\",\n \"url\": \"https://example.com\",\n \"hostname\": \"example.com\",\n \"uuid\": \"00000000-0000-0000-0000-000000000000\",\n \"ipv4\": \"192.0.2.1\",\n \"ipv6\": \"2001:db8::1\",\n \"byte\": \"U3RyaW5n\",\n \"binary\": \"<binary>\"\n};\nconst limitKeys = [\"minimum\", \"exclusiveMinimum\", \"maximum\", \"exclusiveMaximum\"];\n\n/**\n * A number within the limits: the lower limit, or 0 without one, up to the upper limit.\n * Integers round toward the inside of the limits.\n */\nconst toNumberSample = (constraints: Record<string, unknown> = {}, integer: boolean): number => {\n const [minimum, exclusiveMinimum, maximum, exclusiveMaximum] = limitKeys.map((key) => {\n const value = constraints[key];\n\n return typeof value === \"number\" ? value : undefined;\n });\n const lower = minimum ?? (exclusiveMinimum === undefined ? undefined : exclusiveMinimum + 1);\n const upper = maximum ?? (exclusiveMaximum === undefined ? undefined : exclusiveMaximum - 1);\n const isNarrow = lower !== undefined && upper !== undefined && lower > upper;\n const usesUpper = upper !== undefined && upper < (lower ?? 0);\n\n // Exclusive limits that are closer than 1, e.g. above 0 and below 0.5, contain their middle.\n if (isNarrow) {\n const middle = ((minimum ?? exclusiveMinimum)! + (maximum ?? exclusiveMaximum)!) / 2;\n\n return integer ? Math.ceil(middle) : middle;\n }\n\n if (usesUpper) return integer ? Math.floor(upper) : upper;\n\n return integer ? Math.ceil(lower ?? 0) : (lower ?? 0);\n};\nconst toTypeSample = (schema: ApiSchema): unknown => {\n const type = schema.type?.find((item) => item !== \"null\") ?? schema.type?.[0];\n\n if (type === \"string\") return formatSamples[schema.format ?? \"\"] ?? \"string\";\n\n if (type === \"integer\" || type === \"number\") {\n return toNumberSample(schema.constraints, type === \"integer\");\n }\n\n if (type === \"boolean\") return true;\n if (type === \"null\") return null;\n\n return undefined;\n};\nconst mergeSamples = (previous: unknown, next: unknown): unknown => {\n if (!isObject(previous) || !isObject(next)) return next === undefined ? previous : next;\n\n const names = new Set([...Object.keys(previous), ...Object.keys(next)]);\n\n return Object.fromEntries(\n [...names].map((name) => [name, mergeSamples(previous[name], next[name])])\n );\n};\n/** Applies visibility to the combined sample, including nested fields from other branches. */\nconst filterSample = (\n value: unknown,\n schema: ApiSchema,\n model: ApiModel,\n mode: SampleMode,\n seen: string[] = []\n): unknown => {\n const target = resolveSchema(schema, model);\n const hidden = mode === \"request\" ? \"readOnly\" : \"writeOnly\";\n const path = schema.ref ? [...seen, schema.ref] : seen;\n\n if (target?.[hidden]) return undefined;\n\n if (!target || (schema.ref && seen.includes(schema.ref))) return value;\n\n let filtered = value;\n\n for (const part of target.allOf ?? []) {\n filtered = filterSample(filtered, part, model, mode, path);\n }\n\n if (Array.isArray(filtered) && target.items) {\n const items = target.items;\n\n return filtered.map((item) => filterSample(item, items, model, mode, path));\n }\n\n if (!isObject(filtered)) return filtered;\n\n return Object.fromEntries(\n Object.entries(filtered).flatMap(([name, item]) => {\n const property = target.properties?.find((property) => property.name === name);\n const sample = property ? filterSample(item, property.schema, model, mode, path) : item;\n\n return sample === undefined ? [] : [[name, sample]];\n })\n );\n};\n/**\n * Creates a sample value for a schema: its example, constant, default, or first enum value, or a\n * value from its type. Recursive schemas stop at their first repetition.\n */\nconst createSample = (\n schema: ApiSchema,\n model: ApiModel,\n mode: SampleMode,\n seen: string[] = []\n): unknown => {\n if (schema.ref) {\n const target = resolveSchema(schema, model);\n\n if (!target || seen.includes(schema.ref) || seen.length >= maxDepth) return undefined;\n\n return createSample(target, model, mode, [...seen, schema.ref]);\n }\n\n const explicit = [schema.examples?.[0], schema.const, schema.default, schema.enum?.[0]];\n const value = explicit.find((item) => item !== undefined);\n\n if (value !== undefined) return value;\n\n if (schema.allOf) {\n const { allOf, ...own } = schema;\n\n const sample = [...allOf, own].reduce<unknown>((merged, part) => {\n const sample = createSample(part, model, mode, seen);\n\n return mergeSamples(merged, sample);\n }, undefined);\n\n return filterSample(sample, schema, model, mode);\n }\n\n const option = schema.oneOf?.[0] ?? schema.anyOf?.[0];\n\n if (option) {\n const { oneOf: _oneOf, anyOf: _anyOf, ...own } = schema;\n\n return createSample({ allOf: [own, option] }, model, mode, seen);\n }\n\n if (schema.type?.includes(\"array\") || schema.items) {\n const item = schema.items && createSample(schema.items, model, mode, seen);\n\n return item === undefined ? [] : [item];\n }\n\n if (schema.type?.includes(\"object\") || schema.properties) {\n const hidden = mode === \"request\" ? \"readOnly\" : \"writeOnly\";\n const entries = (schema.properties ?? []).flatMap(({ name, schema: property }) => {\n const target = resolveSchema(property, model);\n const sample = target?.[hidden] ? undefined : createSample(property, model, mode, seen);\n\n return sample === undefined ? [] : [[name, sample]];\n });\n\n return Object.fromEntries(entries);\n }\n\n return toTypeSample(schema);\n};\n\nexport { createSample };\nexport type { SampleMode };\n","import type { ApiMediaType } from \"./model\";\nimport { toQueryEntries } from \"./styles\";\n\ninterface FormRequest {\n /** The media type of the body. */\n mediaType?: string;\n encoding?: ApiMediaType[\"encoding\"];\n body?: unknown;\n}\n\ninterface FormEntry {\n name: string;\n value: string;\n contentType?: string;\n}\n\nconst isJSON = (mediaType?: string): boolean => /^application\\/(.+\\+)?json\\b/.test(mediaType ?? \"\");\nconst isForm = (mediaType?: string): boolean => {\n return mediaType === \"application/x-www-form-urlencoded\" || mediaType === \"multipart/form-data\";\n};\nconst toFormEntries = (request: FormRequest): FormEntry[] => {\n const { body } = request;\n const entries = typeof body === \"object\" && body !== null ? Object.entries(body) : [];\n\n return entries.flatMap(([name, value]): FormEntry[] => {\n const encoding = request.encoding?.[name];\n const usesStyle =\n request.mediaType === \"application/x-www-form-urlencoded\" ||\n encoding?.style !== undefined ||\n encoding?.explode !== undefined;\n\n if (usesStyle) {\n return toQueryEntries({ name, ...encoding }, value).map(([name, value]) => ({ name, value }));\n }\n\n return (Array.isArray(value) ? value : [value]).map((item) => {\n const contentType =\n encoding?.contentType ??\n (typeof item === \"object\" && item !== null ? \"application/json\" : undefined);\n\n return {\n name,\n value: typeof item === \"string\" && !isJSON(contentType) ? item : JSON.stringify(item),\n contentType\n };\n });\n });\n};\n\nexport { isJSON, isForm, toFormEntries };\nexport type { FormRequest, FormEntry };\n","import {\n resolveSchema,\n type ApiModel,\n type ApiOperation,\n type ApiParameter,\n type ApiProperty,\n type ApiSchema\n} from \"./model\";\nimport { toPathValue, toQueryEntries, toSimpleStyleValue, toSimpleValue } from \"./styles\";\nimport { createSample } from \"./samples\";\nimport { isJSON, isForm, toFormEntries, type FormRequest } from \"./forms\";\n\ninterface RequestSample extends FormRequest {\n method: string;\n /** The full URL, with path and query values. */\n url: string;\n headers: Array<[string, string]>;\n /** Multipart fields that upload files, e.g. `format: binary` strings. */\n files: string[];\n /** The body is a file, e.g. an `application/octet-stream` upload. */\n isFileBody: boolean;\n /** How to read the success response; examples leave out reading a response without content. */\n response?: \"json\" | \"text\";\n}\n\ninterface CodeExample {\n /** `curl`, `javascript`, `python`, or the lowercase `lang` of a code sample. */\n id: string;\n label: string;\n /** The Shiki language for highlighting. */\n language: string;\n code: string;\n}\n\ninterface Generator {\n label: string;\n language: string;\n generate(request: RequestSample): string;\n}\n\nconst placeholderURL = \"https://api.example.com\";\nconst placeholderFile = \"path/to/file\";\nconst fileSetup = 'const file = new File([\"<file content>\"], \"file\");';\nconst aliases: Record<string, string> = {\n shell: \"curl\",\n bash: \"curl\",\n sh: \"curl\",\n js: \"javascript\",\n node: \"javascript\",\n py: \"python\"\n};\nconst languages: Record<string, string> = {\n \"curl\": \"bash\",\n \"javascript\": \"javascript\",\n \"typescript\": \"typescript\",\n \"ts\": \"typescript\",\n \"python\": \"python\",\n \"go\": \"go\",\n \"golang\": \"go\",\n \"ruby\": \"ruby\",\n \"php\": \"php\",\n \"java\": \"java\",\n \"kotlin\": \"kotlin\",\n \"csharp\": \"csharp\",\n \"c#\": \"csharp\",\n \"rust\": \"rust\",\n \"swift\": \"swift\"\n};\n\nconst toJSON = (value: unknown): string => JSON.stringify(value, null, 2);\nconst quoteShell = (value: string): string => `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\nconst quoteForm = (value: string): string => `\"${value.replace(/[\\\\\"]/g, \"\\\\$&\")}\"`;\nconst encodeQueryValue = (value: unknown): string => encodeURIComponent(String(value));\n/** A parameter with `content` is one value in its media type, e.g. JSON, without a style. */\nconst toContentValue = (parameter: ApiParameter, value: unknown): string | undefined => {\n if (parameter.mediaType === undefined || value === undefined) return undefined;\n\n return isJSON(parameter.mediaType) ? JSON.stringify(value) : String(value);\n};\n/** Binary strings: `format: binary` in OpenAPI 3.0, or a media type without an encoding in 3.1. */\nconst isBinary = (schema?: ApiSchema): boolean => {\n return (\n schema?.format === \"binary\" || Boolean(schema?.contentMediaType && !schema.contentEncoding)\n );\n};\nconst isFile = (schema: ApiSchema, model: ApiModel): boolean => {\n const target = resolveSchema(schema, model);\n\n return isBinary(target) || isBinary(target?.items && resolveSchema(target.items, model));\n};\n/** The properties of an object schema, with those of its `allOf` parts. */\nconst listProperties = (schema: ApiSchema, model: ApiModel, seen: string[] = []): ApiProperty[] => {\n const target = resolveSchema(schema, model);\n const isRepeated = Boolean(schema.ref && seen.includes(schema.ref));\n\n if (!target || isRepeated) return [];\n\n const path = schema.ref ? [...seen, schema.ref] : seen;\n\n return [\n ...(target.properties ?? []),\n ...(target.allOf ?? []).flatMap((part) => listProperties(part, model, path))\n ];\n};\n/** Writes JSON values as Python literals. */\nconst toPython = (value: unknown, indent = \"\"): string => {\n const inner = `${indent} `;\n\n if (value === null || value === undefined) return \"None\";\n if (value === true) return \"True\";\n if (value === false) return \"False\";\n if (typeof value !== \"object\") return JSON.stringify(value);\n\n if (Array.isArray(value)) {\n if (!value.length) return \"[]\";\n\n return `[\\n${value.map((item) => `${inner}${toPython(item, inner)}`).join(\",\\n\")},\\n${indent}]`;\n }\n\n const entries = Object.entries(value);\n\n if (!entries.length) return \"{}\";\n\n const items = entries.map(\n ([key, item]) => `${inner}${JSON.stringify(key)}: ${toPython(item, inner)}`\n );\n\n return `{\\n${items.join(\",\\n\")},\\n${indent}}`;\n};\nconst toBodyText = (request: RequestSample): string => {\n return !isJSON(request.mediaType) && typeof request.body === \"string\"\n ? request.body\n : toJSON(request.body);\n};\nconst generators: Record<string, Generator> = {\n curl: {\n label: \"cURL\",\n language: \"bash\",\n generate: (request) => {\n const lines = [\n `curl --request ${request.method.toUpperCase()}`,\n `--url ${quoteShell(request.url)}`\n ];\n\n request.headers.forEach(([name, value]) => {\n lines.push(`--header ${quoteShell(`${name}: ${value}`)}`);\n });\n\n // `--form` reads files from values that start with `@` or `<`; `--form-string` does not.\n if (request.body !== undefined && request.mediaType === \"multipart/form-data\") {\n toFormEntries(request).forEach(({ name, value, contentType }) => {\n const isFile = request.files.includes(name);\n const part = isFile ? `@${placeholderFile}` : quoteForm(value);\n const type = contentType ? `;type=${contentType}` : \"\";\n\n lines.push(\n isFile || contentType\n ? `--form ${quoteShell(`${name}=${part}${type}`)}`\n : `--form-string ${quoteShell(`${name}=${value}`)}`\n );\n });\n } else if (request.body !== undefined && isForm(request.mediaType)) {\n toFormEntries(request).forEach(({ name, value }) => {\n lines.push(`--data-urlencode ${quoteShell(`${name}=${value}`)}`);\n });\n } else if (request.isFileBody) {\n lines.push(`--data-binary ${quoteShell(`@${placeholderFile}`)}`);\n } else if (request.body !== undefined) {\n lines.push(`--data-raw ${quoteShell(toBodyText(request))}`);\n }\n\n return lines.join(\" \\\\\\n \");\n }\n },\n javascript: {\n label: \"JavaScript\",\n language: \"javascript\",\n generate: (request) => {\n const headers = request.headers.filter(([name]) => {\n return !(request.mediaType === \"multipart/form-data\" && name === \"Content-Type\");\n });\n const options = [` method: ${JSON.stringify(request.method.toUpperCase())}`];\n const setup: string[] = [];\n\n if (headers.length) {\n const entries = headers.map(\n ([name, value]) => ` ${JSON.stringify(name)}: ${JSON.stringify(value)}`\n );\n\n options.push(` headers: {\\n${entries.join(\",\\n\")}\\n }`);\n }\n\n if (request.body !== undefined && isForm(request.mediaType)) {\n const form = request.mediaType === \"multipart/form-data\" ? \"FormData\" : \"URLSearchParams\";\n\n if (request.files.length) setup.push(fileSetup);\n\n setup.push(`const body = new ${form}();`);\n toFormEntries(request).forEach(({ name, value, contentType }) => {\n const isFile = request.files.includes(name);\n const item = isFile ? \"file\" : JSON.stringify(value);\n const part = contentType\n ? `new Blob([${item}], { type: ${JSON.stringify(contentType)} })`\n : item;\n const filename = contentType ? (isFile ? \", file.name\" : ', \"\"') : \"\";\n\n setup.push(`body.append(${JSON.stringify(name)}, ${part}${filename});`);\n });\n options.push(\" body\");\n } else if (request.isFileBody) {\n setup.push(fileSetup);\n options.push(\" body: file\");\n } else if (request.body !== undefined) {\n const body = isJSON(request.mediaType)\n ? `JSON.stringify(${toJSON(request.body).replaceAll(\"\\n\", \"\\n \")})`\n : JSON.stringify(toBodyText(request));\n\n options.push(` body: ${body}`);\n }\n\n return [\n ...(setup.length ? [setup.join(\"\\n\"), \"\"] : []),\n `const response = await fetch(${JSON.stringify(request.url)}, {\\n${options.join(\",\\n\")}\\n});`,\n ...(request.response ? [\"\", `const data = await response.${request.response}();`] : [])\n ].join(\"\\n\");\n }\n },\n python: {\n label: \"Python\",\n language: \"python\",\n generate: (request) => {\n const headers = request.headers.filter(([name]) => {\n return request.mediaType !== \"multipart/form-data\" || name !== \"Content-Type\";\n });\n const method = request.method.toLowerCase();\n // `requests` has no function for TRACE.\n const isTrace = method === \"trace\";\n const args = [...(isTrace ? [' \"TRACE\"'] : []), ` ${JSON.stringify(request.url)}`];\n\n if (headers.length) args.push(` headers=${toPython(Object.fromEntries(headers), \" \")}`);\n\n if (request.body !== undefined && isJSON(request.mediaType)) {\n args.push(\n request.body === null ? ' data=\"null\"' : ` json=${toPython(request.body, \" \")}`\n );\n } else if (request.body !== undefined && request.mediaType === \"multipart/form-data\") {\n const entries = toFormEntries(request);\n const files = entries.map(({ name, value, contentType }) => {\n const isFile = request.files.includes(name);\n const item = isFile\n ? `open(${JSON.stringify(placeholderFile)}, \"rb\")`\n : JSON.stringify(value);\n const filename = isFile ? '\"file\"' : \"None\";\n const type = contentType ? `, ${JSON.stringify(contentType)}` : \"\";\n const part = `(${filename}, ${item}${type})`;\n\n return ` (${JSON.stringify(name)}, ${part}),`;\n });\n\n if (files.length) args.push(` files=[\\n${files.join(\"\\n\")}\\n ]`);\n } else if (request.isFileBody) {\n args.push(` data=open(${JSON.stringify(placeholderFile)}, \"rb\")`);\n } else if (request.body !== undefined) {\n const body = isForm(request.mediaType)\n ? toPython(\n toFormEntries(request).map(({ name, value }) => [name, value]),\n \" \"\n )\n : JSON.stringify(toBodyText(request));\n\n args.push(` data=${body}`);\n }\n\n const output = {\n json: \"response.json()\",\n text: \"response.text\",\n none: \"response.status_code\"\n }[request.response ?? \"none\"];\n\n return [\n \"import requests\",\n \"\",\n `response = requests.${isTrace ? \"request\" : method}(\\n${args.join(\",\\n\")},\\n)`,\n \"\",\n `print(${output})`\n ].join(\"\\n\");\n }\n }\n};\n\n/**\n * Adds placeholders for the schemes of the first security requirement, which all apply. A request\n * has one `Authorization` header, so only the first scheme that uses it adds it.\n */\nconst addCredentials = (\n operation: ApiOperation,\n model: ApiModel,\n headers: Array<[string, string]>,\n query: Map<string, string[]>,\n cookies: Map<string, string>\n): void => {\n // A credential replaces a header parameter with the same name, e.g. an API key.\n const setHeader = (name: string, value: string): void => {\n const index = headers.findIndex(([item]) => item.toLowerCase() === name.toLowerCase());\n\n if (index === -1) headers.push([name, value]);\n else headers[index] = [name, value];\n };\n const setAuthorization = (value: string): void => {\n if (!headers.some(([name]) => name === \"Authorization\")) headers.push([\"Authorization\", value]);\n };\n\n Object.keys(operation.security[0] ?? {}).forEach((id) => {\n const scheme = model.securitySchemes.find((item) => item.id === id);\n const httpScheme = scheme?.scheme?.toLowerCase();\n const usesToken = scheme?.type === \"oauth2\" || scheme?.type === \"openIdConnect\";\n\n if (scheme?.type === \"http\" && httpScheme === \"basic\") {\n setAuthorization(\"Basic <credentials>\");\n } else if (usesToken || (scheme?.type === \"http\" && httpScheme === \"bearer\")) {\n setAuthorization(\"Bearer <token>\");\n } else if (scheme?.type === \"http\" && scheme.scheme) {\n const name = `${scheme.scheme[0]!.toUpperCase()}${scheme.scheme.slice(1)}`;\n\n setAuthorization(`${name} <credentials>`);\n } else if (scheme?.type === \"apiKey\" && scheme.name && scheme.in === \"header\") {\n setHeader(scheme.name, \"<api-key>\");\n } else if (scheme?.type === \"apiKey\" && scheme.name && scheme.in === \"query\") {\n query.set(scheme.name, [encodeQueryValue(\"<api-key>\")]);\n } else if (scheme?.type === \"apiKey\" && scheme.name && scheme.in === \"cookie\") {\n cookies.set(scheme.name, \"<api-key>\");\n }\n });\n};\n/**\n * Creates the sample request of an operation: path values, required query, header, and cookie\n * values, and parameters with examples, credential placeholders, and a body from examples or the\n * schema.\n */\nconst createRequestSample = (operation: ApiOperation, model: ApiModel): RequestSample => {\n const headers: Array<[string, string]> = [];\n const query = new Map<string, string[]>();\n // Cookies by name, so a credential replaces a cookie parameter with the same name.\n const cookies = new Map<string, string>();\n const media = operation.requestBody?.contents[0];\n const isMultipart = media?.type === \"multipart/form-data\";\n const isFileBody = Boolean(media?.schema && !isForm(media.type) && isFile(media.schema, model));\n const files = (isMultipart && media.schema ? listProperties(media.schema, model) : [])\n .filter((property) => isFile(property.schema, model))\n .map((property) => property.name);\n const success =\n operation.responses.find((response) => response.status.startsWith(\"2\")) ??\n operation.responses.find((response) => response.status === \"default\");\n const responseMedia = success?.contents[0];\n const server = (operation.servers[0]?.url ?? placeholderURL).replace(/\\/$/, \"\");\n const toValue = (parameter: ApiOperation[\"parameters\"][number]): unknown => {\n const example = parameter.examples[0]?.value;\n\n return example === undefined\n ? parameter.schema && createSample(parameter.schema, model, \"request\")\n : example;\n };\n let path = operation.path;\n\n operation.parameters.forEach((parameter) => {\n const value = toValue(parameter);\n const isShown = parameter.required || parameter.examples.length > 0;\n const content = toContentValue(parameter, value);\n\n if (parameter.in === \"path\") {\n const text =\n content === undefined\n ? toPathValue(parameter, value === undefined ? parameter.name : value)\n : encodeURIComponent(content);\n\n path = path.replace(`{${parameter.name}}`, text);\n } else if (parameter.in === \"query\" && isShown && value !== undefined) {\n const entries: Array<[string, string]> =\n content === undefined\n ? toQueryEntries(parameter, value, encodeQueryValue)\n : [[parameter.name, encodeQueryValue(content)]];\n\n entries.forEach(([name, item]) => query.set(name, [...(query.get(name) ?? []), item]));\n } else if (parameter.in === \"header\" && isShown && value !== undefined) {\n headers.push([parameter.name, content ?? toSimpleStyleValue(parameter, value)]);\n } else if (parameter.in === \"cookie\" && isShown && value !== undefined) {\n cookies.set(parameter.name, encodeURIComponent(content ?? toSimpleValue(value)));\n }\n });\n addCredentials(operation, model, headers, query, cookies);\n\n if (cookies.size) {\n headers.push([\"Cookie\", [...cookies].map(([name, value]) => `${name}=${value}`).join(\"; \")]);\n }\n\n const example = media?.examples[0]?.value;\n const body =\n example === undefined ? media?.schema && createSample(media.schema, model, \"request\") : example;\n const queryString = [...query]\n .flatMap(([name, values]) => values.map((value) => `${encodeQueryValue(name)}=${value}`))\n .join(\"&\");\n const search = queryString ? `?${queryString}` : \"\";\n\n if (media && body !== undefined) headers.push([\"Content-Type\", media.type]);\n\n return {\n method: operation.method,\n url: `${server}${path}${search}`,\n headers,\n mediaType: media?.type,\n encoding: media?.encoding,\n body,\n files,\n isFileBody,\n response: responseMedia && (isJSON(responseMedia.type) ? \"json\" : \"text\")\n };\n};\n/**\n * Lists the request examples of an operation: cURL, JavaScript, and Python, where a code sample\n * from `x-codeSamples` with the same language replaces the generated one. Other samples follow.\n */\nconst createCodeExamples = (operation: ApiOperation, model: ApiModel): CodeExample[] => {\n const request = createRequestSample(operation, model);\n const samples = operation.codeSamples.map((sample): CodeExample => {\n const lang = sample.lang.toLowerCase();\n const id = aliases[lang] ?? lang;\n\n return {\n id,\n label: sample.label,\n language: languages[id] ?? languages[lang] ?? \"text\",\n code: sample.source\n };\n });\n const generated = Object.entries(generators).map(([id, generator]): CodeExample => {\n return (\n samples.find((sample) => sample.id === id) ?? {\n id,\n label: generator.label,\n language: generator.language,\n code: generator.generate(request)\n }\n );\n });\n const counts = new Map<string, number>();\n\n // Tabs need unique labels, so a repeated label gets a number, e.g. `Python 2`.\n return [...generated, ...samples.filter((sample) => !generated.includes(sample))].map(\n (example) => {\n const count = (counts.get(example.label) ?? 0) + 1;\n\n counts.set(example.label, count);\n\n return count > 1 ? { ...example, label: `${example.label} ${count}` } : example;\n }\n );\n};\n\nexport { createRequestSample, createCodeExamples, isJSON };\nexport type { RequestSample, CodeExample };\n","import type { Element, Root } from \"hast\";\nimport { toHtml } from \"hast-util-to-html\";\nimport { prepareMarkdown, type HighlightOptions } from \"../../content/prepare\";\nimport { toFacts, toTypeLabel, type Fact } from \"./labels\";\nimport {\n resolveSchema,\n resolveSchemaDetails,\n getRequiredNames,\n type ApiMediaType,\n type ApiModel,\n type ApiSchema\n} from \"./model\";\n\ninterface MediaView {\n id: string;\n type: string;\n schema?: FieldView;\n}\n\ninterface FieldView {\n id: string;\n name: string;\n type: string;\n required: boolean;\n deprecated: boolean;\n readOnly: boolean;\n writeOnly: boolean;\n /** HTML. */\n description?: string;\n facts: Fact[];\n /** Nested fields of objects, and of the items of arrays. */\n fields: FieldView[];\n /** Options of `oneOf` and `anyOf` schemas. */\n variants: VariantView[];\n /** Set when the field repeats a schema that contains it: a link to the first occurrence. */\n recursive?: { name: string; href: string };\n}\n\ninterface VariantView {\n id: string;\n label: string;\n kind: \"oneOf\" | \"anyOf\";\n type: string;\n /** HTML. */\n description?: string;\n facts: Fact[];\n fields: FieldView[];\n variants: VariantView[];\n}\n\ninterface Ancestor {\n ref: string;\n id: string;\n}\n\ninterface Nested {\n fields: FieldView[];\n variants: VariantView[];\n recursive?: FieldView[\"recursive\"];\n}\n\nconst maxDepth = 12;\n// Descriptions repeat across operations, e.g. in error responses.\nconst descriptions = new Map<string, Promise<string>>();\n\nconst toID = (value: string): string => value.replace(/[^\\w-]+/g, \"-\");\n/** Removes the IDs of headings, which could repeat the IDs of operation sections. */\nconst removeHeadingIDs = (node: Root | Element): Root | Element => {\n node.children.forEach((child) => {\n if (child.type !== \"element\") return;\n if (/^h[1-6]$/.test(child.tagName)) delete child.properties.id;\n\n removeHeadingIDs(child);\n });\n\n return node;\n};\nconst toHTML = (markdown: string | undefined, highlight: HighlightOptions) => {\n if (!markdown) return undefined;\n\n if (!descriptions.has(markdown)) {\n descriptions.set(\n markdown,\n prepareMarkdown(markdown, highlight).then(({ nodes }) => toHtml(removeHeadingIDs(nodes)))\n );\n }\n\n return descriptions.get(markdown)!;\n};\n/** Merges fields that `allOf` parts repeat, e.g. a part that makes a base field read-only. */\nconst mergeFields = (fields: FieldView[]): FieldView[] => {\n const merged = new Map<string, FieldView>();\n\n fields.forEach((field) => {\n const previous = merged.get(field.name);\n\n if (!previous) {\n merged.set(field.name, field);\n\n return;\n }\n\n merged.set(field.name, {\n ...previous,\n type: field.type === \"any\" ? previous.type : field.type,\n required: previous.required || field.required,\n deprecated: previous.deprecated || field.deprecated,\n readOnly: previous.readOnly || field.readOnly,\n writeOnly: previous.writeOnly || field.writeOnly,\n description: field.description ?? previous.description,\n // Later parts replace facts with the same label, e.g. a default.\n facts: [\n ...new Map([...previous.facts, ...field.facts].map((fact) => [fact.label, fact])).values()\n ],\n fields: mergeFields([...previous.fields, ...field.fields]),\n variants: [...previous.variants, ...field.variants],\n recursive: previous.recursive ?? field.recursive\n });\n });\n\n return [...merged.values()];\n};\n/** Builds field trees of schemas. A field that repeats a schema that contains it links to it. */\nconst createFieldBuilder = (model: ApiModel, highlight: HighlightOptions) => {\n const expand = async (\n schema: ApiSchema,\n id: string,\n ancestors: Ancestor[],\n depth: number,\n required = new Set<string>()\n ): Promise<Nested> => {\n const ancestor = schema.ref && ancestors.find((item) => item.ref === schema.ref);\n\n if (ancestor) {\n return {\n fields: [],\n variants: [],\n recursive: { name: ancestor.ref, href: `#${ancestor.id}` }\n };\n }\n\n const target = resolveSchema(schema, model);\n const path = schema.ref ? [...ancestors, { ref: schema.ref, id }] : ancestors;\n const requiredNames = new Set([...required, ...getRequiredNames(schema, model)]);\n\n if (!target || depth > maxDepth) return { fields: [], variants: [] };\n\n const fields = await Promise.all(\n (target.properties ?? []).map((property) => {\n return toField(\n property.name,\n property.required || requiredNames.has(property.name),\n property.schema,\n `${id}-${toID(property.name)}`,\n path,\n depth\n );\n })\n );\n const variants: VariantView[] = [];\n\n if (typeof target.additionalProperties === \"object\") {\n fields.push(\n await toField(\"{key}\", false, target.additionalProperties, `${id}-key`, path, depth)\n );\n }\n\n let recursive: Nested[\"recursive\"];\n\n if (target.items) {\n const nested = await expand(target.items, id, path, depth);\n\n fields.push(...nested.fields);\n variants.push(...nested.variants);\n recursive = nested.recursive;\n }\n\n for (const part of target.allOf ?? []) {\n const nested = await expand(part, id, path, depth, requiredNames);\n\n fields.push(...nested.fields);\n variants.push(...nested.variants);\n recursive ??= nested.recursive;\n }\n\n for (const kind of [\"oneOf\", \"anyOf\"] as const) {\n const options = await Promise.all(\n (target[kind] ?? []).map(async (option, index): Promise<VariantView> => {\n const optionID = `${id}-${kind}-${index + 1}`;\n const nested = await expand(option, optionID, path, depth + 1, requiredNames);\n const optionTarget = resolveSchemaDetails(option, model);\n\n return {\n id: optionID,\n label: option.ref ?? option.title ?? `Option ${index + 1}`,\n kind,\n type: toTypeLabel(optionTarget ?? option),\n description: await toHTML(optionTarget?.description, highlight),\n facts: optionTarget ? toFacts(optionTarget) : [],\n fields: nested.fields,\n variants: nested.variants\n };\n })\n );\n\n variants.push(...options);\n }\n\n return { fields: mergeFields(fields), variants, recursive };\n };\n const toField = async (\n name: string,\n required: boolean,\n schema: ApiSchema,\n id: string,\n ancestors: Ancestor[],\n depth: number\n ): Promise<FieldView> => {\n const target = resolveSchemaDetails(schema, model);\n const nested = await expand(schema, id, ancestors, depth + 1);\n\n return {\n id,\n name,\n type: toTypeLabel(schema.ref ? schema : (target ?? schema)),\n required,\n deprecated: Boolean(target?.deprecated),\n readOnly: Boolean(target?.readOnly),\n writeOnly: Boolean(target?.writeOnly),\n description: await toHTML(target?.description, highlight),\n facts: target ? toFacts(target) : [],\n ...nested\n };\n };\n const toMedia = async (media: ApiMediaType, id: string): Promise<MediaView> => {\n const schema = media.schema\n ? await toField(\"Body\", false, media.schema, `${id}-schema`, [], 0)\n : undefined;\n\n if (schema && media.schema) {\n schema.type = toTypeLabel(resolveSchemaDetails(media.schema, model) ?? media.schema);\n }\n\n return {\n id,\n type: media.type,\n schema\n };\n };\n\n return { toField, toMedia };\n};\n\nexport { createFieldBuilder, toHTML, toID };\nexport type { MediaView, FieldView, VariantView };\n","import { toHtml } from \"hast-util-to-html\";\nimport { highlightCode, type HighlightOptions } from \"../../content/prepare\";\nimport { createCodeExamples, isJSON } from \"./examples\";\nimport {\n createFieldBuilder,\n toHTML,\n toID,\n type FieldView,\n type MediaView,\n type VariantView\n} from \"./fields\";\nimport { toSchemeLabel, toStatusLabel } from \"./labels\";\nimport type { ApiMediaType, ApiModel, ApiOperation, ApiParameter } from \"./model\";\nimport { createSample } from \"./samples\";\n\ninterface OperationView {\n /** Prefix of element IDs, so several operations can be on one page. Empty on reference pages. */\n anchor: string;\n /** Shown in another page, not on the operation's reference page. */\n embedded: boolean;\n title: string;\n /** The URL of the operation's reference page. */\n href: string;\n method: string;\n path: string;\n deprecated: boolean;\n /** HTML. */\n description?: string;\n servers: ServerView[];\n /** Alternative requirements; each lists the schemes that a request needs together. */\n security: SecuritySchemeView[][];\n parameters: ParameterGroupView[];\n requestBody?: RequestBodyView;\n responses: ResponseView[];\n /** Request examples, by language. */\n examples: CodeView[];\n /** The first example of each response that has one. */\n responseExamples: CodeView[];\n}\n\ninterface ServerView {\n url: string;\n description?: string;\n}\n\ninterface SecuritySchemeView {\n id: string;\n /** The scheme's kind, e.g. `http, bearer`. */\n label: string;\n /** HTML. */\n description?: string;\n scopes: string[];\n}\n\ninterface ParameterGroupView {\n id: string;\n /** E.g. `Query parameters`. */\n label: string;\n fields: FieldView[];\n}\n\ninterface RequestBodyView {\n id: string;\n required: boolean;\n /** HTML. */\n description?: string;\n contents: MediaView[];\n}\n\ninterface ResponseView {\n id: string;\n status: string;\n /** The status text, e.g. `Not Found`. */\n label?: string;\n /** HTML. */\n description?: string;\n headers: FieldView[];\n contents: MediaView[];\n}\n\ninterface CodeView {\n label: string;\n language: string;\n code: string;\n /** Highlighted HTML of the code, for the inside of a `pre` element. */\n html: string;\n}\n\n/** The parts of an operation to show. Embeds leave out the examples by default. */\ninterface OperationParts {\n description?: boolean;\n authentication?: boolean;\n parameters?: boolean;\n requestBody?: boolean;\n responses?: boolean;\n /** Request and response examples. */\n examples?: boolean;\n}\n\ninterface ViewOptions {\n highlight: HighlightOptions;\n title: string;\n href: string;\n /** Set for embedded operations. */\n anchor?: string;\n parts?: OperationParts;\n}\n\nconst locations: Array<[ApiParameter[\"in\"], string]> = [\n [\"path\", \"Path parameters\"],\n [\"query\", \"Query parameters\"],\n [\"header\", \"Headers\"],\n [\"cookie\", \"Cookies\"]\n];\n\nconst toPlainText = (value = \"\"): string => value.replace(/[^\\p{L}\\p{N}]+/gu, \"\").toLowerCase();\nconst toCodeView = async (\n label: string,\n language: string,\n code: string,\n highlight: HighlightOptions\n): Promise<CodeView> => {\n const pre = await highlightCode(code, language, highlight);\n\n return { label, language, code, html: toHtml(pre.children) };\n};\nconst toResponseExample = async (\n media: ApiMediaType | undefined,\n label: string,\n model: ApiModel,\n highlight: HighlightOptions\n): Promise<CodeView | undefined> => {\n const example = media?.examples[0]?.value;\n const value =\n example === undefined\n ? media?.schema && createSample(media.schema, model, \"response\")\n : example;\n\n if (value === undefined) return undefined;\n\n const json = isJSON(media?.type) || typeof value !== \"string\";\n\n return toCodeView(\n label,\n json ? \"json\" : \"text\",\n json ? JSON.stringify(value, null, 2) : String(value),\n highlight\n );\n};\n/**\n * Resolves an operation for the template: HTML descriptions, field trees with anchors,\n * highlighted request examples, and response examples.\n */\nconst createOperationView = async (\n operation: ApiOperation,\n model: ApiModel,\n options: ViewOptions\n): Promise<OperationView> => {\n const { highlight, anchor = \"\" } = options;\n const builder = createFieldBuilder(model, highlight);\n const show = (part: keyof OperationParts): boolean => {\n return options.parts?.[part] ?? (part !== \"examples\" || options.anchor === undefined);\n };\n const body = show(\"requestBody\") ? operation.requestBody : undefined;\n const toParameter = async (parameter: ApiParameter, id: string): Promise<FieldView> => {\n const field = await builder.toField(\n parameter.name,\n parameter.required,\n parameter.schema ?? {},\n id,\n [],\n 0\n );\n const description = await toHTML(parameter.description, highlight);\n\n return {\n ...field,\n deprecated: field.deprecated || parameter.deprecated,\n description: description ?? field.description\n };\n };\n const parameters = await Promise.all(\n (show(\"parameters\") ? locations : [])\n .map(([location, label]) => {\n return {\n location,\n label,\n items: operation.parameters.filter((parameter) => parameter.in === location)\n };\n })\n .filter((group) => group.items.length)\n .map(async ({ location, label, items }): Promise<ParameterGroupView> => {\n const id = `${anchor}${location}`;\n const fields = await Promise.all(\n items.map((parameter) => toParameter(parameter, `${id}-${toID(parameter.name)}`))\n );\n\n return { id, label, fields };\n })\n );\n const responses = await Promise.all(\n (show(\"responses\") ? operation.responses : []).map(async (response): Promise<ResponseView> => {\n const id = `${anchor}response-${toID(response.status)}`;\n const label = toStatusLabel(response.status);\n // Descriptions such as \"OK\" or \"400\" repeat the response header.\n const isRepeated = [response.status, label].some((text) => {\n return toPlainText(text) === toPlainText(response.description);\n });\n\n return {\n id,\n status: response.status,\n label,\n description: isRepeated ? undefined : await toHTML(response.description, highlight),\n headers: await Promise.all(\n response.headers.map(async (header) => {\n const field = await builder.toField(\n header.name,\n header.required,\n header.schema ?? {},\n `${id}-header-${toID(header.name)}`,\n [],\n 0\n );\n const description = await toHTML(header.description, highlight);\n\n return { ...field, description: description ?? field.description };\n })\n ),\n contents: await Promise.all(\n response.contents.map((media, index) => {\n return builder.toMedia(media, index ? `${id}-${index + 1}` : `${id}-body`);\n })\n )\n };\n })\n );\n const examples = await Promise.all(\n (show(\"examples\") ? createCodeExamples(operation, model) : []).map((example) => {\n return toCodeView(example.label, example.language, example.code, highlight);\n })\n );\n const responseExamples = await Promise.all(\n (show(\"examples\") ? operation.responses : []).map((response) => {\n return toResponseExample(response.contents[0], response.status, model, highlight);\n })\n );\n\n return {\n anchor,\n embedded: options.anchor !== undefined,\n title: options.title,\n href: options.href,\n method: operation.method,\n path: operation.path,\n deprecated: operation.deprecated,\n description: show(\"description\") ? await toHTML(operation.description, highlight) : undefined,\n servers: await Promise.all(\n operation.servers.map(async (server) => {\n return { url: server.url, description: await toHTML(server.description, highlight) };\n })\n ),\n security: await Promise.all(\n (show(\"authentication\") ? operation.security : []).map((requirement) => {\n return Promise.all(\n Object.entries(requirement).map(async ([id, scopes]) => {\n const scheme = model.securitySchemes.find((item) => item.id === id);\n\n return {\n id,\n label: scheme ? toSchemeLabel(scheme) : id,\n description: await toHTML(scheme?.description, highlight),\n scopes\n };\n })\n );\n })\n ),\n parameters,\n requestBody: body && {\n id: `${anchor}request-body`,\n required: body.required,\n description: await toHTML(body.description, highlight),\n contents: await Promise.all(\n body.contents.map((media, index) => {\n return builder.toMedia(media, index ? `${anchor}body-${index + 1}` : `${anchor}body`);\n })\n )\n },\n responses,\n examples,\n responseExamples: responseExamples.filter((example): example is CodeView => Boolean(example))\n };\n};\n\nexport { createOperationView, toID };\nexport type {\n OperationView,\n ServerView,\n SecuritySchemeView,\n ParameterGroupView,\n RequestBodyView,\n ResponseView,\n MediaView,\n FieldView,\n VariantView,\n CodeView,\n OperationParts,\n ViewOptions\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { o as ApiModel, s as ApiOperation } from "./index-D8wL2B5s.js";
|
|
2
|
+
import "@andesine/converters/html";
|
|
3
|
+
import "@andesine/converters";
|
|
4
|
+
import { Element, Root } from "hast";
|
|
5
|
+
//#region src/content/prepare.d.ts
|
|
6
|
+
interface HighlightOptions {
|
|
7
|
+
theme?: unknown;
|
|
8
|
+
themes?: Record<string, unknown>;
|
|
9
|
+
defaultColor?: string | false;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/sources/openapi/labels.d.ts
|
|
13
|
+
interface Fact {
|
|
14
|
+
label: string;
|
|
15
|
+
/** Values as JSON, e.g. `"dog"` or `100`. */
|
|
16
|
+
values: string[];
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/sources/openapi/fields.d.ts
|
|
20
|
+
interface MediaView {
|
|
21
|
+
id: string;
|
|
22
|
+
type: string;
|
|
23
|
+
schema?: FieldView;
|
|
24
|
+
}
|
|
25
|
+
interface FieldView {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
type: string;
|
|
29
|
+
required: boolean;
|
|
30
|
+
deprecated: boolean;
|
|
31
|
+
readOnly: boolean;
|
|
32
|
+
writeOnly: boolean;
|
|
33
|
+
/** HTML. */
|
|
34
|
+
description?: string;
|
|
35
|
+
facts: Fact[];
|
|
36
|
+
/** Nested fields of objects, and of the items of arrays. */
|
|
37
|
+
fields: FieldView[];
|
|
38
|
+
/** Options of `oneOf` and `anyOf` schemas. */
|
|
39
|
+
variants: VariantView[];
|
|
40
|
+
/** Set when the field repeats a schema that contains it: a link to the first occurrence. */
|
|
41
|
+
recursive?: {
|
|
42
|
+
name: string;
|
|
43
|
+
href: string;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
interface VariantView {
|
|
47
|
+
id: string;
|
|
48
|
+
label: string;
|
|
49
|
+
kind: "oneOf" | "anyOf";
|
|
50
|
+
type: string;
|
|
51
|
+
/** HTML. */
|
|
52
|
+
description?: string;
|
|
53
|
+
facts: Fact[];
|
|
54
|
+
fields: FieldView[];
|
|
55
|
+
variants: VariantView[];
|
|
56
|
+
}
|
|
57
|
+
declare const toID: (value: string) => string;
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/sources/openapi/view.d.ts
|
|
60
|
+
interface OperationView {
|
|
61
|
+
/** Prefix of element IDs, so several operations can be on one page. Empty on reference pages. */
|
|
62
|
+
anchor: string;
|
|
63
|
+
/** Shown in another page, not on the operation's reference page. */
|
|
64
|
+
embedded: boolean;
|
|
65
|
+
title: string;
|
|
66
|
+
/** The URL of the operation's reference page. */
|
|
67
|
+
href: string;
|
|
68
|
+
method: string;
|
|
69
|
+
path: string;
|
|
70
|
+
deprecated: boolean;
|
|
71
|
+
/** HTML. */
|
|
72
|
+
description?: string;
|
|
73
|
+
servers: ServerView[];
|
|
74
|
+
/** Alternative requirements; each lists the schemes that a request needs together. */
|
|
75
|
+
security: SecuritySchemeView[][];
|
|
76
|
+
parameters: ParameterGroupView[];
|
|
77
|
+
requestBody?: RequestBodyView;
|
|
78
|
+
responses: ResponseView[];
|
|
79
|
+
/** Request examples, by language. */
|
|
80
|
+
examples: CodeView[];
|
|
81
|
+
/** The first example of each response that has one. */
|
|
82
|
+
responseExamples: CodeView[];
|
|
83
|
+
}
|
|
84
|
+
interface ServerView {
|
|
85
|
+
url: string;
|
|
86
|
+
description?: string;
|
|
87
|
+
}
|
|
88
|
+
interface SecuritySchemeView {
|
|
89
|
+
id: string;
|
|
90
|
+
/** The scheme's kind, e.g. `http, bearer`. */
|
|
91
|
+
label: string;
|
|
92
|
+
/** HTML. */
|
|
93
|
+
description?: string;
|
|
94
|
+
scopes: string[];
|
|
95
|
+
}
|
|
96
|
+
interface ParameterGroupView {
|
|
97
|
+
id: string;
|
|
98
|
+
/** E.g. `Query parameters`. */
|
|
99
|
+
label: string;
|
|
100
|
+
fields: FieldView[];
|
|
101
|
+
}
|
|
102
|
+
interface RequestBodyView {
|
|
103
|
+
id: string;
|
|
104
|
+
required: boolean;
|
|
105
|
+
/** HTML. */
|
|
106
|
+
description?: string;
|
|
107
|
+
contents: MediaView[];
|
|
108
|
+
}
|
|
109
|
+
interface ResponseView {
|
|
110
|
+
id: string;
|
|
111
|
+
status: string;
|
|
112
|
+
/** The status text, e.g. `Not Found`. */
|
|
113
|
+
label?: string;
|
|
114
|
+
/** HTML. */
|
|
115
|
+
description?: string;
|
|
116
|
+
headers: FieldView[];
|
|
117
|
+
contents: MediaView[];
|
|
118
|
+
}
|
|
119
|
+
interface CodeView {
|
|
120
|
+
label: string;
|
|
121
|
+
language: string;
|
|
122
|
+
code: string;
|
|
123
|
+
/** Highlighted HTML of the code, for the inside of a `pre` element. */
|
|
124
|
+
html: string;
|
|
125
|
+
}
|
|
126
|
+
/** The parts of an operation to show. Embeds leave out the examples by default. */
|
|
127
|
+
interface OperationParts {
|
|
128
|
+
description?: boolean;
|
|
129
|
+
authentication?: boolean;
|
|
130
|
+
parameters?: boolean;
|
|
131
|
+
requestBody?: boolean;
|
|
132
|
+
responses?: boolean;
|
|
133
|
+
/** Request and response examples. */
|
|
134
|
+
examples?: boolean;
|
|
135
|
+
}
|
|
136
|
+
interface ViewOptions {
|
|
137
|
+
highlight: HighlightOptions;
|
|
138
|
+
title: string;
|
|
139
|
+
href: string;
|
|
140
|
+
/** Set for embedded operations. */
|
|
141
|
+
anchor?: string;
|
|
142
|
+
parts?: OperationParts;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Resolves an operation for the template: HTML descriptions, field trees with anchors,
|
|
146
|
+
* highlighted request examples, and response examples.
|
|
147
|
+
*/
|
|
148
|
+
declare const createOperationView: (operation: ApiOperation, model: ApiModel, options: ViewOptions) => Promise<OperationView>;
|
|
149
|
+
//#endregion
|
|
150
|
+
export { RequestBodyView as a, ServerView as c, FieldView as d, MediaView as f, HighlightOptions as g, Fact as h, ParameterGroupView as i, ViewOptions as l, toID as m, OperationParts as n, ResponseView as o, VariantView as p, OperationView as r, SecuritySchemeView as s, CodeView as t, createOperationView as u };
|
|
151
|
+
//# sourceMappingURL=view-Dlf_VRI7.d.ts.map
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { b as SearchContext, u as AnswersContext } from "./chunks/index-D8wL2B5s.js";
|
|
2
|
+
//#region src/search/types.d.ts
|
|
3
|
+
interface SearchItem {
|
|
4
|
+
id: string;
|
|
5
|
+
/** Page URL, with a heading hash when the match is in a section. */
|
|
6
|
+
href: string;
|
|
7
|
+
title: string;
|
|
8
|
+
/** Plain text around the match. */
|
|
9
|
+
excerpt: string;
|
|
10
|
+
headingPath: string[];
|
|
11
|
+
}
|
|
12
|
+
interface SearchGroup {
|
|
13
|
+
sourceID: string;
|
|
14
|
+
label: string;
|
|
15
|
+
items: SearchItem[];
|
|
16
|
+
/** Set when this source failed; other groups can still have results. */
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/** A page that an answer cites as `[id]`. */
|
|
20
|
+
interface AnswerSource {
|
|
21
|
+
id: number;
|
|
22
|
+
href: string;
|
|
23
|
+
title: string;
|
|
24
|
+
headingPath: string[];
|
|
25
|
+
collectionPath: string[];
|
|
26
|
+
}
|
|
27
|
+
interface Answer {
|
|
28
|
+
text: string;
|
|
29
|
+
sources: AnswerSource[];
|
|
30
|
+
sourcesReceived: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface AnswerMessage {
|
|
33
|
+
role: "user" | "assistant";
|
|
34
|
+
content: string;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/search/answer-client.d.ts
|
|
38
|
+
interface AnswerHistoryTurn {
|
|
39
|
+
question: string;
|
|
40
|
+
answer?: Pick<Answer, "text">;
|
|
41
|
+
}
|
|
42
|
+
interface AnswerSourceGroup {
|
|
43
|
+
/** The page of the first source. */
|
|
44
|
+
href: string;
|
|
45
|
+
sources: AnswerSource[];
|
|
46
|
+
}
|
|
47
|
+
interface AnswerClient {
|
|
48
|
+
/**
|
|
49
|
+
* Streams an answer and calls `onUpdate` for each change. `history` holds the earlier turns,
|
|
50
|
+
* for follow-up questions. Resolves with the completed answer; aborting the signal cancels it.
|
|
51
|
+
*/
|
|
52
|
+
ask(question: string, history: AnswerHistoryTurn[], signal: AbortSignal, onUpdate: (answer: Answer) => void): Promise<Answer>;
|
|
53
|
+
}
|
|
54
|
+
/** Groups answer sources by page, in order. */
|
|
55
|
+
declare const groupAnswerSources: (sources: AnswerSource[]) => AnswerSourceGroup[];
|
|
56
|
+
declare const createAnswerClient: (context: AnswersContext) => AnswerClient;
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/search/markdown.d.ts
|
|
59
|
+
/**
|
|
60
|
+
* Renders answer Markdown to HTML. Raw HTML and images become text, and only relative, web
|
|
61
|
+
* and mail links stay links, so the result is safe for `innerHTML`.
|
|
62
|
+
*/
|
|
63
|
+
declare const renderAnswer: (answer: Answer) => string;
|
|
64
|
+
//#endregion
|
|
65
|
+
//#region src/client.d.ts
|
|
66
|
+
interface SearchClient {
|
|
67
|
+
/** Searches all sources. Aborting the signal cancels the pending requests. */
|
|
68
|
+
search(query: string, signal: AbortSignal): Promise<SearchGroup[]>;
|
|
69
|
+
}
|
|
70
|
+
declare const createSearchClient: (context: SearchContext) => SearchClient;
|
|
71
|
+
//#endregion
|
|
72
|
+
export { type Answer, type AnswerClient, type AnswerHistoryTurn, type AnswerMessage, type AnswerSource, type AnswerSourceGroup, type SearchClient, type SearchGroup, type SearchItem, createAnswerClient, createSearchClient, groupAnswerSources, renderAnswer };
|
|
73
|
+
//# sourceMappingURL=client.d.ts.map
|