puredocs 0.0.1

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.

Potentially problematic release.


This version of puredocs might be problematic. Click here for more details.

@@ -0,0 +1 @@
1
+ {"version":3,"file":"puredocs.js","sources":["../src/core/state.ts","../src/core/router.ts","../src/core/security.ts","../node_modules/js-yaml/dist/js-yaml.mjs","../src/core/parser.ts","../src/core/search.ts","../src/core/theme.ts","../src/helpers/text.ts","../src/lib/dom.ts","../src/lib/icons.ts","../src/services/env.ts","../src/components/ui/select.ts","../src/components/ui/input.ts","../src/components/ui/button.ts","../src/components/ui/badge.ts","../src/components/ui/card.ts","../src/components/ui/section.ts","../src/components/ui/breadcrumb.ts","../src/components/ui/lock-icon.ts","../src/components/modals/modal-base.ts","../src/components/modals/auth-modal.ts","../src/components/modals/search-modal.ts","../src/components/nav/sidebar.ts","../src/components/shared/summary.ts","../src/components/shared/connection-settings.ts","../src/components/pages/overview.ts","../src/helpers/schema-utils.ts","../src/components/shared/schema-viewer.ts","../src/api/http-client.ts","../src/api/snippets.ts","../src/components/shared/example-picker.ts","../node_modules/highlight.js/lib/core.js","../node_modules/highlight.js/es/languages/bash.js","../node_modules/highlight.js/es/languages/go.js","../node_modules/highlight.js/es/languages/json.js","../node_modules/highlight.js/es/languages/python.js","../src/lib/highlight.ts","../src/core/validation.ts","../src/helpers/validation-ui.ts","../src/components/shared/editor-panel.ts","../src/components/shared/copy-button.ts","../src/components/shared/try-it.ts","../src/components/nav/route-nav.ts","../src/components/pages/endpoint.ts","../src/components/pages/tag-page.ts","../src/components/pages/webhook.ts","../src/components/layout/page-layout.ts","../src/components/layout/empty-state-page.ts","../src/components/app.ts","../src/core/persistence.ts","../src/core/auth-storage.ts","../src/helpers/debounce.ts","../src/index.ts"],"sourcesContent":["import type { PortalState, AuthState, TryItState, RouteInfo } from './types';\n\ntype Listener = (state: PortalState) => void;\ntype PartialUpdate = Partial<PortalState>;\n\n/** Simple reactive state store */\nclass Store {\n private state: PortalState;\n private listeners: Set<Listener> = new Set();\n\n constructor() {\n this.state = this.defaultState();\n }\n\n private defaultState(): PortalState {\n return {\n spec: null,\n loading: true,\n error: null,\n route: { type: 'overview' },\n theme: 'light',\n sidebarOpen: true,\n searchOpen: false,\n activeEnvironment: 'default',\n environments: [{ name: 'default', baseUrl: '' }],\n initialEnvironments: [{ name: 'default', baseUrl: '' }],\n auth: { schemes: {}, activeScheme: '', token: '', locked: false, source: 'manual' },\n tryItState: null,\n };\n }\n\n get(): PortalState {\n return this.state;\n }\n\n set(update: PartialUpdate): void {\n this.state = { ...this.state, ...update };\n this.notify();\n }\n\n setAuth(update: Partial<AuthState>): void {\n this.state = {\n ...this.state,\n auth: { ...this.state.auth, ...update },\n };\n this.notify();\n }\n\n /** Update a specific scheme value and sync token if it's the active scheme */\n setSchemeValue(schemeName: string, value: string): void {\n const schemes = { ...this.state.auth.schemes, [schemeName]: value };\n const activeScheme = schemeName; // selecting a scheme makes it active\n const token = value;\n this.state = {\n ...this.state,\n auth: { ...this.state.auth, schemes, activeScheme, token, source: 'manual' },\n };\n this.notify();\n }\n\n setTryIt(update: Partial<TryItState> | null): void {\n if (update === null) {\n this.state = { ...this.state, tryItState: null };\n } else {\n this.state = {\n ...this.state,\n tryItState: { ...this.state.tryItState!, ...update },\n };\n }\n this.notify();\n }\n\n setRoute(route: RouteInfo): void {\n this.state = { ...this.state, route };\n this.notify();\n }\n\n /** Switch active environment */\n setActiveEnvironment(name: string): void {\n this.state = { ...this.state, activeEnvironment: name };\n this.notify();\n }\n\n subscribe(fn: Listener): () => void {\n this.listeners.add(fn);\n return () => this.listeners.delete(fn);\n }\n\n private notify(): void {\n for (const fn of this.listeners) {\n try {\n fn(this.state);\n } catch (e) {\n console.error('[ApiPortal] Subscriber error:', e);\n }\n }\n }\n\n reset(): void {\n this.state = this.defaultState();\n this.listeners.clear();\n }\n}\n\nexport const store = new Store();\n","import type { RouteInfo } from './types';\nimport { store } from './state';\n\nlet basePath = '';\n\n/** Initialize history router */\nexport function initRouter(base = ''): void {\n basePath = base.replace(/\\/$/, '');\n window.addEventListener('popstate', handleRouteChange);\n handleRouteChange();\n}\n\n/** Navigate to a path */\nexport function navigate(path: string): void {\n window.history.pushState(null, '', basePath + path);\n handleRouteChange();\n}\n\n/** Get the current path */\nfunction getCurrentPath(): string {\n const path = window.location.pathname;\n return basePath ? path.replace(basePath, '') || '/' : path;\n}\n\n/** Parse a path into RouteInfo */\nexport function parsePath(path: string): RouteInfo {\n const clean = path.replace(/^\\/+/, '').replace(/\\/+$/, '');\n\n if (!clean || clean === '/') {\n return { type: 'overview' };\n }\n\n // /operations/{tag}/{method}/{path}\n const opMatch = clean.match(/^operations\\/([^/]+)\\/([^/]+)\\/(.+)$/);\n if (opMatch) {\n return {\n type: 'endpoint',\n tag: decodeURIComponent(opMatch[1]),\n method: opMatch[2].toLowerCase(),\n path: '/' + decodeURIComponent(opMatch[3]),\n };\n }\n\n // /tags/{tag}\n const tagMatch = clean.match(/^tags\\/([^/]+)$/);\n if (tagMatch) {\n return { type: 'tag', tag: decodeURIComponent(tagMatch[1]) };\n }\n\n // /schemas/{name}\n const schemaMatch = clean.match(/^schemas\\/(.+)$/);\n if (schemaMatch) {\n return { type: 'schema', schemaName: decodeURIComponent(schemaMatch[1]) };\n }\n\n // /webhooks/{name}\n const webhookMatch = clean.match(/^webhooks\\/(.+)$/);\n if (webhookMatch) {\n return { type: 'webhook', webhookName: decodeURIComponent(webhookMatch[1]) };\n }\n\n // /guides/{path}\n const guideMatch = clean.match(/^guides\\/(.+)$/);\n if (guideMatch) {\n return { type: 'guide', guidePath: decodeURIComponent(guideMatch[1]) };\n }\n\n return { type: 'overview' };\n}\n\n/** Build a navigation path from RouteInfo */\nexport function buildPath(route: RouteInfo): string {\n switch (route.type) {\n case 'overview':\n return '/';\n case 'tag':\n return `/tags/${encodeURIComponent(route.tag || '')}`;\n case 'endpoint':\n return `/operations/${encodeURIComponent(route.tag || 'default')}/${route.method}/${encodeURIComponent((route.path || '/').slice(1))}`;\n case 'schema':\n return `/schemas/${encodeURIComponent(route.schemaName || '')}`;\n case 'webhook':\n return `/webhooks/${encodeURIComponent(route.webhookName || '')}`;\n case 'guide':\n return `/guides/${encodeURIComponent(route.guidePath || '')}`;\n default:\n return '/';\n }\n}\n\n/** Handle route change events */\nfunction handleRouteChange(): void {\n const path = getCurrentPath();\n const route = parsePath(path);\n store.setRoute(route);\n}\n\n/** Cleanup router listeners */\nexport function destroyRouter(): void {\n window.removeEventListener('popstate', handleRouteChange);\n}\n","import type {\n OperationSecurityInfo,\n ResolvedSecuritySchemeRequirement,\n SecurityRequirement,\n SecurityScheme,\n} from './types';\n\nexport interface OperationAuthResolved {\n headers: Record<string, string>;\n query: Record<string, string>;\n cookies: Record<string, string>;\n matchedSchemeNames: string[];\n}\n\nexport function normalizeSecurityRequirements(raw: unknown): SecurityRequirement[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) return [];\n const requirements: SecurityRequirement[] = [];\n for (const candidate of raw) {\n if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) continue;\n const requirement: SecurityRequirement = {};\n for (const [schemeName, scopesRaw] of Object.entries(candidate as Record<string, unknown>)) {\n const scopes = Array.isArray(scopesRaw)\n ? scopesRaw.map((scope) => String(scope))\n : [];\n requirement[schemeName] = scopes;\n }\n requirements.push(requirement);\n }\n return requirements;\n}\n\nexport function resolveOperationSecurityInfo(\n requirements: SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n explicitlyNoAuth: boolean,\n): OperationSecurityInfo {\n if (!requirements || requirements.length === 0) {\n return { explicitlyNoAuth, requirements: [] };\n }\n\n const resolved: ResolvedSecuritySchemeRequirement[][] = requirements.map((requirement) => (\n Object.entries(requirement).map(([schemeName, scopes]) => ({\n schemeName,\n scopes: Array.isArray(scopes) ? scopes : [],\n scheme: securitySchemes[schemeName],\n }))\n ));\n\n return { explicitlyNoAuth, requirements: resolved };\n}\n\nexport function hasOperationAuth(info: OperationSecurityInfo | undefined): boolean {\n return Boolean(info && !info.explicitlyNoAuth && info.requirements.length > 0);\n}\n\nexport function getSecuritySchemeBadge(scheme: SecurityScheme | undefined): string {\n if (!scheme) return 'Auth';\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') return 'Bearer';\n if (s === 'basic') return 'Basic';\n return 'HTTP';\n }\n if (scheme.type === 'apiKey') return 'API Key';\n if (scheme.type === 'oauth2') return 'OAuth2';\n if (scheme.type === 'openIdConnect') return 'OpenID Connect';\n return scheme.type || 'Auth';\n}\n\nexport function getOperationSecurityBadges(info: OperationSecurityInfo | undefined): string[] {\n if (!hasOperationAuth(info)) return [];\n const seen = new Set<string>();\n const badges: string[] = [];\n for (const requirement of info!.requirements) {\n for (const item of requirement) {\n const badge = getSecuritySchemeBadge(item.scheme);\n if (seen.has(badge)) continue;\n seen.add(badge);\n badges.push(badge);\n }\n }\n return badges;\n}\n\nexport function formatOperationAuthBadge(info: OperationSecurityInfo | undefined): string | null {\n const badges = getOperationSecurityBadges(info);\n if (badges.length === 0) return null;\n if (badges.length === 1) return `${badges[0]} required`;\n return `${badges[0]} +${badges.length - 1} required`;\n}\n\nexport function formatOperationAuthTitle(info: OperationSecurityInfo | undefined): string {\n if (!hasOperationAuth(info)) return 'Authentication not required';\n const groups = info!.requirements.map((requirement) => (\n requirement.map((item) => {\n const badge = getSecuritySchemeBadge(item.scheme);\n if (item.scopes.length > 0) return `${badge} [${item.scopes.join(', ')}]`;\n return badge;\n }).join(' + ')\n ));\n return `Requires authentication: ${groups.join(' OR ')}`;\n}\n\nexport function resolveOperationAuth(\n info: OperationSecurityInfo | undefined,\n configuredSchemes: Record<string, string>,\n activeScheme: string,\n fallbackToken: string,\n): OperationAuthResolved {\n const empty: OperationAuthResolved = { headers: {}, query: {}, cookies: {}, matchedSchemeNames: [] };\n if (!hasOperationAuth(info)) return empty;\n\n for (const requirement of info!.requirements) {\n const allConfigured = requirement.every((item) => Boolean(configuredSchemes[item.schemeName]));\n if (!allConfigured && requirement.length > 0) continue;\n const resolved = materializeRequirement(requirement, configuredSchemes);\n if (Object.keys(resolved.headers).length > 0 || Object.keys(resolved.query).length > 0 || Object.keys(resolved.cookies).length > 0) {\n return resolved;\n }\n }\n\n if (!fallbackToken || !activeScheme) return empty;\n const fallbackItem: ResolvedSecuritySchemeRequirement = {\n schemeName: activeScheme,\n scopes: [],\n };\n const resolved = materializeRequirement([fallbackItem], { ...configuredSchemes, [activeScheme]: fallbackToken });\n return resolved;\n}\n\nexport function getOperationAuthHeaderPlaceholders(info: OperationSecurityInfo | undefined): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!hasOperationAuth(info)) return headers;\n const firstRequirement = info!.requirements[0] || [];\n for (const item of firstRequirement) {\n const scheme = item.scheme;\n if (!scheme) continue;\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') headers.Authorization = 'Bearer <token>';\n else if (s === 'basic') headers.Authorization = 'Basic <credentials>';\n else headers.Authorization = '<token>';\n continue;\n }\n if (scheme.type === 'apiKey' && scheme.in === 'header' && scheme.name) {\n headers[scheme.name] = `<${scheme.name}>`;\n }\n }\n return headers;\n}\n\nfunction materializeRequirement(\n requirement: ResolvedSecuritySchemeRequirement[],\n configuredSchemes: Record<string, string>,\n): OperationAuthResolved {\n const result: OperationAuthResolved = { headers: {}, query: {}, cookies: {}, matchedSchemeNames: [] };\n for (const item of requirement) {\n const scheme = item.scheme;\n const value = configuredSchemes[item.schemeName];\n if (!scheme || !value) continue;\n result.matchedSchemeNames.push(item.schemeName);\n\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') result.headers.Authorization = `Bearer ${value}`;\n else if (s === 'basic') result.headers.Authorization = `Basic ${value}`;\n else result.headers.Authorization = value;\n continue;\n }\n\n if (scheme.type === 'oauth2' || scheme.type === 'openIdConnect') {\n result.headers.Authorization = `Bearer ${value}`;\n continue;\n }\n\n if (scheme.type === 'apiKey' && scheme.name) {\n if (scheme.in === 'query') result.query[scheme.name] = value;\n else if (scheme.in === 'cookie') result.cookies[scheme.name] = value;\n else result.headers[scheme.name] = value;\n }\n }\n return result;\n}\n","\n/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\n\nvar common = {\n\tisNothing: isNothing_1,\n\tisObject: isObject_1,\n\ttoArray: toArray_1,\n\trepeat: repeat_1,\n\tisNegativeZero: isNegativeZero_1,\n\textend: extend_1\n};\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException$1(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\n\n\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nvar exception = YAMLException$1;\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '→') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nvar snippet = makeSnippet;\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type$1(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nvar type = Type$1;\n\n/*eslint-disable max-len*/\n\n\n\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n\n\nSchema$1.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new exception('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type$1.loadKind && type$1.loadKind !== 'scalar') {\n throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type$1.multi) {\n throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema$1.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nvar schema = Schema$1;\n\nvar str = new type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n\nvar seq = new type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n\nvar map = new type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nvar _null = new type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nvar bool = new type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nvar int = new type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nvar float = new type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\n\nvar core = json;\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nvar timestamp = new type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nvar merge = new type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n\n/*eslint-disable no-bitwise*/\n\n\n\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nvar binary = new type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString$2.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nvar omap = new type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n\nvar _toString$1 = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString$1.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nvar pairs = new type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nvar set = new type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\n\n/*eslint-disable max-len,no-use-before-define*/\n\n\n\n\n\n\n\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State$1(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || _default;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = snippet(mark);\n\n return new exception(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty$1.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty$1.call(overridableKeys, keyNode) &&\n _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State$1(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception('expected a single document in the stream, but found more');\n}\n\n\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\n\nvar loader = {\n\tloadAll: loadAll_1,\n\tload: load_1\n};\n\n/*eslint-disable no-use-before-define*/\n\n\n\n\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new exception('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || _default;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out\n// c = flow-in ⇒ ns-plain-safe-in\n// c = block-key ⇒ ns-plain-safe-out\n// c = flow-key ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” )\n// | ( /* An ns-char preceding */ “#” )\n// | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new exception('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new exception('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-”\n // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump$1(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nvar dump_1 = dump$1;\n\nvar dumper = {\n\tdump: dump_1\n};\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n\n// Re-export all types in case user wants to create custom schema\nvar types = {\n binary: binary,\n float: float,\n map: map,\n null: _null,\n pairs: pairs,\n set: set,\n timestamp: timestamp,\n bool: bool,\n int: int,\n merge: merge,\n omap: omap,\n seq: seq,\n str: str\n};\n\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed('safeLoad', 'load');\nvar safeLoadAll = renamed('safeLoadAll', 'loadAll');\nvar safeDump = renamed('safeDump', 'dump');\n\nvar jsYaml = {\n\tType: Type,\n\tSchema: Schema,\n\tFAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n\tJSON_SCHEMA: JSON_SCHEMA,\n\tCORE_SCHEMA: CORE_SCHEMA,\n\tDEFAULT_SCHEMA: DEFAULT_SCHEMA,\n\tload: load,\n\tloadAll: loadAll,\n\tdump: dump,\n\tYAMLException: YAMLException,\n\ttypes: types,\n\tsafeLoad: safeLoad,\n\tsafeLoadAll: safeLoadAll,\n\tsafeDump: safeDump\n};\n\nexport { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, jsYaml as default, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types };\n","import type {\n ParsedSpec, SpecInfo, SpecServer, SpecTag, SpecOperation,\n SpecParameter, SpecRequestBody, SpecResponse, SpecResponseHeader, SpecMediaType,\n SpecExample, SchemaObject, SecurityScheme, SpecWebhook, SpecCallback, SecurityRequirement,\n} from './types';\nimport { normalizeSecurityRequirements, resolveOperationSecurityInfo } from './security';\nimport { load as loadYaml } from 'js-yaml';\n\nconst MAX_REF_DEPTH = 50;\nconst MAX_CYCLE_REFS = 200;\n\n/** Parse and normalize an OpenAPI 3.x spec */\nexport function parseSpec(raw: Record<string, unknown>): ParsedSpec {\n const info = parseInfo(raw.info as Record<string, unknown> || {});\n const servers = parseServers(raw.servers as Record<string, unknown>[] || []);\n const components = (raw.components || {}) as Record<string, unknown>;\n const schemas = resolveAllRefs(components.schemas as Record<string, unknown> || {}, raw);\n const securitySchemes = parseSecuritySchemes(components.securitySchemes as Record<string, unknown> || {});\n const rootSecurity = normalizeSecurityRequirements(raw.security);\n const rawPaths = raw.paths as Record<string, Record<string, unknown>> || {};\n const paths: Record<string, Record<string, unknown>> = {};\n for (const [path, methods] of Object.entries(rawPaths)) {\n if (!path.startsWith('/docs')) paths[path] = methods as Record<string, unknown>;\n }\n const operations = parseOperations(paths, raw, rootSecurity, securitySchemes);\n const tags = groupByTags(operations, raw.tags as Array<Record<string, unknown>> || []);\n const webhooks = parseWebhooks(raw.webhooks as Record<string, Record<string, unknown>> || {}, raw, rootSecurity, securitySchemes);\n\n return { raw, info, servers, tags, operations, schemas, securitySchemes, webhooks };\n}\n\nfunction parseInfo(raw: Record<string, unknown>): SpecInfo {\n return {\n title: String(raw.title || 'API'),\n description: raw.description ? String(raw.description) : undefined,\n version: String(raw.version || '1.0.0'),\n contact: raw.contact as SpecInfo['contact'],\n license: raw.license as SpecInfo['license'],\n };\n}\n\nfunction parseServers(raw: Record<string, unknown>[]): SpecServer[] {\n return raw.map((s) => ({\n url: String(s.url || '/'),\n description: s.description ? String(s.description) : undefined,\n variables: s.variables as SpecServer['variables'],\n }));\n}\n\nfunction parseSecuritySchemes(raw: Record<string, unknown>): Record<string, SecurityScheme> {\n const result: Record<string, SecurityScheme> = {};\n for (const [name, scheme] of Object.entries(raw)) {\n const s = scheme as Record<string, unknown>;\n result[name] = {\n type: String(s.type || ''),\n scheme: s.scheme ? String(s.scheme) : undefined,\n bearerFormat: s.bearerFormat ? String(s.bearerFormat) : undefined,\n description: s.description ? String(s.description) : undefined,\n in: s.in ? String(s.in) : undefined,\n name: s.name ? String(s.name) : undefined,\n openIdConnectUrl: s.openIdConnectUrl ? String(s.openIdConnectUrl) : undefined,\n flows: s.flows && typeof s.flows === 'object' ? s.flows as SecurityScheme['flows'] : undefined,\n };\n }\n return result;\n}\n\n/* ─── $ref Resolution ─── */\n\nconst refCache = new Map<string, unknown>();\nlet refCount = 0;\n\nfunction resolveRef(ref: string, root: Record<string, unknown>): unknown {\n if (refCache.has(ref)) return refCache.get(ref);\n\n if (++refCount > MAX_CYCLE_REFS) return { type: 'object', description: '[Circular reference]' };\n\n const parts = ref.replace(/^#\\//, '').split('/').map((p) => decodeURIComponent(p.replace(/~1/g, '/').replace(/~0/g, '~')));\n let current: unknown = root;\n\n for (const part of parts) {\n if (current && typeof current === 'object' && !Array.isArray(current)) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n\n refCache.set(ref, current);\n return current;\n}\n\nfunction deepResolve(node: unknown, root: Record<string, unknown>, depth = 0, seen = new Set<string>()): unknown {\n if (depth > MAX_REF_DEPTH) return node;\n if (!node || typeof node !== 'object') return node;\n if (Array.isArray(node)) return node.map((item) => deepResolve(item, root, depth + 1, seen));\n\n const obj = node as Record<string, unknown>;\n\n if (typeof obj.$ref === 'string') {\n const ref = obj.$ref;\n if (seen.has(ref)) return { type: 'object', description: '[Circular reference]' };\n\n const newSeen = new Set(seen);\n newSeen.add(ref);\n const resolved = resolveRef(ref, root);\n if (resolved && typeof resolved === 'object') {\n return deepResolve(resolved, root, depth + 1, newSeen);\n }\n return resolved;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = deepResolve(value, root, depth + 1, seen);\n }\n return result;\n}\n\nfunction resolveAllRefs(schemas: Record<string, unknown>, root: Record<string, unknown>): Record<string, SchemaObject> {\n refCache.clear();\n refCount = 0;\n const result: Record<string, SchemaObject> = {};\n for (const [name, schema] of Object.entries(schemas)) {\n result[name] = deepResolve(schema, root) as SchemaObject;\n }\n return result;\n}\n\n/* ─── Operations ─── */\n\nfunction parseOperations(\n paths: Record<string, Record<string, unknown>>,\n root: Record<string, unknown>,\n rootSecurity: SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): SpecOperation[] {\n refCache.clear();\n refCount = 0;\n const ops: SpecOperation[] = [];\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'];\n\n for (const [pathStr, pathItem] of Object.entries(paths)) {\n if (!pathItem || typeof pathItem !== 'object') continue;\n const pathSecurity = normalizeSecurityRequirements(pathItem.security);\n\n // Path-level parameters\n const pathParams = Array.isArray(pathItem.parameters)\n ? pathItem.parameters.map((p: unknown) => deepResolve(p, root) as Record<string, unknown>)\n : [];\n\n for (const method of methods) {\n const op = pathItem[method] as Record<string, unknown> | undefined;\n if (!op) continue;\n\n const operation = parseOperation(\n method,\n pathStr,\n op,\n pathParams,\n root,\n pathSecurity,\n rootSecurity,\n securitySchemes,\n );\n ops.push(operation);\n }\n }\n\n return ops;\n}\n\nfunction parseOperation(\n method: string,\n path: string,\n op: Record<string, unknown>,\n pathParams: Record<string, unknown>[],\n root: Record<string, unknown>,\n pathSecurity: SecurityRequirement[] | undefined = undefined,\n rootSecurity: SecurityRequirement[] | undefined = undefined,\n securitySchemes: Record<string, SecurityScheme> = {},\n): SpecOperation {\n const opParams = Array.isArray(op.parameters)\n ? op.parameters.map((p: unknown) => deepResolve(p, root) as Record<string, unknown>)\n : [];\n\n // Merge path-level and operation-level parameters (operation overrides)\n const mergedParams = [...pathParams];\n for (const p of opParams) {\n const idx = mergedParams.findIndex((mp) => mp.name === p.name && mp.in === p.in);\n if (idx >= 0) mergedParams[idx] = p;\n else mergedParams.push(p);\n }\n\n const parameters = mapParameters(mergedParams, root);\n let requestBody = mapRequestBody(op.requestBody, root);\n\n // x-doc-examples → requestBody.content[].examples\n if (Array.isArray(op['x-doc-examples'])) {\n const docExamples = op['x-doc-examples'] as Array<Record<string, unknown>>;\n const bodyExamples: Array<{ summary: string; value: unknown }> = [];\n\n for (let i = 0; i < docExamples.length; i++) {\n const ex = docExamples[i];\n const scenario = ex.scenario ? String(ex.scenario) : `Example ${i + 1}`;\n const req = ex.request as Record<string, unknown> | undefined;\n const body = req?.body;\n if (body === undefined) continue;\n bodyExamples.push({ summary: scenario, value: body });\n }\n\n if (bodyExamples.length > 0) {\n if (!requestBody) requestBody = { required: false, content: {} };\n const jsonContent = requestBody.content['application/json'] || requestBody.content['application/vnd.api+json'] || {};\n if (!requestBody.content['application/json']) {\n requestBody.content['application/json'] = jsonContent;\n }\n const target = requestBody.content['application/json'];\n if (!target.examples) target.examples = {};\n for (let i = 0; i < bodyExamples.length; i++) {\n const be = bodyExamples[i];\n const base = be.summary.replace(/[^a-zA-Z0-9\\u0430-\\u044f\\u0410-\\u042f\\u0451\\u0401]/g, '-').replace(/-+/g, '-').slice(0, 40) || 'ex';\n const key = `${base}-${i}`.replace(/^-/, '');\n target.examples[key] = { summary: be.summary, description: be.summary, value: be.value };\n }\n }\n }\n\n const responses = mapResponses(op.responses, root);\n\n const tags = Array.isArray(op.tags) ? op.tags.map(String) : ['default'];\n const operationId = String(op.operationId || `${method}_${path.replace(/[^a-zA-Z0-9]/g, '_')}`);\n const hasOwnSecurity = Object.prototype.hasOwnProperty.call(op, 'security');\n const operationSecurity = normalizeSecurityRequirements(op.security);\n const mergedSecurity = hasOwnSecurity ? operationSecurity : (pathSecurity ?? rootSecurity);\n const explicitlyNoAuth = hasOwnSecurity && Array.isArray(operationSecurity) && operationSecurity.length === 0;\n\n // Callbacks\n const callbacks = parseCallbacks(op.callbacks as Record<string, unknown> | undefined, root, securitySchemes);\n\n const result: SpecOperation = {\n operationId,\n method,\n path,\n summary: op.summary ? String(op.summary) : undefined,\n description: op.description ? String(op.description) : undefined,\n tags,\n deprecated: Boolean(op.deprecated),\n security: mergedSecurity,\n resolvedSecurity: resolveOperationSecurityInfo(mergedSecurity, securitySchemes, explicitlyNoAuth),\n parameters,\n requestBody,\n responses,\n };\n if (callbacks.length > 0) result.callbacks = callbacks;\n return result;\n}\n\n/* ─── Webhooks ─── */\n\nfunction parseWebhooks(\n webhooks: Record<string, Record<string, unknown>>,\n root: Record<string, unknown>,\n rootSecurity: SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): SpecWebhook[] {\n if (!webhooks || typeof webhooks !== 'object') return [];\n const result: SpecWebhook[] = [];\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'];\n\n for (const [name, pathItem] of Object.entries(webhooks)) {\n if (!pathItem || typeof pathItem !== 'object') continue;\n const resolved = deepResolve(pathItem, root) as Record<string, unknown>;\n const pathSecurity = normalizeSecurityRequirements(resolved.security);\n\n for (const method of methods) {\n const op = resolved[method] as Record<string, unknown> | undefined;\n if (!op) continue;\n const hasOwnSecurity = Object.prototype.hasOwnProperty.call(op, 'security');\n const operationSecurity = normalizeSecurityRequirements(op.security);\n const mergedSecurity = hasOwnSecurity ? operationSecurity : (pathSecurity ?? rootSecurity);\n const explicitlyNoAuth = hasOwnSecurity && Array.isArray(operationSecurity) && operationSecurity.length === 0;\n\n const opParams = Array.isArray(op.parameters)\n ? op.parameters.map((p: unknown) => deepResolve(p, root) as Record<string, unknown>)\n : [];\n const parameters = mapParameters(opParams, root);\n const requestBody = mapRequestBody(op.requestBody, root);\n const responses = mapResponses(op.responses, root);\n\n result.push({\n name,\n method,\n path: name,\n summary: op.summary ? String(op.summary) : undefined,\n description: op.description ? String(op.description) : undefined,\n security: mergedSecurity,\n resolvedSecurity: resolveOperationSecurityInfo(mergedSecurity, securitySchemes, explicitlyNoAuth),\n parameters,\n requestBody,\n responses,\n });\n }\n }\n return result;\n}\n\nfunction mapParameters(\n rawParams: Record<string, unknown>[],\n root: Record<string, unknown>,\n): SpecParameter[] {\n return rawParams.map((param) => ({\n name: String(param.name || ''),\n in: String(param.in || 'query') as SpecParameter['in'],\n required: Boolean(param.required),\n description: param.description ? String(param.description) : undefined,\n schema: param.schema ? deepResolve(param.schema, root) as SchemaObject : undefined,\n example: param.example,\n examples: param.examples ? parseExamples(param.examples as Record<string, unknown>) : undefined,\n deprecated: Boolean(param.deprecated),\n }));\n}\n\nfunction mapRequestBody(\n rawRequestBody: unknown,\n root: Record<string, unknown>,\n): SpecRequestBody | undefined {\n if (!rawRequestBody) return undefined;\n const requestBody = deepResolve(rawRequestBody, root) as Record<string, unknown>;\n return {\n description: requestBody.description ? String(requestBody.description) : undefined,\n required: Boolean(requestBody.required),\n content: parseContent(requestBody.content as Record<string, unknown> || {}, root),\n };\n}\n\nfunction parseResponseHeaders(\n rawHeaders: unknown,\n root: Record<string, unknown>,\n): Record<string, SpecResponseHeader> {\n const result: Record<string, SpecResponseHeader> = {};\n if (!rawHeaders || typeof rawHeaders !== 'object') return result;\n\n for (const [name, raw] of Object.entries(rawHeaders as Record<string, unknown>)) {\n if (!raw || typeof raw !== 'object') continue;\n const resolved = deepResolve(raw, root) as Record<string, unknown>;\n const schema = resolved.schema as SchemaObject | undefined;\n const example = (resolved.example ?? (schema && typeof schema === 'object' ? schema.example : undefined)) as unknown;\n result[name] = {\n description: resolved.description ? String(resolved.description) : undefined,\n required: Boolean(resolved.required),\n schema: schema && typeof schema === 'object' ? (deepResolve(schema, root) as SchemaObject) : undefined,\n example: example !== undefined ? example : undefined,\n deprecated: Boolean(resolved.deprecated),\n };\n }\n return result;\n}\n\nfunction mapResponses(\n rawResponses: unknown,\n root: Record<string, unknown>,\n): Record<string, SpecResponse> {\n const responses: Record<string, SpecResponse> = {};\n if (!rawResponses || typeof rawResponses !== 'object') return responses;\n\n for (const [code, rawResponse] of Object.entries(rawResponses as Record<string, unknown>)) {\n const response = deepResolve(rawResponse, root) as Record<string, unknown>;\n const rawHeaders = response.headers;\n responses[code] = {\n statusCode: code,\n description: response.description ? String(response.description) : undefined,\n headers: rawHeaders ? parseResponseHeaders(rawHeaders, root) : undefined,\n content: response.content ? parseContent(response.content as Record<string, unknown>, root) : undefined,\n };\n }\n\n return responses;\n}\n\n/* ─── Callbacks ─── */\n\nfunction parseCallbacks(\n callbacks: Record<string, unknown> | undefined,\n root: Record<string, unknown>,\n securitySchemes: Record<string, SecurityScheme>,\n): SpecCallback[] {\n if (!callbacks || typeof callbacks !== 'object') return [];\n const result: SpecCallback[] = [];\n const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'];\n\n for (const [name, callbackItem] of Object.entries(callbacks)) {\n const resolved = deepResolve(callbackItem, root) as Record<string, Record<string, unknown>>;\n if (!resolved || typeof resolved !== 'object') continue;\n const ops: SpecOperation[] = [];\n\n for (const [urlExpr, pathItem] of Object.entries(resolved)) {\n if (!pathItem || typeof pathItem !== 'object') continue;\n for (const method of methods) {\n const op = pathItem[method] as Record<string, unknown> | undefined;\n if (!op) continue;\n ops.push(parseOperation(method, urlExpr, op, [], root, undefined, undefined, securitySchemes));\n }\n }\n\n if (ops.length > 0) {\n result.push({ name, operations: ops });\n }\n }\n return result;\n}\n\nfunction parseContent(content: Record<string, unknown>, root: Record<string, unknown>): Record<string, SpecMediaType> {\n const result: Record<string, SpecMediaType> = {};\n for (const [mediaType, value] of Object.entries(content)) {\n const mt = value as Record<string, unknown>;\n result[mediaType] = {\n schema: mt.schema ? deepResolve(mt.schema, root) as SchemaObject : undefined,\n example: mt.example,\n examples: mt.examples ? parseExamples(mt.examples as Record<string, unknown>) : undefined,\n };\n }\n return result;\n}\n\nfunction parseExamples(examples: Record<string, unknown>): Record<string, SpecExample> {\n const result: Record<string, SpecExample> = {};\n for (const [name, ex] of Object.entries(examples)) {\n const e = ex as Record<string, unknown>;\n result[name] = {\n summary: e.summary ? String(e.summary) : undefined,\n description: e.description ? String(e.description) : undefined,\n value: e.value,\n };\n }\n return result;\n}\n\nfunction groupByTags(operations: SpecOperation[], rawTags: Array<Record<string, unknown>>): SpecTag[] {\n const tagMap = new Map<string, SpecOperation[]>();\n const tagDescriptions = new Map<string, string>();\n\n for (const t of rawTags) {\n tagDescriptions.set(String(t.name), String(t.description || ''));\n }\n\n for (const op of operations) {\n for (const tag of op.tags) {\n if (!tagMap.has(tag)) tagMap.set(tag, []);\n tagMap.get(tag)!.push(op);\n }\n }\n\n // Maintain tag order from spec, then add any unregistered tags\n const orderedTags: SpecTag[] = [];\n const seen = new Set<string>();\n\n for (const t of rawTags) {\n const name = String(t.name);\n if (seen.has(name)) continue;\n seen.add(name);\n orderedTags.push({\n name,\n description: tagDescriptions.get(name),\n operations: tagMap.get(name) || [],\n });\n }\n\n for (const [name, ops] of tagMap) {\n if (seen.has(name)) continue;\n seen.add(name);\n orderedTags.push({ name, description: tagDescriptions.get(name), operations: ops });\n }\n\n return orderedTags;\n}\n\n/* ─── Example Generation ─── */\n\n/** Generate a sample value from a schema when no example is provided */\nexport function generateExample(schema: SchemaObject | undefined): unknown {\n if (!schema) return undefined;\n if (schema.example !== undefined) return schema.example;\n if (schema.default !== undefined) return schema.default;\n if (schema.enum && schema.enum.length > 0) return schema.enum[0];\n\n switch (schema.type) {\n case 'string':\n if (schema.format === 'date-time') return '2025-01-15T10:30:00Z';\n if (schema.format === 'date') return '2025-01-15';\n if (schema.format === 'email') return 'user@example.com';\n if (schema.format === 'uri' || schema.format === 'url') return 'https://example.com';\n if (schema.format === 'uuid') return '550e8400-e29b-41d4-a716-446655440000';\n if (schema.format === 'password') return '********';\n return 'string';\n\n case 'number':\n case 'integer':\n if (schema.minimum !== undefined) return schema.minimum;\n return schema.type === 'integer' ? 0 : 0.0;\n\n case 'boolean':\n return true;\n\n case 'array':\n if (schema.items) {\n const item = generateExample(schema.items);\n return item !== undefined ? [item] : [];\n }\n return [];\n\n case 'object': {\n const obj: Record<string, unknown> = {};\n if (schema.properties) {\n for (const [key, prop] of Object.entries(schema.properties)) {\n obj[key] = generateExample(prop);\n }\n }\n return obj;\n }\n\n default:\n // Handle allOf, oneOf, anyOf\n if (schema.allOf && schema.allOf.length > 0) {\n const merged: Record<string, unknown> = {};\n for (const sub of schema.allOf) {\n const ex = generateExample(sub);\n if (ex && typeof ex === 'object' && !Array.isArray(ex)) {\n Object.assign(merged, ex);\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined;\n }\n if (schema.oneOf && schema.oneOf.length > 0) return generateExample(schema.oneOf[0]);\n if (schema.anyOf && schema.anyOf.length > 0) return generateExample(schema.anyOf[0]);\n if (schema.properties) {\n const obj: Record<string, unknown> = {};\n for (const [key, prop] of Object.entries(schema.properties)) {\n obj[key] = generateExample(prop);\n }\n return obj;\n }\n return undefined;\n }\n}\n\n/** Load spec from URL (JSON or YAML) */\nexport async function loadSpec(url: string): Promise<Record<string, unknown>> {\n const response = await fetch(url);\n if (!response.ok) throw new Error(`Failed to load spec: ${response.status} ${response.statusText}`);\n const text = await response.text();\n\n // Try JSON first\n try {\n return JSON.parse(text);\n } catch {\n try {\n return loadYaml(text) as Record<string, unknown>;\n } catch {\n throw new Error('Failed to parse spec as JSON or YAML');\n }\n }\n}\n","import type { ParsedSpec, SearchEntry } from './types';\nimport { formatOperationAuthBadge, formatOperationAuthTitle, hasOperationAuth } from './security';\n\nlet index: SearchEntry[] = [];\nconst searchTypePriority: Record<SearchEntry['type'], number> = {\n operation: 0,\n tag: 1,\n schema: 2,\n webhook: 3,\n};\n\n/** Build search index from parsed spec */\nexport function buildSearchIndex(spec: ParsedSpec): void {\n index = [];\n\n // Index tags\n for (const tag of spec.tags) {\n index.push({\n type: 'tag',\n title: tag.name,\n subtitle: tag.description,\n tag: tag.name,\n keywords: `${tag.name} ${tag.description || ''}`.toLowerCase(),\n });\n }\n\n // Index operations\n for (const op of spec.operations) {\n index.push({\n type: 'operation',\n title: op.summary || op.operationId,\n subtitle: op.path,\n method: op.method,\n requiresAuth: hasOperationAuth(op.resolvedSecurity),\n authBadge: formatOperationAuthBadge(op.resolvedSecurity) || undefined,\n authTitle: hasOperationAuth(op.resolvedSecurity) ? formatOperationAuthTitle(op.resolvedSecurity) : undefined,\n resolvedSecurity: op.resolvedSecurity,\n path: op.path,\n tag: op.tags[0],\n operationId: op.operationId,\n keywords: `${op.method} ${op.path} ${op.summary || ''} ${op.description || ''} ${op.operationId} ${op.tags.join(' ')}`.toLowerCase(),\n });\n }\n\n // Index schemas\n for (const [name, schema] of Object.entries(spec.schemas)) {\n index.push({\n type: 'schema',\n title: name,\n subtitle: (schema.description as string) || 'Schema',\n schemaName: name,\n keywords: `${name} ${(schema.description as string) || ''} schema model`.toLowerCase(),\n });\n }\n\n // Index webhooks\n if (spec.webhooks) {\n for (const wh of spec.webhooks) {\n index.push({\n type: 'webhook',\n title: wh.summary || wh.name,\n subtitle: `${wh.method.toUpperCase()} Webhook`,\n method: wh.method,\n webhookName: wh.name,\n keywords: `${wh.name} ${wh.method} ${wh.summary || ''} ${wh.description || ''} webhook`.toLowerCase(),\n });\n }\n }\n}\n\n/** Search the index with a query string */\nexport function search(query: string, limit = 20): SearchEntry[] {\n if (!query.trim()) return [];\n\n const terms = query.toLowerCase().trim().split(/\\s+/);\n const scored: Array<{ entry: SearchEntry; score: number }> = [];\n\n for (const entry of index) {\n let score = 0;\n let allMatch = true;\n\n for (const term of terms) {\n if (entry.keywords.includes(term)) {\n score += 1;\n // Bonus for title match\n if (entry.title.toLowerCase().includes(term)) score += 3;\n // Bonus for exact path match\n if (entry.path?.toLowerCase().includes(term)) score += 2;\n // Bonus for method match\n if (entry.method?.toLowerCase() === term) score += 2;\n } else {\n allMatch = false;\n }\n }\n\n if (allMatch && score > 0) {\n scored.push({ entry, score });\n }\n }\n\n return scored\n .sort((a, b) => {\n const pa = searchTypePriority[a.entry.type] ?? 99;\n const pb = searchTypePriority[b.entry.type] ?? 99;\n if (pa !== pb) return pa - pb;\n if (b.score !== a.score) return b.score - a.score;\n return a.entry.title.localeCompare(b.entry.title);\n })\n .slice(0, limit)\n .map((s) => s.entry);\n}\n\n","import { store } from './state';\n\nexport interface ThemeConfig {\n primaryColor?: string;\n}\n\nconst THEME_KEY = 'puredocs-theme';\n\n/** Theme class switching only and optional config overrides */\nexport function applyTheme(root: HTMLElement, themeMode: 'light' | 'dark', config?: ThemeConfig): void {\n root.classList.remove('light', 'dark');\n root.classList.add(`${themeMode}`);\n\n /* Config overrides (primary) — from PortalConfig */\n if (config?.primaryColor) {\n root.style.setProperty('--primary-color', config.primaryColor);\n } else {\n root.style.removeProperty('--primary-color');\n }\n}\n\n/** Toggle between light and dark theme */\nexport function toggleTheme(): void {\n const current = store.get().theme;\n const next = current === 'light' ? 'dark' : 'light';\n store.set({ theme: next });\n try {\n localStorage.setItem(THEME_KEY, next);\n } catch { /* noop */ }\n}\n\n/** Detect initial theme */\nexport function detectTheme(preference?: 'light' | 'dark' | 'auto'): 'light' | 'dark' {\n if (preference && preference !== 'auto') return preference;\n try {\n const stored = localStorage.getItem(THEME_KEY);\n if (stored === 'light' || stored === 'dark') return stored;\n } catch { /* noop */ }\n if (window.matchMedia?.('(prefers-color-scheme: dark)').matches) return 'dark';\n return 'light';\n}\n","export function looksLikeJson(str: string): boolean {\n const text = str.trim();\n return (text.startsWith('{') && text.endsWith('}')) || (text.startsWith('[') && text.endsWith(']'));\n}\n\nexport function escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n","/**\n * Lightweight DOM helper utilities.\n * No virtual DOM — direct, efficient DOM manipulation.\n */\nimport { escapeHtml as escapeHtmlImpl } from '../helpers/text';\n\ntype Attrs = Record<string, string | boolean | number | EventListener | undefined>;\ntype Child = HTMLElement | SVGElement | string | null | undefined | false;\n\n/** Create an HTML element with attributes and children */\nexport function h(tag: string, attrs?: Attrs | null, ...children: Child[]): HTMLElement {\n const el = document.createElement(tag);\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined || value === false) continue;\n if (key.startsWith('on') && typeof value === 'function') {\n el.addEventListener(key.slice(2).toLowerCase(), value as EventListener);\n } else if (key === 'className') {\n el.className = String(value);\n } else if (key === 'innerHTML') {\n el.innerHTML = String(value);\n } else if (key === 'textContent') {\n el.textContent = String(value);\n } else if (value === true) {\n el.setAttribute(key, '');\n } else {\n el.setAttribute(key, String(value));\n }\n }\n }\n\n for (const child of children) {\n if (child === null || child === undefined || child === false) continue;\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child));\n } else {\n el.appendChild(child);\n }\n }\n\n return el;\n}\n\n/** Clear all children of an element */\nexport function clear(el: HTMLElement): void {\n while (el.firstChild) el.removeChild(el.firstChild);\n}\n\n/** Replace all children of a container */\nexport function render(container: HTMLElement, ...children: Child[]): void {\n clear(container);\n for (const child of children) {\n if (child === null || child === undefined || child === false) continue;\n if (typeof child === 'string') {\n container.appendChild(document.createTextNode(child));\n } else {\n container.appendChild(child);\n }\n }\n}\n\n/** Escape HTML to prevent XSS */\nexport function escapeHtml(str: string): string {\n return escapeHtmlImpl(str);\n}\n\n/** Copy text to clipboard */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n // Fallback\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;left:-9999px';\n document.body.appendChild(ta);\n ta.select();\n const ok = document.execCommand('copy');\n document.body.removeChild(ta);\n return ok;\n }\n}\n\n/** Format bytes to human readable */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${(bytes / k ** i).toFixed(i > 0 ? 1 : 0)} ${sizes[i]}`;\n}\n\n/** Format duration in ms to human readable */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)} ms`;\n return `${(ms / 1000).toFixed(2)} s`;\n}\n","/** SVG icon set — clean, consistent 20x20 Lucide-inspired icons */\n\nconst icon = (d: string, opts?: { strokeWidth?: number; fill?: string }) =>\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"${opts?.fill || 'none'}\" stroke=\"currentColor\" stroke-width=\"${opts?.strokeWidth || 1.75}\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${d}</svg>`;\n\nexport const icons = {\n search: icon('<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>'),\n close: icon('<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>'),\n plus: icon('<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>'),\n chevronDown: icon('<path d=\"m6 9 6 6 6-6\"/>'),\n chevronRight: icon('<path d=\"m9 18 6-6-6-6\"/>'),\n chevronLeft: icon('<path d=\"m15 18-6-6 6-6\"/>'),\n menu: icon('<line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/>'),\n sun: icon('<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>'),\n moon: icon('<path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\"/>'),\n copy: icon('<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>'),\n check: icon('<path d=\"M20 6 9 17l-5-5\"/>'),\n /** Closed padlock — requires auth (red) */\n lock: icon('<rect width=\"14\" height=\"11\" x=\"5\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M8 11V7a4 4 0 1 1 8 0v4\"/>'),\n /** Open padlock — auth configured (green) */\n unlock: icon('<rect width=\"14\" height=\"11\" x=\"5\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M16 11V7a4 4 0 1 0-8 0v1\"/>'),\n send: icon('<path d=\"m22 2-7 20-4-9-9-4Z\"/><path d=\"m22 2-11 11\"/>'),\n key: icon('<path d=\"m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4\"/>'),\n globe: icon('<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>'),\n server: icon('<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>'),\n warning: icon('<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>'),\n settings: icon('<path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>'),\n} as const;\n","import type { PortalState } from '../core/types';\n\nexport function getActiveEnvironment(state: PortalState) {\n return state.environments.find((env) => env.name === state.activeEnvironment) || state.environments[0];\n}\n\nexport function getBaseUrl(state: PortalState): string {\n const env = getActiveEnvironment(state);\n return env?.baseUrl || state.spec?.servers[0]?.url || window.location.origin;\n}\n\nexport function normalizeBaseUrl(baseUrl: string): string {\n return String(baseUrl || '').replace(/\\/$/, '');\n}\n\nexport function formatBaseUrlForDisplay(baseUrl: string): string {\n const normalized = normalizeBaseUrl(baseUrl);\n return normalized.replace(/^https?:\\/\\//i, '');\n}\n\nexport function getNormalizedBaseUrl(state: PortalState): string {\n return normalizeBaseUrl(getBaseUrl(state));\n}\n\nexport function getDisplayBaseUrl(state: PortalState): string {\n return formatBaseUrlForDisplay(getBaseUrl(state));\n}\n","/**\n * Unified Select primitive.\n * Base styles — by select tag (forms.css).\n * variant: inline → data-variant=\"inline\"\n */\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n ariaLabel?: string;\n onChange?: (value: string) => void;\n className?: string;\n variant?: 'default' | 'inline';\n invalid?: boolean;\n dataAttrs?: Record<string, string>;\n}\n\nexport function createSelect(props: SelectProps): HTMLSelectElement {\n const { options, value, ariaLabel, onChange, className, variant = 'default', invalid, dataAttrs } = props;\n\n const el = document.createElement('select');\n if (variant === 'inline') el.setAttribute('data-variant', 'inline');\n const classes: string[] = [];\n if (invalid) classes.push('invalid');\n if (className) classes.push(className);\n el.className = classes.join(' ');\n\n if (ariaLabel) el.setAttribute('aria-label', ariaLabel);\n\n if (dataAttrs) {\n for (const [k, v] of Object.entries(dataAttrs)) {\n el.dataset[k] = v;\n }\n }\n\n for (const opt of options) {\n const o = document.createElement('option');\n o.value = opt.value;\n o.textContent = opt.label;\n if (value !== undefined && opt.value === value) o.selected = true;\n el.appendChild(o);\n }\n\n if (onChange) {\n el.addEventListener('change', () => onChange(el.value));\n }\n\n return el;\n}\n","/**\n * Unified Input primitive.\n * Base styles — by input tag (forms.css).\n */\n\nexport type InputModifier = 'filled' | 'invalid';\n\nexport interface InputProps {\n type?: string;\n placeholder?: string;\n value?: string;\n ariaLabel?: string;\n required?: boolean;\n readOnly?: boolean;\n invalid?: boolean;\n modifiers?: InputModifier[];\n dataAttrs?: Record<string, string>;\n className?: string;\n onInput?: (value: string) => void;\n onChange?: (value: string) => void;\n}\n\nexport function createInput(props: InputProps): HTMLInputElement {\n const {\n type = 'text',\n placeholder,\n value,\n ariaLabel,\n required,\n readOnly,\n invalid,\n modifiers,\n dataAttrs,\n className,\n onInput,\n onChange,\n } = props;\n\n const el = document.createElement('input');\n el.type = type;\n const classes: string[] = [];\n if (modifiers?.includes('filled')) classes.push('filled');\n if (invalid) classes.push('invalid');\n if (className) classes.push(className);\n el.className = classes.join(' ');\n\n if (placeholder) el.placeholder = placeholder;\n if (value !== undefined) el.value = value;\n if (ariaLabel) el.setAttribute('aria-label', ariaLabel);\n if (required) el.required = true;\n if (readOnly) el.readOnly = true;\n\n if (dataAttrs) {\n for (const [k, v] of Object.entries(dataAttrs)) {\n el.dataset[k] = v;\n }\n }\n\n if (onInput) {\n el.addEventListener('input', () => onInput(el.value));\n }\n if (onChange) {\n el.addEventListener('change', () => onChange(el.value));\n }\n\n return el;\n}\n","/**\n * Unified Button primitive.\n * Variants: 'primary' | 'secondary' | 'ghost' | 'icon'\n * Uses CSS classes: `.btn` + utility/modifier classes.\n */\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'icon';\n\nexport interface ButtonProps {\n variant?: ButtonVariant;\n label?: string;\n icon?: string; // SVG string (innerHTML)\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n onClick?: (e: Event) => void;\n}\n\nconst VARIANT_MODIFIERS: Record<ButtonVariant, string[]> = {\n primary: ['primary', 'm'],\n secondary: ['secondary', 'm'],\n ghost: ['s', 'u-text-muted'],\n icon: ['icon', 'm', 'u-text-muted'],\n};\n\nexport function getButtonClasses(variant: ButtonVariant = 'secondary'): string[] {\n return ['btn', ...VARIANT_MODIFIERS[variant]];\n}\n\nexport function createButton(props: ButtonProps): HTMLButtonElement {\n const { variant = 'secondary', label, icon, ariaLabel, disabled, className, onClick } = props;\n\n const el = document.createElement('button');\n el.type = 'button';\n\n const classes = getButtonClasses(variant);\n if (className) classes.push(...className.split(/\\s+/).filter(Boolean));\n el.className = classes.join(' ');\n\n if (icon) {\n const span = document.createElement('span');\n span.className = 'btn-icon-slot';\n span.innerHTML = icon;\n el.appendChild(span);\n }\n\n if (label) {\n const text = document.createElement('span');\n text.textContent = label;\n el.appendChild(text);\n }\n\n if (ariaLabel) el.setAttribute('aria-label', ariaLabel);\n if (disabled) el.disabled = true;\n\n if (onClick) {\n el.addEventListener('click', onClick);\n }\n\n return el;\n}\n","export type BadgeSize = 's' | 'm' | 'l';\nexport type BadgeKind = 'method' | 'status' | 'webhook' | 'required' | 'chip';\nexport type BadgeColor = 'default' | 'transparent' | 'green' | 'blue' | 'orange' | 'purple' | 'red';\n\nexport interface BadgeProps {\n text: string;\n kind?: BadgeKind;\n color?: BadgeColor;\n size?: BadgeSize;\n /** @deprecated All badges are monospace by default. */\n mono?: boolean;\n className?: string;\n method?: string;\n statusCode?: string;\n}\n\nfunction colorClass(color: BadgeColor): string {\n if (color === 'default' || color === 'transparent') return 'u-text-muted';\n return `u-text-${color}`;\n}\n\nfunction bgClass(color: BadgeColor): string {\n if (color === 'default') return 'u-bg-surface-hover';\n if (color === 'transparent') return 'u-bg-transparent';\n return `u-bg-${color}-soft`;\n}\n\nfunction getMethodColor(method: string): BadgeColor {\n const m = method.toLowerCase();\n if (m === 'get') return 'green';\n if (m === 'post') return 'blue';\n if (m === 'put' || m === 'patch') return 'orange';\n if (m === 'delete') return 'red';\n return 'default';\n}\n\nfunction getStatusColor(code: string): BadgeColor {\n const normalized = code.trim();\n if (normalized.startsWith('2')) return 'green';\n if (normalized.startsWith('3')) return 'blue';\n if (normalized.startsWith('4')) return 'orange';\n if (normalized.startsWith('5')) return 'red';\n return 'default';\n}\n\nfunction resolveColor(props: BadgeProps, kind: BadgeKind): BadgeColor {\n if (props.color) return props.color;\n if (kind === 'method') return getMethodColor(props.method || props.text);\n if (kind === 'status') return getStatusColor(props.statusCode || props.text);\n if (kind === 'webhook') return 'purple';\n if (kind === 'required') return 'orange';\n return 'default';\n}\n\n/** Unified Badge primitive (`.badge` + kind + size + optional modifiers). */\nexport function createBadge(props: BadgeProps): HTMLElement {\n const el = document.createElement('span');\n const kind = props.kind || 'chip';\n const color = resolveColor(props, kind);\n const size = props.size || 'm';\n const classes = ['badge', size];\n\n if (kind === 'status') classes.push('status');\n if (kind === 'required') classes.push('required');\n\n classes.push(colorClass(color), bgClass(color));\n\n if (props.className) classes.push(props.className);\n el.className = classes.join(' ');\n el.textContent = props.text;\n return el;\n}\n\n/** Tab button based on badge. Used for Body/Headers, Code Example, etc. */\nexport function createTab(text: string, options?: { active?: boolean; context?: boolean }): HTMLButtonElement {\n const active = options?.active ?? false;\n const context = options?.context ?? false;\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = `badge m interactive${active ? ' is-active' : ''}`;\n if (context) btn.dataset.badgeContext = 'true';\n btn.textContent = text;\n return btn;\n}\n\n/** Tab button with response code (200, 404, etc.). Inherits badge + status styles. */\nexport function createResponseCodeTab(code: string, active = false): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n const color = getStatusColor(code);\n const classes = ['badge', 'status', 'm', 'interactive', colorClass(color)];\n if (active) classes.push('is-active', bgClass(color));\n btn.className = classes.join(' ');\n btn.dataset.badgeGroup = 'response-code';\n btn.dataset.badgeColor = color;\n btn.textContent = code;\n return btn;\n}\n\nexport function setResponseCodeTabActive(btn: HTMLElement, active: boolean): void {\n btn.classList.remove(\n 'u-bg-surface-hover',\n 'u-bg-transparent',\n 'u-bg-green-soft',\n 'u-bg-blue-soft',\n 'u-bg-orange-soft',\n 'u-bg-purple-soft',\n 'u-bg-red-soft',\n );\n btn.classList.toggle('is-active', active);\n if (!active) return;\n const color = (btn.dataset.badgeColor as BadgeColor | undefined) || 'default';\n btn.classList.add(bgClass(color));\n}\n","/**\n * Unified Card primitive.\n *\n * Structural card: `.card` with `.card-head` and `.card-content`\n * Simple card: `.card.simple` for overview, servers, etc.\n */\nimport { createBadge } from './badge';\n\nexport interface CardProps {\n /** If true — creates a simple card (`.card.simple`), otherwise structural (`.card`) */\n simple?: boolean;\n /** Interactive flag (adds interactive) */\n interactive?: boolean;\n /** Active flag (adds active) */\n active?: boolean;\n /** Additional classes */\n className?: string;\n /** Click handler */\n onClick?: (e: Event) => void;\n}\n\n/** Creates a simple or structural card */\nexport function createCard(props?: CardProps): HTMLElement {\n const { simple, interactive, active, className, onClick } = props || {};\n\n const el = document.createElement('div');\n const classes = ['card'];\n if (simple) classes.push('simple');\n if (interactive) classes.push('interactive');\n if (active) classes.push('active');\n if (className) classes.push(className);\n el.className = classes.join(' ');\n\n if (onClick) {\n if (!el.classList.contains('interactive')) {\n el.classList.add('interactive');\n }\n el.addEventListener('click', onClick);\n }\n\n return el;\n}\n\n/** Creates header for structural card */\nexport function createCardHeader(...children: (HTMLElement | string)[]): HTMLElement {\n const header = document.createElement('div');\n header.className = 'card-head';\n for (const child of children) {\n if (typeof child === 'string') {\n const span = document.createElement('span');\n span.textContent = child;\n header.append(span);\n } else {\n header.append(child);\n }\n }\n return header;\n}\n\n/** Creates body for structural card */\nexport function createCardBody(variant?: 'default' | 'code' | 'no-padding'): HTMLElement {\n const body = document.createElement('div');\n const classes = ['card-content'];\n if (variant === 'code') classes.push('code');\n else if (variant === 'no-padding') classes.push('flush');\n body.className = classes.join(' ');\n return body;\n}\n\nexport interface CardHeaderRowOptions {\n title: string | HTMLElement;\n leading?: HTMLElement | string;\n trailing?: HTMLElement | string | number;\n className?: string;\n}\n\nfunction normalizeNode(node: HTMLElement | string | number): HTMLElement {\n if (typeof node === 'string' || typeof node === 'number') {\n const span = document.createElement('span');\n span.textContent = String(node);\n return span;\n }\n return node;\n}\n\nexport function createCardHeaderRow(options: CardHeaderRowOptions): HTMLElement {\n const row = document.createElement('div');\n row.className = `card-row${options.className ? ` ${options.className}` : ''}`;\n if (options.leading !== undefined) row.append(normalizeNode(options.leading));\n row.append(typeof options.title === 'string'\n ? Object.assign(document.createElement('h3'), { textContent: options.title })\n : options.title);\n if (options.trailing !== undefined) {\n const trailingEl =\n typeof options.trailing === 'string' || typeof options.trailing === 'number'\n ? createBadge({ text: String(options.trailing), kind: 'chip', size: 'm', mono: true })\n : normalizeNode(options.trailing);\n row.append(trailingEl);\n }\n return row;\n}\n","import { h } from '../../lib/dom';\nimport { createBadge } from './badge';\n\nexport interface SectionOptions {\n title?: string;\n titleEl?: HTMLElement;\n badge?: string | number | HTMLElement;\n className?: string;\n}\n\nfunction normalizeChild(child: HTMLElement | string): HTMLElement {\n return typeof child === 'string' ? h('span', { textContent: child }) : child;\n}\n\nfunction createSectionTitle(title: string): HTMLElement {\n return h('h2', { textContent: title });\n}\n\nexport function createSectionTitleWrap(title: string | HTMLElement, badge?: string | number | HTMLElement): HTMLElement {\n const wrap = h('div', { className: 'section-head' });\n wrap.append(typeof title === 'string' ? createSectionTitle(title) : title);\n if (badge !== undefined) {\n wrap.append(typeof badge === 'string' || typeof badge === 'number'\n ? createBadge({ text: String(badge), kind: 'chip', size: 'm' })\n : badge);\n }\n return wrap;\n}\n\nexport function createSection(options: SectionOptions, ...children: (HTMLElement | string)[]): HTMLElement {\n const section = h('div', { className: `block section${options.className ? ` ${options.className}` : ''}` });\n if (options.titleEl) {\n section.append(options.titleEl);\n } else if (options.title) {\n if (options.badge !== undefined) {\n section.append(createSectionTitleWrap(options.title, options.badge));\n } else {\n section.append(createSectionTitle(options.title));\n }\n }\n for (const child of children) section.append(normalizeChild(child));\n return section;\n}\n","import { h } from '../../lib/dom';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n className?: string;\n onClick?: (e: Event) => void;\n}\n\nexport interface BreadcrumbOptions {\n className?: string;\n leading?: HTMLElement[];\n trailing?: HTMLElement[];\n}\n\nexport function createBreadcrumb(\n items: BreadcrumbItem[],\n options?: BreadcrumbOptions,\n): HTMLElement {\n const nav = h('nav', {\n className: `breadcrumb${options?.className ? ` ${options.className}` : ''}`,\n 'aria-label': 'Breadcrumb',\n });\n const main = h('div', { className: 'breadcrumb-main' });\n\n if (options?.leading?.length) {\n main.append(...options.leading);\n }\n\n items.forEach((item, index) => {\n if (index > 0) {\n main.append(h('span', { className: 'breadcrumb-sep', textContent: '/' }));\n }\n if (item.href || item.onClick) {\n const link = h('a', {\n className: `breadcrumb-item${item.className ? ` ${item.className}` : ''}`,\n href: item.href || '#',\n textContent: item.label,\n });\n if (item.onClick) link.addEventListener('click', item.onClick);\n main.append(link);\n return;\n }\n main.append(h('span', {\n className: item.className || 'breadcrumb-segment',\n textContent: item.label,\n }));\n });\n nav.append(main);\n\n if (options?.trailing?.length) {\n nav.append(h('div', { className: 'breadcrumb-trailing' }, ...options.trailing));\n }\n\n return nav;\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\n\nexport interface CreateLockIconOptions {\n configured: boolean;\n variant?: 'tag' | 'nav' | 'endpoint';\n title?: string;\n}\n\n/** Common factory for lock/unlock icons in navigation, cards, and endpoint */\nexport function createLockIcon(options: CreateLockIconOptions): HTMLElement {\n const { configured, variant = 'tag', title } = options;\n const iconHtml = configured ? icons.unlock : icons.lock;\n\n const baseClass = variant === 'tag' ? 'tag-op-lock'\n : variant === 'nav' ? 'nav-item-lock'\n : 'endpoint-meta-icon';\n\n const mod = variant !== 'endpoint' ? ` ${baseClass}--${configured ? 'configured' : 'required'}` : '';\n\n return h('span', {\n className: `${baseClass}${mod}`.trim(),\n innerHTML: iconHtml,\n ...(title ? { title, 'aria-label': title } : {}),\n });\n}\n","import { h } from '../../lib/dom';\n\nexport interface ModalBaseOptions {\n overlayClass: string;\n modalClass: string;\n role?: string;\n ariaLabel: string;\n dataOverlayAttr: string;\n onClose?: () => void;\n}\n\nexport interface ModalBase {\n overlay: HTMLElement;\n modal: HTMLElement;\n mount: (target?: ParentNode | null) => void;\n close: () => void;\n}\n\nexport function createModalBase(options: ModalBaseOptions): ModalBase {\n const overlay = h('div', { className: options.overlayClass });\n overlay.setAttribute(options.dataOverlayAttr, 'true');\n const modal = h('div', {\n className: options.modalClass,\n role: options.role || 'dialog',\n 'aria-label': options.ariaLabel,\n 'aria-modal': 'true',\n });\n overlay.append(modal);\n\n let isClosed = false;\n const close = () => {\n if (isClosed) return;\n isClosed = true;\n overlay.remove();\n options.onClose?.();\n };\n\n overlay.addEventListener('click', (event: Event) => {\n if (event.target === overlay) close();\n });\n overlay.addEventListener('keydown', (event: Event) => {\n if ((event as KeyboardEvent).key === 'Escape') {\n event.preventDefault();\n close();\n }\n }, true);\n\n return {\n overlay,\n modal,\n mount: (target?: ParentNode | null) => {\n (target || document.querySelector('.root') || document.body).appendChild(overlay);\n },\n close,\n };\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { createButton, createInput } from '../ui';\nimport { createModalBase, type ModalBase } from './modal-base';\nimport type { OperationSecurityInfo, SecurityRequirement, SecurityScheme } from '../../core/types';\nimport {\n getOperationAuthHeaderPlaceholders,\n getSecuritySchemeBadge,\n resolveOperationAuth,\n resolveOperationSecurityInfo,\n} from '../../core/security';\n\nlet modalBase: ModalBase | null = null;\n\nfunction close() {\n if (modalBase) modalBase.close();\n modalBase = null;\n}\n\n/** Human-readable label for a security scheme */\nfunction schemeLabel(scheme: SecurityScheme): string {\n if (scheme.type === 'http') {\n const s = (scheme.scheme || '').toLowerCase();\n if (s === 'bearer') return 'Bearer Token';\n if (s === 'basic') return 'Basic Auth';\n return `HTTP ${scheme.scheme || ''}`;\n }\n if (scheme.type === 'apiKey') {\n const loc = scheme.in === 'header' ? 'Header' : scheme.in === 'query' ? 'Query' : scheme.in === 'cookie' ? 'Cookie' : '';\n return `API Key (${loc}: ${scheme.name || '?'})`;\n }\n if (scheme.type === 'oauth2') return 'OAuth 2.0';\n if (scheme.type === 'openIdConnect') return 'OpenID Connect';\n return scheme.type;\n}\n\n/** Short type badge text */\nfunction schemeBadge(scheme: SecurityScheme): string {\n return getSecuritySchemeBadge(scheme);\n}\n\nfunction focusNextFrame(input: HTMLInputElement): void {\n requestAnimationFrame(() => input.focus());\n}\n\nfunction createModalField(label: string, input: HTMLElement): HTMLElement {\n const row = h('div', { className: 'modal field' });\n row.append(h('label', { className: 'modal label', textContent: label }), input);\n return row;\n}\n\nfunction createModalTextInput(options: {\n placeholder: string;\n value: string;\n ariaLabel: string;\n type?: 'text' | 'password';\n}): HTMLInputElement {\n return createInput({\n className: 'modal input',\n placeholder: options.placeholder,\n value: options.value,\n ariaLabel: options.ariaLabel,\n type: options.type,\n });\n}\n\nfunction decodeBasicAuth(value: string): { username: string; password: string } {\n if (!value) return { username: '', password: '' };\n try {\n const parts = atob(value).split(':');\n return {\n username: parts[0] || '',\n password: parts.slice(1).join(':') || '',\n };\n } catch {\n return { username: '', password: '' };\n }\n}\n\n/** Render input fields for a specific scheme type */\nfunction renderSchemeFields(name: string, scheme: SecurityScheme, container: HTMLElement): void {\n clear(container);\n\n const currentValue = store.get().auth.schemes[name] || '';\n const type = scheme.type;\n const schemeLower = (scheme.scheme || '').toLowerCase();\n\n if (type === 'http' && schemeLower === 'bearer') {\n // Bearer token — single password input\n const row = h('div', { className: 'modal field' });\n const inputWrap = h('div', { className: 'modal input-wrap' });\n const input = createModalTextInput({\n placeholder: 'Bearer token...',\n value: currentValue,\n ariaLabel: 'Bearer token',\n type: 'password',\n });\n const toggleVis = createButton({\n variant: 'icon',\n icon: icons.key,\n ariaLabel: 'Show/Hide',\n className: 'l secondary u-text-muted',\n onClick: () => { input.type = input.type === 'password' ? 'text' : 'password'; },\n });\n input.addEventListener('input', () => store.setSchemeValue(name, input.value));\n inputWrap.append(input, toggleVis);\n row.append(h('label', { className: 'modal label', textContent: 'Token' }), inputWrap);\n container.append(row);\n focusNextFrame(input);\n } else if (type === 'http' && schemeLower === 'basic') {\n // Basic auth — username + password\n const credentials = decodeBasicAuth(currentValue);\n const userInput = createModalTextInput({\n placeholder: 'Username',\n value: credentials.username,\n ariaLabel: 'Username',\n });\n container.append(createModalField('Username', userInput));\n\n const passInput = createModalTextInput({\n placeholder: 'Password',\n value: credentials.password,\n ariaLabel: 'Password',\n type: 'password',\n });\n container.append(createModalField('Password', passInput));\n\n const updateBasic = () => {\n const encoded = btoa(`${userInput.value}:${passInput.value}`);\n store.setSchemeValue(name, encoded);\n };\n userInput.addEventListener('input', updateBasic);\n passInput.addEventListener('input', updateBasic);\n\n focusNextFrame(userInput);\n } else if (type === 'apiKey') {\n // API Key — single input\n const row = h('div', { className: 'modal field' });\n const inputWrap = h('div', { className: 'modal input-wrap' });\n const input = createModalTextInput({\n placeholder: `${scheme.name || 'API key'}...`,\n value: currentValue,\n ariaLabel: 'API key',\n type: 'password',\n });\n\n const toggleVis = createButton({\n variant: 'icon',\n icon: icons.key,\n ariaLabel: 'Show/Hide',\n className: 'l secondary u-text-muted',\n onClick: () => { input.type = input.type === 'password' ? 'text' : 'password'; },\n });\n\n input.addEventListener('input', () => {\n store.setSchemeValue(name, input.value);\n });\n\n inputWrap.append(input, toggleVis);\n row.append(h('label', { className: 'modal label', textContent: `API Key (${scheme.name || 'key'})` }), inputWrap);\n container.append(row);\n\n focusNextFrame(input);\n } else {\n // OAuth2 / OpenID / unknown — just show a token input as fallback\n const input = createModalTextInput({\n placeholder: 'Token...',\n value: currentValue,\n ariaLabel: 'Token',\n type: 'password',\n });\n\n input.addEventListener('input', () => {\n store.setSchemeValue(name, input.value);\n });\n\n container.append(createModalField('Token / Credential', input));\n focusNextFrame(input);\n }\n}\n\n/** Open authentication settings modal */\nexport function openAuthModal(\n securitySchemes: Record<string, SecurityScheme>,\n portalRoot?: HTMLElement,\n initialScheme?: string,\n): void {\n if (modalBase) close();\n\n const schemes = Object.entries(securitySchemes);\n if (schemes.length === 0) return;\n\n const shell = createModalBase({\n overlayClass: 'modal overlay',\n modalClass: 'modal container',\n ariaLabel: 'Authentication Settings',\n dataOverlayAttr: 'data-auth-overlay',\n onClose: () => { modalBase = null; },\n });\n modalBase = shell;\n const modal = shell.modal;\n\n // Header\n const header = h('div', { className: 'modal header' });\n header.append(h('h2', { className: 'modal title', textContent: 'Authentication' }));\n const closeBtn = createButton({ variant: 'icon', icon: icons.close, ariaLabel: 'Close', onClick: close });\n header.append(closeBtn);\n modal.append(header);\n\n // Body\n const body = h('div', { className: 'modal body' });\n\n // Scheme tabs (if multiple)\n let selectedName = initialScheme || store.get().auth.activeScheme || schemes[0][0];\n // Ensure selectedName is valid\n if (!securitySchemes[selectedName]) selectedName = schemes[0][0];\n\n const fieldsContainer = h('div', { className: 'modal fields' });\n\n if (schemes.length > 1) {\n const tabs = h('div', { className: 'modal tabs' });\n\n const tabButtons: HTMLButtonElement[] = [];\n\n for (const [name, scheme] of schemes) {\n const isConfigured = !!(store.get().auth.schemes[name]);\n const tab = h('button', {\n type: 'button',\n className: 'modal tab',\n 'aria-pressed': name === selectedName ? 'true' : 'false',\n }) as HTMLButtonElement;\n\n const tabLabel = h('span', { className: 'modal tab-label', textContent: schemeBadge(scheme) });\n tab.append(tabLabel);\n\n if (isConfigured) {\n const dot = h('span', { className: 'modal tab-dot', 'data-configured': 'true' });\n tab.append(dot);\n }\n\n tab.addEventListener('click', () => {\n if (selectedName === name) return;\n selectedName = name;\n for (const t of tabButtons) t.setAttribute('aria-pressed', 'false');\n tab.setAttribute('aria-pressed', 'true');\n updateDescription();\n renderSchemeFields(name, scheme, fieldsContainer);\n });\n\n tabButtons.push(tab);\n tabs.append(tab);\n }\n\n body.append(tabs);\n }\n\n // Scheme description\n const descEl = h('div', { className: 'modal scheme-desc' });\n function updateDescription() {\n const scheme = securitySchemes[selectedName];\n if (!scheme) return;\n clear(descEl);\n const title = h('div', { className: 'modal scheme-title', textContent: schemeLabel(scheme) });\n descEl.append(title);\n if (scheme.description) {\n descEl.append(h('div', { className: 'modal scheme-text', textContent: scheme.description }));\n }\n }\n updateDescription();\n body.append(descEl);\n\n // Fields\n const currentScheme = securitySchemes[selectedName];\n if (currentScheme) {\n renderSchemeFields(selectedName, currentScheme, fieldsContainer);\n }\n body.append(fieldsContainer);\n\n modal.append(body);\n\n // Footer\n const footer = h('div', { className: 'modal footer' });\n\n const clearBtn = createButton({\n variant: 'ghost',\n label: 'Reset',\n onClick: () => {\n store.setSchemeValue(selectedName, '');\n const scheme = securitySchemes[selectedName];\n if (scheme) renderSchemeFields(selectedName, scheme, fieldsContainer);\n },\n });\n\n const doneBtn = createButton({ variant: 'primary', label: 'Done', onClick: close });\n\n footer.append(clearBtn, h('div', { className: 'grow' }), doneBtn);\n modal.append(footer);\n\n shell.mount(portalRoot ?? document.querySelector('.root') ?? document.body);\n}\n\n/** Get human-readable configured scheme label for display */\nexport function getSchemeStatusLabel(name: string, scheme: SecurityScheme): string {\n const value = store.get().auth.schemes[name];\n if (!value) return 'Not configured';\n return `Configured ${schemeBadge(scheme)}`;\n}\n\n/** Check if a specific scheme is configured */\nexport function isSchemeConfigured(name: string): boolean {\n return !!(store.get().auth.schemes[name]);\n}\n\n/** Check if operation's auth requirements are satisfied (token/schemes configured) */\nexport function isOperationAuthConfigured(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): boolean {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n const resolved = resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token);\n return Object.keys(resolved.headers).length > 0 ||\n Object.keys(resolved.query).length > 0 ||\n Object.keys(resolved.cookies).length > 0;\n}\n\n/** Resolve auth headers for an operation's security requirements */\nexport function resolveAuthHeaders(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n return resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token).headers;\n}\n\n/** Resolve auth query params for an operation's security requirements */\nexport function resolveAuthQuery(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n return resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token).query;\n}\n\n/** Resolve auth cookie values for an operation's security requirements */\nexport function resolveAuthCookies(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n const auth = store.get().auth;\n return resolveOperationAuth(info, auth.schemes, auth.activeScheme, auth.token).cookies;\n}\n\n/** Get placeholder header value for display (when no token configured) */\nexport function getAuthHeaderPlaceholder(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): Record<string, string> {\n const info = toOperationSecurityInfo(security, securitySchemes);\n return getOperationAuthHeaderPlaceholders(info);\n}\n\nfunction toOperationSecurityInfo(\n security: OperationSecurityInfo | SecurityRequirement[] | undefined,\n securitySchemes: Record<string, SecurityScheme>,\n): OperationSecurityInfo | undefined {\n if (!security) return undefined;\n if (Array.isArray(security)) return resolveOperationSecurityInfo(security, securitySchemes, false);\n return security;\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { search } from '../../core/search';\nimport { navigate, buildPath } from '../../core/router';\nimport { createBadge, createInput } from '../ui';\nimport { createModalBase, type ModalBase } from './modal-base';\nimport { isOperationAuthConfigured } from './auth-modal';\nimport type { SearchEntry } from '../../core/types';\n\nlet focusedIndex = -1;\nlet modalBase: ModalBase | null = null;\nlet shortcutHandler: ((event: KeyboardEvent) => void) | null = null;\n\n/** Render and show the search modal */\nexport function showSearchModal(): void {\n // Close existing\n closeSearchModal();\n\n const shell = createModalBase({\n overlayClass: 'modal overlay search-modal-overlay',\n modalClass: 'modal container search-modal',\n ariaLabel: 'Search API',\n dataOverlayAttr: 'data-search-overlay',\n onClose: () => {\n modalBase = null;\n store.set({ searchOpen: false });\n },\n });\n modalBase = shell;\n const modal = shell.modal;\n\n // Input\n const inputWrap = h('div', { className: 'search-input-wrap' });\n inputWrap.innerHTML = icons.search;\n const input = createInput({\n className: 'search-input',\n placeholder: 'Search endpoints, schemas...',\n ariaLabel: 'Search',\n });\n const escHint = h('kbd', { textContent: 'ESC', className: 'kbd' });\n inputWrap.append(input, escHint);\n modal.append(inputWrap);\n\n // Results\n const results = h('div', { className: 'search-results', role: 'listbox' });\n const empty = h('div', { className: 'search-empty', textContent: 'Type to search across endpoints and schemas' });\n results.append(empty);\n modal.append(results);\n\n // Footer\n const footer = h('div', { className: 'search-footer' });\n footer.innerHTML = '<span><kbd class=\"kbd\">↑</kbd> <kbd class=\"kbd\">↓</kbd> Navigate</span><span><kbd class=\"kbd\">↵</kbd> Select</span><span><kbd class=\"kbd\">ESC</kbd> Close</span>';\n modal.append(footer);\n\n // Mount inside root to inherit theme CSS variables\n shell.mount(document.querySelector('.root') ?? document.body);\n\n // Focus input\n requestAnimationFrame(() => input.focus());\n focusedIndex = -1;\n\n // Search handler\n let currentResults: SearchEntry[] = [];\n input.addEventListener('input', () => {\n const query = input.value;\n currentResults = search(query);\n renderResults(results, currentResults);\n setFocusedResult(results, currentResults.length > 0 ? 0 : -1);\n });\n\n // Keyboard navigation\n input.addEventListener('keydown', (e: Event) => {\n const ke = e as KeyboardEvent;\n if (ke.key === 'ArrowDown') {\n ke.preventDefault();\n if (currentResults.length > 0) {\n setFocusedResult(results, Math.min(focusedIndex + 1, currentResults.length - 1));\n }\n } else if (ke.key === 'ArrowUp') {\n ke.preventDefault();\n if (currentResults.length > 0) {\n setFocusedResult(results, Math.max(focusedIndex - 1, 0));\n }\n } else if (ke.key === 'Enter') {\n ke.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < currentResults.length) {\n selectResult(currentResults[focusedIndex]);\n }\n } else if (ke.key === 'Escape') {\n ke.preventDefault();\n closeSearchModal();\n }\n });\n}\n\n/** Close the search modal */\nexport function closeSearchModal(): void {\n if (modalBase) {\n modalBase.close();\n return;\n }\n const overlay = document.querySelector('[data-search-overlay]');\n if (overlay) overlay.remove();\n store.set({ searchOpen: false });\n}\n\nfunction renderResults(container: HTMLElement, results: SearchEntry[]): void {\n clear(container);\n\n if (results.length === 0) {\n container.append(h('div', { className: 'search-empty', textContent: 'No results found' }));\n return;\n }\n\n const fragment = document.createDocumentFragment();\n results.forEach((entry, i) => {\n const item = h('div', {\n className: 'search-result',\n role: 'option',\n 'aria-selected': 'false',\n 'data-index': String(i),\n });\n\n if (entry.method) {\n item.append(createBadge({\n text: entry.method.toUpperCase(),\n kind: 'method',\n method: entry.method,\n mono: true,\n }));\n } else if (entry.type === 'schema') {\n item.append(createBadge({ text: 'SCH', kind: 'chip', size: 'm', mono: true }));\n } else if (entry.type === 'tag') {\n item.append(createBadge({ text: 'TAG', kind: 'chip', size: 'm', mono: true }));\n }\n\n const info = h('div', { className: 'search-result-info min-w-0' });\n info.append(h('span', { className: 'search-result-title', textContent: entry.title }));\n if (entry.subtitle) {\n info.append(h('span', { className: 'search-result-subtitle', textContent: entry.subtitle }));\n }\n item.append(info);\n if (entry.method && entry.requiresAuth && entry.resolvedSecurity) {\n const spec = store.get().spec;\n const configured = isOperationAuthConfigured(entry.resolvedSecurity, spec?.securitySchemes || {});\n item.append(h('span', {\n className: `search-result-lock search-result-lock--${configured ? 'configured' : 'required'}`,\n innerHTML: configured ? icons.unlock : icons.lock,\n title: entry.authTitle || 'Requires authentication',\n 'aria-label': entry.authTitle || 'Requires authentication',\n }));\n }\n\n item.addEventListener('click', () => selectResult(entry));\n item.addEventListener('mouseenter', () => {\n setFocusedResult(container, i);\n });\n\n fragment.append(item);\n });\n container.append(fragment);\n}\n\nfunction setFocusedResult(container: HTMLElement, index: number): void {\n if (focusedIndex === index) return;\n\n if (focusedIndex >= 0) {\n const prev = container.querySelector<HTMLElement>(`.search-result[data-index=\"${focusedIndex}\"]`);\n if (prev) {\n prev.classList.remove('focused');\n prev.setAttribute('aria-selected', 'false');\n }\n }\n\n focusedIndex = index;\n if (index < 0) return;\n\n const next = container.querySelector<HTMLElement>(`.search-result[data-index=\"${index}\"]`);\n if (!next) return;\n next.classList.add('focused');\n next.setAttribute('aria-selected', 'true');\n next.scrollIntoView({ block: 'nearest' });\n}\n\nfunction selectResult(entry: SearchEntry): void {\n closeSearchModal();\n\n if (entry.type === 'operation') {\n navigate(buildPath({\n type: 'endpoint',\n tag: entry.tag || 'default',\n method: entry.method!,\n path: entry.path!,\n operationId: entry.operationId,\n }));\n } else if (entry.type === 'schema') {\n navigate(buildPath({ type: 'schema', schemaName: entry.schemaName! }));\n } else if (entry.type === 'tag' && entry.tag) {\n navigate(buildPath({ type: 'tag', tag: entry.tag }));\n } else if (entry.type === 'webhook' && entry.webhookName) {\n navigate(buildPath({ type: 'webhook', webhookName: entry.webhookName }));\n }\n}\n\n/** Setup global keyboard shortcut for search */\nexport function setupSearchShortcut(): () => void {\n if (shortcutHandler) {\n document.removeEventListener('keydown', shortcutHandler);\n }\n\n shortcutHandler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n const state = store.get();\n if (state.searchOpen) {\n closeSearchModal();\n } else {\n store.set({ searchOpen: true });\n showSearchModal();\n }\n }\n };\n\n document.addEventListener('keydown', shortcutHandler);\n\n return () => {\n if (shortcutHandler) {\n document.removeEventListener('keydown', shortcutHandler);\n shortcutHandler = null;\n }\n };\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { navigate, buildPath, parsePath } from '../../core/router';\nimport { toggleTheme } from '../../core/theme';\nimport { formatBaseUrlForDisplay } from '../../services/env';\nimport { showSearchModal } from '../modals/search-modal';\nimport { openAuthModal } from '../modals/auth-modal';\nimport { isOperationAuthConfigured, isSchemeConfigured } from '../modals/auth-modal';\nimport { formatOperationAuthTitle, hasOperationAuth } from '../../core/security';\nimport { createBadge, createSelect, createInput, createLockIcon } from '../ui';\nimport type { PortalConfig } from '../../core/types';\nimport type { SpecTag, SpecOperation, RouteInfo } from '../../core/types';\n\n/** Update active state of items and expand group with active route */\nexport function updateSidebarActiveState(container: HTMLElement, currentRoute: RouteInfo): void {\n const items = container.querySelectorAll('.nav-item');\n let activeEl: HTMLElement | null = null;\n\n items.forEach((el) => {\n const a = el as HTMLAnchorElement;\n const href = a.getAttribute('href');\n if (!href) return;\n const path = href.startsWith('#') ? href.slice(1) : href;\n const route = parsePath(path);\n const isActive = isRouteMatch(route, currentRoute);\n el.classList.toggle('active', isActive);\n if (isActive) {\n a.setAttribute('aria-current', 'page');\n activeEl = a;\n } else {\n a.removeAttribute('aria-current');\n }\n });\n\n // Expand group containing active endpoint or tag\n const tagToExpand = currentRoute.type === 'endpoint' ? currentRoute.tag\n : currentRoute.type === 'tag' ? currentRoute.tag\n : currentRoute.type === 'schema' ? 'schemas'\n : null;\n\n if (tagToExpand) {\n const group = container.querySelector(`[data-nav-tag=\"${CSS.escape(tagToExpand)}\"]`) as HTMLElement | null;\n if (group) {\n const header = group.querySelector('.nav-group-header');\n const itemsWrap = group.querySelector('.nav-group-items');\n if (header && itemsWrap) {\n header.classList.add('expanded');\n itemsWrap.classList.remove('collapsed');\n }\n }\n }\n\n // Scroll group header to top so the full group is visible\n if (activeEl) {\n requestAnimationFrame(() => {\n const group = (activeEl as HTMLElement).closest('.nav-group');\n const scrollTarget = group?.querySelector('.nav-group-header') as HTMLElement | null;\n if (scrollTarget) {\n scrollTarget.scrollIntoView({ block: 'start', behavior: 'smooth' });\n } else {\n (activeEl as HTMLElement).scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n });\n }\n}\n\n/** Render the sidebar navigation */\nexport function renderSidebar(container: HTMLElement, config: PortalConfig): void {\n const state = store.get();\n const spec = state.spec;\n if (!spec) return;\n\n clear(container);\n\n const title = config.title || spec.info.title || 'API Docs';\n const version = spec.info.version ? `v${spec.info.version}` : '';\n\n // Top section: collapse + MS name + description\n const topSection = h('div', { className: 'top' });\n const collapseBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted',\n 'aria-label': 'Collapse sidebar',\n });\n collapseBtn.innerHTML = icons.chevronLeft;\n collapseBtn.addEventListener('click', () => store.set({ sidebarOpen: false }));\n\n const titleBlock = h('a', { className: 'title', href: '/', textContent: title });\n titleBlock.addEventListener('click', (e: Event) => { e.preventDefault(); navigate('/'); });\n\n const titleWrap = h('div', { className: 'title-wrap' });\n titleWrap.append(titleBlock);\n if (version) titleWrap.append(h('span', { className: 'version', textContent: version }));\n topSection.append(collapseBtn, titleWrap);\n\n // Auth button moved to top bar\n if (spec.securitySchemes && Object.keys(spec.securitySchemes).length > 0) {\n const authState = state.auth;\n const schemeNames = Object.keys(spec.securitySchemes);\n const activeScheme = authState.activeScheme || schemeNames[0] || '';\n const hasToken = isSchemeConfigured(activeScheme);\n\n const authBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted theme',\n 'aria-label': 'Configure authentication',\n title: hasToken ? `Auth: ${activeScheme}` : 'Configure authentication',\n });\n authBtn.innerHTML = hasToken ? icons.unlock : icons.lock;\n authBtn.classList.toggle('active', hasToken);\n authBtn.addEventListener('click', () => {\n openAuthModal(\n spec!.securitySchemes, \n (container.closest('.root') as HTMLElement | null) ?? undefined, \n activeScheme,\n );\n });\n store.subscribe(() => {\n const s = store.get();\n const scheme = s.auth.activeScheme || schemeNames[0] || '';\n const configured = isSchemeConfigured(scheme);\n authBtn.innerHTML = configured ? icons.unlock : icons.lock;\n authBtn.title = configured ? `Auth: ${scheme}` : 'Configure authentication';\n authBtn.classList.toggle('active', configured);\n });\n\n topSection.append(authBtn);\n }\n\n const themeBtn = h('button', {\n type: 'button',\n className: 'btn icon s soft u-text-muted theme',\n 'aria-label': 'Toggle theme',\n });\n themeBtn.innerHTML = store.get().theme === 'light' ? icons.moon : icons.sun;\n themeBtn.addEventListener('click', () => {\n toggleTheme();\n themeBtn.innerHTML = store.get().theme === 'light' ? icons.moon : icons.sun;\n });\n\n container.append(topSection);\n\n // Environment selector\n if (state.environments.length > 1) {\n const envSelect = renderEnvironmentSelector(state);\n container.append(envSelect);\n store.subscribe(() => {\n const s = store.get();\n if (envSelect.value !== s.activeEnvironment) {\n envSelect.value = s.activeEnvironment;\n }\n });\n }\n\n // Search\n const searchWrap = h('div', { className: 'search' });\n const searchIcon = h('span', { className: 'search-icon', innerHTML: icons.search });\n const searchInput = createInput({\n className: 'search-input',\n placeholder: 'Search endpoints...',\n ariaLabel: 'Search endpoints',\n });\n const kbd = h('span', { className: 'kbd', textContent: '⌘K' });\n\n searchInput.addEventListener('focus', () => {\n store.set({ searchOpen: true });\n searchInput.blur();\n showSearchModal();\n });\n\n searchWrap.append(searchIcon, searchInput, kbd);\n container.append(searchWrap);\n\n // Navigation\n const nav = h('nav', { className: 'nav', 'aria-label': 'API navigation' });\n\n // Overview link — highlighted first item (icon in 60px slot like method badge for alignment)\n const overviewItem = createOverviewNavItem({ type: 'overview' }, state.route);\n nav.append(overviewItem);\n\n // Tag groups\n for (const tag of spec.tags) {\n if (tag.operations.length === 0) continue;\n const group = createTagGroup(tag, state.route, state);\n nav.append(group);\n }\n\n // Webhooks section\n if (spec.webhooks && spec.webhooks.length > 0) {\n const whGroup = h('div', { className: 'nav-group', 'data-nav-tag': 'webhooks' });\n const whHeader = createGroupHeader('Webhooks', spec.webhooks.length);\n const whItems = h('div', { className: 'nav-group-items' });\n\n for (const wh of spec.webhooks) {\n const route: RouteInfo = { type: 'webhook', webhookName: wh.name };\n const item = createNavItem(wh.summary || wh.name, wh.method, route, state.route);\n item.classList.add('nav-item-webhook');\n whItems.append(item);\n }\n\n whHeader.addEventListener('click', () => {\n whHeader.classList.toggle('expanded');\n whItems.classList.toggle('collapsed');\n });\n\n const isActiveWebhook = state.route.type === 'webhook';\n whHeader.classList.toggle('expanded', isActiveWebhook);\n whItems.classList.toggle('collapsed', !isActiveWebhook);\n whGroup.append(whHeader, whItems);\n nav.append(whGroup);\n }\n\n // Schemas section\n const schemaNames = Object.keys(spec.schemas);\n if (schemaNames.length > 0) {\n const schemasGroup = h('div', { className: 'nav-group' });\n const schemasHeader = createGroupHeader('Schemas', schemaNames.length);\n const schemasItems = h('div', { className: 'nav-group-items' });\n\n for (const name of schemaNames) {\n const route: RouteInfo = { type: 'schema', schemaName: name };\n const item = createNavItem(name, undefined, route, state.route);\n schemasItems.append(item);\n }\n\n schemasHeader.addEventListener('click', () => {\n schemasHeader.classList.toggle('expanded');\n schemasItems.classList.toggle('collapsed');\n });\n\n const isActiveSchema = state.route.type === 'schema';\n schemasHeader.classList.toggle('expanded', isActiveSchema);\n schemasItems.classList.toggle('collapsed', !isActiveSchema);\n schemasGroup.setAttribute('data-nav-tag', 'schemas');\n schemasGroup.append(schemasHeader, schemasItems);\n nav.append(schemasGroup);\n }\n\n container.append(nav);\n\n // Footer: credit + theme button\n const footer = h('div', { className: 'footer' });\n\n const credit = h('a', {\n className: 'credit',\n href: 'https://puredocs.dev',\n target: '_blank',\n rel: 'noopener noreferrer',\n });\n credit.textContent = `puredocs.dev${version ? ` ${version}` : ''}`;\n footer.append(credit);\n\n // Theme button moved to footer\n footer.append(themeBtn);\n\n container.append(footer);\n\n // Scroll group header to top after initial render\n requestAnimationFrame(() => {\n const activeItem = nav.querySelector('.nav-item.active') as HTMLElement | null;\n if (activeItem) {\n const group = activeItem.closest('.nav-group');\n const scrollTarget = group?.querySelector('.nav-group-header') as HTMLElement | null;\n if (scrollTarget) {\n scrollTarget.scrollIntoView({ block: 'start', behavior: 'smooth' });\n } else {\n activeItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n });\n}\n\nfunction createTagGroup(tag: SpecTag, currentRoute: RouteInfo, state: { route: RouteInfo }): HTMLElement {\n const group = h('div', { className: 'nav-group', 'data-nav-tag': tag.name });\n const header = createTagGroupHeader(tag, currentRoute);\n const items = h('div', { className: 'nav-group-items' });\n\n const isActiveTag = currentRoute.type === 'tag' && currentRoute.tag === tag.name\n || tag.operations.some((op) => isRouteMatch(routeForOp(op, tag.name), currentRoute));\n\n for (const op of tag.operations) {\n const route = routeForOp(op, tag.name);\n const item = createEndpointNavItem(op, route, currentRoute);\n items.append(item);\n }\n\n header.addEventListener('click', (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.closest('.nav-group-link')) return;\n header.classList.toggle('expanded');\n items.classList.toggle('collapsed');\n });\n\n items.classList.toggle('collapsed', !isActiveTag);\n\n group.append(header, items);\n return group;\n}\n\nfunction createTagGroupHeader(tag: SpecTag, currentRoute: RouteInfo): HTMLElement {\n const isActiveTag = currentRoute.type === 'tag' && currentRoute.tag === tag.name\n || tag.operations.some((op) => isRouteMatch(routeForOp(op, tag.name), currentRoute));\n\n const header = h('div', { className: 'nav-group-header focus-ring', 'aria-expanded': String(isActiveTag), tabIndex: 0 });\n\n const chevronBtn = h('button', {\n type: 'button',\n className: 'nav-group-chevron',\n 'aria-label': isActiveTag ? 'Collapse' : 'Expand',\n });\n chevronBtn.innerHTML = icons.chevronRight;\n chevronBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n header.click();\n });\n\n const link = h('a', {\n className: 'nav-group-link',\n href: buildPath({ type: 'tag', tag: tag.name }),\n });\n link.append(\n h('span', { className: 'nav-group-title', textContent: tag.name }),\n h('span', { className: 'nav-group-count', textContent: String(tag.operations.length) }),\n );\n link.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath({ type: 'tag', tag: tag.name }));\n });\n\n header.append(chevronBtn, link);\n header.classList.toggle('expanded', isActiveTag);\n\n header.addEventListener('keydown', (e: Event) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n chevronBtn.click();\n }\n });\n\n return header;\n}\n\nfunction createGroupHeader(name: string, count: number): HTMLElement {\n const header = h('div', { className: 'nav-group-header focus-ring', role: 'button', 'aria-expanded': 'true', tabindex: '0' });\n\n const chevronBtn = h('button', {\n type: 'button',\n className: 'nav-group-chevron',\n 'aria-label': 'Toggle section',\n });\n chevronBtn.innerHTML = icons.chevronRight;\n chevronBtn.addEventListener('click', (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n header.click();\n });\n\n const label = h('span', { className: 'nav-group-link nav-group-link--static' });\n label.append(\n h('span', { className: 'nav-group-title', textContent: name }),\n h('span', { className: 'nav-group-count', textContent: String(count) }),\n );\n header.append(chevronBtn, label);\n\n header.addEventListener('keydown', (e: Event) => {\n if ((e as KeyboardEvent).key === 'Enter' || (e as KeyboardEvent).key === ' ') {\n e.preventDefault();\n header.click();\n }\n });\n\n return header;\n}\n\nfunction createNavItem(label: string, method: string | undefined, route: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = isRouteMatch(route, currentRoute);\n const item = h('a', {\n className: `nav-item${isActive ? ' active' : ''}`,\n href: buildPath(route),\n role: 'link',\n 'aria-current': isActive ? 'page' : undefined,\n });\n\n const methodBadge = method\n ? createBadge({\n text: method.toUpperCase(),\n kind: 'method',\n method,\n mono: true,\n })\n : createBadge({\n text: 'GET',\n kind: 'method',\n method: 'get',\n mono: true,\n className: 'placeholder',\n });\n if (!method) methodBadge.setAttribute('aria-hidden', 'true');\n item.append(methodBadge);\n\n item.append(h('span', { className: 'nav-item-label', textContent: label }));\n\n item.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(route));\n });\n\n return item;\n}\n\nfunction createOverviewNavItem(route: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = isRouteMatch(route, currentRoute);\n const item = h('a', {\n className: `nav-item nav-item-overview${isActive ? ' active' : ''}`,\n href: buildPath(route),\n role: 'link',\n 'aria-current': isActive ? 'page' : undefined,\n });\n\n const iconSlot = h('span', { className: 'nav-overview-icon-slot' });\n iconSlot.innerHTML = icons.globe;\n const label = h('span', { className: 'nav-item-label', textContent: 'Overview' });\n\n item.append(iconSlot, label);\n\n item.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(route));\n });\n\n return item;\n}\n\nfunction createEndpointNavItem(op: SpecOperation, route: RouteInfo, currentRoute: RouteInfo): HTMLElement {\n const isActive = isRouteMatch(route, currentRoute);\n const item = h('a', {\n className: `nav-item${isActive ? ' active' : ''}${op.deprecated ? ' deprecated' : ''}`,\n href: buildPath(route),\n title: `${op.method.toUpperCase()} ${op.path}`,\n 'aria-current': isActive ? 'page' : undefined,\n });\n\n const spec = store.get().spec;\n const lockEl = hasOperationAuth(op.resolvedSecurity)\n ? createLockIcon({\n configured: isOperationAuthConfigured(op.resolvedSecurity, spec?.securitySchemes || {}),\n variant: 'nav',\n title: formatOperationAuthTitle(op.resolvedSecurity),\n })\n : null;\n\n item.append(\n createBadge({\n text: op.method.toUpperCase(),\n kind: 'method',\n method: op.method,\n mono: true,\n }),\n h('span', { className: 'nav-item-label', textContent: op.summary || op.path }),\n ...(lockEl ? [lockEl] : []),\n );\n\n item.addEventListener('click', (e: Event) => {\n e.preventDefault();\n navigate(buildPath(route));\n });\n\n return item;\n}\n\nfunction routeForOp(op: SpecOperation, tag: string): RouteInfo {\n return {\n type: 'endpoint',\n tag,\n method: op.method,\n path: op.path,\n operationId: op.operationId,\n };\n}\n\nfunction isRouteMatch(a: RouteInfo, b: RouteInfo): boolean {\n if (a.type !== b.type) return false;\n if (a.type === 'overview') return true;\n if (a.type === 'tag') return a.tag === b.tag;\n if (a.type === 'endpoint') return a.method === b.method && a.path === b.path;\n if (a.type === 'schema') return a.schemaName === b.schemaName;\n if (a.type === 'webhook') return a.webhookName === b.webhookName;\n return false;\n}\n\n/* ─── Environment Selector ─── */\n\nfunction renderEnvironmentSelector(state: ReturnType<typeof store.get>): HTMLSelectElement {\n const canonical = state.initialEnvironments || state.environments;\n const options = state.environments.map((env) => {\n const c = canonical.find((e) => e.name === env.name);\n const url = formatBaseUrlForDisplay((c?.baseUrl ?? env.baseUrl) || '');\n return { value: env.name, label: url || '(no URL)' };\n });\n\n const select = createSelect({\n options,\n value: state.activeEnvironment,\n ariaLabel: 'Select server environment',\n onChange: (value) => store.setActiveEnvironment(value),\n className: 'env',\n });\n\n return select;\n}\n","import { h } from '../../lib/dom';\nimport { createBadge } from '../ui';\n\nexport interface SnapshotMetric {\n label: string;\n value: string | number;\n}\n\nexport function createSummaryLine(\n metrics: SnapshotMetric[],\n methodCounts: Record<string, number>,\n emptyText: string = 'No operations',\n): HTMLElement {\n const wrap = h('div', { className: 'summary-line' });\n\n for (const metric of metrics) {\n wrap.append(createBadge({\n text: `${metric.value} ${metric.label}`,\n kind: 'chip',\n size: 'm',\n }));\n }\n\n const orderedMethods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];\n\n for (const method of orderedMethods) {\n const count = methodCounts[method] || 0;\n if (count === 0) continue;\n wrap.append(createBadge({\n kind: 'method',\n method,\n size: 'm',\n text: `${count} ${method.toUpperCase()}`,\n }));\n }\n\n if (!wrap.childNodes.length) {\n wrap.append(createBadge({\n text: emptyText,\n kind: 'chip',\n size: 'm',\n }));\n }\n\n return wrap;\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { openAuthModal } from '../modals/auth-modal';\nimport { isSchemeConfigured } from '../modals/auth-modal';\nimport { createCard, createButton, createSection } from '../ui';\nimport type { SecurityScheme } from '../../core/types';\n\nexport function createConnectionSettingsSections(\n securitySchemes: Record<string, SecurityScheme>,\n portalRoot?: HTMLElement,\n): HTMLElement[] {\n const sections: HTMLElement[] = [];\n\n const authSection = createAuthenticationSection(securitySchemes, portalRoot);\n if (authSection) sections.push(authSection);\n\n return sections;\n}\n\nfunction createAuthenticationSection(\n securitySchemes: Record<string, SecurityScheme>,\n portalRoot?: HTMLElement,\n): HTMLElement | null {\n if (Object.keys(securitySchemes).length === 0) return null;\n\n const authSection = createSection({ title: 'Authentication' });\n const cardRefs: { name: string; btn: HTMLElement }[] = [];\n\n for (const [name, scheme] of Object.entries(securitySchemes)) {\n const configured = isSchemeConfigured(name);\n const card = createCard({ className: 'card-group card-auth' });\n\n const top = h('div', { className: 'card-auth-main' });\n\n const info = h('div', { className: 'card-info card-auth-info' });\n const typeText = `${scheme.type}${scheme.scheme ? ` / ${scheme.scheme}` : ''}`;\n info.append(\n h('h3', { textContent: name }),\n h('p', { className: 'card-auth-type', textContent: typeText }),\n );\n\n if (scheme.description) {\n info.append(h('p', { className: 'card-auth-desc', textContent: String(scheme.description) }));\n }\n\n const configureBtn = createButton({\n variant: 'secondary',\n icon: configured ? icons.check : icons.settings,\n label: configured ? 'Success' : 'Set',\n className: `card-auth-config${configured ? ' active is-configured' : ''}`,\n onClick: (event) => {\n event.stopPropagation();\n openAuthModal(securitySchemes, portalRoot, name);\n },\n });\n\n top.append(info);\n card.append(top, configureBtn);\n\n cardRefs.push({ name, btn: configureBtn });\n authSection.append(card);\n }\n\n // Keep cards in sync while staying on the same route.\n store.subscribe(() => {\n for (const ref of cardRefs) {\n const configured = isSchemeConfigured(ref.name);\n ref.btn.className = `btn secondary m card-auth-config${configured ? ' active is-configured' : ''}`;\n ref.btn.innerHTML = `<span class=\"btn-icon-slot\">${configured ? icons.check : icons.settings}</span><span>${configured ? 'Success' : 'Set'}</span>`;\n }\n });\n\n return authSection;\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { navigate, buildPath } from '../../core/router';\nimport { createSummaryLine } from '../shared/summary';\nimport { createConnectionSettingsSections } from '../shared/connection-settings';\nimport { createBadge, createCard, createSection } from '../ui';\nimport { hasOperationAuth } from '../../core/security';\nimport type { SpecTag } from '../../core/types';\n\n/** Render the API overview page */\nexport async function renderOverview(pageSlot: HTMLElement, _asideSlot: HTMLElement): Promise<void> {\n clear(pageSlot);\n\n const spec = store.get().spec;\n if (!spec) return;\n\n const header = h('div', { className: 'block header' });\n const titleWrap = h('div', { className: 'title' });\n titleWrap.append(\n h('h1', { textContent: spec.info.title }),\n h('span', { className: 'version', textContent: `v${spec.info.version}` }),\n );\n header.append(titleWrap);\n\n if (spec.info.description) {\n header.append(h('p', { textContent: spec.info.description }));\n }\n\n pageSlot.append(header);\n\n const authRequiredCount = spec.operations.filter((op) => hasOperationAuth(op.resolvedSecurity)).length;\n const deprecatedCount = spec.operations.filter((op) => op.deprecated).length;\n const methods = getMethodBreakdownFromOperations(spec.operations);\n\n pageSlot.append(createSection(\n { className: 'summary' },\n createSummaryLine(\n [\n { label: 'Endpoints', value: spec.operations.length },\n { label: 'Auth Required', value: authRequiredCount },\n { label: 'Deprecated', value: deprecatedCount },\n ],\n methods,\n 'No operations',\n ),\n ));\n\n const portalRoot = (pageSlot.closest('.root') as HTMLElement | null) ?? undefined;\n const connectionSections = createConnectionSettingsSections(spec.securitySchemes || {}, portalRoot);\n for (const section of connectionSections) {\n pageSlot.append(section);\n }\n\n if (spec.servers.length > 0) {\n const serversSection = createSection({ title: 'Servers' });\n\n const curState = store.get();\n const initialEnvs = curState.initialEnvironments || curState.environments;\n for (const server of spec.servers) {\n const env = initialEnvs.find((e) => e.baseUrl === server.url);\n const isActive = env?.name === curState.activeEnvironment;\n const item = createCard({\n interactive: true,\n active: isActive,\n className: 'card-group',\n onClick: () => {\n if (env) store.setActiveEnvironment(env.name);\n },\n });\n item.title = 'Click to set as active environment';\n const info = h('div', { className: 'card-info' });\n const nameWrap = h('div', { className: 'inline-cluster inline-cluster-sm' });\n const iconEl = h('span', { className: 'icon-muted' });\n iconEl.innerHTML = icons.server;\n nameWrap.append(iconEl, h('code', { textContent: server.url }));\n info.append(nameWrap);\n if (server.description) {\n info.append(h('p', { textContent: server.description }));\n }\n const badges = h('div', { className: 'card-badges' });\n item.append(info, badges);\n serversSection.append(item);\n }\n\n pageSlot.append(serversSection);\n }\n\n if (spec.tags.length > 0) {\n const tagsSection = createSection({ title: 'API Groups' });\n\n for (const tag of spec.tags) {\n if (tag.operations.length === 0) continue;\n tagsSection.append(createTagCard(tag));\n }\n\n pageSlot.append(tagsSection);\n }\n\n if (spec.webhooks && spec.webhooks.length > 0) {\n const webhooksSection = createSection({ title: 'Webhooks' });\n\n for (const wh of spec.webhooks) {\n const card = createCard({\n interactive: true,\n className: 'card-group',\n onClick: () => navigate(buildPath({ type: 'webhook', webhookName: wh.name })),\n });\n const info = h('div', { className: 'card-info' });\n info.append(\n h('h3', { textContent: wh.summary || wh.name }),\n wh.description\n ? h('p', { textContent: wh.description })\n : h('p', { textContent: `${wh.method.toUpperCase()} webhook` }),\n );\n const badges = h('div', { className: 'card-badges' });\n badges.append(\n createBadge({ text: 'WH', kind: 'webhook', size: 's', mono: true }),\n createBadge({ text: wh.method.toUpperCase(), kind: 'method', method: wh.method, size: 's', mono: true }),\n );\n card.append(info, badges);\n webhooksSection.append(card);\n }\n\n pageSlot.append(webhooksSection);\n }\n\n}\n\nfunction createTagCard(tag: SpecTag): HTMLElement {\n const card = createCard({\n interactive: true,\n className: 'card-group',\n onClick: () => navigate(buildPath({ type: 'tag', tag: tag.name })),\n });\n\n const info = h('div', { className: 'card-info' });\n info.append(\n h('h3', { textContent: tag.name }),\n h('p', { textContent: tag.description || `${tag.operations.length} endpoints` }),\n );\n\n const methodBreakdown = getMethodBreakdown(tag);\n const badges = h('div', { className: 'card-badges' });\n for (const [method, count] of Object.entries(methodBreakdown)) {\n const badge = createBadge({\n text: method.toUpperCase(),\n kind: 'method',\n method,\n size: 'm',\n mono: true,\n });\n badge.textContent = `${count} ${method.toUpperCase()}`;\n badges.append(badge);\n }\n\n card.append(info, badges);\n\n return card;\n}\n\nfunction getMethodBreakdownFromOperations(operations: { method: string }[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const op of operations) {\n counts[op.method] = (counts[op.method] || 0) + 1;\n }\n return counts;\n}\n\nfunction getMethodBreakdown(tag: SpecTag): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const op of tag.operations) {\n counts[op.method] = (counts[op.method] || 0) + 1;\n }\n return counts;\n}\n","import type { SchemaObject } from '../core/types';\n\nexport function getSchemaTypeLabel(schema: SchemaObject): string {\n if (!schema) return 'any';\n if (schema.$ref) return schema.$ref.split('/').pop() || 'ref';\n\n let type = schema.type || '';\n if (schema.allOf) type = 'allOf';\n else if (schema.oneOf) type = 'oneOf';\n else if (schema.anyOf) type = 'anyOf';\n else if (schema.enum) type = 'enum';\n else if (schema.format) type += `<${schema.format}>`;\n\n if (schema.type === 'array' && schema.items && !schema.enum) {\n const itemType = schema.items.type || schema.items.$ref?.split('/').pop() || 'any';\n type = `${itemType}[]`;\n }\n\n if (schema.nullable) type += ' | null';\n return type || 'object';\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { createBadge, createCard, createCardHeader, createCardBody, createCardHeaderRow } from '../ui';\nimport { getSchemaTypeLabel } from '../../helpers/schema-utils';\nimport type { SchemaObject, SpecParameter } from '../../core/types';\n\ntype RowData = { row: HTMLElement; children: HTMLElement }[];\n\nexport interface SchemaBodyResult {\n body: HTMLElement;\n toggleCollapse: () => void;\n isExpanded: () => boolean;\n hasExpandable: boolean;\n}\n\n/** Render only the schema tree body (no card wrapper). For custom headers (e.g. Responses). */\nexport function renderSchemaBody(schema: SchemaObject): SchemaBodyResult {\n const container = h('div', { className: 'schema' });\n const body = h('div', { className: 'body' });\n container.append(body);\n const rowData: RowData = [];\n renderSchemaNode(body, schema, '', 0, new Set(), rowData);\n const hasExpandable = rowData.length > 0;\n const isExpanded = () => rowData.some(({ children }) => children.style.display !== 'none');\n const toggleCollapse = () => {\n const nextExpanded = !isExpanded();\n setRowsExpanded(rowData, nextExpanded);\n };\n return { body: container, toggleCollapse, isExpanded, hasExpandable };\n}\n\n/** Render an expandable schema tree viewer */\nexport function renderSchemaViewer(schema: SchemaObject, title?: string | HTMLElement): HTMLElement {\n const container = createCard();\n const rootType = getSchemaTypeLabel(schema);\n\n const body = createCardBody('no-padding');\n const schemaContainer = h('div', { className: 'schema' });\n const schemaBody = h('div', { className: 'body' });\n schemaContainer.append(schemaBody);\n const rowData: RowData = [];\n renderSchemaNode(schemaBody, schema, '', 0, new Set(), rowData);\n body.append(schemaContainer);\n\n if (title) {\n const header = createCardHeader();\n const titleEl = typeof title === 'string' ? h('h3', { textContent: title }) : title;\n const hasNestedLevels = rowData.length > 0;\n const anyExpanded = hasNestedLevels && rowData.some(({ children }) => children.style.display !== 'none');\n const typeBadge = createBadge({ text: rootType, kind: 'chip', size: 'm', mono: true });\n const collapseBtn = hasNestedLevels\n ? h('button', {\n className: anyExpanded ? 'schema-collapse-btn is-expanded' : 'schema-collapse-btn',\n type: 'button',\n title: anyExpanded ? 'Collapse all fields' : 'Expand all fields',\n })\n : null;\n\n if (collapseBtn) {\n collapseBtn.innerHTML = icons.chevronDown;\n collapseBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n const nextExpanded = !collapseBtn.classList.contains('is-expanded');\n setRowsExpanded(rowData, nextExpanded);\n collapseBtn.classList.toggle('is-expanded', nextExpanded);\n collapseBtn.title = nextExpanded ? 'Collapse all fields' : 'Expand all fields';\n });\n }\n\n if (titleEl.classList.contains('card-row')) {\n titleEl.classList.add('schema-header-row');\n titleEl.append(typeBadge);\n if (collapseBtn) titleEl.append(collapseBtn);\n header.append(titleEl);\n } else {\n const headerRow = h('div', { className: 'card-row schema-header-row' });\n headerRow.append(titleEl, typeBadge);\n if (collapseBtn) headerRow.append(collapseBtn);\n header.append(headerRow);\n }\n\n container.prepend(header);\n }\n\n container.append(body);\n return container;\n}\n\nexport interface ParametersCardOptions {\n headerTitle: string;\n withEnumAndDefault?: boolean;\n}\n\n/** Parameters in the same style as schema (flat list). */\nexport function renderParametersCard(params: SpecParameter[], options: ParametersCardOptions): HTMLElement {\n const { headerTitle, withEnumAndDefault = true } = options;\n\n const rowsEl = params.map((p) => {\n const row = h('div', { className: 'schema-row role-flat role-params' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: p.name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n metaWrap.append(createBadge({\n text: p.schema ? getSchemaTypeLabel(p.schema) : 'unknown',\n kind: 'chip',\n size: 'm',\n mono: true,\n }));\n if (p.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (p.description) {\n descCol.append(h('p', { textContent: p.description }));\n }\n const enumValues = p.schema?.enum;\n const hasDefault = p.schema?.default !== undefined;\n if (withEnumAndDefault && ((enumValues && enumValues.length > 0) || hasDefault)) {\n const enumWrap = h('div', { className: 'schema-enum-values' });\n if (hasDefault) {\n enumWrap.append(createBadge({\n text: `Default: ${JSON.stringify(p.schema!.default)}`,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n }\n if (enumValues) {\n for (const val of enumValues) {\n const str = String(val);\n if (str === p.in) continue; /* don't duplicate path/query — already in header */\n enumWrap.append(createBadge({ text: str, kind: 'chip', size: 's', mono: true }));\n }\n }\n descCol.append(enumWrap);\n }\n if (descCol.children.length > 0) row.append(descCol);\n\n return row;\n });\n\n const card = createCard();\n const body = createCardBody('no-padding');\n const paramsWrap = h('div', { className: 'params' });\n const paramsBody = h('div', { className: 'body role-params' });\n paramsBody.append(...rowsEl);\n paramsWrap.append(paramsBody);\n body.append(paramsWrap);\n card.append(\n createCardHeader(createCardHeaderRow({ title: headerTitle })),\n body,\n );\n return card;\n}\n\nfunction addExpandableNode(\n parent: HTMLElement,\n key: string,\n childSchema: SchemaObject,\n depth: number,\n required: boolean,\n seen: Set<SchemaObject>,\n rowData?: RowData,\n): void {\n const type = getSchemaTypeLabel(childSchema);\n const expandable = hasChildren(childSchema);\n const row = createRow(key, type, childSchema, depth, expandable, required);\n parent.append(row);\n\n if (expandable) {\n const childContainer = h('div', { className: 'schema-children' });\n childContainer.style.display = 'block';\n\n const newSeen = new Set(seen);\n newSeen.add(childSchema);\n renderChildren(childContainer, childSchema, depth + 1, newSeen, rowData);\n parent.append(childContainer);\n rowData?.push({ row, children: childContainer });\n\n row.querySelector('.schema-toggle')?.classList.add('is-expanded');\n row.classList.add('focus-ring');\n row.setAttribute('aria-expanded', 'true');\n row.setAttribute('tabindex', '0');\n row.addEventListener('click', () => {\n const isExpanded = childContainer.style.display !== 'none';\n setRowExpanded(row, childContainer, !isExpanded);\n });\n row.addEventListener('keydown', (event) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n const isExpanded = childContainer.style.display !== 'none';\n setRowExpanded(row, childContainer, !isExpanded);\n });\n }\n}\n\nfunction renderSchemaNode(\n parent: HTMLElement,\n schema: SchemaObject,\n key: string,\n depth: number,\n seen: Set<SchemaObject>,\n rowData?: RowData,\n): void {\n if (seen.has(schema)) {\n parent.append(createRow(key || '[circular]', 'circular', { description: '' }, depth, false, false));\n return;\n }\n\n if (depth === 0 && !key) {\n const newSeen = new Set(seen);\n newSeen.add(schema);\n renderChildren(parent, schema, depth, newSeen, rowData);\n return;\n }\n\n addExpandableNode(parent, key, schema, depth, false, seen, rowData);\n}\n\nfunction renderChildren(parent: HTMLElement, schema: SchemaObject, depth: number, seen: Set<SchemaObject>, rowData?: RowData): void {\n const required = new Set(schema.required || []);\n\n if (schema.properties) {\n for (const [propName, propSchema] of Object.entries(schema.properties)) {\n addExpandableNode(parent, propName, propSchema, depth, required.has(propName), seen, rowData);\n }\n }\n\n if (schema.items && schema.type === 'array') {\n addExpandableNode(parent, '[item]', schema.items, depth, false, seen, rowData);\n }\n\n for (const keyword of ['allOf', 'oneOf', 'anyOf'] as const) {\n const variants = schema[keyword];\n if (Array.isArray(variants)) {\n for (let i = 0; i < variants.length; i++) {\n addExpandableNode(parent, `${keyword}[${i}]`, variants[i] as SchemaObject, depth, false, seen, rowData);\n }\n }\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n addExpandableNode(parent, '[additionalProperties]', schema.additionalProperties as SchemaObject, depth, false, seen, rowData);\n }\n}\n\nfunction createRow(\n key: string,\n type: string,\n schema: SchemaObject,\n depth: number,\n expandable: boolean,\n required: boolean,\n): HTMLElement {\n const rowClass = [\n 'schema-row',\n depth === 0 ? 'is-root' : '',\n depth === 0 && !expandable ? 'is-leaf' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const row = h('div', { className: rowClass, role: expandable ? 'button' : undefined });\n row.setAttribute('data-depth', String(depth));\n row.style.setProperty('--schema-depth', String(depth));\n\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrapper = h('div', { className: 'schema-name-wrapper' });\n if (expandable) {\n nameWrapper.append(h('span', { className: 'schema-toggle', innerHTML: icons.chevronRight }));\n } else {\n nameWrapper.append(h('span', { className: 'schema-spacer' }));\n }\n nameWrapper.append(h('span', { textContent: key }));\n mainRow.append(nameWrapper);\n\n const metaWrapper = h('div', { className: 'schema-meta-wrapper' });\n metaWrapper.append(createBadge({ text: type, kind: 'chip', size: 'm', mono: true }));\n if (required) {\n metaWrapper.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n mainRow.append(metaWrapper);\n\n row.append(mainRow);\n\n const descCol = h('div', { className: `schema-desc-col${depth === 0 ? ' is-root' : ''}` });\n if (schema.description) {\n descCol.append(h('p', { textContent: String(schema.description) }));\n }\n const enumValues = schema.enum;\n const hasEnumValues = Array.isArray(enumValues) && enumValues.length > 0;\n const defaultValue = schema.default;\n const hasDefaultValue = defaultValue !== undefined;\n const isDefaultInEnum = hasEnumValues && hasDefaultValue\n ? enumValues.some((val) => schemaValuesEqual(val, defaultValue))\n : false;\n\n const constraints = getConstraints(schema, !hasEnumValues || !hasDefaultValue);\n if (constraints.length > 0 || hasEnumValues) {\n const constraintsRow = h('div', { className: 'schema-constraints-row' });\n for (const c of constraints) {\n constraintsRow.append(createBadge({\n text: c,\n kind: 'chip',\n size: c.startsWith('default: ') ? 's' : 'm',\n mono: true,\n }));\n }\n if (hasEnumValues) {\n const orderedEnumValues = hasDefaultValue && isDefaultInEnum\n ? [defaultValue, ...enumValues.filter((val) => !schemaValuesEqual(val, defaultValue))]\n : enumValues;\n\n if (hasDefaultValue && !isDefaultInEnum) {\n constraintsRow.append(createBadge({\n text: `default: ${stringifySchemaValue(defaultValue)}`,\n kind: 'chip',\n size: 's',\n mono: true,\n className: 'schema-enum-value is-default',\n }));\n }\n\n for (const val of orderedEnumValues) {\n const isDefaultValue = hasDefaultValue && schemaValuesEqual(val, defaultValue);\n constraintsRow.append(createBadge({\n text: isDefaultValue ? `default: ${stringifySchemaValue(val)}` : stringifySchemaValue(val),\n kind: 'chip',\n size: 's',\n mono: true,\n className: isDefaultValue ? 'schema-enum-value is-default' : 'schema-enum-value',\n }));\n }\n }\n descCol.append(constraintsRow);\n }\n if (descCol.children.length > 0) {\n row.append(descCol);\n }\n\n return row;\n}\n\nfunction hasChildren(schema: SchemaObject): boolean {\n if (schema.properties && Object.keys(schema.properties).length > 0) return true;\n if (schema.type === 'array' && schema.items) return true;\n if (schema.allOf || schema.oneOf || schema.anyOf) return true;\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') return true;\n return false;\n}\n\nfunction getConstraints(schema: SchemaObject, includeDefault: boolean = true): string[] {\n const parts: string[] = [];\n if (schema.minLength !== undefined) parts.push(`minLength: ${schema.minLength}`);\n if (schema.maxLength !== undefined) parts.push(`maxLength: ${schema.maxLength}`);\n if (schema.minimum !== undefined) parts.push(`minimum: ${schema.minimum}`);\n if (schema.maximum !== undefined) parts.push(`maximum: ${schema.maximum}`);\n if (schema.pattern) parts.push(`pattern: ${schema.pattern}`);\n if (schema.minItems !== undefined) parts.push(`minItems: ${schema.minItems}`);\n if (schema.maxItems !== undefined) parts.push(`maxItems: ${schema.maxItems}`);\n if (schema.uniqueItems) parts.push('uniqueItems: true');\n if (includeDefault && schema.default !== undefined) parts.push(`default: ${stringifySchemaValue(schema.default)}`);\n if (schema.deprecated) parts.push('deprecated: true');\n if (schema.readOnly) parts.push('readOnly: true');\n if (schema.writeOnly) parts.push('writeOnly: true');\n return parts;\n}\n\nfunction setRowsExpanded(rows: RowData, expanded: boolean): void {\n for (const { row, children } of rows) {\n setRowExpanded(row, children, expanded);\n }\n}\n\nfunction setRowExpanded(row: HTMLElement, children: HTMLElement, expanded: boolean): void {\n children.style.display = expanded ? 'block' : 'none';\n row.querySelector('.schema-toggle')?.classList.toggle('is-expanded', expanded);\n row.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n}\n\nfunction stringifySchemaValue(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (value === null) return 'null';\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction schemaValuesEqual(left: unknown, right: unknown): boolean {\n if (left === right) return true;\n try {\n return JSON.stringify(left) === JSON.stringify(right);\n } catch {\n return String(left) === String(right);\n }\n}\n","import type { TryItResponse } from '../core/types';\nimport { store } from '../core/state';\n\ninterface RequestConfig {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: string | FormData;\n /** Timeout in ms */\n timeout?: number;\n}\n\n/** Execute an HTTP request for the Try It console */\nexport async function executeRequest(config: RequestConfig): Promise<TryItResponse> {\n const { method, url, headers = {}, body, timeout = 30000 } = config;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n const start = performance.now();\n\n try {\n const isFormData = typeof FormData !== 'undefined' && body instanceof FormData;\n const fetchOptions: RequestInit = {\n method: method.toUpperCase(),\n headers: isFormData ? undefined : headers,\n signal: controller.signal,\n credentials: 'include',\n };\n\n // For FormData, don't set Content-Type — browser adds boundary automatically\n // Also skip headers object to avoid overriding Content-Type\n if (isFormData) {\n // Re-add non-Content-Type headers\n const cleanHeaders: Record<string, string> = {};\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() !== 'content-type') cleanHeaders[k] = v;\n }\n if (Object.keys(cleanHeaders).length > 0) fetchOptions.headers = cleanHeaders;\n }\n\n if (body && !['GET', 'HEAD'].includes(method.toUpperCase())) {\n fetchOptions.body = body;\n }\n\n const response = await fetch(url, fetchOptions);\n const duration = performance.now() - start;\n const responseBody = await response.text();\n const size = new TextEncoder().encode(responseBody).length;\n\n // Collect response headers (lowercase keys for case-insensitive lookup)\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key.toLowerCase()] = value;\n });\n\n // Auto-capture Bearer token\n autoCaptureBearerToken(responseBody, responseHeaders);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n body: responseBody,\n duration,\n size,\n };\n } catch (error) {\n const duration = performance.now() - start;\n if ((error as Error).name === 'AbortError') {\n return {\n status: 0,\n statusText: 'Request timed out',\n headers: {},\n body: `Request timed out after ${timeout}ms`,\n duration,\n size: 0,\n };\n }\n return {\n status: 0,\n statusText: 'Network Error',\n headers: {},\n body: (error as Error).message || 'Unknown network error',\n duration,\n size: 0,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Auto-capture Bearer token from response */\nfunction autoCaptureBearerToken(body: string, headers: Record<string, string>): void {\n const auth = store.get().auth;\n if (auth.locked) return;\n\n // Find bearer scheme name from spec\n const spec = store.get().spec;\n let bearerSchemeName = auth.activeScheme;\n if (spec) {\n for (const [name, scheme] of Object.entries(spec.securitySchemes)) {\n if (scheme.type === 'http' && scheme.scheme?.toLowerCase() === 'bearer') {\n bearerSchemeName = name;\n break;\n }\n }\n }\n\n // Priority 1: x-new-access-token header (lowercase after normalize)\n const headerToken = headers['x-new-access-token'];\n if (headerToken) {\n if (bearerSchemeName) {\n store.setSchemeValue(bearerSchemeName, headerToken);\n store.setAuth({ source: 'auto-header' });\n } else {\n store.setAuth({ token: headerToken, source: 'auto-header' });\n }\n return;\n }\n\n // Priority 2: accessToken from JSON response body\n try {\n const json = JSON.parse(body);\n const token = json.accessToken || json.access_token || json.token;\n if (typeof token === 'string' && token.length > 10) {\n if (bearerSchemeName) {\n store.setSchemeValue(bearerSchemeName, token);\n store.setAuth({ source: 'auto-body' });\n } else {\n store.setAuth({ token, source: 'auto-body' });\n }\n }\n } catch {\n // Not JSON — skip\n }\n}\n\n/** Build full URL from base, path, and parameters */\nexport function buildRequestUrl(\n baseUrl: string,\n pathTemplate: string,\n pathParams: Record<string, string>,\n queryParams: Record<string, string>,\n): string {\n let url = pathTemplate;\n\n // Replace path parameters\n for (const [key, value] of Object.entries(pathParams)) {\n url = url.replace(`{${key}}`, encodeURIComponent(value));\n }\n\n // Build full URL\n const base = baseUrl.replace(/\\/+$/, '');\n const fullUrl = base + url;\n\n // Add query parameters\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(queryParams)) {\n if (value) searchParams.set(key, value);\n }\n\n const queryString = searchParams.toString();\n return queryString ? `${fullUrl}?${queryString}` : fullUrl;\n}\n","interface SnippetParams {\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: string;\n}\n\ntype Language = 'curl' | 'javascript' | 'python' | 'go';\n\nexport interface Snippet {\n language: Language;\n label: string;\n code: string;\n}\n\n/** Generate code snippets for multiple languages */\nexport function generateSnippets(params: SnippetParams): Snippet[] {\n return [\n { language: 'curl', label: 'cURL', code: generateCurl(params) },\n { language: 'javascript', label: 'JavaScript', code: generateJS(params) },\n { language: 'python', label: 'Python', code: generatePython(params) },\n { language: 'go', label: 'Go', code: generateGo(params) },\n ];\n}\n\nfunction generateCurl({ method, url, headers, body }: SnippetParams): string {\n const lines = [`curl -X ${method.toUpperCase()} '${url}'`];\n\n for (const [key, value] of Object.entries(headers)) {\n lines.push(` -H '${key}: ${value}'`);\n }\n\n if (body) {\n lines.push(` -d '${body}'`);\n }\n\n return lines.join(' \\\\\\n');\n}\n\nfunction generateJS({ method, url, headers, body }: SnippetParams): string {\n const opts: string[] = [];\n opts.push(` method: '${method.toUpperCase()}'`);\n\n const headerEntries = Object.entries(headers);\n if (headerEntries.length > 0) {\n const h = headerEntries.map(([k, v]) => ` '${k}': '${v}'`).join(',\\n');\n opts.push(` headers: {\\n${h}\\n }`);\n }\n\n if (body) {\n opts.push(` body: JSON.stringify(${body})`);\n }\n\n return `const response = await fetch('${url}', {\\n${opts.join(',\\n')}\\n});\\n\\nconst data = await response.json();\\nconsole.log(data);`;\n}\n\nfunction generatePython({ method, url, headers, body }: SnippetParams): string {\n const lines = ['import requests', ''];\n\n const headerEntries = Object.entries(headers);\n if (headerEntries.length > 0) {\n const h = headerEntries.map(([k, v]) => ` \"${k}\": \"${v}\"`).join(',\\n');\n lines.push(`headers = {\\n${h}\\n}`);\n }\n\n if (body) {\n lines.push(`payload = ${body}`);\n }\n\n const args = [`\"${url}\"`];\n if (headerEntries.length > 0) args.push('headers=headers');\n if (body) args.push('json=payload');\n\n lines.push('');\n lines.push(`response = requests.${method.toLowerCase()}(${args.join(', ')})`);\n lines.push('print(response.json())');\n\n return lines.join('\\n');\n}\n\nfunction generateGo({ method, url, headers, body }: SnippetParams): string {\n const lines = [\n 'package main',\n '',\n 'import (',\n ' \"fmt\"',\n ' \"io\"',\n ' \"net/http\"',\n ];\n\n if (body) {\n lines.push(' \"strings\"');\n }\n\n lines.push(')', '', 'func main() {');\n\n if (body) {\n lines.push(` body := strings.NewReader(\\`${body}\\`)`);\n lines.push(` req, err := http.NewRequest(\"${method.toUpperCase()}\", \"${url}\", body)`);\n } else {\n lines.push(` req, err := http.NewRequest(\"${method.toUpperCase()}\", \"${url}\", nil)`);\n }\n\n lines.push(' if err != nil {');\n lines.push(' panic(err)');\n lines.push(' }');\n\n for (const [key, value] of Object.entries(headers)) {\n lines.push(` req.Header.Set(\"${key}\", \"${value}\")`);\n }\n\n lines.push('');\n lines.push(' resp, err := http.DefaultClient.Do(req)');\n lines.push(' if err != nil {');\n lines.push(' panic(err)');\n lines.push(' }');\n lines.push(' defer resp.Body.Close()');\n lines.push('');\n lines.push(' data, _ := io.ReadAll(resp.Body)');\n lines.push(' fmt.Println(string(data))');\n lines.push('}');\n\n return lines.join('\\n');\n}\n","import type { SpecMediaType, SpecExample, SpecParameter } from '../../core/types';\nimport { generateExample } from '../../core/parser';\n\nexport interface ParamExampleSet {\n name: string;\n summary?: string;\n values: Record<string, string>;\n}\n\n/** Extract example sets from path/query parameters (for GET, DELETE etc.) */\nexport function extractParamExampleSets(params: SpecParameter[]): ParamExampleSet[] {\n if (params.length === 0) return [];\n\n const getParamValue = (param: SpecParameter, setName: string | null, enumIdx?: number): string => {\n if (setName && param.examples?.[setName] !== undefined) {\n const ex = param.examples[setName] as SpecExample | { value?: unknown };\n const v = (ex as { value?: unknown })?.value ?? (ex as SpecExample).value;\n if (v !== undefined && v !== null) return String(v);\n }\n if (enumIdx !== undefined && param.schema?.enum && param.schema.enum[enumIdx] !== undefined) {\n return String(param.schema.enum[enumIdx]);\n }\n if (param.example !== undefined && param.example !== null) return String(param.example);\n if (param.schema?.example !== undefined && param.schema.example !== null) return String(param.schema.example);\n if (param.schema?.default !== undefined && param.schema.default !== null) return String(param.schema.default);\n if (param.schema?.enum && param.schema.enum.length > 0) return String(param.schema.enum[0]);\n if (param.schema?.type === 'integer' || param.schema?.type === 'number') return '0';\n if (param.schema?.type === 'boolean') return 'true';\n return param.in === 'path' ? 'id' : 'value';\n };\n\n const setNames = new Set<string>();\n for (const param of params) {\n if (param.examples && typeof param.examples === 'object') {\n for (const name of Object.keys(param.examples)) setNames.add(name);\n }\n }\n\n const sets: ParamExampleSet[] = [];\n\n if (setNames.size > 0) {\n for (const name of setNames) {\n const values: Record<string, string> = {};\n for (const param of params) {\n values[param.name] = getParamValue(param, name);\n }\n const firstParam = params.find((p) => p.examples?.[name]);\n const ex = firstParam?.examples?.[name] as SpecExample | undefined;\n sets.push({ name, summary: ex?.summary, values });\n }\n } else {\n const paramWithEnum = params.find((p) => p.schema?.enum && p.schema.enum.length > 1);\n if (paramWithEnum?.schema?.enum) {\n for (let i = 0; i < paramWithEnum.schema.enum.length; i++) {\n const values: Record<string, string> = {};\n for (const param of params) {\n values[param.name] = param === paramWithEnum ? getParamValue(param, null, i) : getParamValue(param, null);\n }\n const label = String(paramWithEnum.schema.enum[i]);\n sets.push({ name: label, values });\n }\n } else {\n const defaultValues: Record<string, string> = {};\n for (const param of params) {\n defaultValues[param.name] = getParamValue(param, null);\n }\n sets.push({ name: 'Default', values: defaultValues });\n }\n }\n\n return sets;\n}\n\nexport interface ExampleOption {\n name: string;\n summary?: string;\n description?: string;\n value: unknown;\n}\n\n/** Extract named examples from a media type, with schema fallback */\nexport function extractExamples(mediaType: SpecMediaType): ExampleOption[] {\n const options: ExampleOption[] = [];\n\n // Named examples (OAS 3.x)\n if (mediaType.examples && typeof mediaType.examples === 'object') {\n for (const [name, ex] of Object.entries(mediaType.examples)) {\n options.push({\n name,\n summary: ex.summary,\n description: ex.description,\n value: ex.value,\n });\n }\n }\n\n // Single example\n if (options.length === 0 && mediaType.example !== undefined) {\n options.push({ name: 'Default', value: mediaType.example });\n }\n\n // Schema-generated fallback\n if (options.length === 0 && mediaType.schema) {\n const generated = generateExample(mediaType.schema);\n if (generated !== undefined) {\n options.push({ name: 'Generated', value: generated });\n }\n }\n\n return options;\n}\n\n/** Get display label for example, without duplicating summary/description */\nexport function getExampleLabel(ex: ExampleOption): string {\n const parts = [ex.summary, ex.description].filter(Boolean);\n return [...new Set(parts)].join(' — ') || ex.name;\n}\n\n/** Format an example value as pretty JSON string */\nexport function formatExampleValue(value: unknown): string {\n if (value === undefined || value === null) return '';\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record<string,any> */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += `<span class=\"${className}\">`;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array<string>} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record<number,boolean> */\n const emit = {};\n /** @type Record<number,string> */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.11.1\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record<string, Language>} */\n const languages = Object.create(null);\n /** @type {Record<string, string>} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n modeBuffer += \"\\n\";\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record<string,CompiledMode> */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array<string>} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial<HLJSOptions>} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n highlightAll();\n }\n\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n // make sure the event listener is only added once\n if (!wantsHighlight) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n const regex = hljs.regex;\n const VAR = {};\n const BRACED_VAR = {\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n \"self\",\n {\n begin: /:-/,\n contains: [ VAR ]\n } // default values\n ]\n };\n Object.assign(VAR, {\n className: 'variable',\n variants: [\n { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![\\\\w\\\\d])(?![$])`) },\n BRACED_VAR\n ]\n });\n\n const SUBST = {\n className: 'subst',\n begin: /\\$\\(/,\n end: /\\)/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const COMMENT = hljs.inherit(\n hljs.COMMENT(),\n {\n match: [\n /(^|\\s)/,\n /#.*$/\n ],\n scope: {\n 2: 'comment'\n }\n }\n );\n const HERE_DOC = {\n begin: /<<-?\\s*(?=\\w+)/,\n starts: { contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n className: 'string'\n })\n ] }\n };\n const QUOTE_STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n SUBST\n ]\n };\n SUBST.contains.push(QUOTE_STRING);\n const ESCAPED_QUOTE = {\n match: /\\\\\"/\n };\n const APOS_STRING = {\n className: 'string',\n begin: /'/,\n end: /'/\n };\n const ESCAPED_APOS = {\n match: /\\\\'/\n };\n const ARITHMETIC = {\n begin: /\\$?\\(\\(/,\n end: /\\)\\)/,\n contains: [\n {\n begin: /\\d+#[0-9a-f]+/,\n className: \"number\"\n },\n hljs.NUMBER_MODE,\n VAR\n ]\n };\n const SH_LIKE_SHELLS = [\n \"fish\",\n \"bash\",\n \"zsh\",\n \"sh\",\n \"csh\",\n \"ksh\",\n \"tcsh\",\n \"dash\",\n \"scsh\",\n ];\n const KNOWN_SHEBANG = hljs.SHEBANG({\n binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n relevance: 10\n });\n const FUNCTION = {\n className: 'function',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n relevance: 0\n };\n\n const KEYWORDS = [\n \"if\",\n \"then\",\n \"else\",\n \"elif\",\n \"fi\",\n \"time\",\n \"for\",\n \"while\",\n \"until\",\n \"in\",\n \"do\",\n \"done\",\n \"case\",\n \"esac\",\n \"coproc\",\n \"function\",\n \"select\"\n ];\n\n const LITERALS = [\n \"true\",\n \"false\"\n ];\n\n // to consume paths to prevent keyword matches inside them\n const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n const SHELL_BUILT_INS = [\n \"break\",\n \"cd\",\n \"continue\",\n \"eval\",\n \"exec\",\n \"exit\",\n \"export\",\n \"getopts\",\n \"hash\",\n \"pwd\",\n \"readonly\",\n \"return\",\n \"shift\",\n \"test\",\n \"times\",\n \"trap\",\n \"umask\",\n \"unset\"\n ];\n\n const BASH_BUILT_INS = [\n \"alias\",\n \"bind\",\n \"builtin\",\n \"caller\",\n \"command\",\n \"declare\",\n \"echo\",\n \"enable\",\n \"help\",\n \"let\",\n \"local\",\n \"logout\",\n \"mapfile\",\n \"printf\",\n \"read\",\n \"readarray\",\n \"source\",\n \"sudo\",\n \"type\",\n \"typeset\",\n \"ulimit\",\n \"unalias\"\n ];\n\n const ZSH_BUILT_INS = [\n \"autoload\",\n \"bg\",\n \"bindkey\",\n \"bye\",\n \"cap\",\n \"chdir\",\n \"clone\",\n \"comparguments\",\n \"compcall\",\n \"compctl\",\n \"compdescribe\",\n \"compfiles\",\n \"compgroups\",\n \"compquote\",\n \"comptags\",\n \"comptry\",\n \"compvalues\",\n \"dirs\",\n \"disable\",\n \"disown\",\n \"echotc\",\n \"echoti\",\n \"emulate\",\n \"fc\",\n \"fg\",\n \"float\",\n \"functions\",\n \"getcap\",\n \"getln\",\n \"history\",\n \"integer\",\n \"jobs\",\n \"kill\",\n \"limit\",\n \"log\",\n \"noglob\",\n \"popd\",\n \"print\",\n \"pushd\",\n \"pushln\",\n \"rehash\",\n \"sched\",\n \"setcap\",\n \"setopt\",\n \"stat\",\n \"suspend\",\n \"ttyctl\",\n \"unfunction\",\n \"unhash\",\n \"unlimit\",\n \"unsetopt\",\n \"vared\",\n \"wait\",\n \"whence\",\n \"where\",\n \"which\",\n \"zcompile\",\n \"zformat\",\n \"zftp\",\n \"zle\",\n \"zmodload\",\n \"zparseopts\",\n \"zprof\",\n \"zpty\",\n \"zregexparse\",\n \"zsocket\",\n \"zstyle\",\n \"ztcp\"\n ];\n\n const GNU_CORE_UTILS = [\n \"chcon\",\n \"chgrp\",\n \"chown\",\n \"chmod\",\n \"cp\",\n \"dd\",\n \"df\",\n \"dir\",\n \"dircolors\",\n \"ln\",\n \"ls\",\n \"mkdir\",\n \"mkfifo\",\n \"mknod\",\n \"mktemp\",\n \"mv\",\n \"realpath\",\n \"rm\",\n \"rmdir\",\n \"shred\",\n \"sync\",\n \"touch\",\n \"truncate\",\n \"vdir\",\n \"b2sum\",\n \"base32\",\n \"base64\",\n \"cat\",\n \"cksum\",\n \"comm\",\n \"csplit\",\n \"cut\",\n \"expand\",\n \"fmt\",\n \"fold\",\n \"head\",\n \"join\",\n \"md5sum\",\n \"nl\",\n \"numfmt\",\n \"od\",\n \"paste\",\n \"ptx\",\n \"pr\",\n \"sha1sum\",\n \"sha224sum\",\n \"sha256sum\",\n \"sha384sum\",\n \"sha512sum\",\n \"shuf\",\n \"sort\",\n \"split\",\n \"sum\",\n \"tac\",\n \"tail\",\n \"tr\",\n \"tsort\",\n \"unexpand\",\n \"uniq\",\n \"wc\",\n \"arch\",\n \"basename\",\n \"chroot\",\n \"date\",\n \"dirname\",\n \"du\",\n \"echo\",\n \"env\",\n \"expr\",\n \"factor\",\n // \"false\", // keyword literal already\n \"groups\",\n \"hostid\",\n \"id\",\n \"link\",\n \"logname\",\n \"nice\",\n \"nohup\",\n \"nproc\",\n \"pathchk\",\n \"pinky\",\n \"printenv\",\n \"printf\",\n \"pwd\",\n \"readlink\",\n \"runcon\",\n \"seq\",\n \"sleep\",\n \"stat\",\n \"stdbuf\",\n \"stty\",\n \"tee\",\n \"test\",\n \"timeout\",\n // \"true\", // keyword literal already\n \"tty\",\n \"uname\",\n \"unlink\",\n \"uptime\",\n \"users\",\n \"who\",\n \"whoami\",\n \"yes\"\n ];\n\n return {\n name: 'Bash',\n aliases: [\n 'sh',\n 'zsh'\n ],\n keywords: {\n $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: [\n ...SHELL_BUILT_INS,\n ...BASH_BUILT_INS,\n // Shell modifiers\n \"set\",\n \"shopt\",\n ...ZSH_BUILT_INS,\n ...GNU_CORE_UTILS\n ]\n },\n contains: [\n KNOWN_SHEBANG, // to catch known shells and boost relevancy\n hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n FUNCTION,\n ARITHMETIC,\n COMMENT,\n HERE_DOC,\n PATH_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n ESCAPED_APOS,\n VAR\n ]\n };\n}\n\nexport { bash as default };\n","/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n const LITERALS = [\n \"true\",\n \"false\",\n \"iota\",\n \"nil\"\n ];\n const BUILT_INS = [\n \"append\",\n \"cap\",\n \"close\",\n \"complex\",\n \"copy\",\n \"imag\",\n \"len\",\n \"make\",\n \"new\",\n \"panic\",\n \"print\",\n \"println\",\n \"real\",\n \"recover\",\n \"delete\"\n ];\n const TYPES = [\n \"bool\",\n \"byte\",\n \"complex64\",\n \"complex128\",\n \"error\",\n \"float32\",\n \"float64\",\n \"int8\",\n \"int16\",\n \"int32\",\n \"int64\",\n \"string\",\n \"uint8\",\n \"uint16\",\n \"uint32\",\n \"uint64\",\n \"int\",\n \"uint\",\n \"uintptr\",\n \"rune\"\n ];\n const KWS = [\n \"break\",\n \"case\",\n \"chan\",\n \"const\",\n \"continue\",\n \"default\",\n \"defer\",\n \"else\",\n \"fallthrough\",\n \"for\",\n \"func\",\n \"go\",\n \"goto\",\n \"if\",\n \"import\",\n \"interface\",\n \"map\",\n \"package\",\n \"range\",\n \"return\",\n \"select\",\n \"struct\",\n \"switch\",\n \"type\",\n \"var\",\n ];\n const KEYWORDS = {\n keyword: KWS,\n type: TYPES,\n literal: LITERALS,\n built_in: BUILT_INS\n };\n return {\n name: 'Go',\n aliases: [ 'golang' ],\n keywords: KEYWORDS,\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n variants: [\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n begin: '`',\n end: '`'\n }\n ]\n },\n {\n className: 'number',\n variants: [\n {\n match: /-?\\b0[xX]\\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\\d(_?\\d)*i?/, // hex without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b0[xX](_?[a-fA-F0-9])+((\\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\\d(_?\\d)*)?i?/, // hex with a present digit before . (making a digit afterwards optional)\n relevance: 0\n },\n {\n match: /-?\\b0[oO](_?[0-7])*i?/, // leading 0o octal\n relevance: 0\n },\n {\n match: /-?\\.\\d(_?\\d)*([eE][+-]?\\d(_?\\d)*)?i?/, // decimal without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b\\d(_?\\d)*(\\.(\\d(_?\\d)*)?)?([eE][+-]?\\d(_?\\d)*)?i?/, // decimal with a present digit before . (making a digit afterwards optional)\n relevance: 0\n }\n ]\n },\n { begin: /:=/ // relevance booster\n },\n {\n className: 'function',\n beginKeywords: 'func',\n end: '\\\\s*(\\\\{|$)',\n excludeEnd: true,\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n illegal: /[\"']/\n }\n ]\n }\n ]\n };\n}\n\nexport { go as default };\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'all',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nexport { python as default };\n","/** Syntax highlighting for supported languages, fallback is escapeHtml */\nimport hljs from 'highlight.js/lib/core';\nimport bash from 'highlight.js/lib/languages/bash';\nimport go from 'highlight.js/lib/languages/go';\nimport json from 'highlight.js/lib/languages/json';\nimport python from 'highlight.js/lib/languages/python';\nimport { escapeHtml, looksLikeJson } from '../helpers/text';\n\nhljs.registerLanguage('bash', bash);\nhljs.registerLanguage('go', go);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('python', python);\n\nconst langMap: Record<string, string> = {\n curl: 'bash',\n go: 'go',\n json: 'json',\n py: 'python',\n python: 'python',\n};\n\nconst SUPPORTED = new Set(['bash', 'curl', 'go', 'json', 'py', 'python']);\n\nexport function highlightCode(code: string, language: string): string {\n if (language === 'plaintext' || language === '' || !SUPPORTED.has(language)) {\n return escapeHtml(code);\n }\n const lang = langMap[language] ?? (looksLikeJson(code) ? 'json' : 'bash');\n try {\n const result = hljs.highlight(code, { language: lang });\n return result.value;\n } catch {\n return escapeHtml(code);\n }\n}\n\nexport { looksLikeJson };\n","import type { SchemaObject, SpecOperation, SpecParameter } from './types';\n\nexport interface ValidationError {\n field: string;\n message: string;\n /** 'param' | 'body' */\n kind: 'param' | 'body';\n}\n\nexport interface ValidationResult {\n valid: boolean;\n message?: string;\n}\n\n/** Validate a single parameter value against its schema */\nexport function validateParam(value: string, param: SpecParameter): ValidationResult {\n const schema = param.schema;\n\n // Required check\n if (param.required && (!value || value.trim() === '')) {\n return { valid: false, message: 'Required field' };\n }\n\n // Empty non-required — skip\n if (!value || value.trim() === '') {\n return { valid: true };\n }\n\n if (!schema) return { valid: true };\n\n // Type-based checks\n if (schema.type === 'integer') {\n if (!/^-?\\d+$/.test(value.trim())) {\n return { valid: false, message: 'Must be an integer' };\n }\n const num = parseInt(value, 10);\n return validateNumberConstraints(num, schema);\n }\n\n if (schema.type === 'number') {\n if (isNaN(Number(value.trim()))) {\n return { valid: false, message: 'Must be a number' };\n }\n const num = parseFloat(value);\n return validateNumberConstraints(num, schema);\n }\n\n if (schema.type === 'boolean') {\n if (!['true', 'false', '1', '0'].includes(value.trim().toLowerCase())) {\n return { valid: false, message: 'Must be true or false' };\n }\n }\n\n // Enum\n if (schema.enum && schema.enum.length > 0) {\n if (!schema.enum.some((e) => String(e) === value.trim())) {\n return { valid: false, message: `Allowed: ${schema.enum.map(String).join(', ')}` };\n }\n }\n\n // String constraints\n if (schema.type === 'string' || !schema.type) {\n if (schema.minLength !== undefined && value.length < schema.minLength) {\n return { valid: false, message: `Min length: ${schema.minLength}` };\n }\n if (schema.maxLength !== undefined && value.length > schema.maxLength) {\n return { valid: false, message: `Max length: ${schema.maxLength}` };\n }\n if (schema.pattern) {\n try {\n const re = new RegExp(schema.pattern);\n if (!re.test(value)) {\n return { valid: false, message: `Must match pattern: ${schema.pattern}` };\n }\n } catch {\n // invalid regex in spec — skip\n }\n }\n }\n\n return { valid: true };\n}\n\nfunction validateNumberConstraints(num: number, schema: SchemaObject): ValidationResult {\n if (schema.minimum !== undefined && num < schema.minimum) {\n return { valid: false, message: `Minimum: ${schema.minimum}` };\n }\n if (schema.maximum !== undefined && num > schema.maximum) {\n return { valid: false, message: `Maximum: ${schema.maximum}` };\n }\n return { valid: true };\n}\n\n/** Validate the request body string */\nexport function validateBody(\n bodyStr: string,\n contentType: string,\n schema?: SchemaObject,\n required?: boolean,\n): ValidationResult {\n if (required && (!bodyStr || bodyStr.trim() === '')) {\n return { valid: false, message: 'Request body is required' };\n }\n\n if (!bodyStr || bodyStr.trim() === '') {\n return { valid: true };\n }\n\n // JSON validation\n if (contentType.includes('json')) {\n try {\n JSON.parse(bodyStr);\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Invalid JSON';\n return { valid: false, message: `Invalid JSON: ${msg}` };\n }\n }\n\n return { valid: true };\n}\n\n/** Validate all fields in a Try It form. Returns array of errors (empty = valid). */\nexport function validateAll(\n container: HTMLElement,\n operation: SpecOperation,\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Validate params\n const paramInputs = container.querySelectorAll('[data-param-name]') as NodeListOf<HTMLInputElement>;\n paramInputs.forEach((input) => {\n const paramName = input.getAttribute('data-param-name')!;\n const param = operation.parameters.find((p) => p.name === paramName);\n if (!param) return;\n\n const result = validateParam(input.value, param);\n if (!result.valid) {\n errors.push({ field: paramName, message: result.message || 'Invalid', kind: 'param' });\n }\n });\n\n // Validate body\n if (operation.requestBody) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const defaultCT = contentTypes[0] || 'application/json';\n const schema = operation.requestBody.content?.[defaultCT]?.schema;\n\n const bodyTextarea = container.querySelector('[data-field=\"body\"]') as HTMLTextAreaElement | null;\n const bodyStr = bodyTextarea?.value || '';\n\n // Skip body validation for multipart (files handled separately)\n if (!defaultCT.includes('multipart')) {\n const result = validateBody(bodyStr, defaultCT, schema, operation.requestBody.required);\n if (!result.valid) {\n errors.push({ field: 'body', message: result.message || 'Invalid body', kind: 'body' });\n }\n }\n }\n\n return errors;\n}\n","import { h } from '../lib/dom';\nimport type { ValidationError } from '../core/validation';\n\nexport function clearValidationErrors(container: HTMLElement): void {\n container.querySelectorAll('.validation-error').forEach((el) => {\n el.textContent = '';\n el.classList.remove('visible');\n });\n container.querySelectorAll('.invalid').forEach((el) => {\n el.classList.remove('invalid');\n });\n}\n\nexport function showValidationErrors(container: HTMLElement, errors: ValidationError[]): void {\n for (const err of errors) {\n const errorEl = container.querySelector(`[data-error-for=\"${err.field}\"]`);\n if (errorEl) {\n errorEl.textContent = err.message;\n errorEl.classList.add('visible');\n }\n if (err.kind === 'param') {\n const input = container.querySelector(`[data-param-name=\"${err.field}\"]`) as HTMLElement | null;\n if (input) input.classList.add('invalid');\n } else if (err.kind === 'body') {\n const textarea = container.querySelector('[data-field=\"body\"]') as HTMLElement | null;\n if (textarea) textarea.classList.add('invalid');\n }\n }\n}\n\nexport function createErrorPlaceholder(field: string): HTMLElement {\n return h('span', { className: 'validation-error', 'data-error-for': field });\n}\n","import { h } from '../../lib/dom';\nimport { highlightCode } from '../../lib/highlight';\n\nconst MIN_TEXTAREA_HEIGHT = 60;\n\nexport function autoResizeTextarea(ta: HTMLTextAreaElement): void {\n ta.style.height = '0';\n ta.style.height = Math.max(MIN_TEXTAREA_HEIGHT, ta.scrollHeight) + 'px';\n}\n\nexport function syncScrollFromTextarea(ta: HTMLTextAreaElement, pre: HTMLElement): void {\n pre.scrollTop = ta.scrollTop;\n pre.scrollLeft = ta.scrollLeft;\n}\n\nexport function createEditorPanel(\n initialValue: string,\n lang: string,\n options?: { dataField?: string; onInput?: () => void },\n): { wrap: HTMLElement; textarea: HTMLTextAreaElement; setValue: (v: string, highlightLang?: string) => void } {\n const editorWrap = h('div', { className: 'body-editor' });\n const highlightPre = h('pre', { className: 'body-highlight' });\n const highlightCodeEl = h('code', { className: 'hljs' });\n highlightPre.append(highlightCodeEl);\n\n const textarea = h('textarea', {\n className: 'textarea-json',\n spellcheck: 'false',\n ...(options?.dataField ? { 'data-field': options.dataField } : {}),\n }) as HTMLTextAreaElement;\n textarea.value = initialValue;\n highlightCodeEl.innerHTML = highlightCode(initialValue || ' ', lang);\n autoResizeTextarea(textarea);\n\n const updateHighlight = (val?: string, hlLang?: string) => {\n highlightCodeEl.innerHTML = highlightCode((val ?? textarea.value) || ' ', hlLang ?? lang);\n };\n\n textarea.addEventListener('input', () => {\n updateHighlight();\n syncScrollFromTextarea(textarea, highlightPre);\n autoResizeTextarea(textarea);\n options?.onInput?.();\n });\n textarea.addEventListener('scroll', () => syncScrollFromTextarea(textarea, highlightPre));\n\n editorWrap.append(highlightPre, textarea);\n\n return {\n wrap: editorWrap,\n textarea,\n setValue: (v, hlLang) => {\n textarea.value = v;\n updateHighlight(v, hlLang ?? lang);\n autoResizeTextarea(textarea);\n },\n };\n}\n","import { copyToClipboard } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { createButton } from '../ui';\n\nconst COPY_FEEDBACK_MS = 1500;\n\nexport interface CopyButtonOptions {\n getText: () => string | Promise<string>;\n ariaLabel?: string;\n copiedAriaLabel?: string;\n className?: string;\n onCopied?: () => void;\n}\n\n/**\n * Shared icon button with copy/check feedback.\n * Keeps copy interaction consistent across endpoint/try-it panels.\n */\nexport function createCopyButton(options: CopyButtonOptions): HTMLButtonElement {\n const ariaLabel = options.ariaLabel || 'Copy';\n const copiedAriaLabel = options.copiedAriaLabel || 'Copied';\n\n const btn = createButton({\n variant: 'icon',\n icon: icons.copy,\n ariaLabel,\n className: options.className,\n onClick: async () => {\n const text = await options.getText();\n await copyToClipboard(text);\n btn.innerHTML = icons.check;\n btn.setAttribute('aria-label', copiedAriaLabel);\n options.onCopied?.();\n setTimeout(() => {\n btn.innerHTML = icons.copy;\n btn.setAttribute('aria-label', ariaLabel);\n }, COPY_FEEDBACK_MS);\n },\n });\n return btn;\n}\n","import { h, clear, formatDuration, formatBytes } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { executeRequest, buildRequestUrl } from '../../api/http-client';\nimport { generateSnippets } from '../../api/snippets';\nimport { extractExamples, extractParamExampleSets, formatExampleValue, getExampleLabel } from './example-picker';\nimport { getBaseUrl } from '../../services/env';\nimport { highlightCode, looksLikeJson } from '../../lib/highlight';\nimport { resolveAuthHeaders, resolveAuthQuery, resolveAuthCookies, getAuthHeaderPlaceholder } from '../modals/auth-modal';\nimport { hasOperationAuth } from '../../core/security';\nimport { validateAll } from '../../core/validation';\nimport { clearValidationErrors, showValidationErrors, createErrorPlaceholder } from '../../helpers/validation-ui';\nimport { createEditorPanel, autoResizeTextarea } from './editor-panel';\nimport { createCopyButton } from './copy-button';\nimport { createSelect, createInput, createButton, createBadge, createTab, createResponseCodeTab } from '../ui';\nimport type { SpecOperation, SpecParameter, TryItResponse, SchemaObject } from '../../core/types';\n\nexport interface InitialResponseExample {\n statusCode: string;\n statusText: string;\n body: string;\n}\n\nexport interface TryItConfig {\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: string | FormData;\n}\n\n/** Collect current request config from Try It form (path, query, headers, body) */\nexport function collectRequestConfig(container: HTMLElement, operation: SpecOperation): TryItConfig {\n return collectRequestConfigImpl(container, operation);\n}\n\n/** Render the Try It interactive console */\nexport function renderTryIt(\n operation: SpecOperation,\n container: HTMLElement,\n initialResponse?: InitialResponseExample | null,\n options?: { onConfigChange?: (config: TryItConfig) => void; extraContent?: HTMLElement },\n): void {\n clear(container);\n container.classList.add('try-it');\n const tryItLayout = h('div', { className: 'body' });\n\n // Request + Code Examples (combined block with tabs + Send button)\n const responseSection = h('div', { className: 'block section' });\n responseSection.append(h('h2', { textContent: 'Response' }));\n const responseContainer = h('div', { 'data-response': 'true' });\n if (initialResponse) {\n renderResponse(responseContainer, {\n status: parseInt(initialResponse.statusCode, 10) || 200,\n statusText: initialResponse.statusText || 'OK',\n headers: {},\n body: initialResponse.body,\n duration: 0,\n size: 0,\n });\n } else {\n const placeholder = h('div', { className: 'placeholder' });\n placeholder.append(h('span', { textContent: 'Execute request to see response' }));\n responseContainer.append(placeholder);\n }\n responseSection.append(responseContainer);\n\n tryItLayout.append(renderRequestCodeBlock(operation, container, {\n onConfigChange: options?.onConfigChange,\n onSendRequest: async (sendBtn: HTMLButtonElement) => {\n clearValidationErrors(container);\n const errors = validateAll(container, operation);\n if (errors.length > 0) {\n showValidationErrors(container, errors);\n return;\n }\n const config = collectRequestConfigImpl(container, operation);\n sendBtn.setAttribute('disabled', '');\n sendBtn.innerHTML = '';\n sendBtn.append(h('span', { className: 'spinner spinner-sm' }), h('span', null, 'Sending...'));\n try {\n const response = await executeRequest(config);\n renderResponse(responseContainer, response);\n } catch (err) {\n renderResponse(responseContainer, {\n status: 0,\n statusText: 'Error',\n headers: {},\n body: (err as Error).message,\n duration: 0,\n size: 0,\n });\n } finally {\n sendBtn.removeAttribute('disabled');\n sendBtn.innerHTML = icons.send;\n sendBtn.append(h('span', null, 'Send Request'));\n }\n },\n }));\n\n tryItLayout.append(responseSection);\n container.append(tryItLayout);\n\n if (options?.onConfigChange) {\n let debounceTimer: ReturnType<typeof setTimeout>;\n const notify = () => {\n clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n const config = collectRequestConfigImpl(container, operation);\n options.onConfigChange!(config);\n }, 120);\n };\n container.addEventListener('input', notify);\n container.addEventListener('change', notify);\n }\n\n // Deferred resize body textarea — after layout in DOM\n const bodyTextarea = container.querySelector('textarea[data-field=\"body\"]') as HTMLTextAreaElement | null;\n if (bodyTextarea) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => autoResizeTextarea(bodyTextarea));\n });\n }\n}\n\n/** Combined Request Body / Query / Path + Code Examples block with tabs */\nfunction renderRequestCodeBlock(\n operation: SpecOperation,\n tryItBody: HTMLElement,\n options?: { onConfigChange?: (config: TryItConfig) => void; onSendRequest?: (sendBtn: HTMLButtonElement) => Promise<void> },\n): HTMLElement {\n const onConfigChange = options?.onConfigChange;\n const pathParams = operation.parameters.filter((p) => p.in === 'path');\n const queryParams = operation.parameters.filter((p) => p.in === 'query');\n const paramExampleSets = extractParamExampleSets([...pathParams, ...queryParams]);\n\n // First tab unified for all operations\n const firstTabLabel = 'Request';\n\n const snippets = generateSnippets({\n method: operation.method,\n url: '', // will be updated\n headers: {},\n body: operation.requestBody ? '{ ... }' : undefined,\n });\n\n const getCodeParams = (): { method: string; url: string; headers: Record<string, string>; body?: string } => {\n const config = collectRequestConfigImpl(tryItBody, operation);\n let bodyStr: string | undefined;\n if (typeof config.body === 'string') bodyStr = config.body;\n else if (config.body instanceof FormData) bodyStr = '{ /* multipart form-data */ }';\n else if (operation.requestBody) bodyStr = '{ ... }';\n return {\n method: config.method,\n url: config.url,\n headers: config.headers || {},\n body: bodyStr,\n };\n };\n\n const getBodyTextForCopy = (): string => {\n const config = collectRequestConfigImpl(tryItBody, operation);\n if (typeof config.body === 'string') return config.body;\n if (config.body instanceof FormData) {\n const lines: string[] = [];\n config.body.forEach((value, key) => {\n if (value instanceof File) {\n lines.push(`${key}: [File ${value.name}]`);\n return;\n }\n lines.push(`${key}: ${String(value)}`);\n });\n return lines.join('\\n');\n }\n return '';\n };\n\n const updateSnippetsCode = (\n editor: { setValue: (v: string, lang?: string) => void },\n snippetIndex: number,\n ) => {\n const params = getCodeParams();\n const items = generateSnippets(params);\n const sn = items[snippetIndex] || items[0];\n if (sn) editor.setValue(sn.code, sn.language);\n };\n\n const section = h('div', { className: 'block section tabs-code' });\n const sectionBody = h('div', { className: 'body' });\n const sectionTitle = h('h2', { textContent: 'Request' });\n section.append(sectionTitle, sectionBody);\n const requestControls = h('div', { className: 'controls' });\n let hasRequestControls = false;\n\n if (paramExampleSets.length > 1 && (pathParams.length > 0 || queryParams.length > 0)) {\n requestControls.append(createSelect({\n options: paramExampleSets.map((ex) => ({ value: ex.name, label: ex.summary || ex.name })),\n value: paramExampleSets[0].name,\n ariaLabel: 'Select example',\n className: 'example-select',\n onChange: (val) => {\n const chosen = paramExampleSets.find((e) => e.name === val);\n if (chosen) {\n applyParamValues(tryItBody, chosen.values);\n tryItBody.dispatchEvent(new Event('input', { bubbles: true }));\n }\n },\n }));\n hasRequestControls = true;\n }\n\n const state = store.get();\n const card = h('div', { className: 'card' });\n const header = h('div', { className: 'card-head' });\n const tabsWrap = h('div', { className: 'tabs tabs-code' });\n\n const tabButtons: HTMLElement[] = [];\n let activeTabIndex = 0;\n const showResolvedRoute = true;\n let routePreviewInput: HTMLInputElement | null = null;\n let routePreviewEl: HTMLElement | null = null;\n\n // Panel for first tab (Body/Query/Path)\n let firstTabPanel: HTMLElement | null = null;\n if (firstTabLabel) {\n const tabBtn = createTab(firstTabLabel, { active: true, context: true });\n tabButtons.push(tabBtn);\n\n firstTabPanel = h('div', { className: 'panel is-request', 'data-tab': 'first' });\n\n if (pathParams.length > 0 || queryParams.length > 0) {\n const paramsSection = h('div', { className: 'params-group' });\n paramsSection.append(h('h3', { textContent: 'Parameters' }));\n\n if (pathParams.length > 0) {\n const pathGroup = h('div', { className: 'params-group' });\n if (queryParams.length > 0) {\n pathGroup.append(h('h3', { textContent: 'Path' }));\n }\n for (const param of pathParams) {\n pathGroup.append(createParamInput(param, paramExampleSets[0]?.values[param.name]));\n }\n paramsSection.append(pathGroup);\n }\n\n if (queryParams.length > 0) {\n const queryGroup = h('div', { className: 'params-group' });\n if (pathParams.length > 0) {\n queryGroup.append(h('h3', { textContent: 'Query' }));\n }\n for (const param of queryParams) {\n queryGroup.append(createParamInput(param, paramExampleSets[0]?.values[param.name]));\n }\n paramsSection.append(queryGroup);\n }\n\n firstTabPanel.append(paramsSection);\n }\n\n if (showResolvedRoute) {\n const routePreview = h('div', { className: 'route-preview' });\n const routePreviewHeader = h('div', { className: 'field-header' });\n routePreviewHeader.append(h('h3', { textContent: 'URL' }));\n const copyRouteBtn = createCopyButton({\n ariaLabel: 'Copy URL',\n className: 'route-copy-btn',\n getText: () => routePreviewInput?.value || collectRequestConfigImpl(tryItBody, operation).url,\n });\n routePreviewInput = createInput({\n type: 'text',\n ariaLabel: 'Request URL',\n readOnly: true,\n modifiers: ['filled'],\n className: 'route-input',\n });\n const routeInputRow = h('div', { className: 'route-input-row' });\n routeInputRow.append(routePreviewInput, copyRouteBtn);\n routePreview.append(routePreviewHeader, routeInputRow);\n routePreviewEl = routePreview;\n }\n\n if (operation.requestBody) {\n const bodySection = h('div', { className: 'body-section' });\n const bodyHeader = h('div', { className: 'field-header' });\n bodyHeader.append(h('h3', { textContent: 'Body' }));\n const copyBodyBtn = createCopyButton({\n ariaLabel: 'Copy body',\n className: 'field-copy-btn',\n getText: getBodyTextForCopy,\n });\n bodyHeader.append(copyBodyBtn);\n bodySection.append(bodyHeader);\n\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const defaultCT = contentTypes[0] || 'application/json';\n const isMultipart = defaultCT.includes('multipart');\n const mediaType = operation.requestBody.content?.[defaultCT];\n\n if (isMultipart && mediaType?.schema) {\n const formWrap = h('div', { className: 'multipart', 'data-field': 'multipart' });\n const schema = mediaType.schema;\n const properties = schema.properties || {};\n const requiredFields = schema.required || [];\n for (const [fieldName, fieldSchema] of Object.entries(properties)) {\n const isBinary = fieldSchema.format === 'binary' || fieldSchema.format === 'base64'\n || (fieldSchema.type === 'string' && fieldSchema.format === 'binary');\n const isRequired = requiredFields.includes(fieldName);\n const fieldRow = h('div', { className: `params row${isRequired ? ' is-required' : ''}` });\n const fieldLabel = h('span', { className: 'label', textContent: fieldName });\n if (isRequired) fieldLabel.append(createBadge({ text: '*', kind: 'required', size: 's' }));\n if (isBinary) {\n const fileInput = h('input', {\n type: 'file',\n 'data-multipart-field': fieldName,\n 'data-multipart-type': 'file',\n }) as HTMLInputElement;\n fieldRow.append(fieldLabel, fileInput);\n } else {\n const textInput = createInput({\n placeholder: fieldSchema.description || fieldName,\n value: fieldSchema.default !== undefined ? String(fieldSchema.default) : '',\n dataAttrs: { multipartField: fieldName, multipartType: 'text' },\n });\n fieldRow.append(fieldLabel, textInput);\n }\n formWrap.append(fieldRow);\n }\n bodySection.append(formWrap);\n } else {\n const examples = mediaType ? extractExamples(mediaType) : [];\n const initialExample = examples[0];\n const initialVal = initialExample ? formatExampleValue(initialExample.value) : '';\n const editor = createEditorPanel(initialVal, 'json', {\n dataField: 'body',\n onInput: () => onConfigChange?.(collectRequestConfigImpl(tryItBody, operation)),\n });\n bodySection.append(editor.wrap);\n if (examples.length > 1) {\n const exampleSelect = createSelect({\n options: examples.map((ex) => ({ value: ex.name, label: getExampleLabel(ex) })),\n value: examples[0].name,\n ariaLabel: 'Select example',\n className: 'example-select',\n onChange: (val) => {\n const chosen = examples.find((e) => e.name === val);\n if (chosen) {\n editor.setValue(formatExampleValue(chosen.value), 'json');\n onConfigChange?.(collectRequestConfigImpl(tryItBody, operation));\n }\n },\n });\n requestControls.append(exampleSelect);\n hasRequestControls = true;\n }\n }\n bodySection.append(createErrorPlaceholder('body'));\n firstTabPanel.append(bodySection);\n }\n\n // Headers — title + buttons + list (header-row), before URL\n const headersSection = h('div', { className: 'headers-section' });\n const headersHeader = h('div', { className: 'field-header' });\n headersHeader.append(h('h3', { textContent: 'Headers' }));\n const headersContainer = h('div', { className: 'headers-list' });\n if (operation.requestBody) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const defaultCT = contentTypes[0] || 'application/json';\n headersContainer.append(createHeaderRow('Content-Type', defaultCT));\n }\n if (hasOperationAuth(operation.resolvedSecurity) && state.spec) {\n const authHeaders = resolveAuthHeaders(operation.resolvedSecurity, state.spec.securitySchemes);\n const placeholders = getAuthHeaderPlaceholder(operation.resolvedSecurity, state.spec.securitySchemes);\n const merged = { ...placeholders, ...authHeaders };\n for (const [headerName, headerValue] of Object.entries(merged)) {\n headersContainer.append(createHeaderRow(headerName, headerValue));\n }\n }\n for (const param of operation.parameters.filter((p) => p.in === 'header')) {\n headersContainer.append(createHeaderRow(param.name, String(param.example || '')));\n }\n const addHeaderBtn = createButton({\n variant: 'icon',\n icon: icons.plus,\n ariaLabel: 'Add header',\n className: 'field-copy-btn',\n onClick: () => headersContainer.append(createHeaderRow('', '')),\n });\n headersHeader.append(addHeaderBtn);\n headersSection.append(headersHeader, headersContainer);\n firstTabPanel.append(headersSection);\n }\n\n // Panels for languages (cURL, JavaScript, ...) — unified editor\n const initialParams = getCodeParams();\n const initialSnippets = generateSnippets(initialParams);\n const langEditor = createEditorPanel(\n initialSnippets[0]?.code ?? '',\n initialSnippets[0]?.language ?? 'bash',\n );\n const langPanel = h('div', { className: 'panel', 'data-tab': 'lang' });\n const codeExampleSection = h('div', { className: 'body-section' });\n const codeExampleHeader = h('div', { className: 'field-header' });\n codeExampleHeader.append(h('h3', { textContent: 'Code Example' }));\n const copyCodeBtn = createCopyButton({\n ariaLabel: 'Copy code',\n className: 'field-copy-btn',\n getText: () => langEditor.textarea.value,\n });\n codeExampleHeader.append(copyCodeBtn);\n codeExampleSection.append(codeExampleHeader, langEditor.wrap);\n langPanel.append(codeExampleSection);\n\n for (let i = 0; i < snippets.length; i++) {\n const sn = snippets[i];\n const tabBtn = createTab(sn.label, { active: !firstTabLabel && i === 0 });\n tabButtons.push(tabBtn);\n }\n\n header.append(tabsWrap);\n\n const allPanels: HTMLElement[] = firstTabLabel && firstTabPanel ? [firstTabPanel, langPanel] : [langPanel];\n\n const setPanelVisible = (panel: HTMLElement, visible: boolean): void => {\n if (!visible) {\n panel.style.display = 'none';\n return;\n }\n panel.style.display = panel.classList.contains('is-request') ? 'flex' : 'block';\n };\n\n for (let i = 0; i < tabButtons.length; i++) {\n tabsWrap.append(tabButtons[i]);\n const idx = i;\n tabButtons[i].addEventListener('click', () => {\n tabButtons.forEach((t) => t.classList.remove('is-active'));\n tabButtons[idx].classList.add('is-active');\n activeTabIndex = idx;\n if (firstTabLabel) {\n if (firstTabPanel) setPanelVisible(firstTabPanel, idx === 0);\n setPanelVisible(langPanel, idx !== 0);\n if (idx > 0) updateSnippetsCode(langEditor, idx - 1);\n } else {\n setPanelVisible(langPanel, true);\n updateSnippetsCode(langEditor, idx);\n }\n });\n }\n\n const cardBody = h('div', { className: 'card-content flush' });\n const panelsContainer = h('div', { className: 'panels' });\n if (firstTabLabel) {\n if (firstTabPanel) setPanelVisible(firstTabPanel, true);\n setPanelVisible(langPanel, false);\n } else {\n setPanelVisible(langPanel, true);\n }\n panelsContainer.append(...allPanels);\n cardBody.append(panelsContainer);\n\n if (options?.onSendRequest) {\n const sendBtn = createButton({\n variant: 'primary',\n icon: icons.send,\n label: 'Send Request',\n className: 'send-btn',\n });\n sendBtn.addEventListener('click', () => options.onSendRequest!(sendBtn));\n if (firstTabLabel) {\n if (routePreviewEl) {\n firstTabPanel?.append(routePreviewEl);\n }\n const sendBtnWrap = h('div', { className: 'send-inline' });\n sendBtnWrap.append(sendBtn);\n firstTabPanel?.append(sendBtnWrap);\n } else {\n const sendBtnWrap = h('div', { className: 'send-bottom' });\n sendBtnWrap.append(sendBtn);\n cardBody.append(sendBtnWrap);\n }\n }\n if (!options?.onSendRequest && firstTabLabel && routePreviewEl) {\n firstTabPanel?.append(routePreviewEl);\n }\n\n if (hasRequestControls) sectionBody.append(requestControls);\n card.append(header, cardBody);\n sectionBody.append(card);\n\n const notify = () => {\n if (routePreviewInput) {\n routePreviewInput.value = collectRequestConfigImpl(tryItBody, operation).url;\n }\n onConfigChange?.(collectRequestConfigImpl(tryItBody, operation));\n if (activeTabIndex > 0 || !firstTabLabel) {\n updateSnippetsCode(langEditor, firstTabLabel ? activeTabIndex - 1 : activeTabIndex);\n }\n };\n tryItBody.addEventListener('input', notify);\n tryItBody.addEventListener('change', notify);\n notify();\n\n requestAnimationFrame(() => {\n const ta = tryItBody.querySelector('textarea[data-field=\"body\"]') as HTMLTextAreaElement | null;\n if (ta) autoResizeTextarea(ta);\n });\n\n return section;\n}\n\nfunction getParamExampleValue(param: SpecParameter, fromSet?: string): string {\n if (fromSet !== undefined) return fromSet;\n if (param.example !== undefined && param.example !== null) return String(param.example);\n if (param.schema?.example !== undefined && param.schema.example !== null) return String(param.schema.example);\n if (param.schema?.default !== undefined && param.schema.default !== null) return String(param.schema.default);\n if (param.schema?.enum && param.schema.enum.length > 0) return String(param.schema.enum[0]);\n if (param.schema?.type === 'integer' || param.schema?.type === 'number') return '0';\n if (param.schema?.type === 'boolean') return 'true';\n return param.in === 'path' ? 'id' : 'value';\n}\n\nfunction applyParamValues(container: HTMLElement, values: Record<string, string>): void {\n const inputs = container.querySelectorAll('[data-param-name]') as NodeListOf<HTMLInputElement>;\n inputs.forEach((input) => {\n const name = input.getAttribute('data-param-name');\n if (name && values[name] !== undefined) input.value = values[name];\n });\n}\n\nfunction createParamInput(param: SpecParameter, initialValue?: string): HTMLElement {\n const wrapper = h('div', { className: `params row${param.required ? ' is-required' : ''}` });\n\n const label = h('span', {\n className: 'label',\n textContent: param.name,\n });\n\n if (param.required) {\n label.append(createBadge({ text: '*', kind: 'required', size: 's' }));\n }\n\n const schema = param.schema;\n let inputEl: HTMLElement;\n\n // Enum → select\n if (schema?.enum && schema.enum.length > 0) {\n const enumOptions = param.required\n ? schema.enum.map((val) => ({ value: String(val), label: String(val) }))\n : [{ value: '', label: '— select —' }, ...schema.enum.map((val) => ({ value: String(val), label: String(val) }))];\n\n const select = createSelect({\n options: enumOptions,\n value: getParamExampleValue(param, initialValue),\n dataAttrs: { paramName: param.name, paramIn: param.in },\n });\n inputEl = select;\n } else {\n // Determine input type\n const inputType = (schema?.type === 'integer' || schema?.type === 'number') ? 'number' : 'text';\n const input = createInput({\n type: inputType,\n placeholder: param.description || param.name,\n value: getParamExampleValue(param, initialValue),\n dataAttrs: { paramName: param.name, paramIn: param.in },\n });\n\n if (schema?.type === 'integer') input.setAttribute('step', '1');\n if (schema?.minimum !== undefined) input.setAttribute('min', String(schema.minimum));\n if (schema?.maximum !== undefined) input.setAttribute('max', String(schema.maximum));\n\n inputEl = input;\n }\n\n // Validation error placeholder\n const errorEl = createErrorPlaceholder(param.name);\n\n wrapper.append(label, inputEl, errorEl);\n return wrapper;\n}\n\nexport function createHeaderRow(name: string, value: string): HTMLElement {\n const row = h('div', { className: 'header-row' });\n const nameInput = createInput({\n placeholder: 'Header name',\n value: name,\n dataAttrs: { headerName: 'true' },\n });\n const valueInput = createInput({\n placeholder: 'Value',\n value,\n dataAttrs: { headerValue: 'true' },\n });\n\n const removeBtn = createButton({\n variant: 'icon',\n icon: icons.close,\n ariaLabel: 'Remove header',\n className: 'header-remove-btn',\n onClick: () => row.remove(),\n });\n\n row.append(nameInput, valueInput, removeBtn);\n return row;\n}\n\nfunction collectRequestConfigImpl(container: HTMLElement, operation: SpecOperation): TryItConfig {\n const state = store.get();\n const baseUrl = getBaseUrl(state);\n\n // Collect path params\n const pathParamInputs = container.querySelectorAll('[data-param-in=\"path\"]') as NodeListOf<HTMLInputElement>;\n const pathParams: Record<string, string> = {};\n pathParamInputs.forEach((input) => {\n pathParams[input.getAttribute('data-param-name')!] = input.value;\n });\n\n // Collect query params\n const queryParamInputs = container.querySelectorAll('[data-param-in=\"query\"]') as NodeListOf<HTMLInputElement>;\n const queryParams: Record<string, string> = {};\n queryParamInputs.forEach((input) => {\n const name = input.getAttribute('data-param-name')!;\n if (input.value) queryParams[name] = input.value;\n });\n\n if (state.spec && hasOperationAuth(operation.resolvedSecurity)) {\n const authQuery = resolveAuthQuery(operation.resolvedSecurity, state.spec.securitySchemes);\n for (const [name, value] of Object.entries(authQuery)) {\n if (!(name in queryParams)) queryParams[name] = value;\n }\n }\n\n // Collect headers\n const headerRows = container.querySelectorAll('.header-row');\n const headers: Record<string, string> = {};\n headerRows.forEach((row) => {\n const nameInput = row.querySelector('[data-header-name]') as HTMLInputElement;\n const valueInput = row.querySelector('[data-header-value]') as HTMLInputElement;\n if (nameInput?.value && valueInput?.value) {\n headers[nameInput.value] = valueInput.value;\n }\n });\n\n if (state.spec && hasOperationAuth(operation.resolvedSecurity)) {\n const authCookies = resolveAuthCookies(operation.resolvedSecurity, state.spec.securitySchemes);\n const cookiePairs = Object.entries(authCookies).map(([name, value]) => `${name}=${value}`);\n if (cookiePairs.length > 0) {\n const existingCookie = headers.Cookie || headers.cookie || '';\n headers.Cookie = existingCookie ? `${existingCookie}; ${cookiePairs.join('; ')}` : cookiePairs.join('; ');\n delete headers.cookie;\n }\n }\n\n // Collect body — multipart or text\n const multipartWrap = container.querySelector('[data-field=\"multipart\"]');\n let requestBody: string | FormData | undefined;\n\n if (multipartWrap) {\n const formData = new FormData();\n const fields = multipartWrap.querySelectorAll('[data-multipart-field]') as NodeListOf<HTMLInputElement>;\n fields.forEach((field) => {\n const fieldName = field.getAttribute('data-multipart-field')!;\n const fieldType = field.getAttribute('data-multipart-type');\n if (fieldType === 'file' && field.files && field.files.length > 0) {\n formData.append(fieldName, field.files[0]);\n } else if (fieldType === 'text' && field.value) {\n formData.append(fieldName, field.value);\n }\n });\n requestBody = formData;\n // Remove Content-Type header — browser sets it with boundary\n delete headers['Content-Type'];\n } else {\n const bodyTextarea = container.querySelector('[data-field=\"body\"]') as HTMLTextAreaElement;\n requestBody = bodyTextarea?.value || undefined;\n }\n\n const url = buildRequestUrl(baseUrl, operation.path, pathParams, queryParams);\n\n return { method: operation.method, url, headers, body: requestBody };\n}\n\nfunction renderResponse(container: HTMLElement, response: TryItResponse): void {\n clear(container);\n\n const el = h('div', { className: 'card' });\n\n // One row in header: Body|Headers | meta | response code | Copy\n const header = h('div', { className: 'card-head response-header' });\n const bodyTab = createTab('Body', { active: true });\n const headersTab = createTab(`Headers (${Object.keys(response.headers).length})`);\n const tabs = h('div', { className: 'tabs tabs-code' });\n tabs.append(bodyTab, headersTab);\n\n const metaEl = h('div', {\n className: 'meta',\n innerHTML: `<span>${formatDuration(response.duration)}</span><span>${formatBytes(response.size)}</span>`,\n });\n const codeBadge = createBadge({\n text: String(response.status),\n kind: 'status',\n statusCode: String(response.status),\n size: 'm',\n });\n\n const copyBtn = createCopyButton({\n ariaLabel: 'Copy response',\n getText: () => response.body,\n onCopied: () => showCopyToast('Response copied'),\n });\n\n header.append(tabs, metaEl, codeBadge, copyBtn);\n el.append(header);\n\n // Body content — single mode, no Pretty/Raw\n const bodyWrapper = h('div', { className: 'card-content flush' });\n const bodyContent = h('div', { className: 'response-pane' });\n const bodyInner = h('div', { className: 'pane-inner' });\n const pre = h('pre', { className: 'code-display' });\n const codeEl = h('code', { className: 'hljs' });\n const displayText = formatResponseBody(response.body, true);\n codeEl.innerHTML = highlightCode(displayText, looksLikeJson(displayText) ? 'json' : '');\n pre.append(codeEl);\n bodyInner.append(pre);\n bodyContent.append(bodyInner);\n\n const headersContent = h('div', { className: 'response-pane', style: 'display:none' });\n const headersInner = h('div', { className: 'pane-inner' });\n const headersTextarea = h('textarea', {\n readonly: true,\n wrap: 'off',\n spellcheck: 'false',\n }) as HTMLTextAreaElement;\n headersTextarea.value = Object.entries(response.headers).map(([k, v]) => `${k}: ${v}`).join('\\n');\n autoResizeTextarea(headersTextarea);\n headersInner.append(headersTextarea);\n headersContent.append(headersInner);\n\n bodyWrapper.append(bodyContent, headersContent);\n el.append(bodyWrapper);\n\n bodyTab.addEventListener('click', () => {\n bodyTab.classList.add('is-active');\n headersTab.classList.remove('is-active');\n bodyContent.style.display = 'block';\n headersContent.style.display = 'none';\n });\n\n headersTab.addEventListener('click', () => {\n headersTab.classList.add('is-active');\n bodyTab.classList.remove('is-active');\n bodyContent.style.display = 'none';\n headersContent.style.display = 'block';\n requestAnimationFrame(() => autoResizeTextarea(headersTextarea));\n });\n\n container.append(el);\n}\n\nfunction formatResponseBody(body: string, pretty: boolean): string {\n if (!pretty) return body;\n try {\n return JSON.stringify(JSON.parse(body), null, 2);\n } catch {\n return body;\n }\n}\n\nfunction showCopyToast(message: string): void {\n const existing = document.querySelector('.copy-toast');\n if (existing) existing.remove();\n\n const toast = h('div', { className: 'copy-toast', textContent: message });\n document.body.append(toast);\n setTimeout(() => toast.remove(), 2000);\n}\n","import { h } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { buildPath, navigate } from '../../core/router';\nimport { store } from '../../core/state';\nimport { createBadge } from '../ui';\nimport type { RouteInfo, SpecOperation, SpecWebhook } from '../../core/types';\n\ntype LinearRoute =\n | {\n kind: 'endpoint';\n route: RouteInfo;\n operation: SpecOperation;\n title: string;\n category: string;\n }\n | {\n kind: 'webhook';\n route: RouteInfo;\n webhook: SpecWebhook;\n title: string;\n category: string;\n };\n\nexport function renderRouteNavigation(currentRoute: RouteInfo): HTMLElement | null {\n const { prev, next } = getAdjacentRoutes(currentRoute);\n if (!prev && !next) return null;\n\n const wrapper = h('div', {\n className: `route-nav${!prev || !next ? ' is-single' : ''}`,\n });\n\n if (prev) {\n wrapper.append(createRouteCard(prev, 'previous'));\n }\n\n if (next) {\n wrapper.append(createRouteCard(next, 'next'));\n }\n\n return wrapper;\n}\n\nfunction createRouteCard(\n entry: LinearRoute,\n direction: 'previous' | 'next',\n): HTMLAnchorElement {\n const routePath = buildPath(entry.route);\n const card = h('a', {\n className: `card interactive route-card ${direction === 'previous' ? 'is-prev' : 'is-next'}`,\n href: routePath,\n }) as HTMLAnchorElement;\n\n const meta = h('div', { className: 'route-meta' });\n if (entry.kind === 'endpoint') {\n meta.append(createBadge({\n text: entry.operation.method.toUpperCase(),\n kind: 'method',\n method: entry.operation.method,\n mono: true,\n }));\n meta.append(h('span', { className: 'route-path', textContent: entry.operation.path }));\n } else {\n meta.append(createBadge({\n text: 'WEBHOOK',\n kind: 'webhook',\n size: 's',\n mono: true,\n }));\n meta.append(createBadge({\n text: entry.webhook.method.toUpperCase(),\n kind: 'method',\n method: entry.webhook.method,\n mono: true,\n }));\n }\n\n const side = h('span', { className: 'route-side', 'aria-hidden': 'true' });\n side.innerHTML = direction === 'previous' ? icons.chevronLeft : icons.chevronRight;\n\n const main = h('div', { className: 'route-main' });\n main.append(\n h('span', { className: 'route-category', textContent: entry.category }),\n h('span', { className: 'route-title', textContent: entry.title }),\n meta,\n );\n\n if (direction === 'previous') {\n card.append(side, main);\n } else {\n card.append(main, side);\n }\n\n card.addEventListener('click', (event: Event) => {\n event.preventDefault();\n navigate(routePath);\n });\n\n return card;\n}\n\nfunction getAdjacentRoutes(currentRoute: RouteInfo): { prev: LinearRoute | null; next: LinearRoute | null } {\n const spec = store.get().spec;\n if (!spec) return { prev: null, next: null };\n\n const linear = buildLinearRoutes();\n if (linear.length === 0) return { prev: null, next: null };\n\n const index = findCurrentIndex(linear, currentRoute);\n if (index < 0) return { prev: null, next: null };\n\n return {\n prev: index > 0 ? linear[index - 1] : null,\n next: index < linear.length - 1 ? linear[index + 1] : null,\n };\n}\n\nfunction buildLinearRoutes(): LinearRoute[] {\n const spec = store.get().spec;\n if (!spec) return [];\n\n const result: LinearRoute[] = [];\n const seenEndpoints = new Set<string>();\n\n for (const tag of spec.tags) {\n for (const operation of tag.operations) {\n const endpointKey = `${operation.method.toLowerCase()} ${operation.path}`;\n if (seenEndpoints.has(endpointKey)) continue;\n seenEndpoints.add(endpointKey);\n result.push({\n kind: 'endpoint',\n route: {\n type: 'endpoint',\n tag: tag.name,\n method: operation.method,\n path: operation.path,\n operationId: operation.operationId,\n },\n operation,\n title: operation.summary || operation.path,\n category: tag.name,\n });\n }\n }\n\n for (const webhook of spec.webhooks || []) {\n result.push({\n kind: 'webhook',\n route: { type: 'webhook', webhookName: webhook.name },\n webhook,\n title: webhook.summary || webhook.name,\n category: 'Webhooks',\n });\n }\n\n return result;\n}\n\nfunction findCurrentIndex(list: LinearRoute[], currentRoute: RouteInfo): number {\n if (currentRoute.type === 'endpoint') {\n return list.findIndex(\n (entry) => entry.kind === 'endpoint'\n && entry.route.method === currentRoute.method\n && entry.route.path === currentRoute.path,\n );\n }\n\n if (currentRoute.type === 'webhook') {\n return list.findIndex(\n (entry) => entry.kind === 'webhook' && entry.route.webhookName === currentRoute.webhookName,\n );\n }\n\n return -1;\n}\n","import { h, clear } from '../../lib/dom';\nimport { icons } from '../../lib/icons';\nimport { store } from '../../core/state';\nimport { navigate, buildPath } from '../../core/router';\nimport { renderSchemaViewer, renderSchemaBody, renderParametersCard } from '../shared/schema-viewer';\nimport { renderTryIt, type InitialResponseExample } from '../shared/try-it';\nimport { extractExamples } from '../shared/example-picker';\nimport { resolveAuthHeaders, getAuthHeaderPlaceholder } from '../modals/auth-modal';\nimport { getDisplayBaseUrl, getNormalizedBaseUrl } from '../../services/env';\nimport { formatOperationAuthBadge, formatOperationAuthTitle, hasOperationAuth } from '../../core/security';\nimport { createCopyButton } from '../shared/copy-button';\nimport { createBadge, createButton, createSection, createBreadcrumb, createSectionTitleWrap, createCard, createCardHeader, createCardBody, createCardHeaderRow, createResponseCodeTab, createLockIcon, setResponseCodeTabActive } from '../ui';\nimport { renderRouteNavigation } from '../nav/route-nav';\nimport { getSchemaTypeLabel } from '../../helpers/schema-utils';\nimport type { SpecOperation, SpecResponse, SpecResponseHeader, SpecMediaType, SchemaObject, PortalState } from '../../core/types';\n\n/** Render an endpoint detail page. Main block divided into 2 parts: doc | Try It + Code Examples */\nexport async function renderEndpoint(pageSlot: HTMLElement, asideSlot: HTMLElement, operation: SpecOperation): Promise<void> {\n clear(pageSlot);\n clear(asideSlot);\n\n const asidePane = asideSlot.parentElement as HTMLElement | null;\n if (asidePane) {\n asidePane.setAttribute('aria-label', 'Try It');\n asidePane.classList.add('try-it');\n }\n\n const state = store.get();\n const baseUrlNorm = getNormalizedBaseUrl(state);\n const baseUrlDisplay = getDisplayBaseUrl(state);\n\n // Breadcrumb — Base URL / path with {variable} highlighting, method, copy\n const fullUrl = baseUrlNorm + (operation.path.startsWith('/') ? '' : '/') + operation.path;\n\n const breadcrumbItems: { label: string; href?: string; className?: string; onClick?: (e: Event) => void }[] = [];\n const methodBadge = createBadge({\n text: operation.method.toUpperCase(),\n kind: 'method',\n method: operation.method,\n mono: true,\n size: 'm',\n });\n breadcrumbItems.push({\n label: baseUrlDisplay || state.spec?.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n });\n\n const tagNames = new Set((state.spec?.tags || []).map((t) => t.name.toLowerCase()));\n const pathSegments = (operation.path || '/').split('/').filter(Boolean);\n for (const seg of pathSegments) {\n const isParam = seg.startsWith('{') && seg.endsWith('}');\n const matchesTag = !isParam && tagNames.has(seg.toLowerCase());\n const tagMatch = state.spec?.tags.find((t) => t.name.toLowerCase() === seg.toLowerCase());\n if (matchesTag && tagMatch) {\n breadcrumbItems.push({\n label: seg,\n href: buildPath({ type: 'tag', tag: tagMatch.name }),\n className: 'breadcrumb-item breadcrumb-segment',\n onClick: (e: Event) => {\n e.preventDefault();\n navigate(buildPath({ type: 'tag', tag: tagMatch.name }));\n },\n });\n } else {\n breadcrumbItems.push({\n label: seg,\n className: isParam ? 'breadcrumb-param' : 'breadcrumb-segment',\n });\n }\n }\n const copyBtn = createCopyButton({\n ariaLabel: 'Copy URL',\n copiedAriaLabel: 'Copied',\n className: 'breadcrumb-copy',\n getText: () => `${operation.method.toUpperCase()} ${fullUrl}`,\n });\n const breadcrumb = createBreadcrumb(breadcrumbItems, {\n leading: [methodBadge],\n trailing: [copyBtn],\n });\n\n // Header — title\n const header = h('div', { className: 'block header' });\n header.append(h('h1', {\n textContent: operation.summary || `${operation.method.toUpperCase()} ${operation.path}`,\n }));\n\n // Deprecated badge\n if (operation.deprecated) {\n const warnIcon = h('span', { className: 'icon-muted' });\n warnIcon.innerHTML = icons.warning;\n header.append(h('div', {}, h('span', { className: 'endpoint-meta deprecated' }, warnIcon, 'Deprecated')));\n }\n if (hasOperationAuth(operation.resolvedSecurity)) {\n const hasConfiguredAuth = isOperationAuthConfigured(state, operation);\n const authBadge = formatOperationAuthBadge(operation.resolvedSecurity) || 'Auth required';\n const lock = createLockIcon({\n configured: hasConfiguredAuth,\n variant: 'endpoint',\n title: formatOperationAuthTitle(operation.resolvedSecurity),\n });\n header.append(h('span', {\n className: `endpoint-meta auth${hasConfiguredAuth ? ' is-active' : ''}`,\n title: formatOperationAuthTitle(operation.resolvedSecurity),\n 'aria-label': formatOperationAuthTitle(operation.resolvedSecurity),\n }, lock, authBadge));\n }\n\n // Breadcrumb — below title, before description\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n\n // Description — plain text\n if (operation.description) {\n header.append(h('p', { textContent: operation.description }));\n }\n\n pageSlot.append(header);\n\n // Headers — before Request\n const headersSection = renderHeadersSection(operation);\n if (headersSection) pageSlot.append(headersSection);\n\n // Request\n const visibleParams = operation.parameters.filter((p) => p.in !== 'cookie');\n const requestSection = createSection({ title: 'Request' });\n\n if (visibleParams.length > 0) {\n requestSection.append(renderParametersSection(visibleParams));\n }\n\n if (operation.requestBody) {\n requestSection.append(renderRequestBodySection(operation));\n }\n\n if (visibleParams.length === 0 && !operation.requestBody) {\n const emptyHint = h('div', { className: 'params empty', textContent: 'No parameters or request body required' });\n requestSection.append(emptyHint);\n }\n\n pageSlot.append(requestSection);\n\n // Responses\n let responsesRendered = false;\n if (Object.keys(operation.responses).length > 0) {\n pageSlot.append(renderResponsesSection(operation));\n responsesRendered = true;\n }\n\n const routeNav = renderRouteNavigation({\n type: 'endpoint',\n method: operation.method,\n path: operation.path,\n });\n const appendRouteNav = () => {\n if (routeNav) pageSlot.append(h('div', { className: 'block section' }, routeNav));\n };\n if (responsesRendered) appendRouteNav();\n\n // Callbacks\n if (operation.callbacks && operation.callbacks.length > 0) {\n pageSlot.append(renderCallbacksSection(operation));\n }\n\n if (!responsesRendered) appendRouteNav();\n\n const initialResponse = getFirstResponseExample(operation);\n renderTryIt(operation, asideSlot, initialResponse);\n}\n\nfunction renderHeadersSection(operation: SpecOperation): HTMLElement | null {\n const rows: {\n name: string;\n value: string;\n description?: string;\n required?: boolean;\n }[] = [];\n\n if (operation.requestBody) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n rows.push({\n name: 'Content-Type',\n value: contentTypes[0] || 'application/json',\n description: 'Media type for request body payload',\n required: Boolean(operation.requestBody?.required),\n });\n }\n if (hasOperationAuth(operation.resolvedSecurity)) {\n const spec = store.get().spec;\n const authHeaders = spec ? resolveAuthHeaders(operation.resolvedSecurity, spec.securitySchemes) : {};\n const placeholders = spec ? getAuthHeaderPlaceholder(operation.resolvedSecurity, spec.securitySchemes) : {};\n const merged = { ...placeholders, ...authHeaders };\n for (const [hName, hValue] of Object.entries(merged)) {\n rows.push({\n name: hName,\n value: hValue,\n description: 'Authentication header value',\n required: true,\n });\n }\n }\n for (const p of operation.parameters.filter((p) => p.in === 'header')) {\n rows.push({\n name: p.name,\n value: String(p.schema?.default ?? p.example ?? ''),\n description: p.description,\n required: p.required,\n });\n }\n\n if (rows.length === 0) return null;\n\n const rowsEl = rows.map((r) => {\n const row = h('div', { className: 'schema-row role-flat role-headers' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: r.name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n if (r.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (r.description) {\n descCol.append(h('p', { textContent: r.description }));\n }\n const valueWrap = h('div', { className: 'schema-enum-values' });\n valueWrap.append(createBadge({\n text: r.value || '—',\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n descCol.append(valueWrap);\n if (descCol.children.length > 0) {\n row.append(descCol);\n }\n return row;\n });\n\n const card = createCard();\n const body = createCardBody('no-padding');\n const paramsWrap = h('div', { className: 'params' });\n const paramsBody = h('div', { className: 'body role-headers' });\n paramsBody.append(...rowsEl);\n paramsWrap.append(paramsBody);\n body.append(paramsWrap);\n card.append(body);\n\n return createSection(\n { title: 'Headers' },\n card,\n );\n}\n\nfunction renderParametersSection(params: SpecOperation['parameters']): HTMLElement {\n const pathCount = params.filter((p) => p.in === 'path').length;\n const queryCount = params.filter((p) => p.in === 'query').length;\n const headerTitle =\n pathCount > 0 && queryCount > 0 ? 'Parameters' : pathCount > 0 ? 'Path' : 'Query';\n return renderParametersCard(params, { headerTitle, withEnumAndDefault: true });\n}\n\nfunction renderRequestBodySection(operation: SpecOperation): HTMLElement {\n const wrapper = h('div', { className: 'request-body-wrap' });\n\n if (operation.requestBody?.description) {\n wrapper.append(h('p', { textContent: operation.requestBody.description }));\n }\n\n const content = operation.requestBody?.content || {};\n for (const [contentType, mediaType] of Object.entries(content)) {\n if (mediaType.schema) {\n const headerContent = createCardHeaderRow({ title: 'Body' });\n headerContent.append(createBadge({\n text: contentType,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n wrapper.append(renderSchemaViewer(mediaType.schema, headerContent));\n }\n }\n\n return wrapper;\n}\n\nfunction renderResponseHeadersBlock(headers: Record<string, SpecResponseHeader>): HTMLElement | null {\n const entries = Object.entries(headers);\n if (entries.length === 0) return null;\n\n const rowsEl = entries.map(([name, hdr]) => {\n const typeLabel = hdr.schema ? getSchemaTypeLabel(hdr.schema) : 'string';\n const value = hdr.example !== undefined\n ? String(hdr.example)\n : (hdr.schema?.example !== undefined ? String(hdr.schema.example) : '—');\n\n const row = h('div', { className: 'schema-row role-flat role-headers' });\n const mainRow = h('div', { className: 'schema-main-row' });\n\n const nameWrap = h('div', { className: 'schema-name-wrapper' });\n nameWrap.append(\n h('span', { className: 'schema-spacer' }),\n h('span', { textContent: name }),\n );\n\n const metaWrap = h('div', { className: 'schema-meta-wrapper' });\n metaWrap.append(createBadge({ text: typeLabel, kind: 'chip', size: 's', mono: true }));\n if (hdr.required) {\n metaWrap.append(createBadge({ text: 'required', kind: 'required', size: 'm' }));\n }\n\n mainRow.append(nameWrap, metaWrap);\n row.append(mainRow);\n\n const descCol = h('div', { className: 'schema-desc-col is-root' });\n if (hdr.description) {\n descCol.append(h('p', { textContent: hdr.description }));\n }\n const valueWrap = h('div', { className: 'schema-enum-values' });\n valueWrap.append(createBadge({\n text: value,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n descCol.append(valueWrap);\n if (descCol.children.length > 0) {\n row.append(descCol);\n }\n return row;\n });\n\n const block = h('div', { className: 'params block' });\n const title = h('div', { className: 'title', textContent: 'Headers' });\n const listBody = h('div', { className: 'body role-headers' });\n listBody.append(...rowsEl);\n block.append(title, listBody);\n return block;\n}\n\nfunction renderResponsesSection(operation: SpecOperation): HTMLElement {\n const section = createSection({\n titleEl: createSectionTitleWrap('Responses'),\n });\n\n const responses = Object.entries(operation.responses);\n if (responses.length === 0) return section;\n\n // Single card like Request: header (codes + application/json + collapse) + content\n const card = createCard();\n const headerRow = h('div', { className: 'card-row responses-header-row' });\n\n // Left: response code selector\n const codesWrap = h('div', { className: 'tabs-code codes' });\n let activeCode = responses[0][0];\n let activeContentType = 'application/json';\n const tabData = new Map<string, {\n body: HTMLElement;\n headers: HTMLElement | null;\n contentType: string;\n schemaType: string;\n toggleCollapse: () => void;\n isExpanded: () => boolean;\n hasExpandable: boolean;\n }>();\n\n for (const [code, response] of responses) {\n const tabBtn = createResponseCodeTab(code, code === activeCode);\n\n const firstContentType = response.content ? Object.keys(response.content)[0] || 'application/json' : 'application/json';\n const mediaType = response.content?.[firstContentType];\n const schemaType = mediaType?.schema ? getSchemaTypeLabel(mediaType.schema) : 'plain';\n\n let bodyEl: HTMLElement;\n let toggleCollapse: () => void;\n let isExpanded: () => boolean;\n let hasExpandable: boolean;\n\n if (mediaType?.schema) {\n const result = renderSchemaBody(mediaType.schema);\n bodyEl = result.body;\n toggleCollapse = result.toggleCollapse;\n isExpanded = result.isExpanded;\n hasExpandable = result.hasExpandable;\n } else {\n const schemaContainer = h('div', { className: 'schema' });\n const schemaBody = h('div', { className: 'body' });\n schemaBody.append(h('p', { textContent: response.description || 'No schema' }));\n schemaContainer.append(schemaBody);\n bodyEl = schemaContainer;\n toggleCollapse = () => {};\n isExpanded = () => false;\n hasExpandable = false;\n }\n\n const headersEl = response.headers ? renderResponseHeadersBlock(response.headers) : null;\n\n tabData.set(code, {\n body: bodyEl,\n headers: headersEl,\n contentType: firstContentType,\n schemaType,\n toggleCollapse,\n isExpanded,\n hasExpandable,\n });\n codesWrap.append(tabBtn);\n\n tabBtn.addEventListener('click', () => {\n codesWrap.querySelectorAll('[data-badge-group=\"response-code\"]').forEach((t) => setResponseCodeTabActive(t as HTMLElement, false));\n setResponseCodeTabActive(tabBtn, true);\n activeCode = code;\n const data = tabData.get(code)!;\n activeContentType = data.contentType;\n contentTypeSpan.textContent = data.contentType;\n schemaTypeBadge.textContent = data.schemaType;\n collapseBtn.style.display = data.hasExpandable ? 'inline-flex' : 'none';\n collapseBtn.classList.toggle('is-expanded', data.hasExpandable && data.isExpanded());\n collapseBtn.title = data.hasExpandable && data.isExpanded() ? 'Collapse all' : 'Expand all';\n headersContainer.innerHTML = '';\n if (data.headers) {\n headersContainer.append(data.headers);\n headersContainer.hidden = false;\n } else {\n headersContainer.hidden = true;\n }\n bodyContainer.innerHTML = '';\n bodyContainer.append(data.body);\n });\n }\n\n headerRow.append(codesWrap);\n\n // Right: application/json + collapse\n const contentTypeSpan = createBadge({\n text: activeContentType,\n kind: 'chip',\n size: 's',\n mono: true,\n });\n const schemaTypeBadge = createBadge({\n text: tabData.get(activeCode)?.schemaType || 'plain',\n kind: 'chip',\n size: 's',\n mono: true,\n });\n const collapseBtn = h('button', {\n className: 'schema-collapse-btn is-expanded',\n type: 'button',\n title: 'Collapse all',\n });\n collapseBtn.innerHTML = icons.chevronDown;\n collapseBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n const data = tabData.get(activeCode);\n if (data?.hasExpandable) {\n data.toggleCollapse();\n collapseBtn.classList.toggle('is-expanded', data.isExpanded());\n collapseBtn.title = data.isExpanded() ? 'Collapse all' : 'Expand all';\n }\n });\n\n headerRow.append(contentTypeSpan, schemaTypeBadge, collapseBtn);\n\n card.append(createCardHeader(headerRow));\n\n const bodyWrapper = createCardBody('no-padding');\n const headersContainer = h('div', { className: 'params wrap' });\n const bodyContainer = h('div');\n const initialData = tabData.get(activeCode);\n if (initialData) {\n if (initialData.headers) {\n headersContainer.append(initialData.headers);\n headersContainer.hidden = false;\n } else {\n headersContainer.hidden = true;\n }\n bodyContainer.append(initialData.body);\n collapseBtn.style.display = initialData.hasExpandable ? 'inline-flex' : 'none';\n collapseBtn.classList.toggle('is-expanded', initialData.hasExpandable && initialData.isExpanded());\n collapseBtn.title = initialData.hasExpandable && initialData.isExpanded() ? 'Collapse all' : 'Expand all';\n }\n\n bodyWrapper.append(headersContainer, bodyContainer);\n card.append(bodyWrapper);\n section.append(card);\n\n return section;\n}\n\nfunction renderCallbacksSection(operation: SpecOperation): HTMLElement {\n const section = createSection({\n titleEl: createSectionTitleWrap('Callbacks', createBadge({ text: String(operation.callbacks!.length), kind: 'chip', size: 'm' })),\n });\n\n for (const callback of operation.callbacks!) {\n const callbackBlock = h('div', { className: 'callback-block' });\n callbackBlock.append(h('div', { className: 'callback-name', textContent: callback.name }));\n\n for (const cbOp of callback.operations) {\n const opBlock = h('div', { className: 'callback-operation' });\n\n const opHeader = h('div', { className: 'callback-op-header' });\n opHeader.append(\n createBadge({\n text: cbOp.method.toUpperCase(),\n kind: 'method',\n method: cbOp.method,\n mono: true,\n }),\n h('span', { className: 'callback-op-path', textContent: cbOp.path }),\n );\n opBlock.append(opHeader);\n\n if (cbOp.summary) {\n opBlock.append(h('div', { className: 'callback-op-summary', textContent: cbOp.summary }));\n }\n if (cbOp.description) {\n opBlock.append(h('p', { textContent: cbOp.description }));\n }\n\n // Callback request body\n if (cbOp.requestBody) {\n const bodyContent = cbOp.requestBody.content || {};\n for (const [ct, mediaType] of Object.entries(bodyContent)) {\n if (mediaType.schema) {\n opBlock.append(renderSchemaViewer(mediaType.schema, `${ct} — Request Body`));\n }\n }\n }\n\n // Callback responses\n if (Object.keys(cbOp.responses).length > 0) {\n for (const [code, resp] of Object.entries(cbOp.responses)) {\n const respRow = h('div', { className: 'callback-response-row' });\n respRow.append(createBadge({\n text: code,\n kind: 'status',\n statusCode: code,\n mono: true,\n }));\n if (resp.description) {\n respRow.append(h('p', { textContent: resp.description }));\n }\n if (resp.content) {\n for (const [ct, mediaType] of Object.entries(resp.content)) {\n if (mediaType.schema) {\n respRow.append(renderSchemaViewer(mediaType.schema, `${ct}`));\n }\n }\n }\n opBlock.append(respRow);\n }\n }\n\n callbackBlock.append(opBlock);\n }\n\n section.append(callbackBlock);\n }\n\n return section;\n}\n\nfunction getFirstResponseExample(operation: SpecOperation): InitialResponseExample | null {\n const codes = Object.keys(operation.responses).sort((a, b) => {\n const a2 = a.startsWith('2') ? 0 : a.startsWith('4') ? 1 : 2;\n const b2 = b.startsWith('2') ? 0 : b.startsWith('4') ? 1 : 2;\n return a2 - b2 || a.localeCompare(b);\n });\n for (const code of codes) {\n const resp = operation.responses[code];\n if (!resp?.content) continue;\n const ct = Object.keys(resp.content)[0] || 'application/json';\n const mediaType = resp.content[ct];\n const examples = mediaType ? extractExamples(mediaType) : [];\n const ex = examples[0];\n if (ex && ex.value !== undefined) {\n const body = typeof ex.value === 'string' ? ex.value : JSON.stringify(ex.value, null, 2);\n const statusText = resp.description || (code.startsWith('2') ? 'OK' : code.startsWith('4') ? 'Not Found' : 'Error');\n return { statusCode: code, statusText, body };\n }\n if (mediaType?.example !== undefined) {\n const body = typeof mediaType.example === 'string' ? mediaType.example : JSON.stringify(mediaType.example, null, 2);\n return { statusCode: code, statusText: resp.description || 'OK', body };\n }\n }\n return null;\n}\n\nfunction isOperationAuthConfigured(state: PortalState, operation: SpecOperation): boolean {\n const requirements = operation.resolvedSecurity?.requirements || [];\n if (!hasOperationAuth(operation.resolvedSecurity)) return false;\n\n const token = (state.auth.token || '').trim();\n const schemes = state.auth.schemes || {};\n const activeScheme = state.auth.activeScheme;\n\n const hasSchemeValue = (schemeName: string): boolean => {\n const value = String(schemes[schemeName] || '').trim();\n if (value) return true;\n if (!token) return false;\n return !activeScheme || activeScheme === schemeName;\n };\n\n return requirements.some((requirement) => {\n const schemeNames = requirement.map((item) => item.schemeName);\n if (schemeNames.length === 0) return true;\n return schemeNames.every((schemeName) => hasSchemeValue(schemeName));\n });\n}\n","import { h, clear } from '../../lib/dom';\nimport { store } from '../../core/state';\nimport { navigate, buildPath } from '../../core/router';\nimport { createSummaryLine } from '../shared/summary';\nimport { createBadge, createBreadcrumb, createCard, createSection, createLockIcon } from '../ui';\nimport { getDisplayBaseUrl } from '../../services/env';\nimport { isOperationAuthConfigured } from '../modals/auth-modal';\nimport { formatOperationAuthTitle, hasOperationAuth } from '../../core/security';\nimport type { SpecTag, RouteInfo } from '../../core/types';\n\n/** Render a tag page — list of group operations */\nexport function renderTagPage(pageSlot: HTMLElement, _asideSlot: HTMLElement, tagName: string): void {\n clear(pageSlot);\n\n const spec = store.get().spec;\n if (!spec) return;\n\n const tag = spec.tags.find((t) => t.name === tagName);\n if (!tag || tag.operations.length === 0) {\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: 'Tag not found' }));\n pageSlot.append(header);\n pageSlot.append(createSection(\n { title: 'Details' },\n h('p', { textContent: `No operations for tag \"${tagName}\"` }),\n ));\n return;\n }\n\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: tag.name }));\n\n const state = store.get();\n const baseUrlDisplay = getDisplayBaseUrl(state);\n const breadcrumb = createBreadcrumb([\n {\n label: baseUrlDisplay || spec.info.title || 'Home',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: tagName, className: 'breadcrumb-current' },\n ], {\n className: 'breadcrumb-tag-page',\n leading: [createBadge({ text: 'Category', kind: 'chip', size: 'm', mono: true })],\n });\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n\n if (tag.description) {\n header.append(h('p', { textContent: tag.description }));\n }\n\n pageSlot.append(header);\n\n const methods = getTagMethodBreakdown(tag);\n const authRequired = tag.operations.filter((op) => hasOperationAuth(op.resolvedSecurity)).length;\n const deprecatedCount = tag.operations.filter((op) => op.deprecated).length;\n\n pageSlot.append(createSection(\n { className: 'summary' },\n createSummaryLine(\n [\n { label: 'Endpoints', value: tag.operations.length },\n { label: 'Auth Required', value: authRequired },\n { label: 'Deprecated', value: deprecatedCount },\n ],\n methods,\n ),\n ));\n\n const opsSection = createSection({ title: 'Endpoints' });\n const currentRoute = store.get().route;\n\n for (const op of tag.operations) {\n const route: RouteInfo = { type: 'endpoint', tag: tag.name, method: op.method, path: op.path };\n const isActive = currentRoute.type === 'endpoint' && currentRoute.method === op.method && currentRoute.path === op.path;\n const card = createCard({\n interactive: true,\n active: isActive,\n className: `card-group${op.deprecated ? ' deprecated' : ''}`,\n onClick: () => navigate(buildPath(route)),\n });\n\n const info = h('div', { className: 'card-info' });\n info.append(h('h3', {}, h('code', { textContent: op.path })));\n if (op.summary || op.operationId) {\n info.append(h('p', { textContent: op.summary || op.operationId }));\n }\n\n const badges = h('div', { className: 'card-badges' });\n badges.append(createBadge({ text: op.method.toUpperCase(), kind: 'method', method: op.method, size: 'm', mono: true }));\n if (hasOperationAuth(op.resolvedSecurity)) {\n badges.append(createLockIcon({\n configured: isOperationAuthConfigured(op.resolvedSecurity, spec.securitySchemes || {}),\n variant: 'tag',\n title: formatOperationAuthTitle(op.resolvedSecurity),\n }));\n }\n\n card.append(info, badges);\n opsSection.append(card);\n }\n\n pageSlot.append(opsSection);\n\n}\n\nfunction getTagMethodBreakdown(tag: SpecTag): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const op of tag.operations) {\n counts[op.method] = (counts[op.method] || 0) + 1;\n }\n return counts;\n}\n","import { h, clear } from '../../lib/dom';\nimport { navigate } from '../../core/router';\nimport { renderSchemaViewer, renderParametersCard } from '../shared/schema-viewer';\nimport { createBadge, createSection, createBreadcrumb, createCardHeaderRow } from '../ui';\nimport { renderRouteNavigation } from '../nav/route-nav';\nimport type { SpecWebhook } from '../../core/types';\n\n/** Render a webhook detail page — similar to endpoint but marked as Webhook, no Try It */\nexport async function renderWebhookPage(pageSlot: HTMLElement, webhook: SpecWebhook): Promise<void> {\n clear(pageSlot);\n\n // Breadcrumb\n const webhookBadge = createBadge({\n text: 'WEBHOOK',\n kind: 'webhook',\n size: 'm',\n mono: true,\n });\n const methodBadge = createBadge({\n text: webhook.method.toUpperCase(),\n kind: 'method',\n method: webhook.method,\n mono: true,\n size: 'm',\n });\n const breadcrumb = createBreadcrumb(\n [\n {\n label: 'Overview',\n href: '/',\n className: 'breadcrumb-item',\n onClick: (e: Event) => { e.preventDefault(); navigate('/'); },\n },\n { label: webhook.name, className: 'breadcrumb-segment' },\n ],\n { leading: [webhookBadge, methodBadge] },\n );\n\n // Header\n const header = h('div', { className: 'block header' });\n if (webhook.summary) {\n header.append(h('h1', { textContent: webhook.summary }));\n } else {\n header.append(h('h1', { textContent: webhook.name }));\n }\n\n const breadcrumbWrap = h('div', { className: 'breadcrumb-wrap' });\n breadcrumbWrap.append(breadcrumb);\n header.append(breadcrumbWrap);\n\n if (webhook.description) {\n header.append(h('p', { textContent: webhook.description }));\n }\n\n pageSlot.append(header);\n\n // Parameters\n const visibleParams = webhook.parameters.filter((p) => p.in !== 'cookie');\n if (visibleParams.length > 0) {\n const paramSection = createSection({ title: 'Parameters' }, renderParamsTable(visibleParams));\n pageSlot.append(paramSection);\n }\n\n // Request Body (what the webhook sends)\n if (webhook.requestBody) {\n const bodySection = createSection({ title: 'Webhook Payload' });\n\n if (webhook.requestBody.description) {\n bodySection.append(h('p', { textContent: webhook.requestBody.description }));\n }\n\n const content = webhook.requestBody.content || {};\n for (const [contentType, mediaType] of Object.entries(content)) {\n if (mediaType.schema) {\n const headerContent = createCardHeaderRow({ title: 'Body' });\n headerContent.append(createBadge({\n text: contentType,\n kind: 'chip',\n size: 's',\n mono: true,\n }));\n bodySection.append(renderSchemaViewer(mediaType.schema, headerContent));\n }\n }\n\n pageSlot.append(bodySection);\n }\n\n // Responses (expected responses from the webhook consumer)\n if (Object.keys(webhook.responses).length > 0) {\n const respSection = createSection({ title: 'Expected Responses' });\n\n for (const [code, response] of Object.entries(webhook.responses)) {\n const respBlock = h('div', { className: 'response-block' });\n respBlock.append(createBadge({\n text: code,\n kind: 'status',\n statusCode: code,\n mono: true,\n }));\n if (response.description) {\n respBlock.append(h('p', { textContent: response.description }));\n }\n\n if (response.content) {\n for (const [ct, mediaType] of Object.entries(response.content)) {\n if (mediaType.schema) {\n respBlock.append(renderSchemaViewer(mediaType.schema, `${ct} — Schema`));\n }\n }\n }\n\n respSection.append(respBlock);\n }\n\n pageSlot.append(respSection);\n }\n\n const routeNav = renderRouteNavigation({ type: 'webhook', webhookName: webhook.name });\n if (routeNav) {\n pageSlot.append(h('div', { className: 'block section' }, routeNav));\n }\n}\n\nfunction renderParamsTable(params: SpecWebhook['parameters']): HTMLElement {\n const pathCount = params.filter((p) => p.in === 'path').length;\n const queryCount = params.filter((p) => p.in === 'query').length;\n const headerTitle =\n pathCount > 0 && queryCount > 0 ? 'Parameters' : pathCount > 0 ? 'Path' : 'Query';\n return renderParametersCard(params, { headerTitle, withEnumAndDefault: false });\n}\n","import { h } from '../../lib/dom';\n\nexport interface ContentAreaLayout {\n page: HTMLElement;\n main: HTMLElement;\n aside: HTMLElement;\n}\n\n/** Layout: page (main + aside). */\nexport function createContentArea(): ContentAreaLayout {\n const page = h('div', { className: 'page' });\n const mainPane = h('div', {\n className: 'main',\n role: 'main',\n });\n const main = h('div', { className: 'content' });\n mainPane.append(main);\n\n const asidePane = h('div', {\n className: 'aside',\n 'aria-label': 'Panel',\n });\n const aside = h('div', { className: 'content' });\n asidePane.append(aside);\n asidePane.hidden = true;\n\n page.append(mainPane, asidePane);\n return { page, main, aside };\n}\n\n/** Enable/disable aside in page layout. */\nexport function setContentAreaAside(page: HTMLElement, hasAside: boolean): void {\n const aside = page.querySelector('.aside') as HTMLElement | null;\n if (aside) aside.hidden = !hasAside;\n}\n","import { h } from '../../lib/dom';\n\nexport interface EmptyStateOptions {\n title: string;\n message?: string;\n icon?: string;\n variant?: 'loading' | 'error' | 'empty';\n}\n\n/**\n * Helper for loading/error/empty pages.\n * Returns ready page for render(pageSlotEl, createEmptyStatePage(...)).\n */\nexport function createEmptyStatePage(opts: EmptyStateOptions): HTMLElement {\n const { title, message, icon, variant = 'empty' } = opts;\n if (variant === 'loading') {\n return h('div', { className: 'block header' },\n h('h2', { textContent: title }),\n h('div', { className: 'loading' },\n h('div', { className: 'spinner' }),\n h('span', null, message || title),\n ),\n );\n }\n\n const header = h('div', { className: 'block header' });\n if (icon) {\n header.append(h('span', { innerHTML: icon, className: 'icon-muted' }));\n }\n header.append(h('h2', { textContent: title }));\n if (message) {\n header.append(h('p', { className: 'error-message', textContent: message }));\n }\n return header;\n}\n","import { h, clear, render } from '../lib/dom';\nimport { icons } from '../lib/icons';\nimport { store } from '../core/state';\nimport { applyTheme, type ThemeConfig } from '../core/theme';\nimport { renderSidebar, updateSidebarActiveState } from './nav/sidebar';\nimport { renderOverview } from './pages/overview';\nimport { renderEndpoint } from './pages/endpoint';\nimport { renderTagPage } from './pages/tag-page';\nimport { renderSchemaViewer } from './shared/schema-viewer';\nimport { renderWebhookPage } from './pages/webhook';\nimport { resolveAuthHeaders, getAuthHeaderPlaceholder } from './modals/auth-modal';\nimport { createContentArea, setContentAreaAside } from './layout/page-layout';\nimport { createEmptyStatePage } from './layout/empty-state-page';\nimport { createHeaderRow } from './shared/try-it';\nimport { getBaseUrl, formatBaseUrlForDisplay } from '../services/env';\nimport { hasOperationAuth } from '../core/security';\nimport type { PortalConfig, PortalState, RouteInfo } from '../core/types';\n\nlet rootEl: HTMLElement | null = null;\nlet sidebarEl: HTMLElement | null = null;\nlet pageEl: HTMLElement | null = null;\nlet mainEl: HTMLElement | null = null;\nlet asideEl: HTMLElement | null = null;\nlet prevRoute: RouteInfo | null = null;\nlet prevSpecLoaded = false;\nlet prevEnvState = '';\nlet currentConfig: PortalConfig | null = null;\n\n/** Get current portal config */\nexport function getCurrentConfig(): PortalConfig | null {\n return currentConfig;\n}\n\n/** Mount the full portal app into the container */\nexport function mountApp(container: HTMLElement, config: PortalConfig): void {\n currentConfig = config;\n rootEl = h('div', { className: 'root' });\n\n const themeConfig: ThemeConfig = {\n primaryColor: config.primaryColor,\n };\n applyTheme(rootEl, store.get().theme, themeConfig);\n\n const expandTrigger = h('button', {\n type: 'button',\n className: 'sidebar-expand-trigger',\n 'aria-label': 'Open sidebar',\n });\n expandTrigger.innerHTML = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\"><line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/></svg>';\n expandTrigger.addEventListener('click', () => {\n store.set({ sidebarOpen: true });\n sidebarEl?.classList.remove('collapsed');\n });\n\n sidebarEl = h('aside', { className: 'sidebar', 'aria-label': 'Navigation' });\n\n const { page, main, aside } = createContentArea();\n pageEl = page;\n mainEl = main;\n asideEl = aside;\n\n rootEl.append(expandTrigger, sidebarEl, page);\n container.append(rootEl);\n\n store.subscribe((state) => {\n if (!rootEl) return;\n applyTheme(rootEl, state.theme, themeConfig);\n sidebarEl?.classList.toggle('collapsed', !state.sidebarOpen);\n expandTrigger.classList.toggle('visible', !state.sidebarOpen);\n void updateContent(state, config);\n });\n\n sidebarEl?.classList.toggle('collapsed', !store.get().sidebarOpen);\n expandTrigger.classList.toggle('visible', !store.get().sidebarOpen);\n void updateContent(store.get(), config);\n}\n\n/** Unmount the portal */\nexport function unmountApp(): void {\n if (rootEl) {\n rootEl.remove();\n rootEl = null;\n sidebarEl = null;\n pageEl = null;\n mainEl = null;\n asideEl = null;\n prevRoute = null;\n prevSpecLoaded = false;\n currentConfig = null;\n }\n}\n\nasync function updateContent(state: PortalState, config: PortalConfig): Promise<void> {\n const specLoaded = !!state.spec;\n if (sidebarEl && specLoaded) {\n if (!prevSpecLoaded) {\n renderSidebar(sidebarEl, config);\n } else {\n updateSidebarActiveState(sidebarEl, state.route);\n }\n prevSpecLoaded = true;\n } else {\n prevSpecLoaded = false;\n }\n\n const currentMainEl = mainEl;\n const currentAsideEl = asideEl;\n const currentPageEl = pageEl;\n if (!currentMainEl || !currentAsideEl || !currentPageEl) return;\n\n if (state.loading) {\n setContentAreaAside(currentPageEl, false);\n clear(currentAsideEl);\n render(currentMainEl, createEmptyStatePage({ title: 'Loading...', message: 'Loading API specification...', variant: 'loading' }));\n const mainScroll = currentMainEl.parentElement as HTMLElement | null;\n if (mainScroll) mainScroll.scrollTop = 0;\n return;\n }\n\n if (state.error) {\n setContentAreaAside(currentPageEl, false);\n clear(currentAsideEl);\n render(currentMainEl, createEmptyStatePage({\n title: 'Failed to load API specification',\n message: state.error,\n icon: icons.warning,\n variant: 'error',\n }));\n const mainScroll = currentMainEl.parentElement as HTMLElement | null;\n if (mainScroll) mainScroll.scrollTop = 0;\n return;\n }\n\n if (!state.spec) return;\n\n // Route-based rendering\n const route = state.route;\n const envState = `${state.activeEnvironment}|${state.auth.token}`;\n\n // Skip re-render if same route AND env/auth unchanged\n if (prevRoute && isSameRoute(prevRoute, route) && prevEnvState === envState) return;\n \n // Route unchanged but env/auth changed — re-render sidebar and page to update lock icons\n if (prevRoute && isSameRoute(prevRoute, route) && prevEnvState !== envState) {\n prevEnvState = envState;\n updateEnvironmentState(currentPageEl, state, config);\n if (sidebarEl && state.spec) renderSidebar(sidebarEl, config);\n }\n \n prevRoute = { ...route };\n prevEnvState = envState;\n\n clear(currentMainEl);\n clear(currentAsideEl);\n\n switch (route.type) {\n case 'overview':\n setContentAreaAside(currentPageEl, false);\n renderOverview(currentMainEl, currentAsideEl);\n break;\n\n case 'tag': {\n setContentAreaAside(currentPageEl, false);\n renderTagPage(currentMainEl, currentAsideEl, route.tag || '');\n break;\n }\n\n case 'endpoint': {\n const op = findOperation(state, route);\n if (op) {\n setContentAreaAside(currentPageEl, true);\n await renderEndpoint(currentMainEl, currentAsideEl, op);\n } else {\n setContentAreaAside(currentPageEl, false);\n render(currentMainEl, createEmptyStatePage({\n title: 'Endpoint not found',\n message: `${route.method?.toUpperCase()} ${route.path}`,\n variant: 'empty',\n }));\n }\n break;\n }\n\n case 'schema': {\n const schema = state.spec.schemas[route.schemaName || ''];\n if (schema) {\n setContentAreaAside(currentPageEl, false);\n const header = h('div', { className: 'block header' });\n header.append(h('h1', { textContent: route.schemaName || '' }));\n if (schema.description) {\n header.append(h('p', { textContent: String(schema.description) }));\n }\n const schemaSection = h('div', { className: 'block section' });\n schemaSection.append(renderSchemaViewer(schema, 'Properties'));\n render(currentMainEl, header, schemaSection);\n }\n break;\n }\n\n case 'webhook': {\n const wh = state.spec.webhooks?.find((w) => w.name === route.webhookName);\n if (wh) {\n setContentAreaAside(currentPageEl, false);\n renderWebhookPage(currentMainEl, wh);\n } else {\n setContentAreaAside(currentPageEl, false);\n render(currentMainEl, createEmptyStatePage({\n title: 'Webhook not found',\n message: route.webhookName || '',\n variant: 'empty',\n }));\n }\n break;\n }\n\n default:\n setContentAreaAside(currentPageEl, false);\n renderOverview(currentMainEl, currentAsideEl);\n }\n\n const mainScroll = currentMainEl.parentElement as HTMLElement | null;\n if (mainScroll) mainScroll.scrollTop = 0;\n}\n\n/** Targeted update when environment/auth changes without full re-render */\nfunction updateEnvironmentState(root: HTMLElement, state: PortalState, _config: PortalConfig): void {\n const baseUrl = getBaseUrl(state);\n const baseUrlDisplay = formatBaseUrlForDisplay(baseUrl);\n\n // 1. Breadcrumb (endpoint/tag): baseUrl\n const breadcrumbHome = root.querySelector('.breadcrumb-item') as HTMLAnchorElement | null;\n if (breadcrumbHome) {\n breadcrumbHome.textContent = baseUrlDisplay || state.spec?.info.title || 'Home';\n }\n\n // 2. Endpoint: auth headers in Try It + Code Examples\n if (state.route.type !== 'endpoint' || !state.spec) return;\n\n const tryItEl = root.querySelector('.aside.try-it .content') as HTMLElement | null;\n const op = findOperation(state, state.route);\n\n if (op && hasOperationAuth(op.resolvedSecurity) && tryItEl) {\n const headersContainer = tryItEl.querySelector('.headers-list');\n if (headersContainer) {\n const authHeaderNames = ['Authorization', 'Cookie'];\n const allRows = Array.from(headersContainer.querySelectorAll('.header-row'));\n const authRows = allRows.filter((row) => {\n const nameInput = row.querySelector('[data-header-name]') as HTMLInputElement;\n return nameInput && authHeaderNames.includes(nameInput.value);\n });\n authRows.forEach((row) => row.remove());\n\n const authHeaders = resolveAuthHeaders(op.resolvedSecurity, state.spec.securitySchemes);\n const placeholders = getAuthHeaderPlaceholder(op.resolvedSecurity, state.spec.securitySchemes);\n const merged = { ...placeholders, ...authHeaders };\n\n const remainingRows = Array.from(headersContainer.querySelectorAll('.header-row'));\n const insertBeforeRow = remainingRows.find((row) => {\n const nameInput = row.querySelector('[data-header-name]') as HTMLInputElement;\n return nameInput && nameInput.value === 'Content-Type';\n }) || remainingRows[0];\n\n for (const [headerName, headerValue] of Object.entries(merged).reverse()) {\n const row = createHeaderRow(headerName, headerValue);\n if (insertBeforeRow) {\n insertBeforeRow.insertAdjacentElement('beforebegin', row);\n } else {\n headersContainer.prepend(row);\n }\n }\n }\n }\n\n if (tryItEl && op) {\n tryItEl.dispatchEvent(new Event('input', { bubbles: true }));\n }\n}\n\nfunction findOperation(state: PortalState, route: RouteInfo) {\n if (!state.spec) return null;\n return state.spec.operations.find(\n (op) => op.method === route.method && op.path === route.path,\n ) || null;\n}\n\nfunction isSameRoute(a: RouteInfo, b: RouteInfo): boolean {\n return a.type === b.type\n && a.method === b.method\n && a.path === b.path\n && a.schemaName === b.schemaName\n && a.tag === b.tag\n && a.webhookName === b.webhookName;\n}\n","/**\n * Persist portal state (env, baseUrl, auth) to localStorage\n * so values survive page refresh.\n */\n\nimport type { PortalEnvironment, AuthState } from './types';\n\nconst STORAGE_KEY = 'ap_portal_prefs';\n\nexport interface PersistedState {\n activeEnvironment: string;\n environments: PortalEnvironment[];\n auth: AuthState;\n}\n\nexport function loadPersisted(): PersistedState | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n const data = JSON.parse(raw) as PersistedState;\n if (!data || typeof data !== 'object') return null;\n return {\n activeEnvironment: typeof data.activeEnvironment === 'string' ? data.activeEnvironment : '',\n environments: Array.isArray(data.environments) ? data.environments : [],\n auth: data.auth && typeof data.auth === 'object'\n ? {\n schemes: data.auth.schemes && typeof data.auth.schemes === 'object' ? data.auth.schemes : {},\n activeScheme: typeof data.auth.activeScheme === 'string' ? data.auth.activeScheme : '',\n token: typeof data.auth.token === 'string' ? data.auth.token : '',\n locked: Boolean(data.auth.locked),\n source: data.auth.source === 'manual' || data.auth.source === 'auto-body' || data.auth.source === 'auto-header'\n ? data.auth.source\n : 'manual',\n }\n : { schemes: {}, activeScheme: '', token: '', locked: false, source: 'manual' },\n };\n } catch {\n return null;\n }\n}\n\nexport function savePersisted(data: PersistedState): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n } catch {\n /* noop */\n }\n}\n","import type { AuthState, SecurityScheme } from './types';\n\nfunction getSchemePriority(scheme: SecurityScheme): number {\n if (scheme.type === 'http') {\n const httpScheme = (scheme.scheme || '').toLowerCase();\n if (httpScheme === 'bearer') return 0;\n if (httpScheme === 'basic') return 3;\n return 4;\n }\n if (scheme.type === 'oauth2' || scheme.type === 'openIdConnect') return 1;\n if (scheme.type === 'apiKey') return 2;\n return 5;\n}\n\nfunction getPreferredSchemeName(securitySchemes: Record<string, SecurityScheme>): string {\n const names = Object.keys(securitySchemes);\n if (names.length === 0) return '';\n\n let bestName = names[0];\n let bestPriority = getSchemePriority(securitySchemes[bestName]);\n for (let i = 1; i < names.length; i++) {\n const name = names[i];\n const priority = getSchemePriority(securitySchemes[name]);\n if (priority < bestPriority) {\n bestPriority = priority;\n bestName = name;\n }\n }\n return bestName;\n}\n\nexport function areAuthStatesEqual(a: AuthState, b: AuthState): boolean {\n if (a.activeScheme !== b.activeScheme) return false;\n if (a.token !== b.token) return false;\n if (a.locked !== b.locked) return false;\n if (a.source !== b.source) return false;\n\n const aEntries = Object.entries(a.schemes);\n const bEntries = Object.entries(b.schemes);\n if (aEntries.length !== bEntries.length) return false;\n for (const [key, value] of aEntries) {\n if (b.schemes[key] !== value) return false;\n }\n return true;\n}\n\nexport function reconcileAuthWithSecuritySchemes(\n auth: AuthState,\n securitySchemes: Record<string, SecurityScheme>,\n): AuthState {\n const availableSchemeNames = Object.keys(securitySchemes);\n if (availableSchemeNames.length === 0) {\n return { ...auth, schemes: { ...auth.schemes } };\n }\n\n const schemes: Record<string, string> = {};\n for (const name of availableSchemeNames) {\n const value = auth.schemes[name];\n if (typeof value === 'string' && value.length > 0) {\n schemes[name] = value;\n }\n }\n\n let activeScheme = auth.activeScheme;\n if (!activeScheme || !securitySchemes[activeScheme]) {\n activeScheme = availableSchemeNames.find((name) => Boolean(schemes[name])) || '';\n }\n\n if (!activeScheme && auth.token) {\n activeScheme = getPreferredSchemeName(securitySchemes);\n }\n\n if (activeScheme && auth.token && !schemes[activeScheme]) {\n schemes[activeScheme] = auth.token;\n }\n\n let token = auth.token;\n if (activeScheme && schemes[activeScheme] && token !== schemes[activeScheme]) {\n token = schemes[activeScheme];\n }\n if (!token && activeScheme && schemes[activeScheme]) {\n token = schemes[activeScheme];\n }\n\n return {\n ...auth,\n schemes,\n activeScheme,\n token,\n };\n}\n","export function debounce<T extends (...args: unknown[]) => void>(fn: T, ms: number): T {\n let timer: ReturnType<typeof setTimeout>;\n return ((...args: unknown[]) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), ms);\n }) as T;\n}\n","import './styles/index.css';\nimport type { PortalConfig, PortalApi, PortalState, PortalEnvironment } from './core/types';\nimport { store } from './core/state';\nimport { initRouter, destroyRouter, navigate as routerNavigate } from './core/router';\nimport { parseSpec, loadSpec } from './core/parser';\nimport { buildSearchIndex } from './core/search';\nimport { detectTheme } from './core/theme';\nimport { mountApp, unmountApp } from './components/app';\nimport { setupSearchShortcut } from './components/modals/search-modal';\nimport { loadPersisted, savePersisted } from './core/persistence';\nimport {\n areAuthStatesEqual,\n reconcileAuthWithSecuritySchemes,\n} from './core/auth-storage';\nimport { debounce } from './helpers/debounce';\nimport { formatBaseUrlForDisplay, normalizeBaseUrl } from './services/env';\n\nlet mounted = false;\nlet currentApi: PortalApi | null = null;\nlet cleanupSearchShortcut: (() => void) | null = null;\n\n/** Mount the portal into the DOM */\nasync function mount(config: PortalConfig): Promise<PortalApi> {\n let preservedAuth = null;\n \n if (mounted) {\n // Preserve auth state during hot-reload\n preservedAuth = store.get().auth;\n unmount();\n }\n\n const target = typeof config.mount === 'string'\n ? document.querySelector<HTMLElement>(config.mount)\n : config.mount;\n\n if (!target) {\n throw new Error(`[PureDocs] Mount target not found: ${String(config.mount)}`);\n }\n\n store.reset();\n\n const configEnvs = config.environments || [{ name: 'default', baseUrl: '' }];\n const configActiveEnv = config.defaultEnvironment || configEnvs[0]?.name || 'default';\n\n store.set({\n loading: true,\n theme: detectTheme(config.theme),\n environments: [...configEnvs],\n initialEnvironments: [...configEnvs],\n activeEnvironment: configActiveEnv,\n });\n\n const persisted = loadPersisted();\n if (persisted) {\n store.set({\n activeEnvironment: persisted.activeEnvironment && configEnvs.some((e) => e.name === persisted.activeEnvironment)\n ? persisted.activeEnvironment\n : configActiveEnv,\n auth: persisted.auth,\n });\n } else if (preservedAuth) {\n // No persisted data, but we have auth from previous mount - restore it\n store.setAuth(preservedAuth);\n }\n\n const saveDebounce = debounce(() => {\n const s = store.get();\n savePersisted({\n activeEnvironment: s.activeEnvironment,\n environments: s.environments,\n auth: s.auth,\n });\n }, 300);\n\n store.subscribe(() => saveDebounce());\n\n initRouter(config.basePath);\n cleanupSearchShortcut = setupSearchShortcut();\n\n mountApp(target, config);\n mounted = true;\n\n try {\n let rawSpec: Record<string, unknown>;\n const initialSpecUrl = config.specUrl;\n\n if (config.spec) {\n rawSpec = config.spec;\n } else if (initialSpecUrl) {\n rawSpec = await loadSpec(initialSpecUrl);\n } else {\n throw new Error('Either spec or specUrl must be provided');\n }\n\n const parsed = parseSpec(rawSpec);\n\n if (parsed.servers.length > 0 && store.get().environments[0]?.baseUrl === '') {\n const envs = [...store.get().environments];\n envs[0] = { ...envs[0], baseUrl: parsed.servers[0].url };\n\n for (let i = 1; i < parsed.servers.length; i++) {\n const server = parsed.servers[i];\n envs.push({\n name: server.description || `Server ${i + 1}`,\n baseUrl: server.url,\n });\n }\n\n store.set({ environments: envs, initialEnvironments: envs.map((e) => ({ ...e })) });\n }\n\n const auth = store.get().auth;\n const reconciledAuth = reconcileAuthWithSecuritySchemes(auth, parsed.securitySchemes);\n if (!areAuthStatesEqual(auth, reconciledAuth)) {\n store.setAuth(reconciledAuth);\n }\n\n buildSearchIndex(parsed);\n store.set({ spec: parsed, loading: false, error: null });\n } catch (err) {\n store.set({\n loading: false,\n error: (err as Error).message || 'Failed to load specification',\n });\n }\n\n currentApi = createApi();\n return currentApi;\n}\n\n/** Unmount portal and cleanup */\nfunction unmount(): void {\n if (!mounted) return;\n\n cleanupSearchShortcut?.();\n cleanupSearchShortcut = null;\n\n destroyRouter();\n unmountApp();\n store.reset();\n\n mounted = false;\n currentApi = null;\n}\n\nfunction createApi(): PortalApi {\n return {\n getState: () => store.get(),\n subscribe: (fn: (state: PortalState) => void) => store.subscribe(fn),\n setToken: (token: string) => {\n const activeScheme = store.get().auth.activeScheme;\n if (activeScheme) {\n store.setSchemeValue(activeScheme, token);\n } else {\n store.setAuth({ token, source: 'manual' });\n }\n },\n setEnvironment: (name: string) => store.setActiveEnvironment(name),\n navigate: (path: string) => routerNavigate(path),\n };\n}\n\nconst OBSERVED_ATTRIBUTES = [\n 'spec-url',\n 'spec-json',\n 'theme',\n 'primary-color',\n 'base-path',\n 'default-environment',\n 'environments-array',\n 'title',\n] as const;\n\nexport class PureDocsElement extends HTMLElement {\n private static activeElement: PureDocsElement | null = null;\n private api: PortalApi | null = null;\n private reloadTimer: ReturnType<typeof setTimeout> | null = null;\n\n static get observedAttributes(): string[] {\n return [...OBSERVED_ATTRIBUTES];\n }\n\n async connectedCallback(): Promise<void> {\n if (PureDocsElement.activeElement && PureDocsElement.activeElement !== this) {\n this.renderSingletonError();\n return;\n }\n\n PureDocsElement.activeElement = this;\n await this.mountFromAttributes();\n }\n\n disconnectedCallback(): void {\n if (PureDocsElement.activeElement === this) {\n this.api = null;\n unmount();\n PureDocsElement.activeElement = null;\n }\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (!this.isConnected) return;\n if (oldValue === newValue) return;\n if (!OBSERVED_ATTRIBUTES.includes(name as (typeof OBSERVED_ATTRIBUTES)[number])) return;\n\n if (this.reloadTimer) clearTimeout(this.reloadTimer);\n this.reloadTimer = setTimeout(() => {\n void this.reload();\n }, 80);\n }\n\n async reload(): Promise<void> {\n if (PureDocsElement.activeElement !== this) return;\n await this.mountFromAttributes();\n }\n\n getState(): PortalState | null {\n return this.api?.getState() || null;\n }\n\n subscribe(fn: (state: PortalState) => void): () => void {\n return this.api?.subscribe(fn) || (() => {});\n }\n\n navigate(path: string): void {\n this.api?.navigate(path);\n }\n\n setToken(token: string): void {\n this.api?.setToken(token);\n }\n\n setEnvironment(name: string): void {\n this.api?.setEnvironment(name);\n }\n\n private async mountFromAttributes(): Promise<void> {\n try {\n this.innerHTML = '';\n const config = this.parseConfig();\n this.api = await mount({ ...config, mount: this });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.innerHTML = `<div style=\"padding:12px;border:1px solid #ef4444;border-radius:8px;color:#ef4444;background:#fff1f2;font-family:system-ui,sans-serif\">[PureDocs] ${message}</div>`;\n }\n }\n\n private parseConfig(): Omit<PortalConfig, 'mount'> {\n const rawSpec = this.getAttribute('spec-json');\n const rawEnvs = this.getAttribute('environments-array');\n\n return {\n specUrl: this.getAttribute('spec-url') || undefined,\n spec: rawSpec ? parseJsonAttr<Record<string, unknown>>(rawSpec, 'spec-json') : undefined,\n theme: toTheme(this.getAttribute('theme')),\n primaryColor: this.getAttribute('primary-color') || undefined,\n basePath: this.getAttribute('base-path') || undefined,\n defaultEnvironment: this.getAttribute('default-environment') || undefined,\n environments: rawEnvs ? parseEnvironmentArrayAttr(rawEnvs) : undefined,\n title: this.getAttribute('title') || undefined,\n };\n }\n\n private renderSingletonError(): void {\n this.innerHTML = '<div style=\"padding:12px;border:1px solid #f59e0b;border-radius:8px;color:#92400e;background:#fffbeb;font-family:system-ui,sans-serif\">Only one &lt;pure-docs&gt; instance can be mounted at a time.</div>';\n }\n}\n\nfunction parseJsonAttr<T>(value: string, attrName: string): T {\n try {\n return JSON.parse(value) as T;\n } catch {\n throw new Error(`Invalid JSON in ${attrName}`);\n }\n}\n\nfunction parseEnvironmentArrayAttr(value: string): PortalEnvironment[] {\n const endpoints = parseJsonAttr<unknown>(value, 'environments-array');\n if (!Array.isArray(endpoints)) {\n throw new Error('Invalid JSON in environments-array');\n }\n const usedNames = new Set<string>();\n return endpoints.map((endpoint, idx) => {\n if (typeof endpoint !== 'string') {\n throw new Error('Invalid JSON in environments-array');\n }\n const baseUrl = normalizeBaseUrl(endpoint.trim());\n if (!baseUrl) {\n throw new Error('Invalid JSON in environments-array');\n }\n const baseName = formatBaseUrlForDisplay(baseUrl) || `env-${idx + 1}`;\n let name = baseName;\n let n = 2;\n while (usedNames.has(name)) {\n name = `${baseName} #${n++}`;\n }\n usedNames.add(name);\n return { name, baseUrl };\n });\n}\n\nfunction toTheme(value: string | null): PortalConfig['theme'] | undefined {\n if (!value) return undefined;\n if (value === 'light' || value === 'dark' || value === 'auto') return value;\n return undefined;\n}\n\nif (!customElements.get('pure-docs')) {\n customElements.define('pure-docs', PureDocsElement);\n}\n\nexport const PureDocs = {\n mount,\n unmount,\n version: '0.0.1',\n};\n\nexport type { PortalConfig, PortalApi, PortalState } from './core/types';\nexport default PureDocs;\n"],"names":["Store","update","schemeName","value","schemes","activeScheme","token","route","name","fn","e","store","basePath","initRouter","base","handleRouteChange","navigate","path","getCurrentPath","parsePath","clean","opMatch","tagMatch","schemaMatch","webhookMatch","guideMatch","buildPath","destroyRouter","normalizeSecurityRequirements","raw","requirements","candidate","requirement","scopesRaw","scopes","scope","resolveOperationSecurityInfo","securitySchemes","explicitlyNoAuth","resolved","hasOperationAuth","info","getSecuritySchemeBadge","scheme","s","getOperationSecurityBadges","seen","badges","item","badge","formatOperationAuthBadge","formatOperationAuthTitle","resolveOperationAuth","configuredSchemes","fallbackToken","empty","materializeRequirement","getOperationAuthHeaderPlaceholders","headers","firstRequirement","result","isNothing","subject","isObject","toArray","sequence","extend","target","source","index","length","key","sourceKeys","repeat","string","count","cycle","isNegativeZero","number","isNothing_1","isObject_1","toArray_1","repeat_1","isNegativeZero_1","extend_1","common","formatError","exception","compact","where","message","YAMLException$1","reason","mark","getLine","buffer","lineStart","lineEnd","position","maxLineLength","head","tail","maxHalfLength","padStart","max","makeSnippet","options","re","lineStarts","lineEnds","match","foundLineNo","i","line","lineNoLength","snippet","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","compileStyleAliases","map","style","alias","Type$1","tag","data","type","compileList","schema","currentType","newIndex","previousType","previousIndex","compileMap","collectType","Schema$1","definition","implicit","explicit","type$1","str","seq","failsafe","resolveYamlNull","constructYamlNull","isNull","object","_null","resolveYamlBoolean","constructYamlBoolean","isBoolean","bool","isHexCode","c","isOctCode","isDecCode","resolveYamlInteger","hasDigits","ch","constructYamlInteger","sign","isInteger","int","obj","YAML_FLOAT_PATTERN","resolveYamlFloat","constructYamlFloat","SCIENTIFIC_WITHOUT_DOT","representYamlFloat","res","isFloat","float","json","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","resolveYamlTimestamp","constructYamlTimestamp","year","month","day","hour","minute","second","fraction","delta","tz_hour","tz_minute","date","representYamlTimestamp","timestamp","resolveYamlMerge","merge","BASE64_MAP","resolveYamlBinary","code","idx","bitlen","constructYamlBinary","tailbits","input","bits","representYamlBinary","isBinary","binary","_hasOwnProperty$3","_toString$2","resolveYamlOmap","objectKeys","pair","pairKey","pairHasKey","constructYamlOmap","omap","_toString$1","resolveYamlPairs","keys","constructYamlPairs","pairs","_hasOwnProperty$2","resolveYamlSet","constructYamlSet","set","_default","_hasOwnProperty$1","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","_class","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","lc","escapedHexLen","fromDecimalCode","simpleEscapeSequence","charFromCodepoint","setProperty","simpleEscapeCheck","simpleEscapeMap","State$1","generateError","state","throwError","throwWarning","directiveHandlers","args","major","minor","handle","prefix","captureSegment","start","end","checkJson","_position","_length","_character","_result","mergeMappings","destination","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readPlainScalar","nodeIndent","withinFlowCollection","preceding","following","captureStart","captureEnd","hasPendingContent","_line","_lineStart","_lineIndent","_kind","readSingleQuotedScalar","readDoubleQuotedScalar","hexLength","hexResult","tmp","readFlowCollection","readNext","_pos","_tag","_anchor","terminator","isPair","isExplicitPair","isMapping","composeNode","readBlockScalar","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readBlockSequence","detected","readBlockMapping","flowIndent","allowCompact","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readTagProperty","isVerbatim","isNamed","tagHandle","tagName","readAnchorProperty","readAlias","parentIndent","nodeContext","allowToSeek","allowBlockStyles","allowBlockScalars","allowBlockCollections","indentStatus","atNewLine","hasContent","typeIndex","typeQuantity","typeList","blockIndent","readDocument","documentStart","directiveName","directiveArgs","hasDirectives","loadDocuments","nullpos","load$1","documents","load_1","loader","load","MAX_REF_DEPTH","MAX_CYCLE_REFS","parseSpec","parseInfo","servers","parseServers","components","schemas","resolveAllRefs","parseSecuritySchemes","rootSecurity","rawPaths","paths","methods","operations","parseOperations","tags","groupByTags","webhooks","parseWebhooks","refCache","refCount","resolveRef","ref","root","parts","p","current","part","deepResolve","node","depth","newSeen","ops","pathStr","pathItem","pathSecurity","pathParams","method","op","operation","parseOperation","opParams","mergedParams","mp","parameters","mapParameters","requestBody","mapRequestBody","docExamples","bodyExamples","ex","scenario","body","jsonContent","be","responses","mapResponses","operationId","hasOwnSecurity","operationSecurity","mergedSecurity","callbacks","parseCallbacks","rawParams","param","parseExamples","rawRequestBody","parseContent","parseResponseHeaders","rawHeaders","example","rawResponses","rawResponse","response","callbackItem","urlExpr","content","mediaType","mt","examples","rawTags","tagMap","tagDescriptions","t","orderedTags","generateExample","prop","merged","sub","loadSpec","url","text","loadYaml","searchTypePriority","buildSearchIndex","spec","wh","search","query","limit","terms","scored","entry","score","allMatch","term","a","b","pa","pb","THEME_KEY","applyTheme","themeMode","config","toggleTheme","next","detectTheme","preference","stored","looksLikeJson","escapeHtml","h","attrs","children","el","child","clear","render","container","copyToClipboard","ta","ok","formatBytes","bytes","k","sizes","formatDuration","ms","icon","d","opts","icons","getActiveEnvironment","env","getBaseUrl","normalizeBaseUrl","baseUrl","formatBaseUrlForDisplay","getNormalizedBaseUrl","getDisplayBaseUrl","createSelect","props","ariaLabel","onChange","className","variant","invalid","dataAttrs","classes","v","opt","o","createInput","placeholder","required","readOnly","modifiers","onInput","VARIANT_MODIFIERS","getButtonClasses","createButton","label","disabled","onClick","span","colorClass","color","bgClass","getMethodColor","m","getStatusColor","normalized","resolveColor","kind","createBadge","createTab","active","context","btn","createResponseCodeTab","setResponseCodeTabActive","createCard","simple","interactive","createCardHeader","header","createCardBody","normalizeNode","createCardHeaderRow","row","trailingEl","normalizeChild","createSectionTitle","title","createSectionTitleWrap","wrap","createSection","section","createBreadcrumb","items","nav","main","link","createLockIcon","configured","iconHtml","baseClass","mod","createModalBase","overlay","modal","isClosed","close","event","modalBase","schemeLabel","schemeBadge","focusNextFrame","createModalField","createModalTextInput","decodeBasicAuth","renderSchemeFields","currentValue","schemeLower","inputWrap","toggleVis","credentials","userInput","passInput","updateBasic","encoded","openAuthModal","portalRoot","initialScheme","shell","closeBtn","selectedName","fieldsContainer","tabs","tabButtons","isConfigured","tab","tabLabel","dot","updateDescription","descEl","currentScheme","footer","clearBtn","doneBtn","isSchemeConfigured","isOperationAuthConfigured","security","toOperationSecurityInfo","auth","resolveAuthHeaders","resolveAuthQuery","resolveAuthCookies","getAuthHeaderPlaceholder","focusedIndex","shortcutHandler","showSearchModal","closeSearchModal","escHint","results","currentResults","renderResults","setFocusedResult","ke","selectResult","fragment","prev","setupSearchShortcut","updateSidebarActiveState","currentRoute","activeEl","href","isActive","isRouteMatch","tagToExpand","group","itemsWrap","scrollTarget","renderSidebar","version","topSection","collapseBtn","titleBlock","titleWrap","authState","schemeNames","hasToken","authBtn","themeBtn","envSelect","renderEnvironmentSelector","searchWrap","searchIcon","searchInput","kbd","overviewItem","createOverviewNavItem","createTagGroup","whGroup","whHeader","createGroupHeader","whItems","createNavItem","isActiveWebhook","schemaNames","schemasGroup","schemasHeader","schemasItems","isActiveSchema","credit","activeItem","createTagGroupHeader","isActiveTag","routeForOp","createEndpointNavItem","chevronBtn","methodBadge","iconSlot","lockEl","canonical","createSummaryLine","metrics","methodCounts","emptyText","metric","orderedMethods","createConnectionSettingsSections","sections","authSection","createAuthenticationSection","cardRefs","card","top","typeText","configureBtn","renderOverview","pageSlot","_asideSlot","authRequiredCount","deprecatedCount","getMethodBreakdownFromOperations","connectionSections","serversSection","curState","initialEnvs","server","nameWrap","iconEl","tagsSection","createTagCard","webhooksSection","methodBreakdown","getMethodBreakdown","counts","getSchemaTypeLabel","renderSchemaBody","rowData","renderSchemaNode","hasExpandable","isExpanded","nextExpanded","setRowsExpanded","renderSchemaViewer","rootType","schemaContainer","schemaBody","titleEl","hasNestedLevels","anyExpanded","typeBadge","headerRow","renderParametersCard","params","headerTitle","withEnumAndDefault","rowsEl","mainRow","metaWrap","descCol","enumValues","hasDefault","enumWrap","val","paramsWrap","paramsBody","addExpandableNode","parent","childSchema","expandable","hasChildren","createRow","childContainer","renderChildren","setRowExpanded","propName","propSchema","keyword","variants","rowClass","nameWrapper","metaWrapper","hasEnumValues","defaultValue","hasDefaultValue","isDefaultInEnum","schemaValuesEqual","constraints","getConstraints","constraintsRow","orderedEnumValues","stringifySchemaValue","isDefaultValue","includeDefault","rows","expanded","left","right","executeRequest","timeout","controller","timer","isFormData","fetchOptions","cleanHeaders","duration","responseBody","size","responseHeaders","autoCaptureBearerToken","error","bearerSchemeName","headerToken","buildRequestUrl","pathTemplate","queryParams","fullUrl","searchParams","queryString","generateSnippets","generateCurl","generateJS","generatePython","generateGo","lines","headerEntries","extractParamExampleSets","getParamValue","setName","enumIdx","setNames","sets","values","paramWithEnum","defaultValues","extractExamples","generated","getExampleLabel","formatExampleValue","deepFreeze","Response","mode","escapeHTML","inherit$1","original","objects","SPAN_CLOSE","emitsWrappingTags","scopeToCSSClass","pieces","x","HTMLRenderer","parseTree","newNode","TokenTree","builder","TokenTreeEmitter","emitter","lookahead","concat","anyNumberOfTimes","optional","stripOptionsFromArgs","either","countMatchGroups","startsWith","lexeme","BACKREF_RE","_rewriteBackreferences","regexps","joinWith","numCaptures","regex","offset","out","MATCH_NOTHING_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","resp","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","begin","modeOptions","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","skipIfHasPrecedingDot","scopeClassName","_parent","beginKeywords","compileIllegal","compileMatch","compileRelevance","beforeMatchExt","originalMode","COMMON_KEYWORDS","DEFAULT_KEYWORD_SCOPE","compileKeywords","rawKeywords","caseInsensitive","scopeName","compiledKeywords","keywordList","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","warn","deprecated","MultiClassError","remapScopeNames","regexes","scopeNames","emit","positions","beginMultiClass","endMultiClass","scopeSugar","MultiClass","compileLanguage","language","langRe","global","MultiRegex","terminators","matchData","ResumableMultiRegex","matcher","m2","buildModeRegex","mm","compileMode","cmode","ext","keywordPattern","expandOrCloneMode","dependencyOnParent","HTMLInjectionError","html","escape","inherit","NO_MATCH","MAX_KEYWORD_HITS","HLJS","hljs","languages","aliases","plugins","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","shouldNotHighlight","languageName","blockLanguage","block","getLanguage","highlight","codeOrLanguageName","optionsOrCode","ignoreIllegals","fire","_highlight","codeToHighlight","continuation","keywordHits","keywordData","matchText","processKeywords","modeBuffer","lastIndex","buf","word","keywordRelevance","relevance","cssClass","emitKeyword","processSubLanguage","continuations","highlightAuto","processBuffer","emitMultiClass","klass","startNewMode","endOfMode","matchPlusRemainder","matched","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","doEndMatch","endMode","origin","processContinuations","list","lastMatch","processLexeme","textBeforeMatch","err","processed","iterations","md","beforeMatch","processedCount","justTextHighlightResult","languageSubset","plaintext","autoDetection","sorted","best","secondBest","updateClassName","element","currentLang","resultLang","highlightElement","configure","userOptions","initHighlighting","highlightAll","initHighlightingOnLoad","wantsHighlight","boot","registerLanguage","languageDefinition","lang","error$1","registerAliases","unregisterLanguage","listLanguages","aliasList","upgradePluginAPI","plugin","addPlugin","removePlugin","deprecateHighlightBlock","bash","VAR","BRACED_VAR","SUBST","HERE_DOC","QUOTE_STRING","ESCAPED_QUOTE","APOS_STRING","ESCAPED_APOS","ARITHMETIC","SH_LIKE_SHELLS","KNOWN_SHEBANG","FUNCTION","KEYWORDS","LITERALS","PATH_MODE","SHELL_BUILT_INS","BASH_BUILT_INS","ZSH_BUILT_INS","GNU_CORE_UTILS","go","ATTRIBUTE","PUNCTUATION","LITERALS_MODE","python","RESERVED_WORDS","PROMPT","LITERAL_BRACKET","STRING","digitpart","pointfloat","NUMBER","COMMENT_TYPE","PARAMS","langMap","SUPPORTED","highlightCode","validateParam","num","validateNumberConstraints","validateBody","bodyStr","contentType","validateAll","errors","paramName","defaultCT","clearValidationErrors","showValidationErrors","errorEl","textarea","createErrorPlaceholder","field","MIN_TEXTAREA_HEIGHT","autoResizeTextarea","syncScrollFromTextarea","pre","createEditorPanel","initialValue","editorWrap","highlightPre","highlightCodeEl","updateHighlight","hlLang","COPY_FEEDBACK_MS","createCopyButton","copiedAriaLabel","renderTryIt","initialResponse","tryItLayout","responseSection","responseContainer","renderResponse","renderRequestCodeBlock","sendBtn","collectRequestConfigImpl","bodyTextarea","tryItBody","onConfigChange","paramExampleSets","firstTabLabel","snippets","getCodeParams","getBodyTextForCopy","updateSnippetsCode","editor","snippetIndex","sn","sectionBody","sectionTitle","requestControls","hasRequestControls","chosen","applyParamValues","tabsWrap","activeTabIndex","routePreviewInput","routePreviewEl","firstTabPanel","tabBtn","paramsSection","pathGroup","createParamInput","queryGroup","routePreview","routePreviewHeader","copyRouteBtn","routeInputRow","bodySection","bodyHeader","copyBodyBtn","isMultipart","formWrap","properties","requiredFields","fieldName","fieldSchema","isRequired","fieldRow","fieldLabel","fileInput","textInput","initialExample","initialVal","exampleSelect","headersSection","headersHeader","headersContainer","createHeaderRow","authHeaders","headerName","headerValue","addHeaderBtn","initialParams","initialSnippets","langEditor","langPanel","codeExampleSection","codeExampleHeader","copyCodeBtn","allPanels","setPanelVisible","panel","visible","cardBody","panelsContainer","sendBtnWrap","notify","getParamExampleValue","fromSet","wrapper","inputEl","enumOptions","inputType","nameInput","valueInput","removeBtn","pathParamInputs","queryParamInputs","authQuery","headerRows","authCookies","cookiePairs","existingCookie","multipartWrap","formData","fieldType","bodyTab","headersTab","metaEl","codeBadge","copyBtn","showCopyToast","bodyWrapper","bodyContent","bodyInner","codeEl","displayText","formatResponseBody","headersContent","headersInner","headersTextarea","pretty","existing","toast","renderRouteNavigation","getAdjacentRoutes","createRouteCard","direction","routePath","meta","side","linear","buildLinearRoutes","findCurrentIndex","seenEndpoints","endpointKey","webhook","renderEndpoint","asideSlot","asidePane","baseUrlNorm","baseUrlDisplay","breadcrumbItems","tagNames","pathSegments","seg","isParam","matchesTag","breadcrumb","warnIcon","hasConfiguredAuth","authBadge","lock","breadcrumbWrap","renderHeadersSection","visibleParams","requestSection","renderParametersSection","renderRequestBodySection","emptyHint","responsesRendered","renderResponsesSection","routeNav","appendRouteNav","renderCallbacksSection","getFirstResponseExample","contentTypes","hName","hValue","r","valueWrap","pathCount","queryCount","headerContent","renderResponseHeadersBlock","entries","hdr","typeLabel","listBody","codesWrap","activeCode","activeContentType","tabData","firstContentType","schemaType","bodyEl","toggleCollapse","headersEl","contentTypeSpan","schemaTypeBadge","bodyContainer","initialData","callback","callbackBlock","cbOp","opBlock","opHeader","ct","respRow","codes","a2","b2","statusText","hasSchemeValue","renderTagPage","getTagMethodBreakdown","authRequired","opsSection","renderWebhookPage","webhookBadge","paramSection","renderParamsTable","respSection","respBlock","createContentArea","page","mainPane","aside","setContentAreaAside","hasAside","createEmptyStatePage","rootEl","sidebarEl","pageEl","mainEl","asideEl","prevRoute","prevSpecLoaded","prevEnvState","mountApp","themeConfig","expandTrigger","updateContent","unmountApp","specLoaded","currentMainEl","currentAsideEl","currentPageEl","mainScroll","envState","isSameRoute","updateEnvironmentState","findOperation","schemaSection","w","_config","breadcrumbHome","tryItEl","authHeaderNames","remainingRows","insertBeforeRow","STORAGE_KEY","loadPersisted","savePersisted","getSchemePriority","httpScheme","getPreferredSchemeName","names","bestName","bestPriority","priority","areAuthStatesEqual","aEntries","bEntries","reconcileAuthWithSecuritySchemes","availableSchemeNames","debounce","mounted","currentApi","cleanupSearchShortcut","mount","preservedAuth","unmount","configEnvs","configActiveEnv","persisted","saveDebounce","rawSpec","initialSpecUrl","parsed","envs","reconciledAuth","createApi","routerNavigate","OBSERVED_ATTRIBUTES","_PureDocsElement","oldValue","newValue","rawEnvs","parseJsonAttr","toTheme","parseEnvironmentArrayAttr","PureDocsElement","attrName","endpoints","usedNames","endpoint","baseName","n","PureDocs"],"mappings":"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;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAEQC,IAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP;AAAA,MACA;AAAA,IACN;AAAA,IACI,UAAU;A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","x_google_ignoreList":[3,31,32,33,34,35]}