asyncapi-viewer 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -0
- package/dist/asyncapi-viewer.iife.js +2477 -0
- package/dist/asyncapi-viewer.iife.js.map +1 -0
- package/dist/asyncapi-viewer.js +12484 -0
- package/dist/asyncapi-viewer.js.map +1 -0
- package/package.json +72 -0
- package/theme/asyncapi-theme.css +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncapi-viewer.iife.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","e","o","P","S","Z","i","t","e","r","o","SCALAR","BREAK","SKIP","REMOVE","visit","SCALAR","map","floatNaN","floatExp","float","intIdentify","intResolve","intStringify","intOct","int","intHex","schema","map","intOct","int","intHex","floatNaN","floatExp","float","intIdentify","schema","map","map","schema","map","schema$2","map","SCALAR","Document","SCALAR","Document","Document","parseOptions","parseYaml","setIf","schema","nothing","decode","encode","base","normalize","mdurl.parse","mdurl.encode","mdurl.format","mdurl.decode","e","s","t","n","i","r","MarkdownIt","nothing","unsafeHTML","nothing","nothing","nothing","tokens","nothing","nothing","nothing","nothing","LitElement","nothing","exports","__defProp$1","__exportAll$1","target","name","all","no_symbols","t$2","e$4","s$2","o$4","n$2","o","t","e","s","r$2","i$4","S$2","n","c$2","i$3","e$3","h$1","r$1","o$3","n$1","a$1","c$1","l$1","p$1","d$1","u$1","i","f$1","b$1","y$1","h","r","t$1","i$2","s$1","e$2","o$2","l","c","a","u","d","f","v","_","m","p","g","$","y","b","E","A","C","P$1","V","N","x","S$1","I","L","z","H","M","R","k","Z$1","B","D","i$1","\"finalized\"","o$1","ALIAS","DOC","MAP","PAIR","SCALAR$1","SEQ","NODE_TYPE","isAlias","node","isDocument","isMap","isPair","isScalar","isSeq","isCollection","isNode","hasAnchor","BREAK$1","SKIP$1","REMOVE$1","visit$1","visitor_","initVisitor","visitor","visit_","ctrl","callVisitor","key","path","replaceNode","ci","ck","cv","parent","pt","escapeChars","escapeTagName","tn","ch","Directives","yaml","tags","copy","res","parts","line","onError","handle","prefix","version","isValid","source","verbatim","suffix","error","tag","lines","tagEntries","tagNames","doc","anchorIsValid","anchor","msg","anchorNames","anchors","root","findNewAnchor","exclude","createNodeAnchors","aliasObjects","sourceObjects","prevAnchors","ref","applyReviver","val","len","v0","v1","reviver","obj","toJS","value","ctx","arg","data","NodeBase","type","mapAsMap","maxAliasCount","onAnchor","count","Alias","nodes","found","getAliasCount","src","item","kc","vc","isScalarValue","Scalar","defaultTagPrefix","findTagObject","tagName","match","tagObj","createNode","map","aliasDuplicateObjects","schema","onTagObj","collectionFromPath","isEmptyPath","Collection","it","rest","keepScalar","allowScalar","stringifyComment","str","indentComment","comment","indent","lineComment","FOLD_FLOW","FOLD_BLOCK","FOLD_QUOTED","foldFlowLines","lineWidth","text","minContentWidth","endStep","folds","escapedFolds","end","indentAtStart","split","prev","overflow","escStart","escEnd","mode","consumeMoreIndentedLines","next","j","onOverflow","onFold","fold","start","getFoldOptions","isBlock","containsDocumentMarker","lineLengthOverLimit","limit","indentLength","strLen","doubleQuotedString","json","minMultiLineLength","code","implicitKey","singleQuotedString","quotedString","qs","singleQuote","hasDouble","hasSingle","blockEndNewlines","blockString","blockQuote","literal","chomp","endStart","endNlPos","onChompKeep","startWithSpace","startEnd","startNlPos","header","commentString","onComment","foldedValue","literalFallback","foldOptions","body","plainString","inFlow","indentStep","actualString","test","compat","stringifyString","ss","_stringify","_type","defaultKeyType","defaultStringType","createStringifyContext","opt","options","getTagObject","testMatch","stringifyProps","props","stringify","stringifyPair","keyComment","simpleKeys","explicitKey","allNullValues","keyCommentDone","chompKeep","vsb","vcb","valueComment","indentSeq","valueCommentDone","valueStr","ws","cs","vs0","nl0","hasNewline","flow","hasPropsLine","sp0","warn","logLevel","warning","MERGE_KEY","merge","addMergeToJSMap","isMergeKey","resolveAliasValue","mergeValue","srcMap","addPairToJSMap","jsKey","stringKey","stringifyKey","jsValue","strCtx","strKey","jsonStr","createPair","Pair","stringifyCollection","collection","stringifyFlowCollection","stringifyBlockCollection","itemCtx","itemIndent","items","addCommentBefore","ik","blockItemPrefix","flowChars","fcPadding","reqNewline","linesAtValue","iv","sum","ic","findPair","YAMLMap","add","replacer","keepUndefined","_pair","pair","sortEntries","overwrite","Type","map$1","YAMLSeq","idx","asItemIndex","seq","string","nullTag","boolTag","stringifyNumber","num","format","minFractionDigits","floatNaN$1","floatExp$1","float$1","dot","intIdentify$2","intResolve$1","intAsBigInt","offset","radix","intStringify$1","intOct$1","int$1","intHex$1","schema$2","intIdentify$1","stringifyJSON","jsonScalars","schema$1","binary","buffer","buf","resolvePairs","cn","createPairs","pairs","iterable","keys","YAMLOMap","omap","seenKeys","boolStringify","trueTag","falseTag","floatNaN","floatExp","float","intIdentify","intResolve","sign","intStringify","intBin","intOct","int","intHex","YAMLSet","keepPair","set","parseSexagesimal","asBigInt","stringifySexagesimal","_60","intTime","floatTime","timestamp","year","month","day","hour","minute","second","millisec","date","tz","schemas","tagsByName","coreKnownTags","getTags","schemaTags","schemaName","customTags","addMergeTag","sortMapEntriesByKey","Schema","resolveKnownTags","toStringDefaults","sortMapEntries","stringifyDocument","hasDirectives","dir","contentComment","dc","Document$1","_replacer","assertCollection","asStr","anchorPrefix","setAnchors","sv","jsonArg","contents","YAMLError","message","pos","YAMLParseError","YAMLWarning","prettifyError","lc","col","lineStr","trimStart","pointer","resolveProps","spaceBefore","atNewline","startOnNewline","hasSpace","commentSep","reqSpace","tab","newlineAfterProp","comma","token","tokens","indicator","cb","last","parentIndent","containsNewline","st","flowIndentCheck","fc","mapIncludes","uniqueKeys","isEqual","search","startColMsg","resolveBlockMap","bm","commentEnd","collItem","keyProps","sep","keyStart","keyNode","composeNode","composeEmptyNode","valueProps","valueNode","resolveBlockSeq","bs","resolveEnd","blockMsg","resolveFlowCollection","fcName","coll","atRoot","prevItemComment","endRange","expectedEnd","ce","ee","cePos","resolveCollection","CN","Coll","composeCollection","tagToken","nl","lastProp","expType","kt","resolveBlockScalar","scalar","parseBlockScalarHeader","splitLines","chompStart","content","trimIndent","contentStart","prevMoreIndented","crlf","length","strict","ts","first","resolveFlowScalar","_onError","rel","plainValue","singleQuotedValue","doubleQuotedValue","valueEnd","re","badChar","unfoldLines","trimEnd","trimBoth","lm","foldNewline","cc","escapeCodes","parseCharCode","raw","wsStart","composeScalar","findScalarTagByName","findScalarTagByTest","range","matchWithTest","atKey","directives","emptyScalarPosition","before","isSrcToken","composeAlias","alias","composeDoc","contentEnd","getErrorPos","parsePrelude","atComment","afterEmptyLine","prelude","Composer","afterDoc","forceDoc","endOffset","BREAK","SKIP","REMOVE","visit","cst","_visit","field","index","tok","tokenType","isEmpty","hexDigits","tagChars","flowIndicatorChars","invalidAnchorChars","isNotAnchorChar","Lexer","incomplete","dt","state","dirEnd","sp","ch0","ch1","quote","qb","lastChar","allowEmpty","allowTabs","LineCounter","low","high","mid","includesToken","list","findNonEmptyIndex","isFlowToken","getPrevProps","getFirstKeyStartProps","arrayPushArray","fixFlowSeqItems","Parser","onNewLine","lexeme","top","bv","atMapIndent","atNextItem","fs","docEnd","parseOptions$1","prettyErrors","parseDocument","parser","lineCounter","composer","_doc","parse","_reviver","resolveUrl","base","loadDocument","status","response","fetchImpl","url","fail","describe","parsed","parseText","detectVersion","\"asyncapi\"","specVersion","major","isRef","schemaNameOf","id","decodePointerSegment","RefResolver","stripFragment","rootUrl","#docs","rootDoc","#fetch","problems","queue","seenRefs","where","collectRefs","resolveAgainst","#failed","result","#fetchDoc","absolute","baseUrl","hash","safeDecode","walkPointer","MISSING","current","seen","out","encodePointerSegment","rawSegment","segment","fragment","DEFAULT_NORMALIZE_OPTIONS","isObj","Context","resolver","#anchors","describeType","itemWhere","located","used","section","slug","candidate","w","\"name\"","description","\"description\"","ext","\"externalDocs\"","\"url\"","protocol","entry","traits","\"traits\"","merged","trait","patch","forbidden","mergeObjects","securitySchemeDetails","facts","fact","scheme","\"type\"","\"openIdConnectUrl\"","flows","\"flows\"","kind","auth","\"authorizationUrl\"","\"tokenUrl\"","refresh","\"refreshUrl\"","scopes","\"availableScopes\"","\"scopes\"","extensions","over","existing","PRIMITIVES","LOGICAL_FORMATS","isAvroFormat","schemaFormat","avroToNode","isAvro","build","fullName","namespace","ns","input","childPath","members","nullable","inner","variantTitle","primitive","built","ancestors","scope","logical","child","CONSTRAINT_ORDER","isTreeFormat","buildSchema","\"schemaFormat\"","\"schema\"","rawSchema","buildNode","refName","typesOf","flatten","firstNonEmpty","firstString","\"enum\"","\"const\"","\"default\"","\"examples\"","\"deprecated\"","\"readOnly\"","\"writeOnly\"","mergeConstraints","required","\"required\"","byName","properties","\"properties\"","at","itemsPart","\"items\"","additional","\"additionalProperties\"","patterns","\"patternProperties\"","pattern","\"oneOf\"","\"anyOf\"","composition","variantNode","title","\"title\"","part","allOf","\"allOf\"","lists","normalizeV2","schemaFormatDefault","info","\"info\"","\"version\"","\"tags\"","setIf$1","\"termsOfService\"","\"defaultContentType\"","contact","\"contact\"","\"email\"","license","\"license\"","licenseName","V2State","\"components\"","\"servers\"","\"channels\"","components","server","\"protocol\"","\"security\"","\"bindings\"","\"protocolVersion\"","\"variables\"","variable","schemes","\"securitySchemes\"","req","\"messages\"","\"schemas\"","channel","\"publish\"","\"subscribe\"","keyword","op","\"parameters\"","servers","parameter","\"location\"","action","\"operationId\"","channelKey","\"message\"","\"summary\"","oneOf","anchorSeed","\"contentType\"","payload","\"payload\"","headers","\"headers\"","correlation","\"correlationId\"","location","ex","example","normalizeV3","setIf","pick","V3State","\"operations\"","host","\"host\"","pathname","\"pathname\"","address","\"address\"","ordered","msgKey","payloadRaw","\"action\"","channelRef","\"channel\"","reply","\"reply\"","labels","channelMessages","opKey","listed","normalize","inheritTagDescriptions","described","fill","OPTION_SPECS","\"status\"","\"specVersions\"","\"values\"","\"applyTraits\"","\"keys\"","DEFAULTS","TRUE","FALSE","HTML_GLOBAL","BY_KEY","lookupOption","attribute","toAttributeName","option","PREFIX","parseOptions","slot","rawName","attrs","spec","coerce","INVALID","wanted","expected","headerStyles","downloadIcon","moonIcon","sunIcon","renderHeader","fileName","tagChip","decodeCache","getDecodeCache","cache","decode$1","b1","b2","chr","b3","b4","encodeCache","getEncodeCache","encode$1","keepEscaped","nextCode","Url","protocolPattern","portPattern","simplePathPattern","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","slashesDenoteHost","lowerProto","hec","slashes","simplePath","proto","hostEnd","atSign","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","port","mdurl_exports","build_exports","Any","Cc","Cf","P","S","Z","c1","isInvalidCodePoint","codePoint","replaceCodePoint","codePointToString","BASE91_INVERSE","table","char","decodeTrieDict","inputLength","twoCharBias","dictSize","readSlotCode","dict2AtomCount","atomCount","dict1AtomCount","slotCount","ngramCount","single","decodeDelta","previous","off","runLength","references","poolSize","ngramIndex","readNgramReferences","startSlot","entryLength","pool","write","half","read","readEnd","resultLength","outIndex","htmlDecodeTree","BinTrieFlags","\"VALUE_LENGTH\"","\"FLAG13\"","\"BRANCH_LENGTH\"","\"JUMP_TABLE\"","\"VALUE_MASK\"","CharCodes","\"AMP\"","\"NUM\"","\"SEMI\"","\"EQUALS\"","\"ZERO\"","\"NINE\"","\"LOWER_A\"","\"LOWER_X\"","TO_LOWER_BIT","CONSUMED_SHIFT","CODE_POINT_MASK","CONSUMED_OVERFLOW","longNumericConsumed","unpackConsumed","consumed","packed","isNumber","isHexadecimalCharacter","isAlpha","isEntityInAttributeInvalidEnd","EntityDecoderState","\"EntityStart\"","\"NumericStart\"","\"NumericDecimal\"","\"NumericHex\"","\"NamedEntity\"","DecodingMode","\"Legacy\"","\"Strict\"","\"Attribute\"","determineBranch","branchCount","jumpOffset","nodeIndex","stored","decodeTree","packedKeySlots","branchEnd","readTrieValue","valueLength","parseNumericEntity","numberStart","cp","digitStart","digit","decodeWithTrie","chunkStart","rootJumpOffset","rootBranchCount","entityStart","firstChar","isStrict","rootSlotIndex","bestNodeIndex","bestValueLength","remaining","wordIndex","charIndexInPacked","finalVL","isAttribute","decodeHTMLStrict","htmlString","REBuilder","opts","openRE","open","closeRE","close","atom","level","depth","h16","ls32","tlds_src","web_schema","self","defaultSchemas","tlds_2ch","tlds_default","unpackTlds","defaultOptions","Match","lastIndex","LinkifyIt","linkifyOptions","rebuilder","definition","def","mailHostRe","mailNameRe","schemaRe","fuzzyLinkRe","fuzzyLinkCandidate","fuzzyEmailCandidate","schemaPrefix","schemaDone","fuzzyLinkDone","fuzzyEmailDone","scanFrom","fuzzyCandidate","schemaCandidate","keepOld","maxInt","base$1","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","\"overflow\"","baseMinusTMin","floor","stringFromCharCode","array","callback","mapDomain","domain","encoded","ucs2decode","output","counter","extra","ucs2encode","codePoints","basicToDigit","digitToBasic","flag","adapt","firstTime","delta","numPoints","decode","bias","basic","oldi","baseMinusT","encode","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","punycode","\"ucs2\"","\"decode\"","\"encode\"","__defProp","__exportAll","utils_exports","arrayReplaceAt","asciiTrim","callable","escapeHtml","escapeRE","fromCodePoint","isMdAsciiPunct","isPunctChar","isPunctCharCode","isSpace","isValidEntityCode","isWhiteSpace","lib","normalizeReference","unescapeAll","unescapeMd","wrapper","args","cls","newElements","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","isAsciiTrimmable","parseLinkLabel","marker","prevPos","max","oldPos","disableNested","labelEnd","parseLinkDestination","parseLinkTitle","prev_state","helpers_exports","_typeof","toPrimitive","toPropertyKey","_defineProperty","Token","nesting","attrData","Ruler","chains","rule","altName","chain","fn","beforeName","ruleName","afterName","ignoreInvalid","chainName","default_rules","slf","langName","langAttrs","arr","highlighted","tmpAttrs","tmpToken","env","Renderer","needLf","nextToken","rules","StateCore","md","UNNORMALIZED_NEWLINE_RE","NULL_RE","normalize$1","block","strip_references","curr","inline","isLinkOpen$1","isLinkClose$1","linkify$1","blockTokens","replacements","htmlLinkLevel","currentToken","links","lastPos","ln","fullUrl","urlText","token_o","token_t","token_c","newTokensLength","replacement","newTokens","replacementIndex","newTokenIndex","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inside_autolink","inlineTokens","replace_rare","replace","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","MAX_OPENERS","truncateStack","stack","addReplacement","tokenIdx","applyReplacements","process_inlines","heads","thisLevel","canOpen","canClose","isSingle","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","openQuote","closeQuote","smartquotes","join_alt","text_join","_rules$2","ParserCore","StateBlock","indent_found","from","min","begin","lineIndent","lineStart","keepLastLF","MAX_AUTOCOMPLETED_CELLS","getLine","escapedSplit","isEscaped","startLine","endLine","nextLine","firstCh","secondCh","lineText","columns","aligns","columnCount","silent","oldParentType","terminatorRules","token_to","tableLines","token_tho","token_htro","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","params","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","initial","spaceAfterMarker","adjustTab","oldIndent","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","getNextLine","isContinuation","lineContent","destRes","href","destEndPos","destEndLineNo","titleRes","label","meta","html_blocks_default","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html_block","endsOnBlankLine","heading","tmp","token_i","lheading","paragraph","_rules$1","ParserBlock","maxNesting","hasEmptyLines","prevLine","ok","outTokens","StateInline","token_meta","highSurr","lowSurr","left_flanking","right_flanking","canSplitWord","isTerminatorChar","isAsciiAlpha","isSchemeChar","linkify","protoMin","protoStart","protoLength","link","urlEnd","newline","pmax","ESCAPED","escape","escapedStr","ch2","origStr","buildLastRuns","lastRuns","backtick","openerLength","matchEnd","matchStart","strikethrough_tokenize","scanned","postProcess$1","loneMarkers","delimiters","startDelim","endDelim","strikethrough_postProcess","tokens_meta","strikethrough_default","emphasis_tokenize","postProcess","isStrong","emphasis_post_process","emphasis_default","parseReference","labelStart","image","EMAIL_RE","AUTOLINK_RE","autolink","isLinkOpen","isLinkClose","isLetter","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","fragments_join","_rules","_rules2","ParserInline","config","BAD_PROTO_RE","GOOD_DATA_RE","RECODE_HOSTNAME_FOR","MarkdownIt","presetNameOrOptions","presets","presetName","rules2","missed","plugin","MarkdownItCallable","e$1","defaultLinkOpen","\"link_open\"","renderMarkdown","className","renderInline","infoStyles","renderInfo","anchorId","detailStyles","renderParameters","parameters","isSchemaShaped","chipValue","bindingChip","leaf","scopeLabel","style","flattenBinding","renderBindings","bindings","securityDetails","sc","extensionValue","scopesListed","securityChip","serversHref","details","head","renderSecurity","security","renderReply","generateExample","fromNode","MAX_DEPTH","pickType","\"key\"","asObject","stringFor","integerFor","numberFor","bound","lower","exampleStyles","examplesFor","isPanelOpen","copyIcon","renderShowExample","renderExamplePanel","examples","hasHeaders","panelId","highlight","tokens$1","TOKEN","schemaFormatLabel","treeStyles","TreeState","onChange","#collapsed","#expanded","#all","expanded","#variant","displayChildren","arrayItem","only","displayComposition","typeLabel","countNodes","fields","levels","walk","comp","countDescendants","factsLine","short","chevron","renderSchema","rows","allOpen","bar","renderVariants","renderBranch","renderLeaf","renderRow","parentKey","children","expandable","hidden","circularHref","selected","variant","owner","operationStyles","operationAnchor","renderAddress","renderMessage","treeKey","showExample","renderOperation","direction","exampleCtx","renderOperations","buildNavItems","group","groupFor","operations","bySpec","tagFacets","counts","facet","matches","terms","query","term","filterNav","querying","active","selectedTags","total","tagged","keepSections","groupNav","sectionStyles","tagChips","serverEntry","renderServers","messageEntry","showExamples","renderMessages","renderSchemas","renderProblems","sidebarStyles","closeIcon","renderSidebar","filtered","groups","firstOps","tagsBlock","renderTags","renderItem","listId","menuIcon","ThemeController","#update","#resolved","#mode","#override","win","#media","#onMedia","#observer","dataTheme","parseColor","rgb","hex","toHex","luminance","lin","contrast","la","lb","badgeInk","accent","textSafe","background","ratio","dark","mixed","mix","AsyncAPIViewerElement","#trees","#panels","#options","#hashHandled","#scrollToHash","#onTheme","resolved","#result","#problems","#model","#readOptions","#theme","#onHashChange","#intersection","#deriveColors","el","#observeSections","layout","#sideWidth","#sideWidthBounds","width","now","#resizeStart","#setSideWidth","targets","#visible","entries","#current","#query","#announce","shown","#liveTimer","#liveText","#selectedTags","#drawerOpen","chosen","panel","focusable","#load","probe","property","primary","secondary","send","receive","bg","derived","logo","hasLogo","rootEl","#hasLogo","#derived","#loadedSrc","#messageIndex","#tagsOpen","#downloadUrl","#renderBody","sectionCtx","#tree","#example","navItems","menu","#closeDrawer","#openDrawer","main","#trapFocus","#setQuery","#renderResizeHandle","ANCHOR","CONSTRAINT_KEYS","checkDocument","checkAnchors","serverIds","schemaIds","checkMessage","checkNode","here","isRoot","sameList","expectedPath","isArray","itemChildren"],"sources":["../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/yaml/browser/dist/nodes/identity.js","../node_modules/yaml/browser/dist/visit.js","../node_modules/yaml/browser/dist/doc/directives.js","../node_modules/yaml/browser/dist/doc/anchors.js","../node_modules/yaml/browser/dist/doc/applyReviver.js","../node_modules/yaml/browser/dist/nodes/toJS.js","../node_modules/yaml/browser/dist/nodes/Node.js","../node_modules/yaml/browser/dist/nodes/Alias.js","../node_modules/yaml/browser/dist/nodes/Scalar.js","../node_modules/yaml/browser/dist/doc/createNode.js","../node_modules/yaml/browser/dist/nodes/Collection.js","../node_modules/yaml/browser/dist/stringify/stringifyComment.js","../node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../node_modules/yaml/browser/dist/stringify/stringifyString.js","../node_modules/yaml/browser/dist/stringify/stringify.js","../node_modules/yaml/browser/dist/stringify/stringifyPair.js","../node_modules/yaml/browser/dist/log.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../node_modules/yaml/browser/dist/nodes/Pair.js","../node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../node_modules/yaml/browser/dist/nodes/YAMLMap.js","../node_modules/yaml/browser/dist/schema/common/map.js","../node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../node_modules/yaml/browser/dist/schema/common/seq.js","../node_modules/yaml/browser/dist/schema/common/string.js","../node_modules/yaml/browser/dist/schema/common/null.js","../node_modules/yaml/browser/dist/schema/core/bool.js","../node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../node_modules/yaml/browser/dist/schema/core/float.js","../node_modules/yaml/browser/dist/schema/core/int.js","../node_modules/yaml/browser/dist/schema/core/schema.js","../node_modules/yaml/browser/dist/schema/json/schema.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../node_modules/yaml/browser/dist/schema/tags.js","../node_modules/yaml/browser/dist/schema/Schema.js","../node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../node_modules/yaml/browser/dist/doc/Document.js","../node_modules/yaml/browser/dist/errors.js","../node_modules/yaml/browser/dist/compose/resolve-props.js","../node_modules/yaml/browser/dist/compose/util-contains-newline.js","../node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../node_modules/yaml/browser/dist/compose/util-map-includes.js","../node_modules/yaml/browser/dist/compose/resolve-block-map.js","../node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../node_modules/yaml/browser/dist/compose/resolve-end.js","../node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../node_modules/yaml/browser/dist/compose/compose-collection.js","../node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../node_modules/yaml/browser/dist/compose/compose-scalar.js","../node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../node_modules/yaml/browser/dist/compose/compose-node.js","../node_modules/yaml/browser/dist/compose/compose-doc.js","../node_modules/yaml/browser/dist/compose/composer.js","../node_modules/yaml/browser/dist/parse/cst-visit.js","../node_modules/yaml/browser/dist/parse/cst.js","../node_modules/yaml/browser/dist/parse/lexer.js","../node_modules/yaml/browser/dist/parse/line-counter.js","../node_modules/yaml/browser/dist/parse/parser.js","../node_modules/yaml/browser/dist/public-api.js","../src/load/loader.ts","../src/load/refs.ts","../src/model/context.ts","../src/model/avro.ts","../src/model/schema.ts","../src/model/v2.ts","../src/model/v3.ts","../src/model/normalize.ts","../src/options.schema.json","../src/options.ts","../src/render/header.ts","../src/render/tag.ts","../node_modules/mdurl/lib/decode.mjs","../node_modules/mdurl/lib/encode.mjs","../node_modules/mdurl/lib/format.mjs","../node_modules/mdurl/lib/parse.mjs","../node_modules/mdurl/index.mjs","../node_modules/uc.micro/build/index.mjs","../node_modules/entities/dist/decode-codepoint.js","../node_modules/entities/dist/internal/decode-shared.js","../node_modules/entities/dist/generated/decode-data-html.js","../node_modules/entities/dist/internal/bin-trie-flags.js","../node_modules/entities/dist/decode.js","../node_modules/linkify-it/build/index.mjs","../node_modules/punycode.js/punycode.es6.js","../node_modules/markdown-it/dist/markdown-it.mjs","../node_modules/lit-html/directive.js","../node_modules/lit-html/directives/unsafe-html.js","../src/render/markdown.ts","../src/render/info.ts","../src/render/details.ts","../src/util/example.ts","../src/render/example.ts","../src/render/format.ts","../src/render/tree.ts","../src/render/operation.ts","../src/render/nav.ts","../src/render/sections.ts","../src/render/sidebar.ts","../src/styles/base.ts","../src/styles/tokens.ts","../src/theme/theme.ts","../src/util/color.ts","../src/element.ts","../src/model/invariants.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (isMap(node))\n return visitor.Map?.(key, node, path);\n if (isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (isPair(node))\n return visitor.Pair?.(key, node, path);\n if (isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n const tags = {};\n visit(doc.contents, (_key, node) => {\n if (isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (isScalar(ref.node) || isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n constructor(source) {\n super(ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n if (ctx?.maxAliasCount === 0)\n throw new ReferenceError('Alias resolution is disabled');\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit(doc, {\n Node: (_key, node) => {\n if (isAlias(node) || hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n if (found && ctx) {\n const { anchors, doc, maxAliasCount } = ctx;\n let data = anchors.get(found);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS(found, null, ctx);\n data = anchors.get(found);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, found, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const source = this.resolve(ctx.doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n return ctx.anchors.get(source).res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n constructor(value) {\n super(SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (isDocument(value))\n value = value.contents;\n if (isNode(value))\n return value;\n if (isPair(value)) {\n const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[MAP]\n : Symbol.iterator in Object(value)\n ? schema[SEQ]\n : schema[MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && isScalar(node) ? node.value : node;\n else\n return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.BLOCK_FOLDED:\n case Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trailingComma: false,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n if (anchor && anchorIsValid(anchor)) {\n anchors.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : isScalar(node)\n ? stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n isCollection(key) ||\n (isScalar(key)\n ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n console.warn(warning);\n }\n}\n\nexport { debug, warn };\n","import { isScalar, isSeq, isAlias, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (isScalar(key) &&\n (!key.type || key.type === Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (isSeq(source))\n for (const it of source.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(source))\n for (const it of source)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (!isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\nfunction resolveAliasValue(ctx, value) {\n return ctx && isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (isMergeKey(ctx, key))\n addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (isNode(key) && ctx?.doc) {\n const strCtx = createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n const k = createNode(key, undefined, ctx);\n const v = createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (isNode(key))\n key = key.clone(schema);\n if (isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify(item, itemCtx, () => (comment = null));\n reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n if (i < items.length - 1) {\n str += ',';\n }\n else if (ctx.options.trailingComma) {\n if (ctx.options.lineWidth > 0) {\n reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n (str.length + 2) >\n ctx.options.lineWidth);\n }\n if (reqNewline) {\n str += ',';\n }\n }\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n const k = isScalar(key) ? key.value : key;\n for (const it of items) {\n if (isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair(pair, pair?.value);\n }\n else\n _pair = new Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (isScalar(prev.value) && isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (isScalar(prev) && isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^-?\\d/.test(n) &&\n !n.includes('e')) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n boolTag,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.BLOCK_LITERAL);\n if (type !== Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { createPair, Pair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n if (isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (isPair(item))\n continue;\n else if (isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair(new Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = isPair(item) ? item : new Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (isPair(pair)) {\n key = toJS(pair.key, '', ctx);\n value = toJS(pair.value, key, ctx);\n }\n else {\n key = toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs = createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs = resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs.items) {\n if (isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar(false),\n stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair(key.key, null);\n else\n pair = new Pair(key, null);\n const prev = findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = findPair(this.items, key);\n return !keepPair && isPair(pair)\n ? isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n trueTag,\n falseTag,\n intBin,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float,\n binary,\n merge,\n omap,\n pairs,\n set,\n intTime,\n floatTime,\n timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { floatNaN, floatExp, float } from './core/float.js';\nimport { intOct, intHex, int } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, intTime, floatTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n ['core', schema],\n ['failsafe', [map, seq, string]],\n ['json', schema$1],\n ['yaml11', schema$2],\n ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n binary,\n bool: boolTag,\n float,\n floatExp,\n floatNaN,\n floatTime,\n int,\n intHex,\n intOct,\n intTime,\n map,\n merge,\n null: nullTag,\n omap,\n pairs,\n seq,\n set,\n timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary,\n 'tag:yaml.org,2002:merge': merge,\n 'tag:yaml.org,2002:omap': omap,\n 'tag:yaml.org,2002:pairs': pairs,\n 'tag:yaml.org,2002:set': set,\n 'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge)\n ? schemaTags.concat(merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? getTags(compat, 'compat')\n : compat\n ? getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? coreKnownTags : {};\n this.tags = getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, MAP, { value: map });\n Object.defineProperty(this, SCALAR, { value: string });\n Object.defineProperty(this, SEQ, { value: seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, NODE_TYPE, { value: DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [NODE_TYPE]: { value: DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode(value, tag, ctx);\n if (flow && isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (isEmptyPath(path))\n return !keepScalar && isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (isEmptyPath(path))\n return this.contents !== undefined;\n return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","class YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n","function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexport { resolveProps };\n","function containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexport { containsNewline };\n","import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexport { flowIndentCheck };\n","import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (isScalar(a) && isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n","import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexport { resolveBlockMap };\n","import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexport { resolveBlockSeq };\n","function resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexport { resolveEnd };\n","import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexport { resolveFlowCollection };\n","import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = isNode(res)\n ? res\n : new Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexport { composeCollection };\n","import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexport { resolveBlockScalar };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return unfoldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return unfoldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction unfoldLines(source) {\n const line = /(.*?)\\r?\\n/sy;\n let match = line.exec(source);\n if (!match)\n return source;\n /**\n * The negative lookbehinds in these RegExps are to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari < 16.4 and other old browsers:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let trimEnd, trimBoth;\n try {\n trimEnd = new RegExp('(?<![ \\t])[ \\t]+$');\n trimBoth = new RegExp('^[ \\t]+|(?<![ \\t])[ \\t]+$', 'g');\n }\n catch {\n trimEnd = /[ \\t]+$/;\n trimBoth = /^[ \\t]+|[ \\t]+$/g;\n }\n let res = match[1].replace(trimEnd, '');\n let sep = ' ';\n let pos = line.lastIndex;\n while ((match = line.exec(source))) {\n const lm = match[1].replace(trimBoth, '');\n if (lm === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + lm;\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n try {\n return String.fromCodePoint(code);\n }\n catch {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n}\n\nexport { resolveFlowScalar };\n","import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = isScalar(res) ? res : new Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n try {\n node = composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n }\n catch (error) {\n // Almost certainly here due to a stack overflow\n const message = error instanceof Error ? error.message : String(error);\n onError(token, 'RESOURCE_EXHAUSTION', message);\n }\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n isSrcToken = false;\n }\n }\n node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new YAMLWarning(pos, code, message));\n else\n this.errors.push(new YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n for (let i = 0; i < this.errors.length; ++i)\n doc.errors.push(this.errors[i]);\n for (let i = 0; i < this.warnings.length; ++i)\n doc.warnings.push(this.warnings[i]);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexport { Composer };\n","const BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexport { visit };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return 'block-start';\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n let n = 0;\n loop: while (true) {\n switch (this.charAt(0)) {\n case '!':\n n += yield* this.pushTag();\n n += yield* this.pushSpaces(true);\n continue loop;\n case '&':\n n += yield* this.pushUntil(isNotAnchorChar);\n n += yield* this.pushSpaces(true);\n continue loop;\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n continue loop;\n }\n }\n }\n break loop;\n }\n return n;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n // May exhaust call stack with large `source` array\n if (source.length < 1e5)\n Array.prototype.push.apply(target, source);\n else\n for (let i = 0; i < source.length; ++i)\n target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n arrayPushArray(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n arrayPushArray(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n const docs = Array.from(composer.compose(parser.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","/**\n * Loads an AsyncAPI document: fetch as text, parse as JSON if that works, otherwise YAML,\n * and check that the result looks like an AsyncAPI document of a supported major version.\n *\n * Failures never throw. They come back as a `LoadFailure` naming the URL and the reason, which\n * the element renders in place so a viewer is never an empty box.\n */\nimport { parse as parseYaml, YAMLParseError } from 'yaml';\n\nexport type LoadErrorKind =\n | 'network' // fetch threw: offline, CORS, DNS, mixed content\n | 'http' // response status outside 200-299\n | 'empty' // body has no content\n | 'parse' // neither JSON nor YAML\n | 'not-object' // parsed, but the root is not a mapping\n | 'unsupported'; // missing or unsupported `asyncapi` version\n\nexport interface LoadError {\n kind: LoadErrorKind;\n /** One sentence, no URL (the URL is beside it). */\n message: string;\n status?: number;\n}\n\nexport interface LoadSuccess {\n ok: true;\n url: string;\n /** The document exactly as served, for \"Download spec\". */\n text: string;\n format: 'json' | 'yaml';\n /** The parsed root object. */\n data: Record<string, unknown>;\n /** Exact `asyncapi` field, e.g. \"2.6.0\". */\n specVersion: string;\n specMajor: 2 | 3;\n}\n\nexport interface LoadFailure {\n ok: false;\n url: string;\n error: LoadError;\n}\n\nexport type LoadResult = LoadSuccess | LoadFailure;\n\nexport type FetchLike = (url: string) => Promise<{ ok: boolean; status: number; text(): Promise<string> }>;\n\n/** Resolve `src` against a base (normally `document.baseURI`); returns `src` unchanged if that fails. */\nexport function resolveUrl(src: string, base: string): string {\n try {\n return new URL(src, base).href;\n } catch {\n return src;\n }\n}\n\nexport async function loadDocument(url: string, fetchImpl: FetchLike = (u) => fetch(u)): Promise<LoadResult> {\n let status: number;\n let text: string;\n try {\n const response = await fetchImpl(url);\n status = response.status;\n if (!response.ok) {\n return fail(url, { kind: 'http', status, message: `The server answered with HTTP ${status}.` });\n }\n text = await response.text();\n } catch (e) {\n return fail(url, { kind: 'network', message: `The request failed (${describe(e)}).` });\n }\n const parsed = parseText(text);\n if ('error' in parsed) return fail(url, parsed.error);\n const version = detectVersion(parsed.data);\n if ('error' in version) return fail(url, version.error);\n return { ok: true, url, text, format: parsed.format, data: parsed.data, ...version };\n}\n\n/** JSON first, then YAML. Exported for tests and for future build-time validation. */\nexport function parseText(\n text: string,\n): { format: 'json' | 'yaml'; data: Record<string, unknown> } | { error: LoadError } {\n if (text.trim() === '') return { error: { kind: 'empty', message: 'The document is empty.' } };\n let data: unknown;\n let format: 'json' | 'yaml';\n try {\n data = JSON.parse(text);\n format = 'json';\n } catch {\n try {\n data = parseYaml(text, { prettyErrors: true });\n format = 'yaml';\n } catch (e) {\n const reason = e instanceof YAMLParseError ? e.message.split('\\n')[0] : describe(e);\n return { error: { kind: 'parse', message: `The document is neither valid JSON nor valid YAML: ${reason}` } };\n }\n }\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n return { error: { kind: 'not-object', message: 'The document root must be an object with an \"asyncapi\" field.' } };\n }\n return { format, data: data as Record<string, unknown> };\n}\n\nexport function detectVersion(data: Record<string, unknown>): { specVersion: string; specMajor: 2 | 3 } | { error: LoadError } {\n const raw = data['asyncapi'];\n if (raw === undefined) {\n return { error: { kind: 'unsupported', message: 'The document has no \"asyncapi\" field, so it is not an AsyncAPI document.' } };\n }\n const specVersion = String(raw);\n const major = Number(specVersion.split('.')[0]);\n if (major === 2 || major === 3) return { specVersion, specMajor: major };\n return { error: { kind: 'unsupported', message: `AsyncAPI ${specVersion} is not supported; this viewer renders AsyncAPI 2 and 3.` } };\n}\n\nfunction fail(url: string, error: LoadError): LoadFailure {\n return { ok: false, url, error };\n}\n\nfunction describe(e: unknown): string {\n return e instanceof Error ? e.message : String(e);\n}\n","/**\n * `$ref` resolution.\n *\n * The normalisers are synchronous, so resolution happens in two steps: `preload()` walks the\n * root document, fetches every external document it references (and theirs, recursively),\n * each exactly once, and records what could not be loaded as problems. After that `resolve()`\n * and `deref()` are synchronous lookups.\n *\n * A reference is `<url>#<json pointer>`. The url part is resolved against the document the\n * reference appears in, so references inside an external file are relative to that file.\n * Reference chains (a `$ref` pointing at another `$ref`) are followed with a cycle guard.\n * Cycles in the schema graph itself are not an error here: the tree builder detects them by\n * tracking resolved ids on its way down.\n */\nimport type { Problem } from '../model/types.js';\nimport { parseText, type FetchLike } from './loader.js';\n\nexport interface Resolved {\n /** The target value with its own `$ref`s still in place. */\n value: unknown;\n /** Stable identity: `<absolute url>#<pointer>`. Two refs to the same target share an id. */\n id: string;\n /** The document the target lives in; nested references resolve against it. */\n baseUrl: string;\n /** The pointer within that document, e.g. \"/components/schemas/Order\". */\n pointer: string;\n}\n\nexport interface ResolveFailure {\n error: string;\n}\n\n/** What `deref()` returns: like `Resolved`, but inline values have no id. */\nexport interface Dereferenced {\n value: unknown;\n id: string | undefined;\n baseUrl: string;\n pointer: string;\n}\n\nexport function isRef(value: unknown): value is { $ref: string } {\n return typeof value === 'object' && value !== null && typeof (value as { $ref?: unknown }).$ref === 'string';\n}\n\n/** `#/components/schemas/Order` -> `Order`; undefined for anything else. */\nexport function schemaNameOf(id: string): string | undefined {\n const m = /#\\/components\\/schemas\\/([^/]+)$/.exec(id);\n return m ? decodePointerSegment(m[1]!) : undefined;\n}\n\nexport class RefResolver {\n readonly #docs = new Map<string, Record<string, unknown>>();\n readonly #failed = new Map<string, string>();\n readonly #fetch: FetchLike;\n readonly rootUrl: string;\n\n constructor(rootUrl: string, rootDoc: Record<string, unknown>, fetchImpl: FetchLike = (u) => fetch(u)) {\n this.rootUrl = stripFragment(rootUrl);\n this.#docs.set(this.rootUrl, rootDoc);\n this.#fetch = fetchImpl;\n }\n\n /** Fetch every external document reachable through `$ref`s. Returns load problems. */\n async preload(): Promise<Problem[]> {\n const problems: Problem[] = [];\n const queue: string[] = [this.rootUrl];\n const seenRefs = new Set<string>();\n while (queue.length > 0) {\n const url = queue.shift()!;\n const doc = this.#docs.get(url);\n if (!doc) continue;\n for (const [ref, where] of collectRefs(doc)) {\n const target = stripFragment(resolveAgainst(ref, url));\n const key = `${url} ${ref}`;\n if (seenRefs.has(key)) continue;\n seenRefs.add(key);\n if (target === url || this.#docs.has(target) || this.#failed.has(target)) continue;\n const result = await this.#fetchDoc(target);\n if (typeof result === 'string') {\n this.#failed.set(target, result);\n problems.push({ severity: 'error', message: `Could not load \"${target}\" for $ref \"${ref}\": ${result}`, where });\n } else {\n this.#docs.set(target, result);\n queue.push(target);\n }\n }\n }\n return problems;\n }\n\n /** Resolve one reference string as written at `baseUrl`. Synchronous; needs `preload()` first for external refs. */\n resolve(ref: string, baseUrl: string): Resolved | ResolveFailure {\n const absolute = resolveAgainst(ref, baseUrl);\n const hash = absolute.indexOf('#');\n const url = hash === -1 ? absolute : absolute.slice(0, hash);\n const pointer = hash === -1 ? '' : safeDecode(absolute.slice(hash + 1));\n const doc = this.#docs.get(url);\n if (!doc) {\n const reason = this.#failed.get(url) ?? 'the document was not loaded';\n return { error: `Could not resolve $ref \"${ref}\": ${reason}.` };\n }\n if (pointer !== '' && !pointer.startsWith('/')) {\n return { error: `Could not resolve $ref \"${ref}\": the fragment is not a JSON pointer.` };\n }\n const value = walkPointer(doc, pointer);\n if (value === MISSING) return { error: `Could not resolve $ref \"${ref}\": nothing at \"${pointer}\".` };\n return { value, id: `${url}#${pointer}`, baseUrl: url, pointer };\n }\n\n /**\n * Follow `$ref` chains from a value until a non-reference is reached. Inline values come back\n * unchanged with the caller's `baseUrl` and no id.\n */\n deref(value: unknown, baseUrl: string): Dereferenced | ResolveFailure {\n let current: unknown = value;\n let base = baseUrl;\n let id: string | undefined;\n let pointer = '';\n const seen = new Set<string>();\n while (isRef(current)) {\n const r = this.resolve(current.$ref, base);\n if ('error' in r) return r;\n if (seen.has(r.id)) return { error: `Circular $ref chain at \"${r.id}\".` };\n seen.add(r.id);\n ({ value: current, baseUrl: base, id, pointer } = r);\n }\n return { value: current, id, baseUrl: base, pointer };\n }\n\n /** Every document loaded so far, by absolute URL (the root first). */\n get documents(): ReadonlyMap<string, Record<string, unknown>> {\n return this.#docs;\n }\n\n async #fetchDoc(url: string): Promise<Record<string, unknown> | string> {\n let text: string;\n try {\n const response = await this.#fetch(url);\n if (!response.ok) return `HTTP ${response.status}`;\n text = await response.text();\n } catch (e) {\n return e instanceof Error ? e.message : String(e);\n }\n const parsed = parseText(text);\n return 'error' in parsed ? parsed.error.message : parsed.data;\n }\n}\n\nconst MISSING = Symbol('missing');\n\n/** Every `$ref` string in a document with the JSON pointer of the object that holds it. */\nexport function collectRefs(doc: unknown): Array<[ref: string, where: string]> {\n const out: Array<[string, string]> = [];\n const visit = (node: unknown, pointer: string) => {\n if (typeof node !== 'object' || node === null) return;\n if (Array.isArray(node)) {\n node.forEach((item, i) => visit(item, `${pointer}/${i}`));\n return;\n }\n for (const [key, value] of Object.entries(node)) {\n if (key === '$ref' && typeof value === 'string') out.push([value, pointer]);\n else visit(value, `${pointer}/${encodePointerSegment(key)}`);\n }\n };\n visit(doc, '');\n return out;\n}\n\nexport function walkPointer(doc: unknown, pointer: string): unknown {\n if (pointer === '') return doc;\n let current: unknown = doc;\n for (const rawSegment of pointer.slice(1).split('/')) {\n const segment = decodePointerSegment(rawSegment);\n if (Array.isArray(current)) {\n const index = /^\\d+$/.test(segment) ? Number(segment) : -1;\n if (index < 0 || index >= current.length) return MISSING;\n current = current[index];\n } else if (typeof current === 'object' && current !== null && Object.prototype.hasOwnProperty.call(current, segment)) {\n current = (current as Record<string, unknown>)[segment];\n } else {\n return MISSING;\n }\n }\n return current;\n}\n\nexport function decodePointerSegment(segment: string): string {\n return segment.replace(/~1/g, '/').replace(/~0/g, '~');\n}\n\nexport function encodePointerSegment(segment: string): string {\n return segment.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nfunction resolveAgainst(ref: string, baseUrl: string): string {\n if (ref.startsWith('#')) return `${stripFragment(baseUrl)}${ref}`;\n try {\n return new URL(ref, baseUrl).href;\n } catch {\n return ref;\n }\n}\n\nfunction stripFragment(url: string): string {\n const hash = url.indexOf('#');\n return hash === -1 ? url : url.slice(0, hash);\n}\n\nfunction safeDecode(fragment: string): string {\n try {\n return decodeURIComponent(fragment);\n } catch {\n return fragment;\n }\n}\n","/**\n * Shared state for one normalisation run: the resolver, the problems list, the label options,\n * anchor allocation and the small helpers every normaliser needs.\n */\nimport { schemaNameOf, type RefResolver } from '../load/refs.js';\nimport type { Binding, BindingScope, ExternalDocs, Problem, SectionId, SecurityFlow, SecurityRequirement, Tag } from './types.js';\n\nexport interface Labels {\n publish: string;\n subscribe: string;\n send: string;\n receive: string;\n request: string;\n reply: string;\n}\n\nexport interface NormalizeOptions {\n labels: Labels;\n useChannelAddressAsIdentifier: boolean;\n applyTraits: boolean;\n}\n\nexport const DEFAULT_NORMALIZE_OPTIONS: NormalizeOptions = {\n labels: { publish: 'PUB', subscribe: 'SUB', send: 'SEND', receive: 'RECEIVE', request: 'REQUEST', reply: 'REPLY' },\n useChannelAddressAsIdentifier: false,\n applyTraits: true,\n};\n\nexport type Obj = Record<string, unknown>;\n\nexport function isObj(value: unknown): value is Obj {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function str(value: unknown): string | undefined {\n return typeof value === 'string' ? value : typeof value === 'number' || typeof value === 'boolean' ? String(value) : undefined;\n}\n\n/** A dereferenced object together with where it lives, for nested references. */\nexport interface Located {\n value: Obj;\n baseUrl: string;\n /** Resolved id when the value came through a `$ref`. */\n id: string | undefined;\n}\n\nexport class Context {\n readonly problems: Problem[] = [];\n readonly #anchors = new Map<SectionId, Set<string>>();\n\n constructor(\n readonly resolver: RefResolver,\n readonly options: NormalizeOptions,\n ) {}\n\n problem(severity: Problem['severity'], message: string, where: string): void {\n this.problems.push({ severity, message, where });\n }\n\n /**\n * Dereference `value` (following `$ref` chains) and require an object. Anything else is\n * recorded as a problem at `where` and yields undefined.\n */\n object(value: unknown, baseUrl: string, where: string): Located | undefined {\n if (value === undefined) return undefined;\n const r = this.resolver.deref(value, baseUrl);\n if ('error' in r) {\n this.problem('error', r.error, where);\n return undefined;\n }\n if (!isObj(r.value)) {\n this.problem('warning', `Expected an object at \"${where}\" but found ${describeType(r.value)}; it was skipped.`, where);\n return undefined;\n }\n return { value: r.value, baseUrl: r.baseUrl, id: r.id };\n }\n\n /** Iterate a map-shaped field (`servers`, `channels`, ...) dereferencing each entry. */\n *entries(map: unknown, baseUrl: string, where: string): Generator<[key: string, located: Located, where: string]> {\n if (map === undefined) return;\n if (!isObj(map)) {\n this.problem('warning', `Expected a map at \"${where}\"; it was skipped.`, where);\n return;\n }\n for (const [key, raw] of Object.entries(map)) {\n const itemWhere = `${where}/${key.replace(/~/g, '~0').replace(/\\//g, '~1')}`;\n const located = this.object(raw, baseUrl, itemWhere);\n if (located) yield [key, located, itemWhere];\n }\n }\n\n /** Iterate a list field dereferencing each entry. */\n *items(list: unknown, baseUrl: string, where: string): Generator<[located: Located, where: string]> {\n if (list === undefined) return;\n if (!Array.isArray(list)) {\n this.problem('warning', `Expected a list at \"${where}\"; it was skipped.`, where);\n return;\n }\n for (let i = 0; i < list.length; i++) {\n const itemWhere = `${where}/${i}`;\n const located = this.object(list[i], baseUrl, itemWhere);\n if (located) yield [located, itemWhere];\n }\n }\n\n /** A document-unique anchor for `id` within a section. */\n anchor(section: SectionId, id: string): string {\n const used = this.#anchors.get(section) ?? new Set<string>();\n this.#anchors.set(section, used);\n const base = slug(id);\n let candidate = base;\n for (let n = 2; used.has(candidate); n++) candidate = `${base}-${n}`;\n used.add(candidate);\n return candidate;\n }\n\n tags(list: unknown, baseUrl: string, where: string): Tag[] {\n const out: Tag[] = [];\n for (const [{ value, baseUrl: b }, w] of this.items(list, baseUrl, where)) {\n const name = str(value['name']);\n if (name === undefined) {\n this.problem('warning', `A tag without a name at \"${w}\" was skipped.`, w);\n continue;\n }\n const tag: Tag = { name };\n const description = str(value['description']);\n if (description !== undefined) tag.description = description;\n const ext = this.externalDocs(value['externalDocs'], b, `${w}/externalDocs`);\n if (ext) tag.externalDocs = ext;\n out.push(tag);\n }\n return out;\n }\n\n externalDocs(value: unknown, baseUrl: string, where: string): ExternalDocs | undefined {\n const located = this.object(value, baseUrl, where);\n if (!located) return undefined;\n const url = str(located.value['url']);\n if (url === undefined) {\n this.problem('warning', `externalDocs without a url at \"${where}\" was skipped.`, where);\n return undefined;\n }\n const out: ExternalDocs = { url };\n const description = str(located.value['description']);\n if (description !== undefined) out.description = description;\n return out;\n }\n\n /** `bindings: { kafka: { groupId: x, bindingVersion: y } }` -> one Binding per key. */\n bindings(scope: BindingScope, value: unknown, baseUrl: string, where: string): Binding[] {\n const out: Binding[] = [];\n const located = this.object(value, baseUrl, where);\n if (!located) return out;\n for (const [protocol, entry, w] of this.entries(located.value, located.baseUrl, where)) {\n for (const [key, v] of Object.entries(entry.value)) {\n out.push({ scope, protocol, key, value: v });\n }\n void w;\n }\n return out;\n }\n\n /**\n * Apply `traits` to an object: the object's own fields win, then earlier traits over later\n * ones (the official parser's order). Keys a trait must not carry are dropped with a problem.\n * Returns the object unchanged when `applyTraits` is off or there are no traits.\n */\n withTraits(value: Obj, baseUrl: string, where: string, forbidden: readonly string[]): Obj {\n const traits = value['traits'];\n if (!this.options.applyTraits || traits === undefined) return value;\n let merged: Obj = { ...value };\n delete merged['traits'];\n for (const [trait, w] of this.items(traits, baseUrl, `${where}/traits`)) {\n const patch: Obj = { ...trait.value };\n for (const key of forbidden) {\n if (key in patch) {\n this.problem('warning', `A trait must not define \"${key}\"; that field of the trait at \"${w}\" was ignored.`, w);\n delete patch[key];\n }\n }\n merged = mergeObjects(patch, merged);\n }\n return merged;\n }\n\n /** The last pointer segment of a resolved id: `#/servers/production` -> `production`. */\n static keyOf(id: string | undefined): string | undefined {\n if (id === undefined) return undefined;\n const pointer = id.slice(id.indexOf('#') + 1);\n const last = pointer.split('/').pop();\n return last === undefined || last === '' ? undefined : last.replace(/~1/g, '/').replace(/~0/g, '~');\n }\n\n static schemaName(id: string | undefined): string | undefined {\n return id === undefined ? undefined : schemaNameOf(id);\n }\n}\n\nfunction describeType(value: unknown): string {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'a list';\n return typeof value === 'object' ? 'an object' : `a ${typeof value}`;\n}\n\n/** Deep merge where `over` wins; lists and scalars are replaced, objects merged key by key. */\n/**\n * The facts of a security scheme object that a reader wants beside its name: where an API key\n * goes, the HTTP scheme, the OpenID discovery URL and, for OAuth 2, every flow with its URLs and\n * scopes. v2 flows list scopes under `scopes`, v3 under `availableScopes`; both are read.\n */\nexport function securitySchemeDetails(scheme: Obj): Pick<SecurityRequirement, 'facts' | 'openIdConnectUrl' | 'flows' | 'extensions'> {\n const out: Pick<SecurityRequirement, 'facts' | 'openIdConnectUrl' | 'flows' | 'extensions'> = {};\n const facts: Array<{ label: string; value: string }> = [];\n const fact = (label: string, key: string) => {\n const value = str(scheme[key]);\n if (value !== undefined) facts.push({ label, value });\n };\n switch (str(scheme['type'])) {\n case 'apiKey':\n fact('in', 'in');\n break;\n case 'httpApiKey':\n fact('name', 'name');\n fact('in', 'in');\n break;\n case 'http':\n fact('scheme', 'scheme');\n fact('bearer format', 'bearerFormat');\n break;\n case 'openIdConnect': {\n const url = str(scheme['openIdConnectUrl']);\n if (url !== undefined) out.openIdConnectUrl = url;\n break;\n }\n case 'oauth2': {\n const flows = scheme['flows'];\n if (isObj(flows)) {\n const list: SecurityFlow[] = [];\n for (const [kind, raw] of Object.entries(flows)) {\n if (!isObj(raw)) continue;\n const flow: SecurityFlow = { kind, scopes: [] };\n const auth = str(raw['authorizationUrl']);\n const token = str(raw['tokenUrl']);\n const refresh = str(raw['refreshUrl']);\n if (auth !== undefined) flow.authorizationUrl = auth;\n if (token !== undefined) flow.tokenUrl = token;\n if (refresh !== undefined) flow.refreshUrl = refresh;\n const scopes = raw['availableScopes'] ?? raw['scopes'];\n if (isObj(scopes)) {\n for (const [name, description] of Object.entries(scopes)) flow.scopes.push({ name, description: typeof description === 'string' ? description : '' });\n }\n list.push(flow);\n }\n if (list.length > 0) out.flows = list;\n }\n break;\n }\n }\n if (facts.length > 0) out.facts = facts;\n // Schemes such as `plain` or `scramSha256` have no standard fields, so authors put the\n // connection settings in extensions (Adeo: x-sasl.jaas.config, x-security.protocol).\n const extensions = Object.entries(scheme).filter(([k]) => k.startsWith('x-')).map(([key, value]) => ({ key, value }));\n if (extensions.length > 0) out.extensions = extensions;\n return out;\n}\n\nexport function mergeObjects(base: Obj, over: Obj): Obj {\n const out: Obj = { ...base };\n for (const [key, v] of Object.entries(over)) {\n const existing = out[key];\n out[key] = isObj(existing) && isObj(v) && !('$ref' in v) && !('$ref' in existing) ? mergeObjects(existing, v) : v;\n }\n return out;\n}\n\n/**\n * Anchor slug for an id. Runs of separators collapse to one hyphen so an anchor never contains\n * \"--\", the separator between element id, section and item in page anchors.\n */\nexport function slug(id: string): string {\n return id.replace(/[^A-Za-z0-9_.]+/g, '-').replace(/^-+|-+$/g, '') || 'item';\n}\n","/**\n * Avro schemas as SchemaNode trees, so Kafka documents get the same rows as JSON Schema.\n *\n * Mapping: record -> object (fields as children, `doc` as description, field `default`);\n * a union with `null` marks the field optional and adds \"null\" to the types; a union of\n * several non-null types becomes oneOf variants; array -> \"[]\" item; map -> \"*\" child;\n * enum -> string with enum; fixed and bytes -> string · bytes; logical types become formats.\n * Named types are registered when first seen so later references by name resolve; a\n * reference back to an ancestor becomes a circular leaf.\n */\nimport type { SchemaNode } from './types.js';\n\ntype Avro = string | AvroObject | Avro[];\ninterface AvroObject {\n type: Avro;\n name?: string;\n namespace?: string;\n doc?: string;\n fields?: Array<{ name: string; type: Avro; doc?: string; default?: unknown }>;\n items?: Avro;\n values?: Avro;\n symbols?: string[];\n logicalType?: string;\n size?: number;\n}\n\nconst PRIMITIVES: Record<string, string> = {\n null: 'null',\n boolean: 'boolean',\n int: 'integer',\n long: 'integer',\n float: 'number',\n double: 'number',\n bytes: 'string',\n string: 'string',\n};\n\nconst LOGICAL_FORMATS: Record<string, string> = {\n 'timestamp-millis': 'date-time',\n 'timestamp-micros': 'date-time',\n 'local-timestamp-millis': 'date-time',\n 'local-timestamp-micros': 'date-time',\n date: 'date',\n 'time-millis': 'time',\n 'time-micros': 'time',\n uuid: 'uuid',\n decimal: 'decimal',\n duration: 'duration',\n};\n\nexport function isAvroFormat(schemaFormat: string): boolean {\n return schemaFormat.toLowerCase().includes('avro');\n}\n\n/** Build a tree from an Avro schema; undefined when the value is not an Avro schema at all. */\nexport function avroToNode(schema: unknown, name: string, isRoot: boolean): SchemaNode | undefined {\n if (!isAvro(schema)) return undefined;\n const registry = new Map<string, AvroObject>();\n return build(schema, { name, path: [], required: false, isRoot, ancestors: new Set(), registry });\n}\n\nfunction isAvro(value: unknown): value is Avro {\n return typeof value === 'string' || Array.isArray(value) || (typeof value === 'object' && value !== null && 'type' in value);\n}\n\ninterface Input {\n name: string;\n path: string[];\n required: boolean;\n isRoot: boolean;\n ancestors: Set<string>;\n registry: Map<string, AvroObject>;\n}\n\nfunction fullName(o: AvroObject, ns?: string): string | undefined {\n if (!o.name) return undefined;\n if (o.name.includes('.')) return o.name;\n const namespace = o.namespace ?? ns;\n return namespace ? `${namespace}.${o.name}` : o.name;\n}\n\nfunction build(schema: Avro, input: Input, ns?: string): SchemaNode {\n const node: SchemaNode = { kind: 'node', name: input.name, path: input.path, types: [], required: input.required, constraints: [], children: [] };\n const childPath = input.isRoot ? [] : input.name === '[]' ? [...input.path.slice(0, -1), `${input.path[input.path.length - 1] ?? ''}[]`] : [...input.path, input.name];\n\n // Unions: null makes the field nullable; several real types become variants.\n if (Array.isArray(schema)) {\n const members = schema.filter((m) => m !== 'null');\n const nullable = members.length !== schema.length;\n if (members.length === 1) {\n const inner = build(members[0]!, input, ns);\n if (nullable && !inner.types.includes('null')) inner.types = [...inner.types, 'null'];\n return inner;\n }\n node.types = nullable ? ['null'] : [];\n node.composition = {\n kind: 'oneOf',\n variants: members.map((m, i) => ({ title: variantTitle(m, i), node: build(m, input, ns) })),\n };\n return node;\n }\n\n // Primitive or named reference.\n if (typeof schema === 'string') {\n const primitive = PRIMITIVES[schema];\n if (primitive !== undefined) {\n node.types = [primitive];\n if (schema === 'bytes') node.format = 'bytes';\n return node;\n }\n const ref = input.registry.get(schema) ?? input.registry.get(ns ? `${ns}.${schema}` : schema);\n if (ref) {\n const id = fullName(ref, ns) ?? schema;\n if (input.ancestors.has(id)) {\n node.types = [ref.type === 'record' ? 'object' : 'string'];\n node.circularRef = ref.name ?? schema;\n node.refName = ref.name ?? schema;\n return node;\n }\n const built = build(ref, input, ns);\n built.refName = ref.name ?? schema;\n return built;\n }\n node.types = [];\n node.description = `Unknown Avro type \"${schema}\"`;\n return node;\n }\n\n // Object form: { type, ... } possibly with a nested type definition.\n const o = schema;\n if (typeof o.type !== 'string') return build(o.type, input, o.namespace ?? ns);\n const id = fullName(o, ns);\n if (id) input.registry.set(id, o);\n if (o.name && !input.registry.has(o.name)) input.registry.set(o.name, o);\n const ancestors = id ? new Set(input.ancestors).add(id) : input.ancestors;\n const scope = o.namespace ?? ns;\n if (o.doc) node.description = o.doc;\n const logical = o.logicalType ? LOGICAL_FORMATS[o.logicalType] : undefined;\n if (logical !== undefined) node.format = logical;\n\n switch (o.type) {\n case 'record':\n case 'error': {\n node.types = ['object'];\n if (o.name) node.title = o.name;\n for (const f of o.fields ?? []) {\n const nullable = Array.isArray(f.type) && f.type.includes('null');\n const child = build(f.type, { name: f.name, path: childPath, required: !nullable, isRoot: false, ancestors, registry: input.registry }, scope);\n if (f.doc) child.description = f.doc;\n if (f.default !== undefined && f.default !== null) child.default = f.default;\n node.children.push(child);\n }\n return node;\n }\n case 'enum':\n node.types = ['string'];\n node.enum = o.symbols ?? [];\n if (o.name) node.title = o.name;\n return node;\n case 'array':\n node.types = ['array'];\n if (o.items !== undefined) node.children.push(build(o.items, { name: '[]', path: childPath, required: false, isRoot: false, ancestors, registry: input.registry }, scope));\n return node;\n case 'map':\n node.types = ['object'];\n if (o.values !== undefined) node.children.push(build(o.values, { name: '*', path: childPath, required: false, isRoot: false, ancestors, registry: input.registry }, scope));\n return node;\n case 'fixed':\n node.types = ['string'];\n node.format = node.format ?? 'bytes';\n if (o.size !== undefined) node.constraints.push({ key: 'maxLength', value: o.size });\n return node;\n default: {\n // A primitive with attributes, e.g. { type: \"long\", logicalType: \"timestamp-millis\" }.\n const inner = build(o.type, input, scope);\n if (node.format) inner.format = node.format;\n if (node.description) inner.description = node.description;\n return inner;\n }\n }\n}\n\nfunction variantTitle(m: Avro, i: number): string {\n if (typeof m === 'string') return m;\n if (Array.isArray(m)) return `Variant ${i + 1}`;\n if (m.name) return m.name;\n return typeof m.type === 'string' ? m.type : `Variant ${i + 1}`;\n}\n","/**\n * Builds `SchemaNode` trees from JSON Schema (AsyncAPI flavour) and wraps other formats as\n * `RawSchema`.\n *\n * Rules (spec 3.3 and 4.8):\n * - `required` is read from the parent's array and set on each child.\n * - `type` becomes a list (`[\"string\", \"null\"]` renders as `string | null`); untyped schemas\n * with `properties` or `items` are inferred as object or array.\n * - `allOf` is merged into one node: parts (which may be `$ref`s into other documents) are\n * flattened in order, later parts override same-named properties, `required` is the union.\n * - `oneOf` / `anyOf` keep their variants under `composition`; each variant is a node at the\n * same level as its parent, titled by its `title`, its `$ref` name, or \"Variant N\".\n * - Arrays get one child named \"[]\"; tuple `items` get \"[0]\", \"[1]\", ...\n * - `additionalProperties` and `patternProperties` schemas become children named \"*\" and\n * \"/pattern/\" so map-like objects are not shown as empty.\n * - A `$ref` to a schema already on the way down becomes a leaf with `circularRef`.\n * - Formats we cannot render as a tree (Avro, Protobuf, ...) become `RawSchema`.\n */\nimport { avroToNode, isAvroFormat } from './avro.js';\nimport { Context, isObj, str, type Obj } from './context.js';\nimport type { Composition, Constraint, ConstraintKey, RawSchema, Schema, SchemaNode } from './types.js';\n\nconst CONSTRAINT_ORDER: ConstraintKey[] = [\n 'minimum',\n 'exclusiveMinimum',\n 'maximum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'minLength',\n 'maxLength',\n 'pattern',\n 'minItems',\n 'maxItems',\n 'uniqueItems',\n 'minProperties',\n 'maxProperties',\n];\n\n/** Formats we can render as a tree. Anything else becomes a RawSchema. */\nexport function isTreeFormat(schemaFormat: string): boolean {\n const f = schemaFormat.toLowerCase();\n return f.includes('vnd.aai.asyncapi') || f.includes('json-schema') || f.includes('schema+json') || f.includes('schema+yaml');\n}\n\nexport interface BuildInput {\n /** The schema as written: a schema object, a `$ref`, a boolean, or a Multi Format Schema Object. */\n raw: unknown;\n baseUrl: string;\n where: string;\n /** Root name: \"\" for payload/headers, the key for components.schemas. */\n name: string;\n /** Applies when `raw` is a plain schema object without its own `schemaFormat`. */\n defaultFormat: string;\n}\n\n/** Build a payload, headers or component schema. Handles the Multi Format Schema Object. */\nexport function buildSchema(ctx: Context, input: BuildInput): Schema | undefined {\n if (input.raw === undefined) return undefined;\n const located = ctx.resolver.deref(input.raw, input.baseUrl);\n if ('error' in located) {\n ctx.problem('error', located.error, input.where);\n return undefined;\n }\n let value = located.value;\n let baseUrl = located.baseUrl;\n let id = located.id;\n let format = input.defaultFormat;\n\n // Multi Format Schema Object: { schemaFormat, schema }\n if (isObj(value) && typeof value['schemaFormat'] === 'string' && 'schema' in value) {\n format = value['schemaFormat'];\n const inner = ctx.resolver.deref(value['schema'], baseUrl);\n if ('error' in inner) {\n ctx.problem('error', inner.error, `${input.where}/schema`);\n return undefined;\n }\n value = inner.value;\n baseUrl = inner.baseUrl;\n id = inner.id ?? id;\n }\n\n if (isAvroFormat(format)) {\n const node = avroToNode(value, input.name, true);\n if (node) return node;\n ctx.problem('warning', `The Avro schema at \"${input.where}\" could not be read as a tree; it is shown as a code block.`, input.where);\n return rawSchema(format, value);\n }\n if (!isTreeFormat(format)) return rawSchema(format, value);\n // A root built from its own location still needs an identity so a schema that refers to\n // itself (components.schemas.Node -> #/components/schemas/Node) is caught at the first hop.\n return buildNode(ctx, value, {\n baseUrl,\n id: id ?? `${baseUrl}#${input.where}`,\n viaRef: id !== undefined,\n name: input.name,\n path: [],\n required: false,\n isRoot: true,\n ancestors: new Set(),\n where: input.where,\n });\n}\n\nfunction rawSchema(schemaFormat: string, value: unknown): RawSchema {\n const source = typeof value === 'string' ? value : JSON.stringify(value, null, 2);\n return { kind: 'raw', schemaFormat, source };\n}\n\ninterface NodeInput {\n baseUrl: string;\n /** Identity for cycle detection: the resolved `$ref` id, or the root's own location. */\n id: string | undefined;\n /** True when the schema was reached through a `$ref`, which is what sets `refName`. */\n viaRef: boolean;\n name: string;\n path: string[];\n required: boolean;\n isRoot: boolean;\n ancestors: Set<string>;\n where: string;\n}\n\n/** One flattened `allOf` part: a schema object and the document it lives in. */\ninterface Part {\n value: Obj;\n baseUrl: string;\n where: string;\n}\n\nfunction buildNode(ctx: Context, value: unknown, input: NodeInput): SchemaNode {\n const node: SchemaNode = {\n kind: 'node',\n name: input.name,\n path: input.path,\n types: [],\n required: input.required,\n constraints: [],\n children: [],\n };\n const refName = input.viaRef ? Context.schemaName(input.id) : undefined;\n if (refName !== undefined) node.refName = refName;\n\n if (value === true || value === undefined) return node; // \"any\"\n if (value === false) {\n node.types = ['never'];\n return node;\n }\n if (!isObj(value)) {\n ctx.problem('warning', `Expected a schema at \"${input.where}\" but found ${typeof value}; it was shown as untyped.`, input.where);\n return node;\n }\n\n if (input.id !== undefined && input.ancestors.has(input.id)) {\n node.circularRef = Context.schemaName(input.id) ?? Context.keyOf(input.id) ?? input.id;\n node.types = typesOf(value);\n return node;\n }\n const ancestors = input.id === undefined ? input.ancestors : new Set(input.ancestors).add(input.id);\n\n // Flatten the schema and its allOf parts (recursively) into an ordered list.\n const parts: Part[] = [];\n flatten(ctx, { value, baseUrl: input.baseUrl, where: input.where }, parts, ancestors, new Set());\n\n node.types = firstNonEmpty(parts.map((p) => typesOf(p.value))) ?? [];\n firstString(parts, 'format', (v) => (node.format = v));\n firstString(parts, 'title', (v) => (node.title = v));\n firstString(parts, 'description', (v) => (node.description = v));\n for (const p of parts) {\n if (node.enum === undefined && Array.isArray(p.value['enum'])) node.enum = p.value['enum'];\n if (node.const === undefined && 'const' in p.value) node.const = p.value['const'];\n if (node.default === undefined && 'default' in p.value) node.default = p.value['default'];\n if (node.examples === undefined && Array.isArray(p.value['examples'])) node.examples = p.value['examples'];\n if (p.value['deprecated'] === true) node.deprecated = true;\n if (p.value['readOnly'] === true) node.readOnly = true;\n if (p.value['writeOnly'] === true) node.writeOnly = true;\n }\n node.constraints = mergeConstraints(parts.map((p) => p.value));\n\n const childPath = input.isRoot\n ? []\n : input.name === '[]'\n ? [...input.path.slice(0, -1), `${input.path[input.path.length - 1] ?? ''}[]`]\n : [...input.path, input.name];\n\n // Properties: union of all parts, later parts replace earlier ones in place.\n const required = new Set<string>();\n for (const p of parts) {\n if (Array.isArray(p.value['required'])) for (const r of p.value['required']) if (typeof r === 'string') required.add(r);\n }\n const byName = new Map<string, number>();\n for (const p of parts) {\n const properties = p.value['properties'];\n if (!isObj(properties)) continue;\n for (const [name, raw] of Object.entries(properties)) {\n const built = child(ctx, raw, name, required.has(name), p.baseUrl, ancestors, childPath, `${p.where}/properties/${name}`);\n const at = byName.get(name);\n if (at === undefined) {\n byName.set(name, node.children.length);\n node.children.push(built);\n } else {\n node.children[at] = built;\n }\n }\n }\n if (node.types.length === 0 && node.children.length > 0) node.types = ['object'];\n\n // Items: from the first part that has them.\n const itemsPart = parts.find((p) => p.value['items'] !== undefined);\n if (itemsPart && (node.types.includes('array') || node.types.length === 0)) {\n if (node.types.length === 0) node.types = ['array'];\n const items = itemsPart.value['items'];\n if (Array.isArray(items)) {\n items.forEach((raw, i) => {\n node.children.push(child(ctx, raw, `[${i}]`, false, itemsPart.baseUrl, ancestors, childPath, `${itemsPart.where}/items/${i}`));\n });\n } else {\n node.children.push(child(ctx, items, '[]', false, itemsPart.baseUrl, ancestors, childPath, `${itemsPart.where}/items`));\n }\n }\n\n // Map-like objects.\n for (const p of parts) {\n const additional = p.value['additionalProperties'];\n if (isObj(additional) && !byName.has('*')) {\n byName.set('*', node.children.length);\n node.children.push(child(ctx, additional, '*', false, p.baseUrl, ancestors, childPath, `${p.where}/additionalProperties`));\n }\n const patterns = p.value['patternProperties'];\n if (isObj(patterns)) {\n for (const [pattern, raw] of Object.entries(patterns)) {\n const name = `/${pattern}/`;\n if (byName.has(name)) continue;\n byName.set(name, node.children.length);\n node.children.push(child(ctx, raw, name, false, p.baseUrl, ancestors, childPath, `${p.where}/patternProperties/${pattern}`));\n }\n }\n }\n\n // oneOf / anyOf: from the first part that has one (oneOf wins over anyOf within a part).\n for (const p of parts) {\n const kind = Array.isArray(p.value['oneOf']) ? 'oneOf' : Array.isArray(p.value['anyOf']) ? 'anyOf' : undefined;\n if (!kind) continue;\n const list = p.value[kind] as unknown[];\n const composition: Composition = { kind, variants: [] };\n list.forEach((raw, i) => {\n const located = ctx.resolver.deref(raw, p.baseUrl);\n const where = `${p.where}/${kind}/${i}`;\n if ('error' in located) {\n ctx.problem('error', located.error, where);\n return;\n }\n const variantNode = buildNode(ctx, located.value, {\n baseUrl: located.baseUrl,\n id: located.id,\n viaRef: located.id !== undefined,\n name: input.name,\n path: input.path,\n required: input.required,\n isRoot: input.isRoot,\n ancestors,\n where,\n });\n const title = (isObj(located.value) ? str(located.value['title']) : undefined) ?? variantNode.refName ?? `Variant ${i + 1}`;\n composition.variants.push({ title, node: variantNode });\n });\n if (composition.variants.length > 0) node.composition = composition;\n break;\n }\n return node;\n}\n\n/** Depth-first flattening of `allOf` with a cycle guard; the schema itself comes first. */\nfunction flatten(ctx: Context, part: Part, out: Part[], ancestors: Set<string>, seen: Set<string>): void {\n out.push(part);\n const allOf = part.value['allOf'];\n if (!Array.isArray(allOf)) return;\n allOf.forEach((raw, i) => {\n const where = `${part.where}/allOf/${i}`;\n const located = ctx.resolver.deref(raw, part.baseUrl);\n if ('error' in located) {\n ctx.problem('error', located.error, where);\n return;\n }\n if (!isObj(located.value)) {\n if (located.value !== true) ctx.problem('warning', `Expected a schema at \"${where}\"; it was skipped.`, where);\n return;\n }\n if (located.id !== undefined) {\n if (ancestors.has(located.id) || seen.has(located.id)) {\n ctx.problem('warning', `allOf at \"${where}\" refers back to a schema already being merged; it was skipped.`, where);\n return;\n }\n seen.add(located.id);\n }\n flatten(ctx, { value: located.value, baseUrl: located.baseUrl, where }, out, ancestors, seen);\n });\n}\n\nfunction child(\n ctx: Context,\n raw: unknown,\n name: string,\n required: boolean,\n baseUrl: string,\n ancestors: Set<string>,\n path: string[],\n where: string,\n): SchemaNode {\n const located = ctx.resolver.deref(raw, baseUrl);\n if ('error' in located) {\n ctx.problem('error', located.error, where);\n return { kind: 'node', name, path, types: [], required, constraints: [], children: [] };\n }\n return buildNode(ctx, located.value, {\n baseUrl: located.baseUrl,\n id: located.id,\n viaRef: located.id !== undefined,\n name,\n path,\n required,\n isRoot: false,\n ancestors,\n where,\n });\n}\n\nfunction typesOf(schema: Obj): string[] {\n const t = schema['type'];\n if (typeof t === 'string') return [t];\n if (Array.isArray(t)) return t.filter((x): x is string => typeof x === 'string');\n if (isObj(schema['properties'])) return ['object'];\n if (schema['items'] !== undefined) return ['array'];\n return [];\n}\n\nfunction mergeConstraints(schemas: Obj[]): Constraint[] {\n const out: Constraint[] = [];\n for (const key of CONSTRAINT_ORDER) {\n for (const schema of schemas) {\n const v = schema[key];\n if (typeof v === 'number' || typeof v === 'string' || typeof v === 'boolean') {\n out.push({ key, value: v });\n break;\n }\n }\n }\n return out;\n}\n\nfunction firstNonEmpty(lists: string[][]): string[] | undefined {\n return lists.find((l) => l.length > 0);\n}\n\nfunction firstString(parts: Part[], key: string, set: (v: string) => void): void {\n for (const p of parts) {\n const v = str(p.value[key]);\n if (v !== undefined) {\n set(v);\n return;\n }\n }\n}\n","/**\n * AsyncAPI 2 normaliser. Direction mapping is the rule to remember: in v2, `publish` describes\n * what the application receives and `subscribe` what it sends. The badge keeps the raw keyword\n * (`PUB` / `SUB` by default), the location hint keeps the channel path.\n */\nimport { Context, isObj, securitySchemeDetails, str, type Located, type Obj } from './context.js';\nimport { buildSchema } from './schema.js';\nimport type {\n Channel,\n Contact,\n CorrelationId,\n Document,\n Message,\n MessageExample,\n Operation,\n Parameter,\n SecurityRequirement,\n Server,\n ServerVariable,\n} from './types.js';\n\nexport function normalizeV2(ctx: Context, root: Obj, specVersion: string): Document {\n const base = ctx.resolver.rootUrl;\n const schemaFormatDefault = `application/vnd.aai.asyncapi;version=${specVersion}`;\n const info = ctx.object(root['info'], base, '/info') ?? { value: {}, baseUrl: base, id: undefined };\n if (!isObj(root['info'])) ctx.problem('error', 'The document has no \"info\" object.', '/info');\n\n const doc: Document = {\n specVersion,\n specMajor: 2,\n title: str(info.value['title']) ?? 'Untitled API',\n version: str(info.value['version']) ?? '',\n tags: ctx.tags(root['tags'], base, '/tags'),\n servers: [],\n operations: [],\n messages: [],\n schemas: [],\n problems: ctx.problems,\n };\n setIf(doc, 'description', str(info.value['description']));\n setIf(doc, 'termsOfService', str(info.value['termsOfService']));\n setIf(doc, 'defaultContentType', str(root['defaultContentType']));\n const contact = ctx.object(info.value['contact'], info.baseUrl, '/info/contact');\n if (contact) {\n const c: Contact = {};\n setIf(c, 'name', str(contact.value['name']));\n setIf(c, 'url', str(contact.value['url']));\n setIf(c, 'email', str(contact.value['email']));\n doc.contact = c;\n }\n const license = ctx.object(info.value['license'], info.baseUrl, '/info/license');\n const licenseName = license ? str(license.value['name']) : undefined;\n if (license && licenseName !== undefined) {\n doc.license = { name: licenseName };\n setIf(doc.license, 'url', str(license.value['url']));\n }\n const ext = ctx.externalDocs(root['externalDocs'], base, '/externalDocs');\n if (ext) doc.externalDocs = ext;\n\n const state = new V2State(ctx, base, doc, schemaFormatDefault, isObj(root['components']) ? root['components'] : {});\n state.servers(root['servers']);\n state.componentMessages();\n state.channels(root['channels']);\n state.componentSchemas();\n return doc;\n}\n\nclass V2State {\n readonly serverIds = new Set<string>();\n readonly messagesById = new Map<string, Message>();\n\n constructor(\n readonly ctx: Context,\n readonly base: string,\n readonly doc: Document,\n readonly schemaFormatDefault: string,\n readonly components: Obj,\n ) {}\n\n servers(map: unknown): void {\n for (const [key, located, where] of this.ctx.entries(map, this.base, '/servers')) {\n const { value, baseUrl } = located;\n const server: Server = {\n id: key,\n anchor: this.ctx.anchor('servers', key),\n protocol: str(value['protocol']) ?? '',\n hostDisplay: str(value['url']) ?? '',\n variables: [],\n security: this.security(value['security'], baseUrl, `${where}/security`),\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n bindings: this.ctx.bindings('server', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(server, 'description', str(value['description']));\n setIf(server, 'protocolVersion', str(value['protocolVersion']));\n for (const [name, v] of this.ctx.entries(value['variables'], baseUrl, `${where}/variables`)) {\n const variable: ServerVariable = { name };\n setIf(variable, 'description', str(v.value['description']));\n setIf(variable, 'default', str(v.value['default']));\n if (Array.isArray(v.value['enum'])) variable.enum = v.value['enum'].map(String);\n if (Array.isArray(v.value['examples'])) variable.examples = v.value['examples'].map(String);\n server.variables.push(variable);\n }\n this.doc.servers.push(server);\n this.serverIds.add(key);\n }\n }\n\n /** v2 Security Requirement Objects: `[{ schemeName: [scopes] }]`, looked up in components. */\n security(list: unknown, baseUrl: string, where: string): SecurityRequirement[] {\n const out: SecurityRequirement[] = [];\n if (list === undefined) return out;\n if (!Array.isArray(list)) {\n this.ctx.problem('warning', `Expected a list at \"${where}\"; it was skipped.`, where);\n return out;\n }\n list.forEach((entry, i) => {\n if (!isObj(entry)) return;\n for (const [name, scopes] of Object.entries(entry)) {\n const schemes = this.components['securitySchemes'];\n const scheme = isObj(schemes) ? this.ctx.object(schemes[name], this.base, `/components/securitySchemes/${name}`) : undefined;\n if (!scheme) {\n this.ctx.problem('warning', `Security scheme \"${name}\" is not defined in components.securitySchemes.`, `${where}/${i}`);\n }\n const req: SecurityRequirement = {\n id: name,\n type: scheme ? (str(scheme.value['type']) ?? '') : '',\n scopes: Array.isArray(scopes) ? scopes.map(String) : [],\n };\n if (scheme) {\n setIf(req, 'description', str(scheme.value['description']));\n Object.assign(req, securitySchemeDetails(scheme.value));\n }\n out.push(req);\n }\n });\n void baseUrl;\n return out;\n }\n\n componentMessages(): void {\n for (const [key, located, where] of this.ctx.entries(this.components['messages'], this.base, '/components/messages')) {\n const id = located.id ?? `${this.base}#${where}`;\n const message = this.message(key, key, located, where);\n this.messagesById.set(id, message);\n this.doc.messages.push(message);\n }\n }\n\n componentSchemas(): void {\n const schemas = this.components['schemas'];\n if (schemas === undefined) return;\n if (!isObj(schemas)) {\n this.ctx.problem('warning', 'Expected a map at \"/components/schemas\"; it was skipped.', '/components/schemas');\n return;\n }\n for (const [key, raw] of Object.entries(schemas)) {\n const where = `/components/schemas/${key}`;\n const schema = buildSchema(this.ctx, { raw, baseUrl: this.base, where, name: key, defaultFormat: this.schemaFormatDefault });\n if (schema) this.doc.schemas.push({ id: key, anchor: this.ctx.anchor('schemas', key), schema });\n }\n }\n\n channels(map: unknown): void {\n for (const [key, located, where] of this.ctx.entries(map, this.base, '/channels')) {\n const channel = this.channel(key, located, where);\n if (located.value['publish'] === undefined && located.value['subscribe'] === undefined) {\n this.ctx.problem('warning', `Channel \"${key}\" has neither publish nor subscribe, so nothing is shown for it.`, where);\n }\n for (const keyword of ['publish', 'subscribe'] as const) {\n const raw = located.value[keyword];\n if (raw === undefined) continue;\n const op = this.ctx.object(raw, located.baseUrl, `${where}/${keyword}`);\n if (op) this.doc.operations.push(this.operation(key, keyword, channel, op, `${where}/${keyword}`));\n }\n }\n }\n\n channel(key: string, { value, baseUrl }: Located, where: string): Channel {\n const channel: Channel = {\n id: key,\n address: key,\n parameters: [],\n servers: [],\n tags: [],\n bindings: this.ctx.bindings('channel', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(channel, 'description', str(value['description']));\n for (const [name, p, w] of this.ctx.entries(value['parameters'], baseUrl, `${where}/parameters`)) {\n channel.parameters.push(this.parameter(name, p, w));\n }\n const servers = value['servers'];\n if (Array.isArray(servers)) {\n servers.forEach((s, i) => {\n if (typeof s === 'string' && this.serverIds.has(s)) channel.servers.push(s);\n else this.ctx.problem('warning', `Channel \"${key}\" lists server \"${String(s)}\" which is not in \"servers\"; it was ignored.`, `${where}/servers/${i}`);\n });\n }\n return channel;\n }\n\n /** v2 parameters carry a schema; enum, default and examples come from it, and its type is shown. */\n parameter(name: string, { value, baseUrl }: Located, where: string): Parameter {\n const parameter: Parameter = { name };\n setIf(parameter, 'description', str(value['description']));\n setIf(parameter, 'location', str(value['location']));\n const schema = this.ctx.object(value['schema'], baseUrl, `${where}/schema`);\n if (schema) {\n const t = schema.value['type'];\n const type = typeof t === 'string' ? t : Array.isArray(t) ? t.map(String).join(' | ') : undefined;\n setIf(parameter, 'schemaType', type);\n if (Array.isArray(schema.value['enum'])) parameter.enum = schema.value['enum'].map(String);\n setIf(parameter, 'default', str(schema.value['default']));\n if (Array.isArray(schema.value['examples'])) parameter.examples = schema.value['examples'].map(String);\n }\n return parameter;\n }\n\n operation(channelKey: string, keyword: 'publish' | 'subscribe', channel: Channel, located: Located, where: string): Operation {\n const baseUrl = located.baseUrl;\n const value = this.ctx.withTraits(located.value, baseUrl, where, ['message', 'traits']);\n const action = keyword === 'publish' ? 'receive' : 'send';\n const id = str(value['operationId']) ?? `${keyword}-${channelKey}`;\n const op: Operation = {\n id,\n anchor: this.ctx.anchor('operations', id),\n heading: str(value['operationId']) ?? `${keyword} ${channelKey}`,\n action,\n kind: action,\n badgeLabel: this.ctx.options.labels[keyword],\n locationHint: `channels › ${channelKey} › ${keyword}`,\n channel,\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n messages: this.operationMessages(channelKey, keyword, value['message'], baseUrl, `${where}/message`),\n security: this.security(value['security'], baseUrl, `${where}/security`),\n bindings: this.ctx.bindings('operation', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(op, 'summary', str(value['summary']));\n setIf(op, 'description', str(value['description']));\n const ext = this.ctx.externalDocs(value['externalDocs'], baseUrl, `${where}/externalDocs`);\n if (ext) op.externalDocs = ext;\n return op;\n }\n\n /** `message` is one Message, a `$ref`, or `{ oneOf: [...] }`. */\n operationMessages(channelKey: string, keyword: string, raw: unknown, baseUrl: string, where: string): Message[] {\n const located = this.ctx.object(raw, baseUrl, where);\n if (!located) return [];\n const oneOf = located.value['oneOf'];\n if (Array.isArray(oneOf)) {\n const out: Message[] = [];\n let i = 0;\n for (const [m, w] of this.ctx.items(oneOf, located.baseUrl, `${where}/oneOf`)) {\n out.push(this.messageFor(m, `${channelKey}-${keyword}-${i}`, w));\n i++;\n }\n return out;\n }\n return [this.messageFor(located, `${channelKey}-${keyword}`, where)];\n }\n\n /** Reuse the component message when referenced; otherwise build an inline one. */\n messageFor(located: Located, anchorSeed: string, where: string): Message {\n const id = located.id ?? `${this.base}#${where}`;\n const existing = this.messagesById.get(id);\n if (existing) return existing;\n const message = this.message(Context.keyOf(located.id) ?? str(located.value['name']) ?? anchorSeed, anchorSeed, located, where);\n this.messagesById.set(id, message);\n return message;\n }\n\n message(id: string, anchorSeed: string, located: Located, where: string): Message {\n const baseUrl = located.baseUrl;\n const value = this.ctx.withTraits(located.value, baseUrl, where, ['payload', 'traits']);\n const message: Message = {\n id,\n anchor: this.ctx.anchor('messages', anchorSeed),\n contentType: str(value['contentType']) ?? this.doc.defaultContentType ?? 'application/json',\n schemaFormat: str(value['schemaFormat']) ?? this.schemaFormatDefault,\n examples: [],\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n bindings: this.ctx.bindings('message', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(message, 'name', str(value['name']));\n setIf(message, 'title', str(value['title']));\n setIf(message, 'summary', str(value['summary']));\n setIf(message, 'description', str(value['description']));\n const ext = this.ctx.externalDocs(value['externalDocs'], baseUrl, `${where}/externalDocs`);\n if (ext) message.externalDocs = ext;\n\n // In v2 the schemaFormat sits on the message and applies to the payload.\n const payload = buildSchema(this.ctx, { raw: value['payload'], baseUrl, where: `${where}/payload`, name: '', defaultFormat: message.schemaFormat });\n if (payload) message.payload = payload;\n const headers = buildSchema(this.ctx, { raw: value['headers'], baseUrl, where: `${where}/headers`, name: '', defaultFormat: this.schemaFormatDefault });\n if (headers) message.headers = headers;\n\n const correlation = this.ctx.object(value['correlationId'], baseUrl, `${where}/correlationId`);\n const location = correlation ? str(correlation.value['location']) : undefined;\n if (correlation && location !== undefined) {\n const c: CorrelationId = { location };\n setIf(c, 'description', str(correlation.value['description']));\n message.correlationId = c;\n }\n for (const [ex] of this.ctx.items(value['examples'], baseUrl, `${where}/examples`)) {\n const example: MessageExample = {};\n setIf(example, 'name', str(ex.value['name']));\n setIf(example, 'summary', str(ex.value['summary']));\n if ('payload' in ex.value) example.payload = ex.value['payload'];\n if ('headers' in ex.value) example.headers = ex.value['headers'];\n message.examples.push(example);\n }\n return message;\n }\n}\n\nfunction setIf<T extends object, K extends keyof T>(target: T, key: K, value: T[K] | undefined): void {\n if (value !== undefined) target[key] = value;\n}\n","/**\n * AsyncAPI 3 normaliser. The only code that knows v3 field names for info, servers, channels,\n * operations, messages and reply. Traits, security details and bindings edge cases are refined\n * in chunk 1.7; this chunk establishes the shape.\n */\nimport { Context, isObj, securitySchemeDetails, str, type Located, type Obj } from './context.js';\nimport { buildSchema } from './schema.js';\nimport type {\n Channel,\n Contact,\n CorrelationId,\n Document,\n Message,\n MessageExample,\n MessageRef,\n Operation,\n OperationKind,\n Parameter,\n Reply,\n SecurityRequirement,\n Server,\n ServerVariable,\n} from './types.js';\n\nexport function normalizeV3(ctx: Context, root: Obj, specVersion: string): Document {\n const base = ctx.resolver.rootUrl;\n const schemaFormatDefault = `application/vnd.aai.asyncapi+json;version=${specVersion}`;\n const info = ctx.object(root['info'], base, '/info') ?? { value: {}, baseUrl: base, id: undefined };\n if (!isObj(root['info'])) ctx.problem('error', 'The document has no \"info\" object.', '/info');\n\n const doc: Document = {\n specVersion,\n specMajor: 3,\n title: str(info.value['title']) ?? 'Untitled API',\n version: str(info.value['version']) ?? '',\n tags: ctx.tags(info.value['tags'], info.baseUrl, '/info/tags'),\n servers: [],\n operations: [],\n messages: [],\n schemas: [],\n problems: ctx.problems,\n };\n setIf(doc, 'description', str(info.value['description']));\n setIf(doc, 'termsOfService', str(info.value['termsOfService']));\n setIf(doc, 'defaultContentType', str(root['defaultContentType']));\n const contact = ctx.object(info.value['contact'], info.baseUrl, '/info/contact');\n if (contact) doc.contact = pick<Contact>(contact.value, ['name', 'url', 'email']);\n const license = ctx.object(info.value['license'], info.baseUrl, '/info/license');\n if (license) {\n const name = str(license.value['name']);\n if (name !== undefined) {\n doc.license = { name };\n setIf(doc.license, 'url', str(license.value['url']));\n }\n }\n const ext = ctx.externalDocs(info.value['externalDocs'], info.baseUrl, '/info/externalDocs');\n if (ext) doc.externalDocs = ext;\n\n const state = new V3State(ctx, base, doc, schemaFormatDefault);\n state.servers(root['servers']);\n state.componentMessages(root['components']);\n state.channels(root['channels']);\n state.operations(root['operations']);\n state.componentSchemas(root['components']);\n return doc;\n}\n\nclass V3State {\n readonly serverIds = new Set<string>();\n /** Channels by key, built lazily because operations reference them by `$ref`. */\n readonly channelsByKey = new Map<string, Channel>();\n /** Messages by resolved id, so a `$ref` to components.messages reuses the same object. */\n readonly messagesById = new Map<string, Message>();\n\n constructor(\n readonly ctx: Context,\n readonly base: string,\n readonly doc: Document,\n readonly schemaFormatDefault: string,\n ) {}\n\n servers(map: unknown): void {\n for (const [key, located, where] of this.ctx.entries(map, this.base, '/servers')) {\n this.doc.servers.push(this.server(key, located, where));\n this.serverIds.add(key);\n }\n }\n\n server(key: string, { value, baseUrl }: Located, where: string): Server {\n const host = str(value['host']) ?? '';\n const pathname = str(value['pathname']) ?? '';\n const server: Server = {\n id: key,\n anchor: this.ctx.anchor('servers', key),\n protocol: str(value['protocol']) ?? '',\n hostDisplay: `${host}${pathname}`,\n variables: [],\n security: this.security(value['security'], baseUrl, `${where}/security`),\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n bindings: this.ctx.bindings('server', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(server, 'title', str(value['title']));\n setIf(server, 'summary', str(value['summary']));\n setIf(server, 'description', str(value['description']));\n setIf(server, 'protocolVersion', str(value['protocolVersion']));\n const ext = this.ctx.externalDocs(value['externalDocs'], baseUrl, `${where}/externalDocs`);\n if (ext) server.externalDocs = ext;\n for (const [name, v, w] of this.ctx.entries(value['variables'], baseUrl, `${where}/variables`)) {\n const variable: ServerVariable = { name };\n setIf(variable, 'description', str(v.value['description']));\n setIf(variable, 'default', str(v.value['default']));\n if (Array.isArray(v.value['enum'])) variable.enum = v.value['enum'].map(String);\n if (Array.isArray(v.value['examples'])) variable.examples = v.value['examples'].map(String);\n server.variables.push(variable);\n void w;\n }\n return server;\n }\n\n security(list: unknown, baseUrl: string, where: string): SecurityRequirement[] {\n const out: SecurityRequirement[] = [];\n for (const [located, w] of this.ctx.items(list, baseUrl, where)) {\n const id = Context.keyOf(located.id) ?? str(located.value['type']) ?? 'security';\n const req: SecurityRequirement = {\n id,\n type: str(located.value['type']) ?? '',\n scopes: Array.isArray(located.value['scopes']) ? located.value['scopes'].map(String) : [],\n };\n setIf(req, 'description', str(located.value['description']));\n Object.assign(req, securitySchemeDetails(located.value));\n out.push(req);\n void w;\n }\n return out;\n }\n\n componentMessages(components: unknown): void {\n if (!isObj(components)) return;\n for (const [key, located, where] of this.ctx.entries(components['messages'], this.base, '/components/messages')) {\n const id = located.id ?? `${this.base}#${where}`;\n const message = this.message(key, key, located, where);\n this.messagesById.set(id, message);\n this.doc.messages.push(message);\n }\n }\n\n componentSchemas(components: unknown): void {\n if (!isObj(components)) return;\n const schemas = components['schemas'];\n if (schemas === undefined) return;\n if (!isObj(schemas)) {\n this.ctx.problem('warning', 'Expected a map at \"/components/schemas\"; it was skipped.', '/components/schemas');\n return;\n }\n for (const [key, raw] of Object.entries(schemas)) {\n const where = `/components/schemas/${key}`;\n const schema = buildSchema(this.ctx, { raw, baseUrl: this.base, where, name: key, defaultFormat: this.schemaFormatDefault });\n if (schema) this.doc.schemas.push({ id: key, anchor: this.ctx.anchor('schemas', key), schema });\n }\n }\n\n channels(map: unknown): void {\n for (const [key, located, where] of this.ctx.entries(map, this.base, '/channels')) {\n this.channelsByKey.set(key, this.channel(key, located, where));\n }\n }\n\n channel(key: string, { value, baseUrl }: Located, where: string): Channel {\n const address = str(value['address']);\n const channel: Channel = {\n id: key,\n address: address === undefined ? null : address,\n parameters: [],\n servers: [],\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n bindings: this.ctx.bindings('channel', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(channel, 'title', str(value['title']));\n setIf(channel, 'summary', str(value['summary']));\n setIf(channel, 'description', str(value['description']));\n const ext = this.ctx.externalDocs(value['externalDocs'], baseUrl, `${where}/externalDocs`);\n if (ext) channel.externalDocs = ext;\n for (const [name, v] of this.ctx.entries(value['parameters'], baseUrl, `${where}/parameters`)) {\n const parameter: Parameter = { name };\n setIf(parameter, 'description', str(v.value['description']));\n setIf(parameter, 'default', str(v.value['default']));\n setIf(parameter, 'location', str(v.value['location']));\n if (Array.isArray(v.value['enum'])) parameter.enum = v.value['enum'].map(String);\n if (Array.isArray(v.value['examples'])) parameter.examples = v.value['examples'].map(String);\n channel.parameters.push(parameter);\n }\n for (const [located, w] of this.ctx.items(value['servers'], baseUrl, `${where}/servers`)) {\n const id = Context.keyOf(located.id);\n if (id === undefined || !this.serverIds.has(id)) {\n this.ctx.problem('warning', `Channel \"${key}\" lists a server that is not in \"servers\"; it was ignored.`, w);\n continue;\n }\n channel.servers.push(id);\n }\n // Channel messages are built here (and cached by id) so operations can pick them by reference.\n const ordered: Message[] = [];\n for (const [msgKey, located, w] of this.ctx.entries(value['messages'], baseUrl, `${where}/messages`)) {\n ordered.push(this.channelMessage(key, msgKey, located, w));\n }\n this.channelMessageOrder.set(key, ordered);\n return channel;\n }\n\n /** The Message for a channel message entry, reusing the component message when it is a `$ref` to one. */\n channelMessage(channelKey: string, msgKey: string, located: Located, where: string): Message {\n const id = located.id ?? `${this.base}#${where}`;\n const existing = this.messagesById.get(id);\n if (existing) return existing;\n const message = this.message(Context.keyOf(located.id) ?? msgKey, `${channelKey}-${msgKey}`, located, where);\n this.messagesById.set(id, message);\n return message;\n }\n\n message(id: string, anchorSeed: string, located: Located, where: string): Message {\n const baseUrl = located.baseUrl;\n const value = this.ctx.withTraits(located.value, baseUrl, where, ['payload', 'traits']);\n const message: Message = {\n id,\n anchor: this.ctx.anchor('messages', anchorSeed),\n contentType: str(value['contentType']) ?? this.doc.defaultContentType ?? 'application/json',\n schemaFormat: this.schemaFormatDefault,\n examples: [],\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n bindings: this.ctx.bindings('message', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(message, 'name', str(value['name']));\n setIf(message, 'title', str(value['title']));\n setIf(message, 'summary', str(value['summary']));\n setIf(message, 'description', str(value['description']));\n const ext = this.ctx.externalDocs(value['externalDocs'], baseUrl, `${where}/externalDocs`);\n if (ext) message.externalDocs = ext;\n\n const payloadRaw = value['payload'];\n if (isObj(payloadRaw) && typeof payloadRaw['schemaFormat'] === 'string') message.schemaFormat = payloadRaw['schemaFormat'];\n const payload = buildSchema(this.ctx, { raw: payloadRaw, baseUrl, where: `${where}/payload`, name: '', defaultFormat: this.schemaFormatDefault });\n if (payload) message.payload = payload;\n const headers = buildSchema(this.ctx, { raw: value['headers'], baseUrl, where: `${where}/headers`, name: '', defaultFormat: this.schemaFormatDefault });\n if (headers) message.headers = headers;\n\n const correlation = this.ctx.object(value['correlationId'], baseUrl, `${where}/correlationId`);\n if (correlation) {\n const location = str(correlation.value['location']);\n if (location !== undefined) {\n const c: CorrelationId = { location };\n setIf(c, 'description', str(correlation.value['description']));\n message.correlationId = c;\n }\n }\n for (const [ex] of this.ctx.items(value['examples'], baseUrl, `${where}/examples`)) {\n const example: MessageExample = {};\n setIf(example, 'name', str(ex.value['name']));\n setIf(example, 'summary', str(ex.value['summary']));\n if ('payload' in ex.value) example.payload = ex.value['payload'];\n if ('headers' in ex.value) example.headers = ex.value['headers'];\n message.examples.push(example);\n }\n return message;\n }\n\n operations(map: unknown): void {\n for (const [key, located, where] of this.ctx.entries(map, this.base, '/operations')) {\n const op = this.operation(key, located, where);\n if (op) this.doc.operations.push(op);\n }\n }\n\n operation(key: string, located: Located, where: string): Operation | undefined {\n const baseUrl = located.baseUrl;\n const value = this.ctx.withTraits(located.value, baseUrl, where, ['action', 'channel', 'messages', 'reply', 'traits']);\n const action = str(value['action']);\n if (action !== 'send' && action !== 'receive') {\n this.ctx.problem('error', `Operation \"${key}\" has action \"${action ?? ''}\"; expected send or receive. It was skipped.`, `${where}/action`);\n return undefined;\n }\n const channelRef = this.ctx.object(value['channel'], baseUrl, `${where}/channel`);\n const channelKey = Context.keyOf(channelRef?.id);\n const channel = channelKey === undefined ? undefined : this.channelsByKey.get(channelKey);\n if (!channel) {\n this.ctx.problem('error', `Operation \"${key}\" does not reference a channel in \"channels\". It was skipped.`, `${where}/channel`);\n return undefined;\n }\n\n if (this.channelMessagesOf(channel.id).length === 0) {\n this.ctx.problem('warning', `Operation \"${key}\" uses channel \"${channel.id}\", which defines no messages.`, `${where}/channel`);\n }\n const reply = this.reply(value['reply'], baseUrl, `${where}/reply`);\n const kind: OperationKind = reply ? (action === 'send' ? 'request' : 'reply') : action;\n const labels = this.ctx.options.labels;\n const op: Operation = {\n id: key,\n anchor: this.ctx.anchor('operations', key),\n heading: this.ctx.options.useChannelAddressAsIdentifier ? (channel.address ?? key) : (str(value['title']) ?? key),\n action,\n kind,\n badgeLabel: labels[kind],\n locationHint: key,\n channel,\n tags: this.ctx.tags(value['tags'], baseUrl, `${where}/tags`),\n messages: this.operationMessages(key, value['messages'], channel.id, baseUrl, `${where}/messages`),\n security: this.security(value['security'], baseUrl, `${where}/security`),\n bindings: this.ctx.bindings('operation', value['bindings'], baseUrl, `${where}/bindings`),\n };\n setIf(op, 'summary', str(value['summary']));\n setIf(op, 'description', str(value['description']));\n const ext = this.ctx.externalDocs(value['externalDocs'], baseUrl, `${where}/externalDocs`);\n if (ext) op.externalDocs = ext;\n if (reply) op.reply = reply;\n return op;\n }\n\n /** The operation's messages: the listed subset of the channel's messages, or all of them. */\n operationMessages(opKey: string, list: unknown, channelKey: string, baseUrl: string, where: string): Message[] {\n const channelMessages = this.channelMessagesOf(channelKey);\n if (list === undefined) return channelMessages;\n const out: Message[] = [];\n for (const [located, w] of this.ctx.items(list, baseUrl, where)) {\n const message = located.id === undefined ? undefined : this.messagesById.get(located.id);\n if (!message || !channelMessages.includes(message)) {\n this.ctx.problem('warning', `Operation \"${opKey}\" lists a message that is not one of its channel's messages; it was ignored.`, w);\n continue;\n }\n out.push(message);\n }\n return out;\n }\n\n /** Channel messages in document order, by channel key. */\n readonly channelMessageOrder = new Map<string, Message[]>();\n\n channelMessagesOf(channelKey: string): Message[] {\n return this.channelMessageOrder.get(channelKey) ?? [];\n }\n\n reply(raw: unknown, baseUrl: string, where: string): Reply | undefined {\n const located = this.ctx.object(raw, baseUrl, where);\n if (!located) return undefined;\n const reply: Reply = { messages: [] };\n const address = this.ctx.object(located.value['address'], located.baseUrl, `${where}/address`);\n if (address) {\n setIf(reply, 'addressLocation', str(address.value['location']));\n setIf(reply, 'addressDescription', str(address.value['description']));\n }\n const channelRef = this.ctx.object(located.value['channel'], located.baseUrl, `${where}/channel`);\n const channelKey = Context.keyOf(channelRef?.id);\n const channel = channelKey === undefined ? undefined : this.channelsByKey.get(channelKey);\n if (channelRef && !channel) {\n this.ctx.problem('warning', `A reply references a channel that is not in \"channels\"; it was ignored.`, `${where}/channel`);\n }\n if (channel) reply.channel = channel;\n const listed = located.value['messages'];\n if (listed === undefined && channelKey !== undefined) {\n reply.messages = this.channelMessagesOf(channelKey).map(ref);\n } else {\n for (const [m, w] of this.ctx.items(listed, located.baseUrl, `${where}/messages`)) {\n const message = m.id === undefined ? undefined : this.messagesById.get(m.id);\n if (!message) {\n this.ctx.problem('warning', `A reply lists a message that is not one of the reply channel's messages; it was ignored.`, w);\n continue;\n }\n reply.messages.push(ref(message));\n }\n }\n return reply;\n }\n}\n\nfunction ref(m: Message): MessageRef {\n const out: MessageRef = { id: m.id, anchor: m.anchor };\n setIf(out, 'name', m.name);\n setIf(out, 'title', m.title);\n return out;\n}\n\nfunction setIf<T extends object, K extends keyof T>(target: T, key: K, value: T[K] | undefined): void {\n if (value !== undefined) target[key] = value;\n}\n\nfunction pick<T extends object>(source: Obj, keys: Array<keyof T & string>): T {\n const out = {} as T;\n for (const key of keys) {\n const v = str(source[key]);\n if (v !== undefined) (out as Record<string, unknown>)[key] = v;\n }\n return out;\n}\n","/**\n * Entry point: turn a loaded document into the normalised model.\n */\nimport type { RefResolver } from '../load/refs.js';\nimport { Context, DEFAULT_NORMALIZE_OPTIONS, type NormalizeOptions } from './context.js';\nimport type { Document, Problem, Tag } from './types.js';\nimport { normalizeV2 } from './v2.js';\nimport { normalizeV3 } from './v3.js';\n\nexport interface NormalizeInput {\n resolver: RefResolver;\n data: Record<string, unknown>;\n specVersion: string;\n specMajor: 2 | 3;\n /** Problems found earlier (reference preloading) to carry into the document. */\n problems?: Problem[];\n options?: Partial<NormalizeOptions>;\n}\n\nexport function normalize(input: NormalizeInput): Document {\n const options: NormalizeOptions = { ...DEFAULT_NORMALIZE_OPTIONS, ...input.options, labels: { ...DEFAULT_NORMALIZE_OPTIONS.labels, ...input.options?.labels } };\n const ctx = new Context(input.resolver, options);\n for (const p of input.problems ?? []) ctx.problems.push(p);\n const doc = input.specMajor === 3 ? normalizeV3(ctx, input.data, input.specVersion) : normalizeV2(ctx, input.data, input.specVersion);\n inheritTagDescriptions(doc);\n return doc;\n}\n\n/**\n * A tag on a server, channel, operation or message usually repeats the name of a document-level\n * tag and leaves the description there. Copy that description down so every chip can show it.\n */\nfunction inheritTagDescriptions(doc: Document): void {\n const described = new Map(doc.tags.filter((t) => t.description).map((t) => [t.name, t.description as string]));\n if (described.size === 0) return;\n const fill = (tags: Tag[]) => {\n for (const t of tags) {\n const description = described.get(t.name);\n if (t.description === undefined && description !== undefined) t.description = description;\n }\n };\n for (const s of doc.servers) fill(s.tags);\n for (const op of doc.operations) {\n fill(op.tags);\n fill(op.channel.tags);\n for (const m of op.messages) fill(m.tags);\n }\n for (const m of doc.messages) fill(m.tags);\n}\n","{\n \"$comment\": \"Single source of truth for every <asyncapi-viewer> option. Names are camelCase; the element accepts each as kebab-case (send-label) and as the lowercased form browsers produce from hand-written camelCase (sendlabel). The Python extension validates against a copy of this file. Booleans accept true/false, 1/0, yes/no, on/off and a bare attribute (true); in the DOM a bare attribute reads as an empty string, so an empty boolean value also means true. Enum values match case-insensitively.\",\n \"version\": 1,\n \"options\": [\n { \"name\": \"src\", \"type\": \"string\", \"required\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"The AsyncAPI document (JSON or YAML), as a path or URL relative to the page.\" },\n { \"name\": \"id\", \"type\": \"string\", \"default\": null, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Element id; also prefixes every anchor inside the viewer. Generated as asyncapi-viewer-N when absent.\" },\n { \"name\": \"sidebar\", \"type\": \"boolean\", \"default\": false, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the navigation column; a drawer behind a menu button on narrow containers.\" },\n { \"name\": \"info\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the Info section.\" },\n { \"name\": \"servers\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the Servers section and the server selector.\" },\n { \"name\": \"operations\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the operations.\" },\n { \"name\": \"messages\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the Messages section (component messages).\" },\n { \"name\": \"schemas\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the Schemas section (component schemas).\" },\n { \"name\": \"errors\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show the load and validation problems panel.\" },\n { \"name\": \"showMessageExamples\", \"type\": \"boolean\", \"default\": false, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show examples in the Messages section.\" },\n { \"name\": \"messageExamples\", \"type\": \"boolean\", \"default\": true, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Example panels start expanded; false starts them collapsed.\" },\n { \"name\": \"showServers\", \"type\": \"enum\", \"values\": [\"byDefault\", \"bySpecTags\", \"byServersTags\"], \"default\": \"byDefault\", \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Sidebar grouping for servers.\" },\n { \"name\": \"showOperations\", \"type\": \"enum\", \"values\": [\"byDefault\", \"bySpecTags\", \"byOperationsTags\"], \"default\": \"byDefault\", \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Sidebar grouping for operations.\" },\n { \"name\": \"useChannelAddressAsIdentifier\", \"type\": \"boolean\", \"default\": false, \"status\": \"active\", \"specVersions\": [3],\n \"description\": \"AsyncAPI 3: label operations by channel address instead of title.\" },\n { \"name\": \"publishLabel\", \"type\": \"string\", \"default\": \"PUB\", \"status\": \"active\", \"specVersions\": [2],\n \"description\": \"Badge text for AsyncAPI 2 publish operations.\" },\n { \"name\": \"subscribeLabel\", \"type\": \"string\", \"default\": \"SUB\", \"status\": \"active\", \"specVersions\": [2],\n \"description\": \"Badge text for AsyncAPI 2 subscribe operations.\" },\n { \"name\": \"sendLabel\", \"type\": \"string\", \"default\": \"SEND\", \"status\": \"active\", \"specVersions\": [3],\n \"description\": \"Badge text for AsyncAPI 3 send operations.\" },\n { \"name\": \"receiveLabel\", \"type\": \"string\", \"default\": \"RECEIVE\", \"status\": \"active\", \"specVersions\": [3],\n \"description\": \"Badge text for AsyncAPI 3 receive operations.\" },\n { \"name\": \"requestLabel\", \"type\": \"string\", \"default\": \"REQUEST\", \"status\": \"active\", \"specVersions\": [3],\n \"description\": \"Badge text for AsyncAPI 3 send operations that carry a reply.\" },\n { \"name\": \"replyLabel\", \"type\": \"string\", \"default\": \"REPLY\", \"status\": \"active\", \"specVersions\": [3],\n \"description\": \"Badge text for AsyncAPI 3 receive operations that carry a reply.\" },\n { \"name\": \"parserOptions\", \"type\": \"json\", \"default\": { \"applyTraits\": true }, \"status\": \"active\", \"specVersions\": [2, 3],\n \"keys\": { \"applyTraits\": \"boolean\" },\n \"description\": \"JSON object. Only applyTraits (default true) is honoured; other keys warn and are ignored.\" },\n { \"name\": \"schemaID\", \"type\": \"string\", \"default\": null, \"status\": \"deprecated-noop\", \"specVersions\": [2, 3],\n \"description\": \"Deprecated: accepted, warns once, does nothing.\" },\n { \"name\": \"theme\", \"type\": \"enum\", \"values\": [\"auto\", \"light\", \"dark\"], \"default\": \"auto\", \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"auto follows the host page (Material scheme, html[data-theme], prefers-color-scheme).\" },\n { \"name\": \"themeToggle\", \"type\": \"boolean\", \"default\": false, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Show a light/dark toggle in the viewer header.\" },\n { \"name\": \"searchKeepSections\", \"type\": \"boolean\", \"default\": false, \"status\": \"active\", \"specVersions\": [2, 3],\n \"description\": \"Keep the Info, Servers, Messages and Schemas links visible while a sidebar search query is active.\" }\n ]\n}\n","/**\n * Reads and validates element attributes against options.schema.json.\n *\n * Mirrors the Python extension: names are case-insensitive, kebab-case and the lowercased form\n * are both accepted, booleans follow the same table, enum values match case-insensitively,\n * unknown attributes and invalid values produce one warning each and are skipped, and the\n * remaining attributes still apply.\n */\nimport schema from './options.schema.json';\n\nexport type GroupServers = 'byDefault' | 'bySpecTags' | 'byServersTags';\nexport type GroupOperations = 'byDefault' | 'bySpecTags' | 'byOperationsTags';\nexport type ThemeMode = 'auto' | 'light' | 'dark';\n\nexport interface Options {\n src?: string;\n id?: string;\n sidebar: boolean;\n info: boolean;\n servers: boolean;\n operations: boolean;\n messages: boolean;\n schemas: boolean;\n errors: boolean;\n showMessageExamples: boolean;\n messageExamples: boolean;\n showServers: GroupServers;\n showOperations: GroupOperations;\n useChannelAddressAsIdentifier: boolean;\n publishLabel: string;\n subscribeLabel: string;\n sendLabel: string;\n receiveLabel: string;\n requestLabel: string;\n replyLabel: string;\n parserOptions: { applyTraits: boolean };\n theme: ThemeMode;\n themeToggle: boolean;\n searchKeepSections: boolean;\n}\n\nexport type OptionType = 'string' | 'boolean' | 'enum' | 'json';\nexport type OptionStatus = 'active' | 'deprecated-noop';\n\nexport interface OptionSpec {\n name: string;\n type: OptionType;\n default?: unknown;\n required?: boolean;\n values?: string[];\n keys?: Record<string, 'boolean' | 'string' | 'number'>;\n status: OptionStatus;\n specVersions: number[];\n description: string;\n}\n\nexport const OPTION_SPECS: readonly OptionSpec[] = (schema as { options: OptionSpec[] }).options;\n\n/** Defaults derived from the schema; `src`, `id` and deprecated options have none. */\nexport const DEFAULTS: Readonly<Options> = Object.freeze(\n Object.fromEntries(\n OPTION_SPECS.filter((o) => o.status === 'active' && o.default !== null && o.default !== undefined).map((o) => [\n o.name,\n structuredClone(o.default),\n ]),\n ) as unknown as Options,\n);\n\nconst TRUE = new Set(['true', '1', 'yes', 'on']);\nconst FALSE = new Set(['false', '0', 'no', 'off']);\n\n/** Attribute names that belong to HTML, not to us: never warned about. */\nconst HTML_GLOBAL = new Set([\n 'class', 'style', 'slot', 'hidden', 'title', 'lang', 'dir', 'role', 'tabindex', 'part', 'exportparts', 'translate', 'nonce',\n]);\n\n/** Canonical option name from any accepted spelling: `sendLabel`, `send-label`, `sendlabel`, `SEND-LABEL`. */\nconst BY_KEY = new Map(OPTION_SPECS.map((o) => [o.name.toLowerCase(), o]));\nexport function lookupOption(attribute: string): OptionSpec | undefined {\n return BY_KEY.get(attribute.replace(/-/g, '').toLowerCase());\n}\n\n/** `sendLabel` -> `send-label`: the form the Python side emits. */\nexport function toAttributeName(option: string): string {\n return option.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n}\n\nexport type WarnFn = (message: string) => void;\n\nconst PREFIX = '<asyncapi-viewer>:';\n\n/**\n * Build Options from attributes. `attrs` is any iterable of `[name, value]`; a `null` value is a\n * bare attribute. `src` and `id` pass through untouched.\n */\nexport function parseOptions(\n attrs: Iterable<readonly [string, string | null]>,\n warn: WarnFn = (m) => console.warn(m),\n): Options {\n const out = structuredClone(DEFAULTS) as Options;\n const slot = out as unknown as Record<string, unknown>;\n for (const [rawName, raw] of attrs) {\n const name = rawName.toLowerCase();\n if (HTML_GLOBAL.has(name) || name.startsWith('data-') || name.startsWith('aria-') || name.startsWith('on')) continue;\n const spec = lookupOption(name);\n if (!spec) {\n warn(`${PREFIX} unknown attribute '${rawName}' was ignored.`);\n continue;\n }\n if (spec.status === 'deprecated-noop') {\n warn(`${PREFIX} attribute '${rawName}' is deprecated and does nothing.`);\n continue;\n }\n if (spec.name === 'src' || spec.name === 'id') {\n if (raw !== null && raw !== '') slot[spec.name] = raw;\n continue;\n }\n const value = coerce(spec, rawName, raw, warn);\n if (value !== INVALID) slot[spec.name] = value;\n }\n return out;\n}\n\nconst INVALID = Symbol('invalid');\n\nfunction coerce(spec: OptionSpec, rawName: string, raw: string | null, warn: WarnFn): unknown {\n switch (spec.type) {\n case 'boolean': {\n // A bare attribute reads as null from a parser and as \"\" from the DOM; both mean true.\n const text = raw === null || raw.trim() === '' ? 'true' : raw.trim().toLowerCase();\n if (TRUE.has(text)) return true;\n if (FALSE.has(text)) return false;\n warn(`${PREFIX} attribute '${rawName}' expects true or false, got '${raw}'.`);\n return INVALID;\n }\n case 'enum': {\n const wanted = (raw ?? '').trim().toLowerCase();\n const match = spec.values?.find((v) => v.toLowerCase() === wanted);\n if (match !== undefined) return match;\n warn(`${PREFIX} attribute '${rawName}' expects one of ${spec.values?.join(', ')}; got '${raw}'.`);\n return INVALID;\n }\n case 'json': {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw ?? '');\n } catch (e) {\n warn(`${PREFIX} attribute '${rawName}' is not valid JSON (${(e as Error).message}).`);\n return INVALID;\n }\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n warn(`${PREFIX} attribute '${rawName}' expects a JSON object, got ${JSON.stringify(parsed)}.`);\n return INVALID;\n }\n const result = structuredClone(spec.default) as Record<string, unknown>;\n for (const [key, v] of Object.entries(parsed as Record<string, unknown>)) {\n const expected = spec.keys?.[key];\n if (!expected) {\n warn(`${PREFIX} ${spec.name}.${key} is not supported and was ignored.`);\n } else if (typeof v !== expected) {\n warn(`${PREFIX} ${spec.name}.${key} expects a ${expected}, got ${JSON.stringify(v)}.`);\n } else {\n result[key] = v;\n }\n }\n return result;\n }\n case 'string':\n return raw ?? '';\n }\n}\n","import { html, nothing, type TemplateResult } from 'lit';\nimport { css } from 'lit';\nimport type { Document } from '../model/types.js';\n\nexport interface HeaderInput {\n doc: Document;\n /** The original document URL. */\n src: string | undefined;\n /** Object URL holding the document exactly as fetched, for \"Download spec\". */\n downloadHref: string | undefined;\n hasLogo: boolean;\n themeToggle: boolean;\n resolvedTheme: 'light' | 'dark';\n onToggleTheme: () => void;\n /** Rendered into the right-hand group (server selector, chunk 1.14). */\n extra?: TemplateResult | typeof nothing;\n /** Rendered first: the drawer menu button on narrow containers with the sidebar on. */\n menu?: TemplateResult | typeof nothing;\n}\n\nexport const headerStyles = css`\n .header {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 12px 14px;\n min-height: 68px;\n padding: 12px 24px;\n background: var(--_surface);\n border-bottom: 1px solid var(--_line);\n }\n .header__logo {\n flex: none;\n width: 40px;\n height: 40px;\n background: var(--_logo) center / contain no-repeat;\n }\n .header__title {\n margin: 0;\n font: 600 18px/1.3 var(--_font-heading);\n color: var(--_ink);\n flex: 1 1 auto;\n min-width: 12ch;\n overflow-wrap: anywhere;\n }\n .header__pills {\n display: flex;\n gap: 6px;\n flex: none;\n }\n .header__spacer {\n flex: 0 0 0;\n }\n .header__actions {\n display: flex;\n gap: 8px;\n flex: none;\n }\n .btn__text {\n display: inline;\n }\n @container viewer (max-width: 1099px) {\n .btn__text {\n display: none;\n }\n .btn:not(.btn--icon) {\n padding: 0;\n }\n }\n @container viewer (max-width: 699px) {\n .header {\n padding: 10px 16px;\n gap: 10px;\n }\n .header__logo {\n width: 34px;\n height: 34px;\n }\n .header__title {\n font-size: 16px;\n }\n .header__pills {\n display: none;\n }\n }\n`;\n\nconst downloadIcon = html`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 4v11m0 0-4-4m4 4 4-4M5 19h14\" /></svg>`;\nconst moonIcon = html`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M20 14.5A8.5 8.5 0 0 1 9.5 4a8.5 8.5 0 1 0 10.5 10.5Z\" /></svg>`;\nconst sunIcon = html`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"4\" /><path d=\"M12 2.5v2.5M12 19v2.5M2.5 12H5M19 12h2.5M5.3 5.3l1.8 1.8M16.9 16.9l1.8 1.8M5.3 18.7l1.8-1.8M16.9 7.1l1.8-1.8\" /></svg>`;\n\nexport function renderHeader(input: HeaderInput): TemplateResult {\n const { doc } = input;\n const fileName = input.src ? (input.src.split('/').pop()?.split('?')[0] || 'asyncapi') : 'asyncapi';\n return html`\n <header class=\"header\">\n ${input.menu ?? nothing}\n ${input.hasLogo ? html`<span class=\"header__logo\" aria-hidden=\"true\"></span>` : nothing}\n <h2 class=\"header__title\">${doc.title}</h2>\n <div class=\"header__pills\">\n ${doc.version ? html`<span class=\"pill pill--tint\">v${doc.version}</span>` : nothing}\n <span class=\"pill pill--outline\">AsyncAPI ${doc.specVersion}</span>\n </div>\n <div class=\"header__spacer\"></div>\n ${input.extra ?? nothing}\n <div class=\"header__actions\">\n ${input.downloadHref\n ? html`<a class=\"btn\" href=${input.downloadHref} download=${fileName} title=\"Download spec\">${downloadIcon}<span class=\"btn__text\">Download spec</span></a>`\n : nothing}\n ${input.themeToggle\n ? html`<button\n class=\"btn btn--icon\"\n type=\"button\"\n aria-label=\"Toggle dark theme\"\n aria-pressed=${input.resolvedTheme === 'dark' ? 'true' : 'false'}\n @click=${input.onToggleTheme}\n >\n ${input.resolvedTheme === 'dark' ? sunIcon : moonIcon}\n </button>`\n : nothing}\n </div>\n </header>\n `;\n}\n","import { html, type TemplateResult } from 'lit';\nimport type { Tag } from '../model/types.js';\n\n/**\n * A tag chip. With a description it is focusable and shows it as a tooltip on hover and focus\n * (`.chip--tip`, pure CSS); the description is also in visually hidden text for screen readers.\n */\nexport function tagChip(tag: Tag): TemplateResult {\n if (!tag.description) return html`<li class=\"chip\">${tag.name}</li>`;\n return html`<li class=\"chip chip--tip\" data-tip=${tag.description} tabindex=\"0\">\n ${tag.name}<span class=\"visually-hidden\">: ${tag.description}</span>\n </li>`;\n}\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","import decode from './lib/decode.mjs'\nimport encode from './lib/encode.mjs'\nimport format from './lib/format.mjs'\nimport parse from './lib/parse.mjs'\n\nexport {\n decode,\n encode,\n format,\n parse\n}\n","const Any = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nconst Cc = /[\\0-\\x1F\\x7F-\\x9F]/;\nconst Cf = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;\nconst P = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B4E\\u1B4F\\u1B5A-\\u1B60\\u1B7D-\\u1B7F\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDD6E\\uDEAD\\uDED0\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9\\uDFD4\\uDFD5\\uDFD7\\uDFD8]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09\\uDFE1]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDD6D-\\uDD6F\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD839\\uDDFF|\\uD83A[\\uDD5E\\uDD5F]/;\nconst S = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C1\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2429\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E5\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD803[\\uDD8E\\uDD8F\\uDED1-\\uDED8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDC00-\\uDCEF\\uDCFA-\\uDCFC\\uDD00-\\uDEB3\\uDEBA-\\uDED0\\uDEE0-\\uDEF0\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED8\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0-\\uDCBB\\uDCC0\\uDCC1\\uDCD0-\\uDCD8\\uDD00-\\uDE57\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFEF\\uDFFA]/;\nconst Z = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n\nexport { Any, Cc, Cf, P, S, Z };\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n/**\n * C1 Unicode control character reference replacements (code points 128–159).\n * Index i gives the replacement for code point 128+i; 0 means \"no replacement\".\n */\nconst c1 = [\n 8364, 0, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 0,\n 381, 0, 0, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250,\n 339, 0, 382, 376,\n];\n/**\n * True for NUL, UTF-16 surrogates, and values past U+10FFFF.\n * @param codePoint Unicode code point to check.\n */\nfunction isInvalidCodePoint(codePoint) {\n return (codePoint === 0 ||\n (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff);\n}\n/**\n * Replace the given code point with U+FFFD if it is NUL (0), a surrogate, or\n * outside the valid Unicode range. Code points in the C1 controls range\n * (128–159) are remapped to their Windows-1252 equivalents, following the\n * HTML spec. All other code points are returned unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint) {\n if (isInvalidCodePoint(codePoint)) {\n return 0xff_fd;\n }\n if (codePoint >= 128 && codePoint <= 159) {\n return c1[codePoint - 128] || codePoint;\n }\n return codePoint;\n}\n/**\n * XML numeric character references are the referenced Unicode code point.\n * Invalid values still become U+FFFD; the HTML Windows-1252 C1 remap is not\n * applied.\n * @see https://www.w3.org/TR/xml/#NT-CharRef\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePointXML(codePoint) {\n return isInvalidCodePoint(codePoint) ? 0xff_fd : codePoint;\n}\n/**\n * Convert the code point of a decoded numeric entity to a string, replacing\n * invalid values.\n *\n * Fast path for plain BMP code points: [1..0x7F] and [0xA0..0xD7FF] pass\n * `replaceCodePoint` unchanged (no NUL, C1 remap, surrogate, or out-of-range\n * handling) and fit a single charCode. 0xd760 = 0xD800 (the first surrogate)\n * - 0xA0.\n * @param codePoint Unicode code point to convert.\n */\nexport function codePointToString(codePoint) {\n return (codePoint - 1) >>> 0 < 0x7f || (codePoint - 0xa0) >>> 0 < 0xd7_60\n ? String.fromCharCode(codePoint)\n : String.fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map","/*\n * Inverse of the encoder's SAFE alphabet (0x21..0x7E minus 0x22, 0x24, 0x5C),\n * precomputed once at module load. Entries for excluded chars stay 0 but\n * are never read.\n */\nconst BASE91_INVERSE = /* #__PURE__ */ (() => {\n const table = new Uint8Array(127);\n let code = 0;\n for (let char = 0x21; char <= 0x7e; char++) {\n if (char !== 0x22 && char !== 0x24 && char !== 0x5c) {\n table[char] = code++;\n }\n }\n return table;\n})();\n/**\n * Decode a dictionary-encoded trie string back into its Uint16Array.\n *\n * Stream layout (consumed in this order):\n * 1. dict1 atoms — `dict1AtomCount` uint16 values, delta+RLE encoded.\n * 2. dict2 atoms — `atomCount - dict1AtomCount` values, delta+RLE.\n * 3. dict2 ngrams — `ngramCount - (dictSize - dict1AtomCount)` entries,\n * each a pair of slot codes that resolve to earlier slots.\n * 4. dict1 ngrams — `dictSize - dict1AtomCount` entries, same shape.\n * 5. data — slot codes, each expanding to one or more uint16 values.\n *\n * Codes use a 91-char base (printable ASCII minus `\"`, `$`, `\\`):\n * - char1 < dictSize → 1-char code, slot = char1\n * - char1 ≥ dictSize → 2-char code, slot = dictSize + (char1 - dictSize)*91 + char2\n *\n * Slot index → token kind:\n * [0, A) dict1 atoms (1-char codes)\n * [A, dictSize) dict1 ngrams (1-char codes)\n * [dictSize, dictSize+D) dict2 atoms (2-char codes)\n * [dictSize+D, end) dict2 ngrams (2-char codes)\n *\n * Both atom dicts decode before any ngram, and dict2 ngrams decode before\n * dict1 ngrams. So every ngram entry references slots whose contents are\n * already filled — no forward references to handle.\n *\n * This runs on library import. Flat typed arrays store each slot as either\n * a plain value (`single`, covering every atom) or a range in a shared\n * `pool` (ngrams).\n * @param input Packed trie string.\n * @param resultLength Expected number of uint16 values in the output.\n * @param atomCount Total number of distinct uint16 values in the trie.\n * @param dict1AtomCount Atoms in the 1-char range (`A` above).\n * @param ngramCount Total number of ngram entries (dict1 + dict2).\n * @param dictSize Number of 1-char code slots; the rest of `BASE - dictSize`\n * first-byte values are 2-char codes.\n */\nexport function decodeTrieDict(input, resultLength, atomCount, dict1AtomCount, ngramCount, dictSize) {\n const base = 91;\n const inputLength = input.length;\n // For 2-char codes, slot = char1 * base - twoCharBias + char2.\n const twoCharBias = dictSize * (base - 1);\n let pos = 0;\n /** Read one slot code at `pos` and return its slot index, advancing pos. */\n const readSlotCode = () => {\n const c1 = BASE91_INVERSE[input.charCodeAt(pos++)];\n return c1 < dictSize\n ? c1\n : c1 * base - twoCharBias + BASE91_INVERSE[input.charCodeAt(pos++)];\n };\n const dict2AtomCount = atomCount - dict1AtomCount;\n const slotCount = atomCount + ngramCount;\n /*\n * Per-slot contents: atoms (always a single value) live directly in\n * `single`; ngram slots hold -1 there and expand to\n * `pool[start[slot] .. start[slot] + length[slot])`.\n */\n const single = new Int32Array(slotCount);\n single.fill(-1, dict1AtomCount, dictSize);\n single.fill(-1, dictSize + dict2AtomCount, slotCount);\n const start = new Int32Array(slotCount);\n const length = new Int32Array(slotCount);\n /**\n * Decode `count` ascending uint16 values from a delta+RLE stream into\n * `single[off..off+count)`.\n *\n * code < 89 → delta = code\n * code == 89 → run-length: next char encodes runLength-2; emit `runLength` consecutive +1 values\n * code == 90, next < 90 → escape: delta = 89 + next * BASE + after-next\n * code == 90, next == 90 → double-escape: extra char for very large deltas\n * @param count\n * @param off\n */\n function decodeDelta(count, off) {\n let previous = 0;\n let slot = off;\n const end = off + count;\n while (slot < end) {\n const code = BASE91_INVERSE[input.charCodeAt(pos++)];\n if (code < 89) {\n previous += code;\n single[slot++] = previous;\n }\n else if (code === 89) {\n let runLength = BASE91_INVERSE[input.charCodeAt(pos++)] + 2;\n while (runLength--)\n single[slot++] = ++previous;\n }\n else {\n const next = BASE91_INVERSE[input.charCodeAt(pos++)];\n previous +=\n 89 +\n // eslint-disable-next-line unicorn/prefer-minimal-ternary -- branches read a different number of side-effecting input bytes\n (next < 90\n ? next * base + BASE91_INVERSE[input.charCodeAt(pos++)]\n : BASE91_INVERSE[input.charCodeAt(pos++)] * 8281 +\n BASE91_INVERSE[input.charCodeAt(pos++)] * base +\n BASE91_INVERSE[input.charCodeAt(pos++)]);\n single[slot++] = previous;\n }\n }\n }\n // Streams 1 & 2: atoms decoded into their slot ranges.\n decodeDelta(dict1AtomCount, 0);\n decodeDelta(dict2AtomCount, dictSize);\n /*\n * Streams 3 & 4 are read in two passes: first collect every ngram's two\n * references and derive its expanded length (each ref resolves to an earlier\n * slot, so lengths are already known), which sizes the shared pool.\n * Pool ranges are handed out in decode order, so the second pass fills\n * the pool contiguously with a single write cursor.\n */\n const references = new Int32Array(ngramCount * 2);\n let poolSize = 0;\n let ngramIndex = 0;\n /**\n * Read `count` ngram entries (each = 2 slot-code references) for the slots\n * starting at `startSlot`, recording references and assigning pool ranges.\n * @param count\n * @param startSlot\n */\n function readNgramReferences(count, startSlot) {\n for (let index = 0; index < count; index++) {\n const slot = startSlot + index;\n const a = readSlotCode();\n const b = readSlotCode();\n references[ngramIndex * 2] = a;\n references[ngramIndex * 2 + 1] = b;\n ngramIndex += 1;\n start[slot] = poolSize;\n const entryLength = (single[a] < 0 ? length[a] : 1) +\n (single[b] < 0 ? length[b] : 1);\n length[slot] = entryLength;\n poolSize += entryLength;\n }\n }\n readNgramReferences(ngramCount - dictSize + dict1AtomCount, dictSize + dict2AtomCount);\n readNgramReferences(dictSize - dict1AtomCount, dict1AtomCount);\n // Second pass: concatenate each ngram's two halves into the pool.\n const pool = new Uint16Array(poolSize);\n let write = 0;\n for (let index = 0; index < ngramIndex; index++) {\n for (let half = 0; half < 2; half++) {\n const source = references[index * 2 + half];\n const value = single[source];\n if (value < 0) {\n let read = start[source];\n const readEnd = read + length[source];\n while (read < readEnd)\n pool[write++] = pool[read++];\n }\n else {\n pool[write++] = value;\n }\n }\n }\n // Stream 5: data. Each code expands to its slot's stored values.\n const out = new Uint16Array(resultLength);\n let outIndex = 0;\n while (pos < inputLength) {\n let slot = BASE91_INVERSE[input.charCodeAt(pos++)];\n if (slot >= dictSize) {\n slot =\n slot * base -\n twoCharBias +\n BASE91_INVERSE[input.charCodeAt(pos++)];\n }\n const value = single[slot];\n if (value < 0) {\n let read = start[slot];\n const readEnd = read + length[slot];\n while (read < readEnd)\n out[outIndex++] = pool[read++];\n }\n else {\n out[outIndex++] = value;\n }\n }\n return out;\n}\n//# sourceMappingURL=decode-shared.js.map","// Generated using scripts/write-decode-map.ts\nimport { decodeTrieDict } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree = /* #__PURE__ */ decodeTrieDict(\"!}.&u%}'&}*'~!6*)%&,~!J~!J~%L~y<~!R,~~%Lu~~#GD~~#|)1#%}^%}2%+#.##%##%}&%##%'#%##&%#%#'%#&#%#&#'#%%#&#%##%#)%''%&%#%#'%#%%#%%}%%%#%#&(23#%%#&-%0%('1#(##%#'##+%'*.:1}#%#6-+(%'%%#%%%}#L'2351&('%}&/N'(0(/*-%(%%}#'+&T%7.2}#&%&#%#36/5##%&%%#&#%%#))2%%##%&&'0~!#*+&'%1~!%).'3q?&%'1~!.##%6(~!+%%%(Gw'rT~!E#<nA%#jZ~!H%(~!42##~!*31&~!G%U~#)5~#`3~!J~!Z~%]~%Y~%C~!q~!u~#kz~%#~!6'~!D~!U~!?~#T~!c%~!G#'~%7|~!G~!J~!G&~#pb~(Df}#%}*&}#%##%##%##&#-}&'#'&%#.++}%mI,#,@&(}*%}*'%&##&#%##%}&0}#.},U},%}+%}&%}#%##&}B%(}(%}+%)})%##%#&}&%##%&}<%}>%#%&}*%}(%}9%}/%})%}*%}*%}?&}&%}3%}&*#%})%#%#)}#&#-#+*%E%%'%'#%}#*V##&##I}#&&##%&%#&&Qf%%))w/0+&%#(#.%-''''++++7}>%4'',##1,#%#&%##&#'##&#*#9)%&%}#*}%,#+P(%A&%#'&##wSD',9E00#y#@}(+}&%&>~!#~!X}#*}(&&}(&}(,%}%&#+&}#&}I%#%}%)#(},'%#*}4%%#%}(''}#/##(##),%-##%%)#&}(.}&%#&}%%}*&#%},&&}&%}#%*'#%})%}D&}&%}-&}6&#&}-,%}#%})-(~+`~,=?~I9'9%~!,#%})%})%}@%}?%}(~!?~#<~#pP~#BG~#=1#%K+~#?#~%;)~#A~#mF1~#A'~'X%'~#lR~#N~'N~#r~#m#-~#i'?%#'%~#B%##%,%#~#_%#0%~#]732~,w~2+#:&#%&'0%&>%}#>##F+)#%&&#(+_}4&}-%}(&}@&}O7Fdf0@+/v4}&WU##&/0#&'('B#%}.%}'+#%}#%%&#&%#%##+#&#)#6#'#.},%}c%},%#%##%&#&%#&~#>'*-.%##%##%}#%%}%'~#)D1}#%*&~#_%%'(~#S2%'.}#~#=##*'*-%}&'%'##&&~'E%.#&~#M4}%%##&'%#~#O1##%&#'+~#<B%##%%'%+~#;#@%}#&%#&&%#(~#H1}'%'##&&~#?A}&'~#D#%32}'&&&&~#[}'(#%}'~#;C})&}%%#%~#=&%,3}%'(#%%~#^'#&&)#%'~#Y%-~#d-%'~#^%%&#&&&}#~#b~2t*&'~&(~&@~0%~e~3}%*''0})&}+~!9##-}#%-hD*)1fC#%/&/fB#40~!+#)*4~!+~!K'&:~!/*7~!.#~!H~!L':~%x&~!H#~!*~%1~!I#~!+A~#p'~!F~~#-#~,,(~.Z~!V~%;'B'mq-W~!N~%I%#&&#&}#%},%%}'%}+X#%}#&}(%}'%}<%}#%}%%'}'%}:~![)9@~%>~#UA%-%##&~!C%~!-.9:~!1~!-^2/:a~!y,D*J#-5)/4~%23,~#G~!L1~!0X3`~!2+~!!0-~&E~!W~!o,>Y&]~%cZx_&~#O*9#A#'#+I'%#)~!0B*-5A+-((F&*M#)(-7-5+'-3a5Vi~!Y~!?+[)%3),ERHm~!+:D,VG.+)?fB%%*(%)'(#&80%1'8`K8?`+'Z#&O&'H5#*9)A%%5&3))0%39+.*7#()&&*=4@**L)<'_&*+..;(#*+)./&0#3)%')-8(4ixD(&.}%,('aI:,)%,k2231T)I'#/-W7,/'Q#.'Y24+h')37</31&83##&0#),H(?'&?/1##%#&&#%''-%&&&#(&''&#.-'%#%%(,')*'&#&#'##%(%(#%('#&##%%%%('%#%#%%#%#&%##h>w+v<ayvyvcg.uuhKr}g/v|g>u9i[~>g5uI~=RvdwEg;v/g;uk!!TTSx]@RT!U!#!@VBRUU!'UTe-d0c`e&gSdicedFcrdTaqb.kYcAohdYd@a3e+d}dMdtd.aJ#bqcK`dle/e.e'dwdPdodddjbEb}ogd^ofdpduc6j?l%d{drdqc)d7bacOdQ%T#Y)X.sR[yH>6Vyv3[xwLu>vo'!*.[yBacahoj>6Rew3[xqdZa#!a&#^(X-[yG>6Vyu3[xvg3sEr|g.u/Ri9db0T#^(Xa)!-[y;>6Vylg4wKs{JwNZt3@3r=c4Z([xlg;wKt!cpq's@v7A'*a(a+!-a#[y<3Dt?3Dt'>6Vym3[xmg9rxsNJwLZt4~?r?db1T#`-!(Xa,!0[yS>6Vz%NuQs.g4wKtnJwNZtS@3r>c4Z([y%g;wKtrdga8!a(!#&T*Y-Xa#!a0<or[yc3Dtq>6Vz43[y3JwNZtf@3s!Ju}!%Dti:pm3c_%X#tjB5pkd6q!r]u?voC'*-a.a2!0a&a+[yI3DtI3Ds~3DtH>6Vyw3[xx;:s#~<5pKJwNZtE@3r~d`a)!a2T#a.(!+U.X1[yT3Dt`3Dtv>6Vz&3[y&g9rxwzcxstPu.<rAJwLZtT~?r@dZa%!a.&^*Za(/Reu[ya>6Vz23[y1g3sEr}wkg{NuQRg{ci(U#5@b`~,cg#U(2WnH5wugcRh7dX#T(Y,a'Ta!!a,[yZ<]mj>6Vz,3[y+Pv#5ReZKu+=,%!H}7ABwkaS?Rh:BcW(X#<]mrj:ubv/ARekdg%!(!a.*Ta(Y.X1!#sP>Rl*Dt6[y>>6Vyo3Wf*jOvuumvuRgRJuq*!:9<B@bX~3jVv&v@s@5Re[d/rQt{uAvo&a&a*)a2!,0Wf!3Dt0=Bs'>6Re}3[xy~<5s%JwJZt1~Gs)c;&!#2sJkNuXvzq7rxu,Re8dka4!a8(aEZ+a@Y.X1Xa)[yd=Bs(3DtP>6Vz53[y4cX#X&Re:avRe9~<5s&JwJZtQ~Gs*i^rzvdRg+Jv{%!2sbB@bX}kdga,!Za?&^*T1/!a'Dt+[y6>6Vyf3Wf%g/u;s4hGu6?Rh-JvZ,!c%#&RoX54Rivj7uyvf8RgTKvZB%*!2sGh<vu5Rgq<=C::9bb~#dZ#T&Ta6Y.X*Dt>[y93Wf)coZ(T,6VyifluvRgC@95@B@bX~/hFu34cC#T,k/unq8w8Q5RkUklwQuzunq8w8Q5Rk8d/rJu?v8w9)-&!a0a;a&aIWejg3sEr/h1s<DtDJvyZqY5aws3Jvy!&Wei~Hr1:au5@Bag>23E~5c:Z&bX};kKv?w&unuVu5Rjc;>bs)#~@:Rh.=ay<a]C;b`}Vd6s/t{uAvoaxa()!a,a7%-a#a2Dt,[yF2Wo[>6Vyt3[xuNuPRi&NuPwpi#RoWh?vf8Ri%Jv]!%Ri:KvxD!.'2WeAjZu`q9rxu,Re7woeAg-unLq(qA_/*2Wg_g3u5q^9:4E}/jTrxrzv=Wkkd~0UX#^^Xa-a1a5T&a=U1a'*aEa]!a*aPaA-adok[y54Rn>;:p3~Dp5g9rpsFNvZqjg3uJp4~<5p0Pw;5qlJwNZt*@3p1Pw:5p/Ou!5p2JvG'!6Vye=<qnJvh_[xhg3v,Rh3kOwOw-sDuev/Re^dha[a%!%!a+#Ta7)-5TaCaO!aka!a)sf[yb2>Rl!9ARiq5E}Qg=ucRkBE|oJrJ_@Wk~@Wk{JrJ_@Wk|@WkyJrJ_@Wk}@WkzJvO_[y2g-vMRmiKuYC!)&>Ri;>Ri<@3RkNc](X#@9Rk=g5vuRmhKvDB!+'=]meg3u4Rmgd)#Y'Vz3CARmfd`a+!%T'!+#Ta1Ta6TaM-sTDt9[yA9sYd'%Y#s[[xpj:ueunaXRgEjRq,v-vuqdd2'`#6Rev<32@5>:2<E}5xIo9a*X#Y(;5RePJvD_g>vyRgNj8w)v8<wggs:RgXiZt|vjx,hSq3ah!-(~@:Ro/Ou!5RhWj^v(pyw8unRhUdx-UY#^Ua.a3a70!)%UX1TaDa)'omRiRRhE[y:3Dsz=Br,>6Vyj3[xkg6ruwjcqsrPw;5r*Ku]D'Zt-@3r(~?r.i[vwv]dU1a--U#`a4(g/vsRhPOu!5RhLj:rmu9Wo!~@:wdh@g/vsRiTjXuvvNr}:RhBj^v(pyw8unRn]dz1UYa'a+^Y(!aETZalaRY.Ta?a4[yDJw1!#qLsW>6Vyrfzq-pLflpwRe|Js>%!Dt@3Dt&Jvy_[xs~HrnjMuwpsw'RecKu+D#'!t<~Grl~?rjg5u-x,gwp{ah!-(~@:Rg~Ou!5Rh'jXuvvNr}:Rh#cW#X/c;&!#2sLi[v7u7RgpJv)(!iLrxu,Re6j7v@s@5Se[e7d`aW!Za(a`T.a#!a3!&aDa-!9)Dt_=6s+3[x~~DR|h~DS6avhGun5RkZj3w)v-]mkKunB!&*]kb97R|i<ARk<c:Z(6Vy}Juh'!wziMRoS:F|vkLuauJv5vtvQRh1d='T+Y#VyO~DR|jcF#T'7R|g97R|kJv3'!ay<Rj,Jvh&!:ReXcsa6*a+#a#_aIRf9aLRf?c,Z&Rf5Rf7c.Z&Rf;Rf>cQ#%T'p-Rf8Rf=ct#%'(*!,p,Rf4p+Rf6Rf:Rf<d~'Ua%U*^UYa(!a,-!#a4YaTalaEX0a8a<Weo3Dt/3Dsx=Br93Wen~Dr;~<5p<JwNZt2@3p=Pw:5p;Ou!5r3c7&!#:p>3Ds}KvGB)_6Vyk2sM=<r7x'eovA(!hFu1ARf}cV#X&@r5j6rvwQa^Rf3c=Za'wkghJv__g;unRggA53B9=b^}%j6uduo5Jq;!(hIv%2Re`Ou4ARe_e%a#^^^Xa&!a*a2!&a6YaP!*ad!#a:aE/5Rn?[y@>6Vyp;:pE~DrY~<5pBJwNZt8@3pCh=rt3rWPw:5pAJup_[xoNuPpF9c!#'45pD5ARn)d8#X'X*3@rU72s]h>v<<sSjJpqvewOJq/(!hNw'5ReBk0s2u3w/w'5ReE5@Jq.!a+JQ!&WeU23d(#Y&RjG5]jBk!u7w&u0udARjEe#+^^^Ub#!a2/a`Z(agT1!a-a;|@TaG!aS[yV=Re~fow'RguNuPRe?bz#'>RoUWeL>:Cbb|?JwPZtVg6ruRmzJvD'!6Vz(g/vmRh~Jvy_[y(g9voRgyx*cy(#2>Ri2B9b]~9kIw9u7rluJu3Rg]dI#a%UY'@=p%CAx.gQZ&RhwwygtRm{x5g_Z'+ABqR9Woa=Bp&dV#^*Xa'!&@o{g4v]Rk;Jv{!%Rk[wkkiA5RkiwwfUB=x,fUuqC&*!>RfTg8v0RfV~ARfSd;rJsAuAv9wR'ae+/aO!a@aza/a#[yQ@Wg!2Wemg3sEr0JvB_g>uvReWg2v+Re=KupB_+[y!2AbY~-~Hr2AJwD!(h<~El>h<~El?Kun@+_:9b`}Kg-v/Ri3g;vtwyk_9]k_d=&T#*U.6qh@Ab`|K9:H|CJv[!&3Dtex'fDwC%!Rf[9WlMd[(^X,!a%Z06Vz!@WgBg=v~Rgvg,QRe@awd,#Y+jTv|Q~EfWj]uNr|~FRfXdy#Y&^Ua%!aO.!(a)Ua;=!a@aKap!a-,a!Ta]a[rSa]p?[y82sK=Bq~;:p:~<5p8Pw:5p7d'#Y'Wf(;RnRi[u4w&RgJJvG'!6Vyh=<r#ijuuv/sIKuYD'ZtG@3p9~Gr&d2#`(g<vtRgFj`u5w&rqpxRf2CJuY!+:wfnTOu!5Rg}jNs1ucv&RfwJvA!&3@q|BDcC#T,k/unq8w8Q5RkTklwQuzunq8w8Q5Rk9dga#!a'!a=#a0!:+Tb*b@aO.a4!aba8aFJv^}?!VyR~Dr<g;u%Rn.~<5p[x'e`wNZtR@3p]Pw:5pZhNvjBp.woe_g5u-r4JwF!%DtO3:ooc7&!#:p^3DtpLuGw(!+%)Dtk6Vz#2sd=<r8d'#Y([y#<x3gJt`w@!)%}MRiowzikRij=]ilxAf3,U(#B2Rf#g0v-Rm[ck{`U#]giKv3>)!&6Ri154s,KuGB_%@r68r:dJ|t`#X(9<E|u2@H|rx3gJu?w'!+'1Nu7Reg4=H~+9<wxgY95Rm]xLggZ-`(X}U2:Ri4h<uOawRmsJv__5@bb{jbV~3dka#a'a]!,#a+U=a>b6a3b%!/aKa/)!arwve^VyJ;:pR~DpTg3uJpS~<5pOPw;5qmPw:5pNOu!5pQJvG'!6Vyx=<qoJvA!{~Jup!%@qk7Rn/KvyD!}''[xz;>wkh'?Rh,x8gyt`w5D!&),(SgyccRgztJ@3pPB5p#d'(Y#<]mmifubw&RgoJvE&!82s^JvF&!8Rf,ADb]~;x=h'rNu]vK!,%'*0RnORh)4Rh*AqQg-vaRnNg;wHwkh'ba~4cE#Ta*x3gctyw@'!+%RnFRnD<4Rn@hFvK5RnCxWg[#`&a0Ua()`1Rm75Rg[c]%X#qi8Rg^NvdRj>BwzgZauwji7Rm6A4wgg]d1#&(*,.0a#Rm;Rm<Rm=Rm>Rm?Rm@RmARmBe%#^^^Xaea?aC/b+(,!a+a#!a/!>a&Ta<aKbD!2wphBRnk[yPw}hE|.=Br-3Dtm>6Vy~g6urRf.x,hPrNav!%'RnqRo%Ro#Nu;q[Pw;5r+JwNZtM@3r)d'#Y'Weh;xChL#`&RnmRnoKu}>%(!Rne~Bs-;2wjcussJv+'!aYSO}6@B<5?ba~8LrNvj!.%*ROwungw~ng~:9;Ri^>wtnig;wHRnixDh@|(UZ.x1h@|)!#:2<H|*xHn]#-UX'3Ro)z=iT}6ARns=Bwsn_wpnaRncw]aR(#UXa&Ua*a/=]iPd'#Y&Ro'WnXf{QRm2hNvj]nZd`'T~&1`{|`#9b]{}c:'!#Wl{>@=be}]?cl{{U#:5Abb}Jds#^YaF!a*b4a#a3aPa>&Tb!bH!*a_!Eau?/a&RjY<]gj>6Vz*;:pe~DrZg,QRj1JwNZtX@wihspcJvZ&!VyX9WmOJu|!|N2WmHJvh&!]ht~Bpbcn&T(!#RmQ<s7Nu;padH#X'`+WmJ@>RmKCARhnKup=!)&Wf+:RhqNuPpf9c!#'45pd5AwghpARn(Ls@w!%,)!RmP@Wfe<E|IJva!&WmNg8vsRmLd`*.`#Y'Xa!axRn*]hrA8Rhug5s@rXg8u!RmMd8#X'X*3@rV72smdI*#UY&RmICARho~GsgxVgd)Ta'U-Y&Xa!T#RnEWnA@Wffg1uDRi0hFvK5RnBxGnG&#`%owp)@wsf+bX}Ze-*1!a*^^^Ua|!#a.aq&Ya2!a>.a6!a:aO`aJDtL[y`@Wg#>6Vz12@wzoYRoZNuPRi!NuPRhzg=ucRi,@=b`{Yg=ucRi-ACJvB!&Sh[ebSh]ebi`wUuFRm4Jw2_[y0JvB!.<Ju(!&SoG}6Shd}6<Ju(!&SoH}6She}6Kur@._g5vHRieJvx!{L2G{Kx6gd'T#?Rh82Wi5cZ#X(g1w)Rm5dW-Y(Ta#!a)!#aYa=wnfE=su2>>bU{0j9udv:<svj8uQv-7RgHdE%#^'sq9sp=>Bb_{TJv`!&g/r|snj6v(us5d,#Y(56H}[978H}]Jw5!&g1rushJvB!+j;v{u5?zDhd}6}bj;v{u5?zDhe}6}ce*#`(^^^a[aea!=!a6a*aoXb1a.!aAbL!b>,b'aL!aV@Wf|2Wlg3[y/JwNZt^@3piPw:5pgJunZou3@rsJva&!Vy_g<v~Rm#JvG'!6Vz0=<r{Ju{%!:pj@WfsiXuJu3Rm:JvZ&!WfA~Bph@c4Z&Dtwax5rubx(#:awRk1@d,#Y&RfjRfid1#,Y(@Wfp2Wlrg5s@ryKu[@!,'=]ig9wlk?Rk>g5u-rqJvy'!@9RkQcH(T#=>Ri~@<wkj(Wj(KuZB*!&<7rw@9RkRcH(T#=>Ri}@<wkj)Wj)dg(Ta2Xa9X#`-!a*CARhg@@=I}d9x;c~#X%so=<sj>2@@=aybb}XjWv0Q~EfEj3vLv;<d,#Y(56H}`978H}_dgaPaFa'a/!#a3Y0a_a;a|!1(a7-[yE3[xt;:pJNvZrrg3uJrvJwNZt=@3pIh=rt3rxPw:5pGOu!5rpJvG'!6Vys=<rz@c4Z&Dt(ax5rtJvZ!&~BpH@wsfNg-vaRlNci*U#=<wei<F}a5@Jq.!a*JQ!%@qZ23d(#Y&RjH5]jCk!u7w&u0udARjFd/prq=tyvpaEa(a:.!a1aZ(@@=I}:9wpd%=<sX55w_h}@@=I{t=ay<aU@@=I}T=ay<2@@=I})?C9:9au@9Cb]}DP~=x-fAZ(2Wl1=ay<aU@@=I}>5@d##Y+jTv|vV~EfFj]uNpn~FRfGdgaK!Z2&!a8a-Tb({E!acTbM*!a(DtY[yYd'%Y#sl[y*hHvh>Re5x2c{Z}.j4uCvcawRiMd+#X+_x&d!},<5RkX;2Hzw@x,gavfB-!{CcF&T#Roe;RodwWbBg5urRgaKvHC*_6Vz+<4opieuew&Rmq@d]&Y)X,T#X0Rh}<BqP=4qS9:ReMg/ujReNJw0!/<Jui%!bd{kawwnemRelAxUa?a3#*.&UX(Ya+a/RhvRnQ<o}9Wmtd-#Y&RgSRmw9;Rmxay=Rmyg-vaRmuxEhSrNu,v-voC!%(aR.a(a7+1Ro1>Ro5CE{A9b]{@;5x#eO{:g;urRi+KrNA!%(Ro3>Ro79;Ri_Ku@>{;&!x%gX|{KunA_+g5QRj/g3u5Rj#g>uERj%wio/xRhS&!,!#^1U}wba{8>>@=be}qC@:D5ba{7Ku+A&!}x?ba}t>>@=be}se(aA^^^Uat!b0#{pa+awUazbGa#aLb9bgaWac'a5TbS=Br!d1#`%scp_Jvl!#rT>Re0JvX&!VyN=H{Fcm#U&:pY=ReaJv2&!]h0=]nUJvG'!6Vy|=<r%JrM_=]h2@Wlud'#)U'Wf'b]{i=]h/Jvh!&~BpWg=v]RnMx+ny#'Nu;pVwjnu=]nwxJnx,T#`&Reqwjnt=]nvieu9vrRjLLuYwP(#+!th@wih5pX~Gr'g5v/Rh4KunA'!-CARnP@wwiN:Rm_9x'cvw>!|l=<saKvAA!0&3@q}>w^e1bp#&Re2Re3BDx7gH#T|f5H|eKuZ>!%(:qNAH{]Jv6!+3B2B9=b^{X<5<B92:E{ZLvhwA(a;a%!igQuyRmad+#Y}m@3Rh5d8#X'X*:AqUAHzmaxwbh<aXRnVcF}RT#Nw&cj#U(BWnug/vsRntdka)(a3+.Zb7aYYan1!bVa@Xa}[y^@b[{G=H{+hFu73Rj&Pv#5ReQcK%T#sig1v{Rj'Ku+D#'!t]~Grm~?rkKuMB!01d5#`'Vy.ta3Dtu~Hroc8#'{^45s85AwZbP&!#Rn!wghxWn#KvEA!)&2RlA2RlBx:h|#(T,=]j09Wobz>x]z/@awRoTd+#Y(az]hFhCrm4d,#Y+jTv|Q~EfMj]uNr|~FRfOdCa!Xa9_X#@<plJvf!%b`{(9;Rgwc;.!#2x7cw#T|UDb]|T5Ju={(!=@E{&Jv)&!Ab`{'awJvf!~*>>@=be{#KuY>!+&4Ezyi[ugv&RjIdea+T)#UXa&T-T&a!Rh9auRmW=]kLg5vuRn+g3u4Rn-Ow6ARn,hHus5xNk?#UX(U~)/g8v0RkD~AwkkF?Ri.OuNBwkkA?Ri/d|a2`a*^UYa.!aBTZaTa'Xa;!(!2!-a#b2[yC>6Vyq3[xr2Wi?g1rusVh%s?DtF~<5rbJs;%!DtBfswKtCj[uvuSsEu3RgVx3o:u+wN'*Zt;@3rd~Grh~?rfg8w)Lq)qE&-a%!>bI|`jWv0vV~EfCjTv|vV~Ef@j]uNpn~FRfBcK#T']gWNu7x,k7q4ai(0!hHv8<RhmkMu9vrsBuev/RhlCJvB!,g<v{wchh~@:Rhji[vrv{wchi~@:RhkdS&a5UY#Ta!RgPwwiI5BwciI~@:Rh`x'iJvj'!5]iJPu8Bwch]~@:Rhach)U#h3rp]gLh@t|Ax,hTq3ah!-(~@:Ro0Ou!5RhXj^v(pyw8unRhVd|)`,^UYas!a?/a2Z'a^Ta{Tb7Ta(a#!a,Wf&9sZ3DtAadamov=Bqt3[xig8vsRm~>waiL2b`{QJv*_Ouv2qgj<v]v2BqfdR'X*X#Y-@3qr~Gqv~?p6hHv-]glPup5Lq+q?_%*b_{qF{n9b^{rOu4ARhpKvCD!+&~Bqp:5Dbb}nwoiKl&unuTuBv]v+ueunaXRf0=Jvh!0nKufu8v1w&w7q%w&uHrz:Rgnj5w,uxDJq/(!hNw'5ReCk0s2u3w/w'5ReFd>Za&!*UaA=<wkgsRnSJv^!%Refifw3vyRgOKu_B'!,<]gkiiu:w&Rh<=C@a^<B57@2F{[<B5@aW:=3away9A5aW=<B=C@a^<B57@2F{Ie-#`(^^^bCara.b8aza6!/bZ,!adTbnTbOb+aFaS!aAT9@Wf~2Wli3Dtl2@d,#Y&RfnRfmJwJZtN~GqyJva&!VyMg<v~Rm%iXuJu3Rm9Jv[_=]ih9wlkDRkCd1#`(@Wg>2Wls3cH#T(@<Rj*=>Ri|b~'#23s9h<~El.d'#Y&Dtxi^rzvdRl#d*#U%(o|B2s`hJwSaxRmDKv4B&!1:Rmdd5#`'Vx}to~Hq{x'f1v3(!BA5ba|bJv_&!Wfug1v]ReIdO+U/Y#&G}-8wze=Rh{g1v]ReHg/uQRf/by#)ibQwERl/cH#T(@<Rj+=>Ri{cNu+vlax-!(#a0qa9<Rii2;;bU{H;x<i=&X#Rk`<4wwi=C9H~8xAI(Y#<azRi@45wXI<B9;5bb~7dL(X#Xa(+!aL6Vy{g5QqOau:5au2@ay547EzbxOcU(UX-T#Ta#:Cbb|A?wjh/b_|SOw6ARgtihr}u7Rhy<d1#T)X1@@=I|~=ay<2@@=aybb}Sj3vLv;<d,#Y(56H}A978H}@dGpvs@uAu`vcw9*!aFa+ai%(b!aXa8.a?a[ozWey=sU2@G}Nch&U#Rf_WexKu+D#'!t:~Gr`~?r^j]uNr|~FRg*j^psurwJt|RmcKv)@&!)7Rkv~Br[@wxfO:Rl3co#U'6Rezj_q#vIuavjRltwzeyh@vr5JqD0!>aY?C9:9au@9Cb]}9cl#U*5;5<H||jbuus1ucv&Rfvg1v~d/pppzqFr^a--a~!aMat1(hFv;Wiz@@=Izoj5uuv-7Rix~Cw`fk2WlVcZ#X,k)u3vWs@u2]ktg;wEx'fBq(_2Wg/jTv|vV~EfoJv]!15x'hzqG!(P~EfU~CRl_j6v(us5x4i-#T(2WmZ?C2F|d>Kq<aj1!*jTqIsBv=Wl`~Cw`fi2WlWj`v0u*~>RlR=c>Z,k#u3vWs@u2]kr<c1Z+jTqIsBv=Wla~Cw`fm2WlXdmb3!a{(arZa`bkTa%TbQTa-a9+c'!aM!/[yL=Bqug.w'RifhFvyDRj.g>vgwyk^9]k^Jv3_@WfbAARkhJw2_[x|JvB_wkoIRoKwkoJRoLd'(Y#<]gm=<9<H|yd'%_X#skDtb3awwqkgNulRkgdB#^',9:p'hJwSaxRmEBwVb8@4=H|qLu+w50&!)@3qs~?pU>Awwn;;Rn=c:Z'ARn<=<qwKvC@!/&~BqqJv6!&]eVb^z^xRge'/a%+^`#Sge}6<4Rn3=]n0Pw2>Rn8Jw0!&>Rn:>Rn6cY#a7+!a&=<wkaNw~h3z_c5Z{=wjh#=]nLKv^D!&)Vyz=bW|swYb<WetcG#T(2wxa@qVx@gD#Y&b^|V5JwG&!5bb|pg/w&RgD@x=kHs=uAvn!a%%/'+RmSRh694Ro`g-vaRmRhHv-]mlxCcS#`&ba~.5cD#Ta)P~=d,#Y(56H{>978H{Dd_#{2^Y%_+qbbb{6g3sERhsbU{?dfa.,`a(Xa<!aiX#(55RiG54RiHcI#T'WiU3RiVNvdwtfcRlKNvdd,#Y&RlHRlExQgf.1*^T'X#Sgf}6Wn4=]hfPrk>Rn7Jw0!&>Rn5>Rn9Lunw?&a2!,5<oq@@wqfdRlJj5Q~=d,#Y(~ARfcOuN]fdDKw;ay(}i!547E}j?cI#T(@5bV}iCbV}hdv(^^Tb?a40,b##Tbo!a*bR!a<b|a/!aKai!aU[yK=]o^g:v>ReGJwPZtK<7Rh+h<~El,Pv#5ReR@awwxjCg,ulRjDJv6&!]j!z?aQeeg>w=Sh<eeJw;!&axEzOg,Qosc!#*:wkeJ]eJ>x'h-u(!%Ro.w~h.zPdNZ(X,Ya![x{;9ReY;wkgxRiF:x?ap#Y&RmUg<s2Rkod]+UY0TZ'!a&A9sw<=bczLNvuw{gqzNhJwSaxRmCKuLay!#&s_Rf-55b^{uJvZa!!c%#(55Ri654wmiu5RiuawLu,vp!+}^%b_}Y9;wkgxba}o>A9:=b^}zKuh=a''!3awRk3c*'!#aHRk6c+Z&Rk5Rk4Jv)&!awRjSawd9*`#0?C2@EzMj8u<uJ5RmbjQrquJu3x,k>uq@_+=ayb^|W~ARkEOuN]k@7dhzV^X/X&a-#zRzSb`zXcJzTT#2WkVKvDBzW!%FzY9;5bbzWjQrquJu3Jw3%!b`zU=ayb^zQd:#X(T-a!6Vyywxh}=b]{Jg=u1RiAdGp~qHtzv!w(wA+a+a;<!aJaYai'anasb(=azRmV:Cbb{MLq2vb!%')RjuRjrRjtRjqx3jnqCw3!%')Rk(Rk+Rk&Rk)Lq2vb!%')Rj{RjxRjzRjwLq2vb!%')RjsRjpRjfRjex3jcqCw3!%')Rk'Rk*RjkRjl9<CbbzfOu4ARhxLq2vb!%')RjyRjvRjhRjgx=joq*uKvb!%')+-Rk.Rk%Rj~Rk-Rk#Rj}x=jdq*uKvb!%')+-Rk,Rk!Rj|RjmRjjRjidAq&qKs@uAv8Aa.'*-a@a&0!aM@a5[y73Dsy3Ds|3Dt):wxgI2sHJwJZt.~Gqxwsf0ikrzt}Rl0Jvy_[xj~HqzKv_A|D!&WfP8axRoVcf,U#k(v]v+ueunaXRf1Ju}'!g8u#Ri=jQw!sCunLprq>!,')~<5qeGzq9F{W=c##%s5au:5aU3CBE|;d4#X(D!a&6Vygx(b;#(=]ed?C2F{N<capoq2r[a&!aPa9,'Pw;5s:@@=I|,55w_h|@@=IzcP~=x'fCqB_2Wl2>aU@@=I|1OuNBc1Z+jTqIsBv=Wlc~Cw`fl2WlZ~AcTa%!Z+jTqIsBv=Wlb~Cw`fh2WlYk+uNqJsBv=WlSg,u3dca3#UXaMYa)TaB-=cM|7T#<bI}l5@B932:aV2G{BOuNBJq:|M!5Ezt=<B=C@a^<B57@2F{v>cB{/T#=ay<bI{3Jv6!a.6BKq0ah&+!5E}HP~Ef{978BaU@@=Iza<7d#.Y#978BaU@@=IzH~AJq0!(@@=IzG978BaU@@=IzFe,aU*Y&^^^bvJb,b:bFad!a,c2Ta>aL.bo6!a#CbTa'T#Re{2Wlh2@G{yg6t~Ro_NvdRfticuRQRllJv3&!x&c|zs@Jw3!%RflwpfkRlpKuL;%(!Re<@G|C2GzdhIvuBwgjAg-u0RjAKQB%!(GzZ@G|5NuuRl7d='T+Y#Vy[g<v~Rm!==G|>JvA!)@wma=]m1ifuaw&RmnLs@vT'!|/+[y,g:v>ReTJw1!#qX=x!eC{bLu+wT&)ZtZauq_~Graci&U#F|89:r_Lupvq!.)&2RlG8RfaC=x!eF{_h?rpWlmd&'!#X|&]k::xJey#`'T|+<E|&2@H|%dE#(^,g;u.RiEg6vjRiC9xCkA{O|zY#g=ucRmXKs0@!&*@G|m@awRknJuh!,3d(}gY}eJvj!%Rm):Jw3!%Rm+Rm-Ls0w(&!a(a#@b[|6cZ#X'7RkxWgAOu4ARn'dH'U#Y*Vz-Wm'CARm}d]*#a%^a*T'aK!a<9bV{PC=p*Jw4!&SgxcbB5r]idw(wBRmF7xFkt#&`(Rm/Rm8E|!JuY_9:Rl5=wrgr2:bbxd@xXfB(a*#T+!.X0X1Ta/a'T&RlDRfL>RlyARl9b[z[>RfZ:RlL:RfRwlg/ARl;9;RlxKv,A/!%7s69<74=BA5ba{-8Bde#`a<XaKYa1,a'P~=wxfB2bZ}}?C972@@=I}r8@55B9;5bb}G978B2@@=aybb}3j3vLv;<Jw3&!>Rfk=ayb^}4~Ad1#`*@@=aybb{w2@>==<bbz]dx+UY#^UaF!a9!bB'Ya1.!ajXa#%olRhD[y=3Dt#Ov5BrHKuMB%!(Rf^Wep~HrJwkiQjKr|~FRg)Ku+D#'!t5~GrF~?rDdV)UY,Z/_7RkuG{<~BrBg,rlsO:235B@bX}|d?a1!#`(6Vyn5@d##Y+jTv|vV~EfIj]uNpn~FRfH7Lq2vb1!a9-978BaU@@=Iz9978BbU}#~AJq0!(@@=Iz8978BaU@@=Iz7~AJQ|}!978BbU}!JvkaK!AdUa21-U#`a+(g/vsRn~Ou!5RPj:rmu9WhOjXuvvNr}:RhAj^v(pyw8unRn[kPr}p|u7vwv]RiSBd;pppzq@qHQa?(b.!a.a`@.|xa(hFv;Wiyj5uuv-7Riw~Cw`fg2WlU978BbU|wOuNBJqG!(P~EfD~CRlQcZ#X,k)u3vWs@u2]ksg;wEx'f@q1_2Wg.j]uNpn~FRfqJv]!15x'h{qG!(@@=IzK~CRl^j6v(us5x4i,#T(2WmY?C2F{1>Kq<aj1!*jTqIsBv=Wld~Cw`fj2Wl[j`v0u*~>RlT=c>Z,k#u3vWs@u2]kq<c1Z+jTqIsBv=Wle~Cw`fn2Wl]dn1#c(a(b^a2!b/bAT(bj!aDa7bu,a_a{c0!2T0g:v>ReD2@G{42@G{5~DpM~<5rc=Bx6i>{RT#RnI@zCx]y]z:2Jv[!zr5Awyk]9]k]dD(Y+X#6Vz.g=wKtgwhaCwgmTWj2Lu,w%_+/[y-B;b^xeg3u3Rj-2@bX{*KrJ<!+'@Wg(g?QRlC@Jv`!%b[zIwsfII}8JQ_@w|kW|=Jv(%!AqcOuNBJvEzh!bYzjLs@wP#(0!oy@>RkdJwMZtc3Dtd@BcG#T'9bWxg2@2Fznd*#Y+;2x'c}w<zizixNgwa#Z'U+!/!a'!a+w~g~z6wcn{Rn}wcnzRn|5Rh%=]nJg5vuRmvNvdRlvcprJu}w*az*a#!%.a.'Bot9qT]kj@Wg'ay2Gzv@Jv`!%b[zEwsfHI}1;ck#Ux`<Cbbx_Lu+w!a&0*!wko*wwo,So,}6Juqxf!E}PigQuyRm`d3(`#8>Rn%:A5B;bZ~%KvhCa!a2!x>k7#Uxb@b{#xaRk7Jw0!)>wwhlShl}6>wwhmShm}6CJvB!.x'hhvj{!!5Bwkhhbaz}x'hivjz~!5Bwkhibaz|xEhTrNu,v-vpD!a%&/)a3a.,%Ro2t[CE{)@3re9b]{%wjo09:rgc:Z&Ro6=<riifuaw&RmoKrNA!%(Ro4>Ro89;Ri`dSaL'UYzxZb)7Rka3xRhT&!,!#^1U}vbaz{>>@=be}yC@:D5bazzKu+A&!}{?ba}y>>@=be}wxBh[t`u~vJvr!%a!a()a,a0a4RoC=]o;Ju(!%RoGRhdwjh`=]oAg>w#Ro?g5vuRo=NvdRl|Ku]C.!&;RoEJvB!%RoORoMBx'h[v+_?w~h`}~5?w~hd~!xKh]oiptu-utv.vp!#%&a30a@a'a+(a/aOp(o~p!RoDJu(!%RoHRhewjha=]oBNvdRl}g>w#Ro@g5vuRo>c[#X']o<CauRoRAd-#Y':RkpauRoQKu]C.!&;RoFJvB!%RoNRoPBx'h]v+_?w~ha}t5?w~he}ue!/UbhYacXaW^Tc&a;b:a-c/#b&aja1(!cL+!bKbt!bmcRc9aIc?8[yW3Dtt94Rg`Jv}!&SiRMzBhEebShEMNuPRe>x7gL#TzuwjirRipc<Z&>on;>z=h-MSh.Mwqczx'a7vj&!>Re4@=ResJt__NuPRi*NuPRi)j]uNr|~FRfzKrJ>_+@Wfy@Wf]2WocKrJ<!+'@Wg%g/QRl@@Jv`!&awRl<wsfFIzgLu(w*!.*&ShBMwvhIRhI9;RhNx1hK'!#Sn]Mx1hK~0!#:2<H~7cNu+w7D*'1ZtW>Rn1~?rOc:Z&Rn2=<rQ<7wjh&=BSnLMc]#X(6Vz)w[b=a!U#9wzgMc3#&(RgMRitRis<x,gKt`ax!&+SioM=BSilMc3#&(RgKRinRimKurB,!&SiQMzBhDebShDM6BJQ!(P~Efx978B2@@=I}WLrJw!!,a*&@G}O@9wkibRid@@x'fKwC!&SlDMSfLMjUv~Q~EfKKv3@a+!(hFv-]mpx/hYZ(C5RiWz<o/MwkhY?So/M@x,gbvfB*&!SgEM:SoeeehFu3:Rgbda(,^TZa)X/7Sg[eb:2RgI~BrMC@wgkc:wwkcRerx3h(uUvK!&*,SnOM4Sh*MArRg;wHRh(x=h;rJvPwI!a4',a'0@Wg&=BSh/Mg>w=Rh=g3w*wwgGRgGcW(X#;Sg}M2Gzk@Jv`!&awRl=wsfGIz`dKZ*T'Y-:RhR7RhQg5u-p`j6v(us5d,#Y+~Awkia?RicOuNBwkibba}Ld6p~tyu_vbAa'a+!a/'a3aEa8a!>Sh,ebJv{!&Sh@ebSaReb9;SgwebNuPRi(NvdRl)NuPRi'hHu^<Rm^Jvv_@Wl(g;u1Si/ebKu'B&!*Sh?eb@Wl'z@aPeb95Si.ebcpputyvjB)!,&a+0a%ShAMWeK@G}C@WfJ9;RhMwvhH9w{ia}ix,hJvRA1(!zAn[MRhHx1hJ~*!#hFv(BSn[MBJQ!(@@=I~'978B2@@=I}2db.Ua<'X}+T#a0XaG2G}E;wkg|wuh!Rh!x,hZu,@)!&So0MVy)C5RiXACJvB!&5RiY5RiZg8w)cG}*T#2@bU}=KsA>(!a.3wkhZba~(x,h^u(A!&(SoCMRhb5Bz=h[eb?w~hb~6x,h_u(A!&(SoDMRhc5Bz=h]eb?w~hc~6e)aA1T#T,^^^c-bMb&blcPaP(a/!0!bA=b5c@a(!bfbrc#2afwmhARnjwchORnp2Wlf3DtsNvdRl-2@wpa<]m0bx(#:awRk2@Jw3!%RfhwpfgRlnKQB%!(G{V@G|'NuuRl6d='T+Y#VyUg<v~Rl~==G|<Jv+'!aYShC}6@B<5?ba~8@Jw3'!g2QRljhLrpWlOd+#Y'g.w'rIg>w*wgj@g-u0Rj@Lu+wT&)ZtUauq]~GrGci&U#F|39:rELrNvj!.%*RhCwunfw~nf~:9;Ri]>wtnhg;wHRnhx3hDs@v~!/+'@Wfr@9RkSNu&Rlo=@<5GzoKs0@_+@Wl+@awRkmJuh!-3d(}pY#qWJvj!%Rm(:Jw3!%Rm,Rm*de&!1U-U#`)Re;@G|.@9Ri82@wjfvRlq=@<5GzpLvOvr!).&2RlF8Rf`C=x!eE{.Jw3_g2QRlkhLrpWlPde(!#U{s,UXa*Ta'[y'g:v>ReS;x0PZ&RnlRnn~HrKJw1}f!=x!eB|2w]aP(#Xa&a*Ta.Ua2a7=]iOd'#Y&Ro&WnWg;u.RiDg6vjRiBNvdRlzhNvj]nYJuW_2Wm3x)kFze{9d])!a.!,Y01!#&aC!a3RndC=ox~BrC@2b^{pg,rlse7x'ksuq!%Rm.E{xidw(wBRmGx9o+)X#wwo-So-}69:Rl4@xSf@a#XZ'X)X,Ta(/ARl8b[xc>RfY:RlI:RfQwlg.ARl:9;Rlwdn'#^XafaQa1X1TaHTa)@b[{zcZ#X'7RkwWg@Ou4ARn&x)kG#{,g7u/RkGdH'U#Y*Vz'Wm&CARm|bx#(A]gUbUzJj9Q~=d,#Y(56H}l978H{U7d,0#U*2>ABb_xZ978BbU{e~AJQ{g!978BbU{hxMh?ad{oUYZ.x1h?{l!#:2<H{mx3n[t{vl!,&a%3Ro(z=iS}6ARnr=Bwsn^wvn`Rnbd`*T}B0!#^X'BG{c9b]{a>>@=be}F?JvS!&BG{d7BG}(Bde#`a1X,Ya@!a'P~=wxf@2bZ}I56B2@@=aybb}08@55B9;5bb}<j3vLv;<Jw3&!>Rfg=ayb^}&OuNBKuLA!)a!P~=x#fD{f2@>==<bbzl?C972@@=Ix^d6rSu,v7w*C(0a)a6#B+a%!sQ[y?3Dt%3[xn~<5rLOu!5p@Ku+D#'!t7~GrP~?rNKvlaya7'!h+v-5qMg=t|cd,U#5AAaa5Abb{S@52B5@a[@52B5Gx[iXueu;d<#`a(!/549C;ag>23ExY5@Dah89b^~689Jv)!~2b[~1Lv'w(%*!a#bX|aPrmawRe]keu7uhv-q6rxu,q`xTo]/a5aU!bNaDXbi!b-!ao!b<bwA!#5@B932:aV2G|:d-)Y#hJrL>RhG<7@C5<H|_=Cau:5aj5@B932:bJ|ng>vIbs)#?C2F|9jPv0w.vISh-MKvUaz(.!9ABbb|[5;5<H|Eg>unwfh;9:4E|YjQsBt|vjx'hYq3!(?C2F|J:2<BaY?C2F|GOu!5x,g|p{ah!-(?C2F|c9:4E|OjXuvvNr}:Rh&i[w*t|cd+U#jJvsu)vsSn~Mkfrmu9p}u7vwv]So!McW#Xa!ax5@A5aY:5;5<H|>kJv~vYrquJu3x4ib#T)2@SmZM?C2F|Bj:rmu9@xPhI(a*a#U#`a3-5Abb|L~@:RhK9:4E|0@52B5G|#C::aY?C2F|-:2<BaY?C2F|.5Jvk!a)javYrquJu3x4ia#T)2@SmYM?C2F|HAxPhH(!a#U#`a*-5Abb|4~@:RhJ9:4E|R@52B5G|F:2<BaY?C2F|Sc^#Xa2j=Qq5CJvB!-g<v{z;hhM?C2F|Zi[vrv{z;hiM?C2F|XKsA>!a)-g<v{z;h[eb?C2F|]i[vrv{z;h]eb?C2F|^iZu.vix,hZq3ah!.(?C2F|QOu!5ShXM:2<BaY?C2F|P\", 13_494, 2713, 49, 25, 61);\n//# sourceMappingURL=decode-data-html.js.map","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * The trie is a flat `Uint16Array`. Every node starts with one header word:\n *\n * 15..14 VALUE_LENGTH Number of words the value occupies, +1.\n * 0 = no value; 1 = value inline in bits 12..0;\n * 2/3 = value in the 1/2 words after the header.\n * 13 FLAG13 If VALUE_LENGTH > 0: semicolon required (\"strict\"\n * entity; `;` is never stored as a branch).\n * If VALUE_LENGTH == 0: this node is a compact run.\n * 12..7 BRANCH_LENGTH Number of branches (or run length for runs).\n * 6..0 JUMP_TABLE Jump-table offset / single-branch char / first\n * run char (see below).\n *\n * Branch data follows the header and any value words. Its shape is selected\n * by (JUMP_TABLE, BRANCH_LENGTH) in the header:\n *\n * Single branch JUMP_TABLE = the only child's char, BRANCH_LENGTH = 0.\n * No branch words; the child node follows immediately.\n * Jump table JUMP_TABLE = first covered char (> 0), BRANCH_LENGTH =\n * table length. One word per covered char: 0 = no branch,\n * otherwise the child's offset from the END of the table,\n * +1 (so 0 stays the no-branch sentinel).\n * Dictionary JUMP_TABLE = 0, BRANCH_LENGTH = number of branches.\n * ceil(n/2) words of sorted keys packed two per word\n * (low byte first), then n pointer words storing the\n * child's offset from the END of the branch data.\n * Compact run VALUE_LENGTH = 0, FLAG13 set. BRANCH_LENGTH = run\n * length (3..63), JUMP_TABLE = first char; remaining run\n * chars packed two per word after the header. The target\n * node follows the packed words immediately.\n *\n * Pointers are end-relative (rather than relative to the pointer's own\n * position) because that makes the common \"child encoded right after the\n * branch data\" case a small constant, which compresses far better. Offsets\n * to already-encoded (shared) nodes wrap via uint16 modulo arithmetic; the\n * decoder masks navigation results with `& 0xff_ff` to match.\n */\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"FLAG13\"] = 8192] = \"FLAG13\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 8064] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n /** Bits 12..0: the inline value of a VALUE_LENGTH = 1 header word. */\n BinTrieFlags[BinTrieFlags[\"VALUE_MASK\"] = 8191] = \"VALUE_MASK\";\n})(BinTrieFlags || (BinTrieFlags = {}));\n//# sourceMappingURL=bin-trie-flags.js.map","import { codePointToString, replaceCodePoint, replaceCodePointXML, } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"AMP\"] = 38] = \"AMP\";\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n/*\n * `parseNumericEntity` packs its two results into one 32-bit integer:\n * `(consumed << CONSUMED_SHIFT) | codePoint`. The 21-bit code point field\n * fits any valid Unicode value (max 0x10FFFF, clamped before packing); the\n * consumed count excludes `&` and gets the remaining 11 bits. Extract it\n * with `>>>` so the topmost bit isn't treated as a sign.\n *\n * Plain consts rather than a `const enum`: with `isolatedModules`, enum\n * member reads compile to runtime property loads.\n */\nconst CONSUMED_SHIFT = 21;\nconst CODE_POINT_MASK = 0x1f_ff_ff;\n/**\n * Reserved consumed field for counts of at least 2047 characters after `&`.\n * The true count is in `longNumericConsumed`.\n */\nconst CONSUMED_OVERFLOW = 0x7_ff;\n/**\n * Side channel for numeric entities of at least 2048 characters including\n * `&`. Set by `parseNumericEntity` when its consumed count reaches the\n * reserved value `CONSUMED_OVERFLOW`; callers read the true count from here.\n * A module-level slot avoids a tuple allocation on the hot path.\n */\nlet longNumericConsumed = 0;\n/**\n * Extract the consumed count from a `parseNumericEntity` packed result,\n * recovering the true length from `longNumericConsumed` when the packed\n * field contains the sentinel. Read it before the next `parseNumericEntity`\n * call, which may overwrite the side channel. This helper owns that protocol.\n * @param packed Packed result of `parseNumericEntity`.\n */\nfunction unpackConsumed(packed) {\n const consumed = packed >>> CONSUMED_SHIFT;\n return consumed === CONSUMED_OVERFLOW ? longNumericConsumed : consumed;\n}\n/**\n * Unsigned subtraction trick: (code - lo) >>> 0 wraps negatives to large\n * values, so a single `<=` covers the entire [lo..hi] range check.\n * @param code Code point to check.\n */\nfunction isNumber(code) {\n return (code - CharCodes.ZERO) >>> 0 <= 9;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code | TO_LOWER_BIT) - CharCodes.LOWER_A) >>> 0 <= 5; // F - a\n}\nfunction isAlpha(code) {\n return ((code | TO_LOWER_BIT) - CharCodes.LOWER_A) >>> 0 <= 25; // Z - a\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param code Code point to check.\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAlpha(code) || isNumber(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\n/**\n * Decoding mode for named entities.\n */\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n decodeTree;\n emitCodePoint;\n errors;\n /** The current state of the decoder. */\n state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n consumed = 1;\n /**\n * The result of the entity.\n *\n * For named entities: the trie index of the best legacy match so far\n * (0 = none). For numeric entities: the accumulated code point.\n */\n result = 0;\n /** The current index in the decode tree. */\n treeIndex = 0;\n /**\n * Characters consumed since the last recorded legacy match, plus one.\n * Invariant at the top of the `stateNamedEntity` loop: `excess` equals\n * the number of unrecorded consumed characters + 1.\n */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive (read via destructuring)\n excess = 1;\n /** The mode in which the decoder is operating. */\n decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n runConsumed = 0;\n constructor(\n /** The predefined HTML or XML decode tree. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For named entities that decode to multiple code points, this will\n * be called multiple times, with the second codepoint, and the same\n * `consumed` value.\n * @param codepoint The decoded codepoint.\n * @param consumed The number of characters consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n }\n /**\n * Resets the instance to make it reusable.\n * @param decodeMode Entity decoding mode to use.\n */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the non-streaming `decodeWithTrie`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n default: {\n // NamedEntity — the only remaining state.\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n // eslint-disable-next-line unicorn/consistent-class-member-order\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML\n * spec. Digit parsing matches the hex loop in `parseNumericEntity`.\n * The accumulated value is preserved for numeric validation callbacks.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n const inputLength = input.length;\n // Local accumulators; flushed before any exit (see stateNamedEntity).\n let { result } = this;\n let { consumed } = this;\n while (offset < inputLength) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit = char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n result = result * 16 + digit;\n consumed += 1;\n offset += 1;\n }\n else {\n this.result = result;\n this.consumed = consumed;\n return this.emitNumericEntity(char, 3);\n }\n }\n this.result = result;\n this.consumed = consumed;\n return -1; // Incomplete entity\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML\n * spec. Digit parsing matches the decimal loop in `parseNumericEntity`.\n * The accumulated value is preserved for numeric validation callbacks.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n const inputLength = input.length;\n // Local accumulators; flushed before any exit (see stateNamedEntity).\n let { result } = this;\n let { consumed } = this;\n while (offset < inputLength) {\n const digit = input.charCodeAt(offset) - CharCodes.ZERO;\n if (digit >>> 0 > 9) {\n this.result = result;\n this.consumed = consumed;\n return this.emitNumericEntity(digit + CharCodes.ZERO, 2);\n }\n result = result * 10 + digit;\n consumed += 1;\n offset += 1;\n }\n this.result = result;\n this.consumed = consumed;\n return -1; // Incomplete entity\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint((this.decodeTree === xmlDecodeTree\n ? replaceCodePointXML\n : replaceCodePoint)(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Flush locally-tracked walk state back to the fields, then emit the\n * recorded legacy match or reject (cold path — at most once per\n * entity). Called after failed navigation (leaf node, branch miss, or\n * compact-run mismatch). In attribute mode, reject if no legacy was\n * recorded at the current node, if we descended past it, or if the\n * pending input character is an invalid attribute terminator.\n * @param consumed Locally-tracked consumed count.\n * @param excess Locally-tracked excess count.\n * @param char Pending input character (may be the mismatching char).\n * @param valueLength Value length at the current trie node.\n */\n flushAndEmitLegacyOrReject(consumed, excess, char, valueLength) {\n this.consumed = consumed;\n this.excess = excess;\n return this.result === 0 ||\n (this.decodeMode === DecodingMode.Attribute &&\n (valueLength === 0 ||\n excess > 1 ||\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n const inputLength = input.length;\n const isStrict = this.decodeMode === DecodingMode.Strict;\n /*\n * Local copies of the resumable walk state avoid per-character\n * field writes. They are flushed back to the fields\n * on every exit (chunk end, and before any emit helper that reads\n * them). `this.result` is only written at the (rare) record points,\n * so it stays a direct field write.\n *\n * Legacy-match recording happens in two idempotent places: at the\n * loop top when sitting on a value node, and in the chunk-end\n * epilogue (so `end()` sees matches that land exactly on a chunk\n * boundary). Recording applies `consumed += excess - 1; excess = 1`,\n * which is a no-op when repeated — the loop-top invariant is\n * `excess` = unrecorded consumed characters + 1.\n */\n let { treeIndex } = this;\n let { excess } = this;\n let { consumed } = this;\n let current = decodeTree[treeIndex];\n while (offset < inputLength) {\n /*\n * Descend through value-less jump-table nodes (including the\n * single-branch encoding) inline, mirroring `decodeWithTrie`:\n * this avoids a `determineBranch` call per level for the\n * dominant node shape — including the root on the first write.\n */\n while ((current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n 0 &&\n (current & BinTrieFlags.JUMP_TABLE) !== 0) {\n const char = input.charCodeAt(offset);\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n if (branchCount === 0) {\n // Single branch encoded inline in the jump offset bits.\n if (char !== jumpOffset) {\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, 0);\n }\n treeIndex += 1;\n }\n else {\n const slot = char - jumpOffset;\n if (slot >>> 0 >= branchCount) {\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, 0);\n }\n const stored = decodeTree[treeIndex + 1 + slot];\n if (stored === 0) {\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, 0);\n }\n // End-relative: branch data ends at treeIndex+1+branchCount.\n treeIndex = (treeIndex + branchCount + stored) & 0xff_ff;\n }\n current = decodeTree[treeIndex];\n offset += 1;\n excess += 1;\n /*\n * `charCodeAt` past the end returns NaN, which would alias\n * to slot 0 after `>>> 0` — bail out explicitly.\n */\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n if (offset >= inputLength)\n break;\n }\n if (offset >= inputLength)\n break;\n // Handle compact runs (resumable across chunks).\n if ((current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n BinTrieFlags.FLAG13) {\n const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 3..63 */\n let { runConsumed } = this;\n // If we are starting a run, check the first char.\n if (runConsumed === 0) {\n const char = input.charCodeAt(offset);\n if (char !== (current & BinTrieFlags.JUMP_TABLE)) {\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, 0);\n }\n offset += 1;\n excess += 1;\n runConsumed = 1;\n }\n // Check remaining characters in the run (packed two per uint16 word).\n while (runConsumed < runLength) {\n if (offset >= inputLength) {\n this.treeIndex = treeIndex;\n this.excess = excess;\n this.consumed = consumed;\n this.runConsumed = runConsumed;\n return -1;\n }\n const charIndexInPacked = runConsumed - 1;\n const packedWord = decodeTree[treeIndex + 1 + (charIndexInPacked >> 1)];\n const expectedChar = (packedWord >> ((charIndexInPacked & 1) << 3)) & 0xff;\n const char = input.charCodeAt(offset);\n if (char !== expectedChar) {\n this.runConsumed = 0;\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, 0);\n }\n offset += 1;\n excess += 1;\n runConsumed += 1;\n }\n this.runConsumed = 0;\n treeIndex += 1 + (runLength >> 1);\n current = decodeTree[treeIndex];\n // Loop top handles the landed-on node (record/emit/branch).\n continue;\n }\n // Header plus out-of-line value words; 0 means no value.\n const valueLength = current >>> 14;\n const char = input.charCodeAt(offset);\n if (valueLength !== 0) {\n // Record a legacy match (FLAG13 clear = semicolon optional).\n if (!isStrict && (current & BinTrieFlags.FLAG13) === 0) {\n this.result = treeIndex;\n consumed += excess - 1;\n excess = 1;\n }\n /*\n * Implicit semicolon handling: emit immediately. Covers both\n * strict (FLAG13 set) and legacy entities — neither stores\n * an explicit `;` branch in the trie.\n */\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(treeIndex, valueLength, consumed + excess);\n }\n /*\n * `valueLength === 1` packs the codepoint into the header\n * word's low 13 bits, where branch metadata also lives. Skip\n * the branch lookup on leaves so those value bits aren't\n * reinterpreted as branch offsets.\n */\n if (valueLength === 1) {\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, valueLength);\n }\n }\n // Value-bearing or dictionary node: dispatch through determineBranch.\n const next = determineBranch(decodeTree, current, treeIndex + (valueLength || 1), char);\n if (next < 0) {\n return this.flushAndEmitLegacyOrReject(consumed, excess, char, valueLength);\n }\n treeIndex = next;\n current = decodeTree[treeIndex];\n offset += 1;\n excess += 1;\n }\n /*\n * Chunk exhausted. Record a legacy match we may be sitting on, so a\n * subsequent `end()` emits it, then persist the walk state.\n */\n if (!isStrict &&\n current >>> 14 !== 0 &&\n (current & BinTrieFlags.FLAG13) === 0) {\n this.result = treeIndex;\n consumed += excess - 1;\n excess = 1;\n }\n this.treeIndex = treeIndex;\n this.excess = excess;\n this.consumed = consumed;\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n const { result, decodeTree } = this;\n const valueLength = decodeTree[result] >>> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n * @param result The index of the entity in the decode tree.\n * @param valueLength Encoded value length (header plus any value words).\n * @param consumed The number of characters consumed.\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & BinTrieFlags.VALUE_MASK\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // Emit the second UTF-16 code unit.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n * @returns The number of characters consumed.\n */\n end() {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n default: {\n // EntityStart or unknown — return 0.\n return 0;\n }\n }\n }\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * See `BinTrieFlags` for the branch-data layouts handled here.\n * @param decodeTree The trie.\n * @param current The current node's header word.\n * @param nodeIndex Index of the node's first branch-data word (the header\n * plus any value words have been skipped by the caller).\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch or jump table (jumpOffset encodes the first/only char code).\n if (jumpOffset) {\n if (branchCount === 0) {\n // Single branch encoded inline in the jump offset bits.\n return char === jumpOffset ? nodeIndex : -1;\n }\n /*\n * Jump table: branchCount consecutive slots starting at jumpOffset.\n * Unsigned comparison handles both < 0 and >= branchCount in one check.\n */\n const slot = char - jumpOffset;\n if (slot >>> 0 >= branchCount)\n return -1;\n const stored = decodeTree[nodeIndex + slot];\n /*\n * 0 = empty slot (no branch); otherwise the child's offset from the\n * end of the branch array, +1 (end-relative pointers compress\n * better). `& 0xff_ff` mirrors the encoder's uint16 wrap for\n * backreferences to already-encoded nodes.\n */\n return stored === 0\n ? -1\n : (nodeIndex + branchCount + stored - 1) & 0xff_ff;\n }\n /*\n * Case 2: Packed dictionary. Linear scan — over 90% of dict nodes have\n * <= 4 branches in the HTML trie, where the constant-factor savings\n * dominate over binary search's asymptotic edge.\n */\n if (branchCount === 0)\n return -1;\n const packedKeySlots = (branchCount + 1) >> 1;\n const branchEnd = nodeIndex + packedKeySlots + branchCount;\n for (let index = 0; index < branchCount; index++) {\n const packed = decodeTree[nodeIndex + (index >> 1)];\n const key = (packed >> ((index & 1) << 3)) & 0xff;\n if (key === char) {\n const pointerIndex = nodeIndex + packedKeySlots + index;\n // Pointers are relative to the end of the branch data.\n return (branchEnd + decodeTree[pointerIndex]) & 0xff_ff;\n }\n // Keys are sorted; if we've passed `char`, no match is possible.\n if (key > char)\n return -1;\n }\n return -1;\n}\n/**\n * Read the decoded value from a trie node.\n * @param decodeTree The trie.\n * @param nodeIndex The index of the node.\n * @param valueLength The length of the value (1, 2, or 3).\n * @returns The decoded string.\n */\nfunction readTrieValue(decodeTree, nodeIndex, valueLength) {\n if (valueLength === 1) {\n return String.fromCharCode(decodeTree[nodeIndex] & BinTrieFlags.VALUE_MASK);\n }\n if (valueLength === 2) {\n return String.fromCharCode(decodeTree[nodeIndex + 1]);\n }\n return String.fromCharCode(decodeTree[nodeIndex + 1], decodeTree[nodeIndex + 2]);\n}\n/**\n * Parse a numeric entity (`&#DDD;` or `&#xHHH;`).\n *\n * Encodes the result as `(consumed << CONSUMED_SHIFT) | codepoint` (see\n * the packing comment at the top of the file; overlong entities spill\n * their length into `longNumericConsumed`). Returns 0 when no digits were\n * found.\n *\n * This is the sync counterpart of the streaming\n * `EntityDecoder#stateNumericDecimal` / `#stateNumericHex`. Digit parsing\n * matches those methods; only this packed result needs a value clamp.\n * @param input The input string.\n * @param numberStart Index of the `#` character.\n * @param inputLength Cached `input.length`.\n */\nfunction parseNumericEntity(input, numberStart, inputLength) {\n let offset = numberStart + 1; // Skip \"#\"\n let cp = 0;\n let digitStart = offset;\n /*\n * Separate decimal and hexadecimal loops: each multiplies by a constant\n * and runs a single digit test, instead of a per-character base check.\n */\n if (offset < inputLength &&\n (input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n offset += 1;\n digitStart = offset;\n while (offset < inputLength) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n cp = cp * 16 + (char - CharCodes.ZERO);\n }\n else if (isHexadecimalCharacter(char)) {\n cp = cp * 16 + ((char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10);\n }\n else {\n break;\n }\n offset += 1;\n }\n }\n else {\n while (offset < inputLength) {\n const digit = input.charCodeAt(offset) - CharCodes.ZERO;\n if (digit >>> 0 > 9)\n break;\n cp = cp * 10 + digit;\n offset += 1;\n }\n }\n if (offset === digitStart)\n return 0;\n // Include the semicolon in consumed when present.\n if (offset < inputLength && input.charCodeAt(offset) === CharCodes.SEMI) {\n offset += 1;\n }\n /*\n * Clamp out-of-range values to 0x110000 so they fit the 21-bit field\n * and decode to U+FFFD. Lengths at or above CONSUMED_OVERFLOW use the\n * side channel described with the packing constants.\n */\n if (cp > 0x10_ff_ff)\n cp = 0x11_00_00;\n let consumed = offset - numberStart;\n if (consumed >= CONSUMED_OVERFLOW) {\n // eslint-disable-next-line unicorn/no-top-level-assignment-in-function -- deliberate side channel, see `longNumericConsumed`\n longNumericConsumed = consumed;\n consumed = CONSUMED_OVERFLOW;\n }\n return (consumed << CONSUMED_SHIFT) | cp;\n}\n/**\n * Decode all entities in `input` using the HTML trie.\n *\n * Hard-wired to `htmlDecodeTree`: the inline root navigation below assumes\n * the HTML root's jump-table shape, so this must not be generalized to\n * other tries (the XML trie's dictionary root would silently match no\n * entities — `decodeXML` has its own hand-coded fast path instead).\n * @param input The string to decode.\n * @param isStrict Only match semicolon-terminated entities.\n * @param isAttribute Whether to apply attribute-specific parsing rules (disallowing certain non-semicolon terminators).\n * @returns The decoded string.\n */\nfunction decodeWithTrie(input, isStrict, isAttribute) {\n const decodeTree = htmlDecodeTree;\n // Fast path: no entities at all — return input without any allocation.\n let offset = input.indexOf(\"&\");\n if (offset < 0)\n return input;\n const inputLength = input.length;\n /*\n * `chunkStart` marks the start of the next pending slice. Rejected\n * entities don't advance it, so consecutive rejections are stitched\n * into a single `slice` once a real match (or end of input) is hit.\n */\n let chunkStart = 0;\n let result = \"\";\n /*\n * Root navigation fields, hoisted out of the per-entity loop. The HTML\n * root is a multi-branch jump-table covering [A-Za-z]; see the inline\n * first-iteration comment below.\n */\n const root = decodeTree[0];\n const rootJumpOffset = root & BinTrieFlags.JUMP_TABLE;\n const rootBranchCount = (root & BinTrieFlags.BRANCH_LENGTH) >> 7;\n do {\n const entityStart = offset + 1;\n // Quick check: entity names must start with [A-Za-z], numeric with #.\n const firstChar = input.charCodeAt(entityStart);\n let consumed;\n let value;\n if (firstChar === CharCodes.NUM) {\n const packed = parseNumericEntity(input, entityStart, inputLength);\n consumed = unpackConsumed(packed);\n // In strict mode, require semicolon termination.\n if (isStrict &&\n consumed > 0 &&\n input.charCodeAt(entityStart + consumed - 1) !== CharCodes.SEMI) {\n consumed = 0;\n }\n value =\n consumed === 0\n ? \"\"\n : codePointToString(packed & CODE_POINT_MASK);\n }\n else if (isAlpha(firstChar)) {\n consumed = 0;\n value = \"\";\n /*\n * The generator guarantees a jump-table root. Consume the first\n * character directly, then walk from its child.\n */\n const rootSlotIndex = firstChar - rootJumpOffset;\n let nodeIndex;\n if (rootSlotIndex >>> 0 < rootBranchCount) {\n const stored = decodeTree[1 + rootSlotIndex];\n nodeIndex =\n stored === 0 ? -1 : (rootBranchCount + stored) & 0xff_ff;\n }\n else {\n nodeIndex = -1;\n }\n /*\n * Best legacy (no-semicolon) match so far, as trie coordinates.\n * Deferring `readTrieValue` to the end avoids allocating a\n * string for matches that longer matches supersede.\n */\n let bestNodeIndex = 0;\n let bestValueLength = 0;\n let current = nodeIndex < 0 ? 0 : decodeTree[nodeIndex];\n let index = entityStart + 1;\n /*\n * Walk the trie from the root child. The `trie` label lets the\n * inner descent and compact-run loops abandon the entity (and\n * fall through to the legacy/reject handling) directly.\n */\n trie: while (index < inputLength) {\n /*\n * Inline value-less jump tables and single branches. A miss\n * falls through to the recorded legacy match or rejection.\n */\n while (\n // Value-less, non-run node with a nonzero jump offset.\n (current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n 0 &&\n (current & BinTrieFlags.JUMP_TABLE) !== 0) {\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n if (branchCount === 0) {\n // Single branch encoded inline in the jump offset bits.\n if (input.charCodeAt(index) !== jumpOffset)\n break trie;\n nodeIndex += 1;\n }\n else {\n const slot = input.charCodeAt(index) - jumpOffset;\n if (slot >>> 0 >= branchCount)\n break trie;\n const stored = decodeTree[nodeIndex + 1 + slot];\n if (stored === 0)\n break trie;\n // End-relative: branch data ends at nodeIndex+1+branchCount.\n nodeIndex =\n (nodeIndex + branchCount + stored) & 0xff_ff;\n }\n current = decodeTree[nodeIndex];\n index += 1;\n /*\n * `charCodeAt` past the end returns NaN, which would\n * alias to slot 0 after `>>> 0` — bail out explicitly.\n */\n if (index >= inputLength)\n break trie;\n }\n // FLAG13 without a value marks a compact run.\n if ((current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n BinTrieFlags.FLAG13) {\n const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n // Check first char (stored in JUMP_TABLE bits).\n if (input.charCodeAt(index) !==\n (current & BinTrieFlags.JUMP_TABLE)) {\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n index += 1;\n // Check remaining characters (packed two per uint16 word).\n const remaining = runLength - 1;\n let wordIndex = nodeIndex + 1;\n let charIndexInPacked = 0;\n /*\n * Process pairs: read one packed word, compare low byte then high byte.\n * No explicit bounds check needed — charCodeAt returns NaN for OOB,\n * which never equals an integer, so the mismatch break fires naturally.\n */\n for (; charIndexInPacked + 1 < remaining; charIndexInPacked += 2) {\n const packed = decodeTree[wordIndex];\n if (input.charCodeAt(index) !== (packed & 0xff))\n break trie;\n index += 1;\n if (input.charCodeAt(index) !== ((packed >> 8) & 0xff))\n break trie;\n index += 1;\n wordIndex += 1;\n }\n // Handle odd trailing char.\n if (charIndexInPacked < remaining) {\n if (input.charCodeAt(index) !==\n (decodeTree[wordIndex] & 0xff))\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n index += 1;\n }\n nodeIndex += 1 + (runLength >> 1);\n current = decodeTree[nodeIndex];\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n continue;\n }\n // Header plus out-of-line value words; 0 means no value.\n const valueLength = current >>> 14;\n const char = input.charCodeAt(index);\n /*\n * Check current node for a value before navigating.\n * This handles both: (a) values reached via compact runs on the\n * previous iteration, and (b) values at regular branch targets.\n */\n if (valueLength !== 0) {\n // If char is `;`, emit immediately.\n if (char === CharCodes.SEMI) {\n consumed = index - entityStart + 1;\n // Inline leaves carry the value in the low 13 bits.\n value =\n valueLength === 1\n ? String.fromCharCode(current & BinTrieFlags.VALUE_MASK)\n : readTrieValue(decodeTree, nodeIndex, valueLength);\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n // Record non-terminated (legacy) match (FLAG13 clear = semicolon optional).\n if (!isStrict && (current & BinTrieFlags.FLAG13) === 0) {\n consumed = index - entityStart;\n bestNodeIndex = nodeIndex;\n bestValueLength = valueLength;\n }\n /*\n * A valueLength of 1 means the value is packed inline in the header\n * word — these are always leaf nodes with no branches, so we can\n * stop walking the trie.\n */\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n if (valueLength === 1)\n break;\n }\n // Navigate to the next node (valueLength || 1: skip past value words, minimum 1 for header).\n const next = determineBranch(decodeTree, current, nodeIndex + (valueLength || 1), char);\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n if (next < 0)\n break;\n nodeIndex = next;\n current = decodeTree[nodeIndex];\n index += 1;\n }\n /*\n * Post-loop: if the semicolon path didn't set value,\n * check for a final legacy match. The last navigation may\n * have landed on a legacy node whose value hasn't been\n * recorded yet (loop exited before the top-of-loop check\n * could run).\n */\n if (value === \"\") {\n const finalVL = current >>> 14;\n if (finalVL !== 0 &&\n !isStrict &&\n (current & BinTrieFlags.FLAG13) === 0) {\n consumed = index - entityStart;\n bestNodeIndex = nodeIndex;\n bestValueLength = finalVL;\n }\n if (consumed > 0) {\n value = readTrieValue(decodeTree, bestNodeIndex, bestValueLength);\n }\n }\n }\n else {\n consumed = 0;\n value = \"\";\n }\n /*\n * The attribute end-char rule (HTML spec §13.2.5.73) only applies to\n * unterminated *named* references. Semicolon-terminated entities and\n * numeric entities are always accepted, matching EntityDecoder behavior.\n *\n * When `attribute` is false (the common case), short-circuit skips all\n * the unterminated-named checks entirely.\n */\n if (consumed === 0 ||\n (isAttribute &&\n firstChar !== CharCodes.NUM &&\n input.charCodeAt(entityStart + consumed - 1) !==\n CharCodes.SEMI &&\n entityStart + consumed < inputLength &&\n isEntityInAttributeInvalidEnd(input.charCodeAt(entityStart + consumed)))) {\n // Rejected: leave `&` in the pending chunk, scan past it.\n offset = entityStart;\n }\n else {\n if (chunkStart < offset) {\n result += input.slice(chunkStart, offset);\n }\n result += value;\n offset = chunkStart = entityStart + consumed;\n }\n /*\n * Adjacent entities (`&x;&y;`) are common in entity-dense input;\n * checking the single character at `offset` first skips the\n * `indexOf` call (and its per-call overhead) for that case.\n */\n if (input.charCodeAt(offset) !== CharCodes.AMP) {\n offset = input.indexOf(\"&\", offset);\n }\n } while (offset >= 0);\n return result + input.slice(chunkStart);\n}\n/**\n * Decodes an HTML string.\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return decodeWithTrie(htmlString, mode === DecodingMode.Strict, mode === DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string in an attribute.\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return decodeWithTrie(htmlAttribute, false, true);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return decodeWithTrie(htmlString, true, false);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * Uses a hand-coded fast path for the 5 XML named entities (amp, lt, gt,\n * quot, apos) plus numeric entities, bypassing the trie entirely.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n let offset = xmlString.indexOf(\"&\");\n if (offset < 0)\n return xmlString;\n let lastIndex = 0;\n let result = \"\";\n do {\n const start = offset + 1;\n let consumed = 0;\n let value = \"\";\n const c1 = xmlString.charCodeAt(start);\n if (c1 === CharCodes.NUM) {\n const packed = parseNumericEntity(xmlString, start, xmlString.length);\n consumed = unpackConsumed(packed);\n // XML is always strict — require semicolon.\n if (consumed === 0 ||\n xmlString.charCodeAt(start + consumed - 1) !== CharCodes.SEMI) {\n consumed = 0;\n }\n else {\n const codePoint = packed & CODE_POINT_MASK;\n // Nonzero BMP values below the surrogate range need no replacement.\n value =\n (codePoint - 1) >>> 0 < 0xd7_ff\n ? String.fromCharCode(codePoint)\n : String.fromCodePoint(replaceCodePointXML(codePoint));\n }\n }\n else {\n /* eslint-disable unicorn/no-break-in-nested-loop -- Keep XML name dispatch inline with the decode loop. */\n switch (c1) {\n // < / >\n case 0x6c:\n case 0x67: {\n if (xmlString.charCodeAt(start + 1) === 0x74 &&\n xmlString.charCodeAt(start + 2) === CharCodes.SEMI) {\n consumed = 3;\n value = c1 === 0x6c ? \"<\" : \">\";\n }\n break;\n }\n // & / '\n case 0x61: {\n const c2 = xmlString.charCodeAt(start + 1);\n if (c2 === 0x6d &&\n xmlString.charCodeAt(start + 2) === 0x70 &&\n xmlString.charCodeAt(start + 3) === CharCodes.SEMI) {\n consumed = 4;\n value = \"&\";\n }\n else if (c2 === 0x70 &&\n xmlString.charCodeAt(start + 2) === 0x6f &&\n xmlString.charCodeAt(start + 3) === 0x73 &&\n xmlString.charCodeAt(start + 4) === CharCodes.SEMI) {\n consumed = 5;\n value = \"'\";\n }\n break;\n }\n // "\n case 0x71: {\n if (xmlString.charCodeAt(start + 1) === 0x75 &&\n xmlString.charCodeAt(start + 2) === 0x6f &&\n xmlString.charCodeAt(start + 3) === 0x74 &&\n xmlString.charCodeAt(start + 4) === CharCodes.SEMI) {\n consumed = 5;\n value = '\"';\n }\n break;\n }\n }\n /* eslint-enable unicorn/no-break-in-nested-loop */\n }\n if (consumed > 0) {\n if (lastIndex < offset)\n result += xmlString.slice(lastIndex, offset);\n result += value;\n offset = lastIndex = start + consumed;\n }\n else {\n offset = start;\n }\n /*\n * Adjacent entities (`&x;&y;`) are common in entity-dense input;\n * checking the single character at `lastIndex` first skips the\n * `indexOf` call (and its per-call overhead) for that case.\n */\n offset =\n xmlString.charCodeAt(offset) === CharCodes.AMP\n ? offset\n : xmlString.indexOf(\"&\", offset);\n } while (offset >= 0);\n return result + xmlString.slice(lastIndex);\n}\nexport { replaceCodePoint, replaceCodePointXML, } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n//# sourceMappingURL=decode.js.map","import { Any, Cc, P, Z } from \"uc.micro\";\n//#region src/rebuilder.ts\nvar REBuilder = class {\n\tsrc_Any = Any.source;\n\tsrc_Cc = Cc.source;\n\tsrc_Z = Z.source;\n\tsrc_P = P.source;\n\tsrc_ZPCc = [\n\t\tthis.src_Z,\n\t\tthis.src_P,\n\t\tthis.src_Cc\n\t].join(\"|\");\n\tsrc_ZCc = [this.src_Z, this.src_Cc].join(\"|\");\n\tcache = {};\n\topts = {\n\t\tmaxLength: 1e4,\n\t\turlAuth: false,\n\t\tschema_names: []\n\t};\n\tconstructor(opts = {}) {\n\t\tthis.opts = {\n\t\t\t...this.opts,\n\t\t\t...opts\n\t\t};\n\t}\n\tset(opts = {}) {\n\t\tthis.opts = {\n\t\t\t...this.opts,\n\t\t\t...opts\n\t\t};\n\t\tthis.cache = {};\n\t\treturn this;\n\t}\n\tescapeRE(str) {\n\t\treturn str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n\t}\n\tnestedPairRE(open, close, depth = 4) {\n\t\tconst openRE = this.escapeRE(open);\n\t\tconst closeRE = this.escapeRE(close);\n\t\tconst atom = `(?:(?!${this.src_ZCc}|${openRE}|${closeRE}).)`;\n\t\tlet pair = `${openRE}${atom}{0,1000}${closeRE}`;\n\t\tfor (let level = 2; level <= depth; level++) pair = `${openRE}(?:${atom}|${pair}){0,1000}${closeRE}`;\n\t\treturn pair;\n\t}\n\tget_text_separators() {\n\t\treturn this.cache.text_separators ??= /[><\\uff5c]/;\n\t}\n\tget_pseudo_letter() {\n\t\treturn this.cache.src_pseudo_letter ??= new RegExp(`(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`);\n\t}\n\tget_ipv4_addr() {\n\t\treturn this.cache.src_ip4 ??= /* @__PURE__ */ new RegExp(\"(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\");\n\t}\n\tget_ipv6_addr() {\n\t\tconst h16 = \"[0-9A-Fa-f]{1,4}\";\n\t\tconst ls32 = `(?:(?:${h16}:${h16})|${this.get_ipv4_addr().source})`;\n\t\treturn this.cache.src_ip6_addr ??= new RegExp(`(?:(?:${h16}:){6}${ls32}|::(?:${h16}:){5}${ls32}|(?:${h16})?::(?:${h16}:){4}${ls32}|(?:(?:${h16}:){0,1}${h16})?::(?:${h16}:){3}${ls32}|(?:(?:${h16}:){0,2}${h16})?::(?:${h16}:){2}${ls32}|(?:(?:${h16}:){0,3}${h16})?::${h16}:${ls32}|(?:(?:${h16}:){0,4}${h16})?::${ls32}|(?:(?:${h16}:){0,5}${h16})?::${h16}|(?:(?:${h16}:){0,6}${h16})?::)`);\n\t}\n\tget_ipv6_url_host() {\n\t\treturn this.cache.src_ip6_host ??= new RegExp(`\\\\[${this.get_ipv6_addr().source}\\\\]`);\n\t}\n\tget_ipv6_mail_host() {\n\t\treturn this.cache.src_ipv6_mail_host ??= new RegExp(`\\\\[IPv6:${this.get_ipv6_addr().source}\\\\]`);\n\t}\n\tget_auth() {\n\t\treturn this.cache.src_auth ??= new RegExp(`(?:(?:(?!${this.src_ZCc}|[@/\\\\[\\\\]()]).){1,50}@)?`);\n\t}\n\tget_port() {\n\t\treturn this.cache.src_port ??= /* @__PURE__ */ new RegExp(\"(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?\");\n\t}\n\tget_host_terminator() {\n\t\treturn this.cache.src_host_terminator ??= new RegExp(`(?=$|${this.get_text_separators().source}|${this.src_ZPCc})(?!${this.opts[\"---\"] ? \"-(?!--)|\" : \"-|\"}_|:\\\\d|\\\\.-|\\\\.(?!$|${this.src_ZPCc}))`);\n\t}\n\tget_path_terminator() {\n\t\treturn this.cache.src_path_terminator ??= new RegExp(`${this.src_ZPCc}|${this.get_text_separators().source}`);\n\t}\n\tget_path() {\n\t\treturn this.cache.src_path ??= new RegExp(`(?:[/?#](?:${this.nestedPairRE(\"[\", \"]\")}|${this.nestedPairRE(\"(\", \")\")}|${this.nestedPairRE(\"{\", \"}\")}|\\\\\"(?:(?!${this.src_ZCc}|[\"]).){1,100}\\\\\"|\\\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\\\'|\\\\'(?=${this.get_pseudo_letter().source}|[-])|\\\\.{2,20}[:]?[a-zA-Z0-9%/&]|\\\\.(?!${this.src_ZCc}|[.]|$)|` + (this.opts[\"---\"] ? \"\\\\-(?!--(?:[^-]|$))(?:-{0,19})|\" : \"\\\\-{1,20}|\") + `,(?!${this.src_ZCc}|$)|;(?!${this.src_ZCc}|$)|\\\\!{1,20}(?!${this.src_ZCc}|[!]|$)|\\\\?(?!${this.src_ZCc}|[?]|$)|` + this.get_path_extra().source + `[\\\\\\\\/:%@#&=_~*]|(?!${this.get_path_terminator().source}).){1,${this.opts.maxLength}}|\\\\/)?`);\n\t}\n\tget_mail_name() {\n\t\treturn this.cache.src_mail_name ??= /* @__PURE__ */ new RegExp(\"[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}\");\n\t}\n\tget_xn() {\n\t\treturn this.cache.src_xn ??= /* @__PURE__ */ new RegExp(\"xn--[a-z0-9\\\\-]{1,59}\");\n\t}\n\tget_tld() {\n\t\tif (this.cache.tld) return this.cache.tld;\n\t\tconst tlds_src = [...new Set(this.opts.tlds || [])].sort().reverse().join(\"|\");\n\t\tthis.cache.tld = new RegExp(`${tlds_src || \"$#none#$\"}|${this.get_xn().source}`);\n\t\treturn this.cache.tld;\n\t}\n\tget_domain_root() {\n\t\treturn this.cache.src_domain_root ??= new RegExp(\"(?:\" + this.get_xn().source + `|${this.get_pseudo_letter().source}{1,63})`);\n\t}\n\tget_domain() {\n\t\treturn this.cache.src_domain ??= new RegExp(\"(?:\" + this.get_xn().source + `|(?:${this.get_pseudo_letter().source})|(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source}))`);\n\t}\n\tget_url_host_port() {\n\t\treturn this.cache.url_host_port ??= new RegExp(\"(?:\" + this.get_ipv6_url_host().source + `|(?:(?:(?:${this.get_domain().source})\\\\.){0,10}${this.get_domain().source}))` + this.get_port().source + this.get_host_terminator().source);\n\t}\n\tget_fuzzy_url_host_port() {\n\t\treturn this.cache.fuzzy_url_host_port ??= new RegExp(\"(?:\" + (this.opts.fuzzyIP ? this.get_ipv4_addr().source + \"|\" : \"\") + `(?:(?:(?:${this.get_domain().source})\\\\.){1,10}(?:${this.get_tld().source})))` + this.get_host_terminator().source);\n\t}\n\tget_mail_host() {\n\t\treturn this.cache.src_mail_host ??= new RegExp(\"(?:\" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})\\\\.){0,4}${this.get_domain().source}))` + this.get_host_terminator().source);\n\t}\n\tget_fuzzy_mail_host() {\n\t\treturn this.cache.src_fuzzy_mail_host ??= new RegExp(\"(?:\" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source}))` + this.get_host_terminator().source);\n\t}\n\tget_path_extra() {\n\t\treturn this.cache.src_path_extra ??= /* @__PURE__ */ new RegExp(\"\");\n\t}\n\tget_fuzzy_mail_host_search() {\n\t\treturn this.cache.mail_fuzzy_host_search ??= new RegExp(`@${this.get_fuzzy_mail_host().source}`, \"ig\");\n\t}\n\tget_fuzzy_link_search() {\n\t\treturn this.cache.link_fuzzy_search ??= new RegExp(`(^|(?![.:/\\\\-_@])(?:[$+<=>^\\`|\\uff5c]|${this.src_ZPCc}))(?:(?![$+<=>^\\`|\\uff5c])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`, \"ig\");\n\t}\n\tget_http_validator() {\n\t\treturn this.cache.http_validator ??= new RegExp(\"\\\\/\\\\/\" + (this.opts.urlAuth ? this.get_auth().source : \"\") + this.get_url_host_port().source + this.get_path().source, \"iy\");\n\t}\n\tget_relative_proto_validator() {\n\t\treturn this.cache.relative_proto_validator ??= new RegExp((this.opts.urlAuth ? this.get_auth().source : \"\") + `(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})` + this.get_port().source + this.get_host_terminator().source + this.get_path().source, \"iy\");\n\t}\n\tget_mail_name_validator() {\n\t\treturn this.cache.mail_name_validator ??= new RegExp(`(?:^|${this.get_text_separators().source}|\"|\\\\(|${this.src_ZCc})(${this.get_mail_name().source})$`);\n\t}\n\tget_mailto_validator() {\n\t\treturn this.cache.mailto_validator ??= new RegExp(`${this.get_mail_name().source}@${this.get_mail_host().source}`, \"iy\");\n\t}\n\tget_schema_names() {\n\t\treturn this.cache.schema_names ??= new RegExp((this.opts.schema_names || []).map((name) => this.escapeRE(name)).join(\"|\"));\n\t}\n\tget_schema_search() {\n\t\treturn this.cache.schema_search ??= new RegExp(`(^|(?!_)(?:[><\\uff5c]|${this.src_ZPCc}))(${this.get_schema_names().source})`, \"ig\");\n\t}\n\tget_schema_at_start() {\n\t\treturn this.cache.schema_at_start ??= new RegExp(`^${this.get_schema_search().source}`, \"i\");\n\t}\n};\n//#endregion\n//#region src/linkifyit.ts\nvar web_schema = {\n\tvalidate: (text, pos, self) => {\n\t\tconst re = self.re.get_http_validator();\n\t\tre.lastIndex = pos;\n\t\tconst m = re.exec(text);\n\t\treturn m ? m[0].length : 0;\n\t},\n\tnormalize: (match, self) => self.normalize(match)\n};\nvar defaultSchemas = {\n\t\"http:\": web_schema,\n\t\"https:\": web_schema,\n\t\"ftp:\": web_schema,\n\t\"//\": {\n\t\tvalidate: function(text, pos, self) {\n\t\t\tconst re = self.re.get_relative_proto_validator();\n\t\t\tre.lastIndex = pos;\n\t\t\tconst m = re.exec(text);\n\t\t\tif (m) {\n\t\t\t\tif (pos >= 3 && text[pos - 3] === \":\") return 0;\n\t\t\t\tif (pos >= 3 && text[pos - 3] === \"/\") return 0;\n\t\t\t\treturn m[0].length;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\tnormalize: (match, self) => self.normalize(match)\n\t},\n\t\"mailto:\": {\n\t\tvalidate: function(text, pos, self) {\n\t\t\tconst re = self.re.get_mailto_validator();\n\t\t\tre.lastIndex = pos;\n\t\t\tconst m = re.exec(text);\n\t\t\treturn m ? m[0].length : 0;\n\t\t},\n\t\tnormalize: (match, self) => self.normalize(match)\n\t}\n};\nvar tlds_2ch = \"a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw\";\nvar tlds_default = \"biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\";\nfunction unpackTlds() {\n\tconst result = tlds_default.split(\"|\");\n\ttlds_2ch.split(\"|\").forEach((item) => {\n\t\tconst sep = item.indexOf(\":\");\n\t\tconst prefix = item.slice(0, sep);\n\t\tfor (const suffix of item.slice(sep + 1)) result.push(prefix + suffix);\n\t});\n\treturn result;\n}\nvar defaultOptions = {\n\tfuzzyLink: false,\n\tfuzzyEmail: true,\n\tfuzzyIP: false,\n\t\"---\": false,\n\ttlds: unpackTlds(),\n\turlAuth: false,\n\tmaxLength: 1e4\n};\n/**\n* Match result returned by {@link LinkifyIt.match} and\n* {@link LinkifyIt.matchAtStart}.\n*\n* @category types\n*/\nvar Match = class {\n\t/** Prefix (protocol) for matched string. Empty for fuzzy links. */\n\tschema;\n\t/** First position of matched string. */\n\tindex;\n\t/** Next position after matched string. */\n\tlastIndex;\n\t/** Matched string. */\n\traw;\n\t/** Normalized text of matched string. */\n\ttext;\n\t/** Normalized URL of matched string. */\n\turl;\n\tconstructor(text, schema, index, lastIndex) {\n\t\tconst raw = text.slice(index, lastIndex);\n\t\tthis.schema = schema.toLowerCase();\n\t\tthis.index = index;\n\t\tthis.lastIndex = lastIndex;\n\t\tthis.raw = raw;\n\t\tthis.text = raw;\n\t\tthis.url = raw;\n\t}\n};\n/** Linkifier instance. */\nvar LinkifyIt = class {\n\t__opts__;\n\t__schemas__;\n\tre;\n\t/**\n\t* Creates new linkifier instance.\n\t*\n\t* By default understands:\n\t*\n\t* - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n\t* - \"fuzzy\" emails (foo@bar.com).\n\t*\n\t* See {@link LinkifyConstructorOptions} for available options.\n\t*\n\t* @param options Recognition options.\n\t*\n\t* @example\n\t* ```javascript\n\t* import { LinkifyIt } from 'linkify-it'\n\t*\n\t* const linkify = new LinkifyIt({ fuzzyLink: true })\n\t*\n\t* linkify\n\t* .tlds(require('tlds')) // Reload with full TLD list\n\t* .tlds('onion', true) // Add unofficial `.onion` domain\n\t* .add('ftp:', null) // Disable `ftp:` protocol\n\t* .set({ fuzzyIP: true }) // Enable IPs in fuzzy links\n\t*\n\t* console.log(linkify.test('Site github.com!')) // true\n\t* console.log(linkify.match('Site github.com!'))\n\t* ```\n\t*/\n\tconstructor(options = {}) {\n\t\tconst { rebuilder, ...linkifyOptions } = options;\n\t\tthis.__opts__ = {\n\t\t\t...defaultOptions,\n\t\t\t...linkifyOptions\n\t\t};\n\t\tthis.__schemas__ = { ...defaultSchemas };\n\t\tthis.re = rebuilder || new REBuilder();\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t}\n\t/**\n\t* Add new rule definition.\n\t*\n\t* `schema` is a link prefix (usually, protocol name with `:` at the end,\n\t* `skype:` for example). `linkify-it` makes sure that prefix is not\n\t* preceded with alphanumeric char and symbols. Only whitespaces and\n\t* punctuation allowed.\n\t*\n\t* `definition` is a rule to check tail after link prefix. To disable an\n\t* existing rule, pass `null`.\n\t*\n\t* @param schema Rule name (fixed pattern prefix).\n\t* @param definition Schema definition, or `null` to disable the rule.\n\t*\n\t* See [twitter mentions example](https://github.com/markdown-it/linkify-it/blob/master/examples/twitter.mjs).\n\t*/\n\tadd(schema, definition = null) {\n\t\tif (!definition) delete this.__schemas__[schema];\n\t\telse {\n\t\t\tconst def = {\n\t\t\t\tnormalize: (match, self) => self.normalize(match),\n\t\t\t\t...definition\n\t\t\t};\n\t\t\tthis.__schemas__[schema] = def;\n\t\t}\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Set recognition options for links without schema.\n\t*\n\t* @param options Recognition options.\n\t*/\n\tset(options = {}) {\n\t\tthis.__opts__ = {\n\t\t\t...this.__opts__,\n\t\t\t...options\n\t\t};\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Searches linkifiable pattern and returns `true` on success or `false` on fail.\n\t*\n\t* @param text Text to scan.\n\t*/\n\ttest(text) {\n\t\tif (!text.length) return false;\n\t\tlet m, re;\n\t\tre = this.re.get_schema_search();\n\t\tre.lastIndex = 0;\n\t\twhile ((m = re.exec(text)) !== null) if (this.testSchemaAt(text, m[2], re.lastIndex)) return true;\n\t\tif (this.__opts__.fuzzyLink && this.__schemas__[\"http:\"]) {\n\t\t\tre = this.re.get_fuzzy_link_search();\n\t\t\tre.lastIndex = 0;\n\t\t\tif (re.exec(text) !== null) return true;\n\t\t}\n\t\tif (this.__opts__.fuzzyEmail && this.__schemas__[\"mailto:\"]) {\n\t\t\tif (text.indexOf(\"@\") >= 0) {\n\t\t\t\tconst mailHostRe = this.re.get_fuzzy_mail_host_search();\n\t\t\t\tconst mailNameRe = this.re.get_mail_name_validator();\n\t\t\t\tmailHostRe.lastIndex = 0;\n\t\t\t\twhile ((m = mailHostRe.exec(text)) !== null) {\n\t\t\t\t\tconst name = text.slice(Math.max(0, m.index - 65), m.index);\n\t\t\t\t\tif (mailNameRe.test(name)) return true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Similar to {@link LinkifyIt.test} but checks only specific protocol tail exactly\n\t* at given position. Returns length of found pattern (0 on fail).\n\t*\n\t* @param text Text to scan.\n\t* @param schema Rule (schema) name.\n\t* @param pos Text offset to check from.\n\t*/\n\ttestSchemaAt(text, schema, pos) {\n\t\tif (!this.__schemas__[schema.toLowerCase()]) return 0;\n\t\treturn this.__schemas__[schema.toLowerCase()].validate(text.slice(0, pos + this.__opts__.maxLength), pos, this);\n\t}\n\t/**\n\t* Returns array of found link descriptions or `null` on fail. We strongly\n\t* recommend to use {@link LinkifyIt.test} first, for best speed.\n\t*\n\t* @param text Text to scan.\n\t*/\n\tmatch(text) {\n\t\tconst result = [];\n\t\tconst schemaRe = this.re.get_schema_search();\n\t\tlet fuzzyLinkRe;\n\t\tlet mailHostRe;\n\t\tlet mailNameRe;\n\t\tlet fuzzyLinkCandidate;\n\t\tlet fuzzyEmailCandidate;\n\t\tlet schemaPrefix;\n\t\tlet schemaDone = false;\n\t\tlet fuzzyLinkDone = false;\n\t\tlet fuzzyEmailDone = false;\n\t\tlet pos = 0;\n\t\tif (!text.length) return null;\n\t\tschemaRe.lastIndex = 0;\n\t\tif (this.__opts__.fuzzyLink && this.__schemas__[\"http:\"]) {\n\t\t\tfuzzyLinkRe = this.re.get_fuzzy_link_search();\n\t\t\tfuzzyLinkRe.lastIndex = 0;\n\t\t}\n\t\tif (this.__opts__.fuzzyEmail && this.__schemas__[\"mailto:\"]) {\n\t\t\tmailHostRe = this.re.get_fuzzy_mail_host_search();\n\t\t\tmailHostRe.lastIndex = 0;\n\t\t\tmailNameRe = this.re.get_mail_name_validator();\n\t\t}\n\t\tfor (;;) {\n\t\t\tconst scanFrom = Math.max(pos - 1, 0);\n\t\t\tif (mailHostRe && mailNameRe && !fuzzyEmailDone && (!fuzzyEmailCandidate || fuzzyEmailCandidate.index < pos)) {\n\t\t\t\tif (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst m = mailHostRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tfuzzyEmailDone = true;\n\t\t\t\t\t\tfuzzyEmailCandidate = void 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst name = mailNameRe.exec(text.slice(Math.max(0, m.index - 65), m.index));\n\t\t\t\t\tif (!name) continue;\n\t\t\t\t\tfuzzyEmailCandidate = {\n\t\t\t\t\t\tschema: \"mailto:\",\n\t\t\t\t\t\tindex: m.index - name[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t\tif (fuzzyEmailCandidate.index >= pos) break;\n\t\t\t\t\tif (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fuzzyLinkRe && !fuzzyLinkDone && (!fuzzyLinkCandidate || fuzzyLinkCandidate.index < pos)) {\n\t\t\t\tif (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst m = fuzzyLinkRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tfuzzyLinkDone = true;\n\t\t\t\t\t\tfuzzyLinkCandidate = void 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfuzzyLinkCandidate = {\n\t\t\t\t\t\tschema: \"\",\n\t\t\t\t\t\tindex: m.index + m[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t\tif (fuzzyLinkCandidate.index >= pos) break;\n\t\t\t\t\tif (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet fuzzyCandidate = fuzzyEmailCandidate;\n\t\t\tif (!fuzzyCandidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < fuzzyCandidate.index || fuzzyLinkCandidate.index === fuzzyCandidate.index && fuzzyLinkCandidate.lastIndex > fuzzyCandidate.lastIndex)) fuzzyCandidate = fuzzyLinkCandidate;\n\t\t\tlet schemaCandidate;\n\t\t\tif (!schemaDone) for (;;) {\n\t\t\t\tif (!schemaPrefix) {\n\t\t\t\t\tif (schemaRe.lastIndex < scanFrom) schemaRe.lastIndex = scanFrom;\n\t\t\t\t\tconst m = schemaRe.exec(text);\n\t\t\t\t\tif (!m) {\n\t\t\t\t\t\tschemaDone = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tschemaPrefix = {\n\t\t\t\t\t\tschema: m[2],\n\t\t\t\t\t\tindex: m.index + m[1].length,\n\t\t\t\t\t\tlastIndex: m.index + m[0].length\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (schemaPrefix.index < pos) {\n\t\t\t\t\tschemaPrefix = void 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (fuzzyCandidate && schemaPrefix.index > fuzzyCandidate.index) break;\n\t\t\t\tconst prefix = schemaPrefix;\n\t\t\t\tschemaPrefix = void 0;\n\t\t\t\tconst len = this.testSchemaAt(text, prefix.schema, prefix.lastIndex);\n\t\t\t\tif (len) {\n\t\t\t\t\tschemaCandidate = {\n\t\t\t\t\t\tschema: prefix.schema,\n\t\t\t\t\t\tindex: prefix.index,\n\t\t\t\t\t\tlastIndex: prefix.lastIndex + len\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet candidate = schemaCandidate;\n\t\t\tif (!candidate || fuzzyEmailCandidate && (fuzzyEmailCandidate.index < candidate.index || fuzzyEmailCandidate.index === candidate.index && fuzzyEmailCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyEmailCandidate;\n\t\t\tif (!candidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < candidate.index || fuzzyLinkCandidate.index === candidate.index && fuzzyLinkCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyLinkCandidate;\n\t\t\tif (!candidate) break;\n\t\t\tif (candidate === fuzzyEmailCandidate) fuzzyEmailCandidate = void 0;\n\t\t\telse if (candidate === fuzzyLinkCandidate) fuzzyLinkCandidate = void 0;\n\t\t\tconst match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);\n\t\t\tif (match.schema) this.__schemas__[match.schema].normalize(match, this);\n\t\t\telse this.normalize(match);\n\t\t\tresult.push(match);\n\t\t\tpos = candidate.lastIndex;\n\t\t}\n\t\tif (result.length) return result;\n\t\treturn null;\n\t}\n\t/**\n\t* Returns fully-formed (not fuzzy) link if it starts at the beginning\n\t* of the string, and null otherwise.\n\t*\n\t* @param text Text to scan.\n\t*/\n\tmatchAtStart(text) {\n\t\tif (!text.length) return null;\n\t\tconst m = this.re.get_schema_at_start().exec(text);\n\t\tif (!m) return null;\n\t\tconst len = this.testSchemaAt(text, m[2], m[0].length);\n\t\tif (!len) return null;\n\t\tconst match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);\n\t\tthis.__schemas__[match.schema].normalize(match, this);\n\t\treturn match;\n\t}\n\t/**\n\t* Load (or merge) new TLDs list. Those are used for fuzzy links (without\n\t* prefix) to avoid false positives. By default this algorithm is used:\n\t*\n\t* - hostname with any 2-letter root zones are ok.\n\t* - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n\t* are ok.\n\t* - encoded (`xn--...`) root zones are ok.\n\t*\n\t* If list is replaced, then exact match for 2-chars root zones will be checked.\n\t*\n\t* @param list List of TLDs.\n\t* @param keepOld Merge with current list if `true` (`false` by default).\n\t*/\n\ttlds(list, keepOld = false) {\n\t\tlist = Array.isArray(list) ? list : [list];\n\t\tif (!keepOld) this.__opts__.tlds = list;\n\t\telse this.__opts__.tlds = this.__opts__.tlds.concat(list);\n\t\tthis.re.set({\n\t\t\t...this.__opts__,\n\t\t\tschema_names: Object.keys(this.__schemas__)\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Default normalizer (if schema does not define its own).\n\t*\n\t* @param match Match to normalize.\n\t*/\n\tnormalize(match) {\n\t\tif (!match.schema) match.url = `http://${match.url}`;\n\t\tif (match.schema === \"mailto:\" && !/^mailto:/i.test(match.url)) match.url = `mailto:${match.url}`;\n\t}\n};\nfunction linkifyit(options = {}) {\n\treturn new LinkifyIt(options);\n}\n//#endregion\nexport { LinkifyIt, REBuilder, linkifyit };\n\n//# sourceMappingURL=index.mjs.map","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","/*! markdown-it 15.0.2 https://github.com/markdown-it/markdown-it @license MIT */\nimport * as mdurl from \"mdurl\";\nimport * as ucmicro from \"uc.micro\";\nimport { decodeHTMLStrict } from \"entities\";\nimport { LinkifyIt } from \"linkify-it\";\nimport punycode from \"punycode.js\";\n//#region \\0rolldown/runtime.js\nvar __defProp = Object.defineProperty;\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\n//#endregion\n//#region src/common/utils.ts\n/**\n* Common utility functions exposed through `md.utils` for use by plugins.\n*\n* @module md.utils\n*/\nvar utils_exports = /* @__PURE__ */ __exportAll({\n\tarrayReplaceAt: () => arrayReplaceAt,\n\tasciiTrim: () => asciiTrim,\n\tcallable: () => callable,\n\tescapeHtml: () => escapeHtml,\n\tescapeRE: () => escapeRE,\n\tfromCodePoint: () => fromCodePoint,\n\tisMdAsciiPunct: () => isMdAsciiPunct,\n\tisPunctChar: () => isPunctChar,\n\tisPunctCharCode: () => isPunctCharCode,\n\tisSpace: () => isSpace,\n\tisValidEntityCode: () => isValidEntityCode,\n\tisWhiteSpace: () => isWhiteSpace,\n\tlib: () => lib,\n\tnormalizeReference: () => normalizeReference,\n\tunescapeAll: () => unescapeAll,\n\tunescapeMd: () => unescapeMd\n});\nfunction callable(cls) {\n\tconst wrapper = function(...args) {\n\t\treturn Reflect.construct(cls, args, new.target && new.target !== wrapper ? new.target : cls);\n\t};\n\tObject.defineProperty(wrapper, \"name\", { value: cls.name });\n\tObject.setPrototypeOf(wrapper, cls);\n\twrapper.prototype = cls.prototype;\n\treturn wrapper;\n}\n/**\n* Returns a copy of a token array with the token at `pos` replaced by\n* `newElements`. Used to transform token streams without modifying the\n* original array.\n*/\nfunction arrayReplaceAt(src, pos, newElements) {\n\treturn [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n/** Checks whether a code point can be decoded from a numeric HTML entity. */\nfunction isValidEntityCode(c) {\n\tif (c >= 55296 && c <= 57343) return false;\n\tif (c >= 64976 && c <= 65007) return false;\n\tif ((c & 65535) === 65535 || (c & 65535) === 65534) return false;\n\tif (c >= 0 && c <= 8) return false;\n\tif (c === 11) return false;\n\tif (c >= 14 && c <= 31) return false;\n\tif (c >= 127 && c <= 159) return false;\n\tif (c > 1114111) return false;\n\treturn true;\n}\n/**\n* Converts a Unicode code point to a string, like `String.fromCodePoint()`,\n* but does not throw for invalid input.\n*/\nfunction fromCodePoint(c) {\n\tif (c > 65535) {\n\t\tc -= 65536;\n\t\tconst surrogate1 = 55296 + (c >> 10);\n\t\tconst surrogate2 = 56320 + (c & 1023);\n\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t}\n\treturn String.fromCharCode(c);\n}\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar UNESCAPE_ALL_RE = new RegExp(`${UNESCAPE_MD_RE.source}|${/&([a-z#][a-z0-9]{1,31});/gi.source}`, \"gi\");\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\nfunction replaceEntityPattern(match, name) {\n\tif (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) {\n\t\tconst code = name[1].toLowerCase() === \"x\" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\t\tif (isValidEntityCode(code)) return fromCodePoint(code);\n\t\treturn match;\n\t}\n\tconst decoded = decodeHTMLStrict(match);\n\tif (decoded !== match) return decoded;\n\treturn match;\n}\n/** Decodes Markdown backslash escapes. */\nfunction unescapeMd(str) {\n\tif (str.indexOf(\"\\\\\") < 0) return str;\n\treturn str.replace(UNESCAPE_MD_RE, \"$1\");\n}\n/**\n* Decodes Markdown backslash escapes and HTML character references in link\n* destinations, link titles, and fenced code info strings.\n*/\nfunction unescapeAll(str) {\n\tif (str.indexOf(\"\\\\\") < 0 && str.indexOf(\"&\") < 0) return str;\n\treturn str.replace(UNESCAPE_ALL_RE, function(match, escaped, entity) {\n\t\tif (escaped) return escaped;\n\t\treturn replaceEntityPattern(match, entity);\n\t});\n}\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n\t\"&\": \"&\",\n\t\"<\": \"<\",\n\t\">\": \">\",\n\t\"\\\"\": \""\"\n};\nfunction replaceUnsafeChar(ch) {\n\treturn HTML_REPLACEMENTS[ch];\n}\n/** Escapes HTML special characters in a string. */\nfunction escapeHtml(str) {\n\tif (HTML_ESCAPE_TEST_RE.test(str)) return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n\treturn str;\n}\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n/** Escapes regular expression metacharacters in a string. */\nfunction escapeRE(str) {\n\treturn str.replace(REGEXP_ESCAPE_RE, \"\\\\$&\");\n}\n/** Checks whether a character code is an ASCII space or tab. */\nfunction isSpace(code) {\n\tswitch (code) {\n\t\tcase 9:\n\t\tcase 32: return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether a character code is whitespace recognized by Markdown.\n*\n* Matches the Unicode `Zs` category or `\\t`, `\\f`, `\\v`, `\\r`, `\\n`.\n*/\nfunction isWhiteSpace(code) {\n\tif (code >= 8192 && code <= 8202) return true;\n\tswitch (code) {\n\t\tcase 9:\n\t\tcase 10:\n\t\tcase 11:\n\t\tcase 12:\n\t\tcase 13:\n\t\tcase 32:\n\t\tcase 160:\n\t\tcase 5760:\n\t\tcase 8239:\n\t\tcase 8287:\n\t\tcase 12288: return true;\n\t}\n\treturn false;\n}\n/**\n* Checks whether a character is Unicode punctuation or a symbol.\n*\n* Does not support astral characters.\n*/\nfunction isPunctChar(ch) {\n\treturn ucmicro.P.test(ch) || ucmicro.S.test(ch);\n}\n/** Checks whether a Unicode code point is punctuation or a symbol. */\nfunction isPunctCharCode(code) {\n\treturn isPunctChar(fromCodePoint(code));\n}\n/**\n* Markdown ASCII punctuation characters.\n*\n* !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @,\n* [, \\, ], ^, _, `, {, |, }, or ~\n*\n* http://spec.commonmark.org/0.15/#ascii-punctuation-character\n*\n* Don't confuse with Unicode punctuation. It lacks some characters in the\n* ASCII range.\n*/\nfunction isMdAsciiPunct(ch) {\n\tswitch (ch) {\n\t\tcase 33:\n\t\tcase 34:\n\t\tcase 35:\n\t\tcase 36:\n\t\tcase 37:\n\t\tcase 38:\n\t\tcase 39:\n\t\tcase 40:\n\t\tcase 41:\n\t\tcase 42:\n\t\tcase 43:\n\t\tcase 44:\n\t\tcase 45:\n\t\tcase 46:\n\t\tcase 47:\n\t\tcase 58:\n\t\tcase 59:\n\t\tcase 60:\n\t\tcase 61:\n\t\tcase 62:\n\t\tcase 63:\n\t\tcase 64:\n\t\tcase 91:\n\t\tcase 92:\n\t\tcase 93:\n\t\tcase 94:\n\t\tcase 95:\n\t\tcase 96:\n\t\tcase 123:\n\t\tcase 124:\n\t\tcase 125:\n\t\tcase 126: return true;\n\t\tdefault: return false;\n\t}\n}\n/** Normalizes `[reference labels]` for case-insensitive lookup. */\nfunction normalizeReference(str) {\n\tstr = str.trim().replace(/\\s+/g, \" \");\n\treturn str.toLowerCase().toUpperCase();\n}\nfunction isAsciiTrimmable(c) {\n\treturn c === 32 || c === 9 || c === 10 || c === 13;\n}\n/**\n* \"Light\" `.trim()` for blocks (headings, paragraphs), where Unicode spaces\n* should be preserved.\n*/\nfunction asciiTrim(str) {\n\tlet start = 0;\n\tfor (; start < str.length; start++) if (!isAsciiTrimmable(str.charCodeAt(start))) break;\n\tlet end = str.length - 1;\n\tfor (; end >= start; end--) if (!isAsciiTrimmable(str.charCodeAt(end))) break;\n\treturn str.slice(start, end + 1);\n}\n/**\n* Libraries commonly used by markdown-it and its plugins, re-exported to\n* reduce duplicate dependencies in browser bundles.\n*/\nvar lib = {\n\tmdurl,\n\tucmicro\n};\n//#endregion\n//#region src/helpers/parse_link_label.ts\n/** Finds the end of a link or image label (`[label]`). */\nfunction parseLinkLabel(state, start, disableNested) {\n\tlet level, found, marker, prevPos;\n\tconst max = state.posMax;\n\tconst oldPos = state.pos;\n\tstate.pos = start + 1;\n\tlevel = 1;\n\twhile (state.pos < max) {\n\t\tmarker = state.src.charCodeAt(state.pos);\n\t\tif (marker === 93) {\n\t\t\tlevel--;\n\t\t\tif (level === 0) {\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tprevPos = state.pos;\n\t\tstate.md.inline.skipToken(state);\n\t\tif (marker === 91) {\n\t\t\tif (prevPos === state.pos - 1) level++;\n\t\t\telse if (disableNested) {\n\t\t\t\tstate.pos = oldPos;\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\tlet labelEnd = -1;\n\tif (found) labelEnd = state.pos;\n\tstate.pos = oldPos;\n\treturn labelEnd;\n}\n//#endregion\n//#region src/helpers/parse_link_destination.ts\n/** Parses the destination in `[label](destination \"title\")`. */\nfunction parseLinkDestination(str, start, max) {\n\tlet code;\n\tlet pos = start;\n\tconst result = {\n\t\tok: false,\n\t\tpos: 0,\n\t\tstr: \"\"\n\t};\n\tif (str.charCodeAt(pos) === 60) {\n\t\tpos++;\n\t\twhile (pos < max) {\n\t\t\tcode = str.charCodeAt(pos);\n\t\t\tif (code === 10) return result;\n\t\t\tif (code === 60) return result;\n\t\t\tif (code === 62) {\n\t\t\t\tresult.pos = pos + 1;\n\t\t\t\tresult.str = unescapeAll(str.slice(start + 1, pos));\n\t\t\t\tresult.ok = true;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (code === 92 && pos + 1 < max) {\n\t\t\t\tpos += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpos++;\n\t\t}\n\t\treturn result;\n\t}\n\tlet level = 0;\n\twhile (pos < max) {\n\t\tcode = str.charCodeAt(pos);\n\t\tif (code === 32) break;\n\t\tif (code < 32 || code === 127) break;\n\t\tif (code === 92 && pos + 1 < max) {\n\t\t\tif (str.charCodeAt(pos + 1) === 32) {\n\t\t\t\tpos++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpos += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (code === 40) {\n\t\t\tlevel++;\n\t\t\tif (level > 32) return result;\n\t\t}\n\t\tif (code === 41) {\n\t\t\tif (level === 0) break;\n\t\t\tlevel--;\n\t\t}\n\t\tpos++;\n\t}\n\tif (start === pos) return result;\n\tif (level !== 0) return result;\n\tresult.str = unescapeAll(str.slice(start, pos));\n\tresult.pos = pos;\n\tresult.ok = true;\n\treturn result;\n}\n//#endregion\n//#region src/helpers/parse_link_title.ts\n/**\n* Parses the optional title in `[label](destination \"title\")` or\n* `[label]: destination \"title\"`.\n*\n* `prev_state` continues a reference title on the next source line.\n*/\nfunction parseLinkTitle(str, start, max, prev_state) {\n\tlet code;\n\tlet pos = start;\n\tconst state = {\n\t\tok: false,\n\t\tcan_continue: false,\n\t\tpos: 0,\n\t\tstr: \"\",\n\t\tmarker: 0\n\t};\n\tif (prev_state) {\n\t\tstate.str = prev_state.str;\n\t\tstate.marker = prev_state.marker;\n\t} else {\n\t\tif (pos >= max) return state;\n\t\tlet marker = str.charCodeAt(pos);\n\t\tif (marker !== 34 && marker !== 39 && marker !== 40) return state;\n\t\tstart++;\n\t\tpos++;\n\t\tif (marker === 40) marker = 41;\n\t\tstate.marker = marker;\n\t}\n\twhile (pos < max) {\n\t\tcode = str.charCodeAt(pos);\n\t\tif (code === state.marker) {\n\t\t\tstate.pos = pos + 1;\n\t\t\tstate.str += unescapeAll(str.slice(start, pos));\n\t\t\tstate.ok = true;\n\t\t\treturn state;\n\t\t} else if (code === 40 && state.marker === 41) return state;\n\t\telse if (code === 92 && pos + 1 < max) pos++;\n\t\tpos++;\n\t}\n\tstate.can_continue = true;\n\tstate.str += unescapeAll(str.slice(start, pos));\n\treturn state;\n}\n//#endregion\n//#region src/helpers/index.ts\n/**\n* Functions used to parse links and images, split out of parser rules because\n* of their size.\n*\n* @module md.helpers\n*/\nvar helpers_exports = /* @__PURE__ */ __exportAll({\n\tparseLinkDestination: () => parseLinkDestination,\n\tparseLinkLabel: () => parseLinkLabel,\n\tparseLinkTitle: () => parseLinkTitle\n});\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\n\t\treturn typeof o;\n\t} : function(o) {\n\t\treturn o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n\t}, _typeof(o);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.142.0/helpers/esm/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n//#endregion\n//#region src/token.ts\n/**\n* Represents one item in the parsed token stream, storing parsed data and\n* providing helpers for managing HTML attributes.\n*/\nvar Token = class {\n\tconstructor(type, tag, nesting) {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Source map info. Format: `[ line_begin, line_end ]`\n\t\t\t*/\n\t\t\t\"map\",\n\t\t\tnull\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* nesting level, the same as `state.level`\n\t\t\t*/\n\t\t\t\"level\",\n\t\t\t0\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* An array of child nodes (inline and img tokens)\n\t\t\t*/\n\t\t\t\"children\",\n\t\t\tnull\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* In a case of self-closing tag (code, html, fence, etc.),\n\t\t\t* it has contents of this tag.\n\t\t\t*/\n\t\t\t\"content\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* '*' or '_' for emphasis, fence string for fence, etc.\n\t\t\t*/\n\t\t\t\"markup\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Additional information:\n\t\t\t*\n\t\t\t* - Info string for \"fence\" tokens\n\t\t\t* - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n\t\t\t* - The string value of the item marker for ordered-list \"list_item_open\" tokens\n\t\t\t*/\n\t\t\t\"info\",\n\t\t\t\"\"\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* True for block-level tokens, false for inline tokens.\n\t\t\t* Used in renderer to calculate line breaks\n\t\t\t*/\n\t\t\t\"block\",\n\t\t\tfalse\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* If it's true, ignore this element when rendering. Used for tight lists\n\t\t\t* to hide paragraphs.\n\t\t\t*/\n\t\t\t\"hidden\",\n\t\t\tfalse\n\t\t);\n\t\tthis.type = type;\n\t\tthis.tag = tag;\n\t\tthis.attrs = null;\n\t\tthis.nesting = nesting;\n\t\tthis.meta = null;\n\t}\n\t/**\n\t* Search attribute index by name.\n\t*/\n\tattrIndex(name) {\n\t\tif (!this.attrs) return -1;\n\t\tconst attrs = this.attrs;\n\t\tfor (let i = 0, len = attrs.length; i < len; i++) if (attrs[i][0] === name) return i;\n\t\treturn -1;\n\t}\n\t/**\n\t* Add `[ name, value ]` attribute to list. Init attrs if necessary\n\t*/\n\tattrPush(attrData) {\n\t\tif (this.attrs) this.attrs.push(attrData);\n\t\telse this.attrs = [attrData];\n\t}\n\t/**\n\t* Set `name` attribute to `value`. Override old value if exists.\n\t*/\n\tattrSet(name, value) {\n\t\tconst idx = this.attrIndex(name);\n\t\tconst attrData = [name, value];\n\t\tif (idx < 0) this.attrPush(attrData);\n\t\telse this.attrs[idx] = attrData;\n\t}\n\t/**\n\t* Get the value of attribute `name`, or null if it does not exist.\n\t*/\n\tattrGet(name) {\n\t\tconst idx = this.attrIndex(name);\n\t\tlet value = null;\n\t\tif (idx >= 0) value = this.attrs[idx][1];\n\t\treturn value;\n\t}\n\t/**\n\t* Join value to existing attribute via space. Or create new attribute if not\n\t* exists. Useful to operate with token classes.\n\t*/\n\tattrJoin(name, value) {\n\t\tconst idx = this.attrIndex(name);\n\t\tif (idx < 0) this.attrPush([name, value]);\n\t\telse this.attrs[idx][1] = `${this.attrs[idx][1]} ${value}`;\n\t}\n};\n//#endregion\n//#region src/ruler.ts\n/**\n* Helper class, used by {@link MarkdownIt.core}, {@link MarkdownIt.block} and\n* {@link MarkdownIt.inline} to manage sequences of functions (rules):\n*\n* - keep rules in defined order\n* - assign the name to each rule\n* - enable/disable rules\n* - add/replace rules\n* - allow assign rules to additional named chains (in the same)\n* - cacheing lists of active rules\n*\n* You will not need use this class directly until write plugins. For simple\n* rules control use {@link MarkdownIt.disable}, {@link MarkdownIt.enable} and\n* {@link MarkdownIt.use}.\n*/\nvar Ruler = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/** @internal */\n\t\t\t\"__rules__\",\n\t\t\t[]\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/** @internal */\n\t\t\t\"__cache__\",\n\t\t\tnull\n\t\t);\n\t}\n\t/** @internal */\n\t__find__(name) {\n\t\tfor (let i = 0; i < this.__rules__.length; i++) if (this.__rules__[i].name === name) return i;\n\t\treturn -1;\n\t}\n\t/** @internal */\n\t__compile__() {\n\t\tconst chains = /* @__PURE__ */ new Set();\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\tif (!rule.enabled) return;\n\t\t\trule.alt.forEach((altName) => {\n\t\t\t\tif (altName) chains.add(altName);\n\t\t\t});\n\t\t});\n\t\tthis.__cache__ = Object.create(null);\n\t\tthis.__cache__[\"\"] = [];\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\tif (rule.enabled) this.__cache__[\"\"].push(rule.fn);\n\t\t});\n\t\tchains.forEach((chain) => {\n\t\t\tthis.__cache__[chain] = [];\n\t\t\tthis.__rules__.forEach((rule) => {\n\t\t\t\tif (rule.enabled && rule.alt.indexOf(chain) >= 0) this.__cache__[chain].push(rule.fn);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Replace rule by name with new function & options. Throws error if name not\n\t* found.\n\t*\n\t* @example Replace existing typographer replacement rule with new one\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.core.ruler.at('replacements', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tat(name, fn, options = {}) {\n\t\tconst index = this.__find__(name);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${name}`);\n\t\tthis.__rules__[index].fn = fn;\n\t\tthis.__rules__[index].alt = options.alt || [];\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Add new rule to chain before one with given name. See also\n\t* {@link Ruler.after}, {@link Ruler.push}.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tbefore(beforeName, ruleName, fn, options = {}) {\n\t\tconst index = this.__find__(beforeName);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${beforeName}`);\n\t\tthis.__rules__.splice(index, 0, {\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Add new rule to chain after one with given name. See also\n\t* {@link Ruler.before}, {@link Ruler.push}.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.inline.ruler.after('text', 'my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tafter(afterName, ruleName, fn, options = {}) {\n\t\tconst index = this.__find__(afterName);\n\t\tif (index === -1) throw new Error(`Parser rule not found: ${afterName}`);\n\t\tthis.__rules__.splice(index + 1, 0, {\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Push new rule to the end of chain. See also\n\t* {@link Ruler.before}, {@link Ruler.after}.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* md.core.ruler.push('my_rule', function replace(state) {\n\t* //...\n\t* });\n\t* ```\n\t*/\n\tpush(ruleName, fn, options = {}) {\n\t\tthis.__rules__.push({\n\t\t\tname: ruleName,\n\t\t\tenabled: true,\n\t\t\tfn,\n\t\t\talt: options.alt || []\n\t\t});\n\t\tthis.__cache__ = null;\n\t}\n\t/**\n\t* Enable rules with given names. If any rule name not found - throw Error.\n\t* Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.disable}, {@link Ruler.enableOnly}.\n\t*\n\t* Returns list of found rule names (if no exception happened).\n\t*/\n\tenable(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tconst result = [];\n\t\tlist.forEach((name) => {\n\t\t\tconst idx = this.__find__(name);\n\t\t\tif (idx < 0) {\n\t\t\t\tif (ignoreInvalid) return;\n\t\t\t\tthrow new Error(`Rules manager: invalid rule name ${name}`);\n\t\t\t}\n\t\t\tthis.__rules__[idx].enabled = true;\n\t\t\tresult.push(name);\n\t\t});\n\t\tthis.__cache__ = null;\n\t\treturn result;\n\t}\n\t/**\n\t* Enable rules with given names, and disable everything else. If any rule name\n\t* not found - throw Error. Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.disable}, {@link Ruler.enable}.\n\t*/\n\tenableOnly(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tthis.__rules__.forEach((rule) => {\n\t\t\trule.enabled = false;\n\t\t});\n\t\tthis.enable(list, ignoreInvalid);\n\t}\n\t/**\n\t* Disable rules with given names. If any rule name not found - throw Error.\n\t* Errors can be disabled by second param.\n\t*\n\t* See also {@link Ruler.enable}, {@link Ruler.enableOnly}.\n\t*\n\t* Returns list of found rule names (if no exception happened).\n\t*/\n\tdisable(list, ignoreInvalid = false) {\n\t\tif (!Array.isArray(list)) list = [list];\n\t\tconst result = [];\n\t\tlist.forEach((name) => {\n\t\t\tconst idx = this.__find__(name);\n\t\t\tif (idx < 0) {\n\t\t\t\tif (ignoreInvalid) return;\n\t\t\t\tthrow new Error(`Rules manager: invalid rule name ${name}`);\n\t\t\t}\n\t\t\tthis.__rules__[idx].enabled = false;\n\t\t\tresult.push(name);\n\t\t});\n\t\tthis.__cache__ = null;\n\t\treturn result;\n\t}\n\t/**\n\t* Return array of active functions (rules) for given chain name. It analyzes\n\t* rules configuration, compiles caches if not exists and returns result.\n\t*\n\t* Default chain name is `''` (empty string). It can't be skipped. That's\n\t* done intentionally, to keep signature monomorphic for high speed.\n\t*/\n\tgetRules(chainName) {\n\t\tif (!this.__cache__) this.__compile__();\n\t\treturn this.__cache__[chainName] || [];\n\t}\n};\n//#endregion\n//#region src/renderer.ts\nvar default_rules = {};\ndefault_rules.code_inline = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\treturn `<code${slf.renderAttrs(token)}>${escapeHtml(token.content)}</code>`;\n};\ndefault_rules.code_block = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\treturn `<pre${slf.renderAttrs(token)}><code>${escapeHtml(tokens[idx].content)}</code></pre>\\n`;\n};\ndefault_rules.fence = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\tconst info = token.info ? unescapeAll(token.info).trim() : \"\";\n\tlet langName = \"\";\n\tlet langAttrs = \"\";\n\tif (info) {\n\t\tconst arr = info.split(/(\\s+)/g);\n\t\tlangName = arr[0];\n\t\tlangAttrs = arr.slice(2).join(\"\");\n\t}\n\tlet highlighted;\n\tif (options.highlight) highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n\telse highlighted = escapeHtml(token.content);\n\tif (highlighted.indexOf(\"<pre\") === 0) return highlighted + \"\\n\";\n\tif (info) {\n\t\tconst i = token.attrIndex(\"class\");\n\t\tconst tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\t\tif (i < 0) tmpAttrs.push([\"class\", `${options.langPrefix}${langName}`]);\n\t\telse {\n\t\t\ttmpAttrs[i] = [tmpAttrs[i][0], tmpAttrs[i][1]];\n\t\t\ttmpAttrs[i][1] += ` ${options.langPrefix}${langName}`;\n\t\t}\n\t\tconst tmpToken = { attrs: tmpAttrs };\n\t\treturn `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`;\n\t}\n\treturn `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`;\n};\ndefault_rules.image = function(tokens, idx, options, env, slf) {\n\tconst token = tokens[idx];\n\ttoken.attrs[token.attrIndex(\"alt\")][1] = slf.renderInlineAsText(token.children, options, env);\n\treturn slf.renderToken(tokens, idx, options);\n};\ndefault_rules.hardbreak = function(tokens, idx, options) {\n\treturn options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\";\n};\ndefault_rules.softbreak = function(tokens, idx, options) {\n\treturn options.breaks ? options.xhtmlOut ? \"<br />\\n\" : \"<br>\\n\" : \"\\n\";\n};\ndefault_rules.text = function(tokens, idx) {\n\treturn escapeHtml(tokens[idx].content);\n};\ndefault_rules.html_block = function(tokens, idx) {\n\treturn tokens[idx].content;\n};\ndefault_rules.html_inline = function(tokens, idx) {\n\treturn tokens[idx].content;\n};\n/**\n* Generates HTML from parsed token stream. Each instance has independent\n* copy of rules. Those can be rewritten with ease. Also, you can add new\n* rules if you create plugin and adds new token types.\n*\n* Creates new renderer instance and fills {@link Renderer.rules} with defaults.\n*/\nvar Renderer = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Contains render rules for tokens. Can be updated and extended.\n\t\t\t*\n\t\t\t* See [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts)\n\t\t\t* for more details and examples.\n\t\t\t*\n\t\t\t* @example Custom render rules\n\t\t\t* ```javascript\n\t\t\t* import MarkdownIt from 'markdown-it'\n\t\t\t* const md = new MarkdownIt()\n\t\t\t*\n\t\t\t* md.renderer.rules.strong_open = function () { return '<b>'; };\n\t\t\t* md.renderer.rules.strong_close = function () { return '</b>'; };\n\t\t\t*\n\t\t\t* const result = md.renderInline(...);\n\t\t\t* ```\n\t\t\t*\n\t\t\t* @example Each rule is called as independent static function with fixed signature\n\t\t\t* ```javascript\n\t\t\t* function my_token_render(tokens, idx, options, env, renderer) {\n\t\t\t* // ...\n\t\t\t* return renderedHTML;\n\t\t\t* }\n\t\t\t* ```\n\t\t\t*/\n\t\t\t\"rules\",\n\t\t\tObject.assign({}, default_rules)\n\t\t);\n\t}\n\t/**\n\t* Render token attributes to string.\n\t*/\n\trenderAttrs(token) {\n\t\tlet i, l, result;\n\t\tif (!token.attrs) return \"\";\n\t\tresult = \"\";\n\t\tfor (i = 0, l = token.attrs.length; i < l; i++) result += ` ${escapeHtml(token.attrs[i][0])}=\"${escapeHtml(String(token.attrs[i][1]))}\"`;\n\t\treturn result;\n\t}\n\t/**\n\t* Default token renderer. Can be overriden by custom function\n\t* in {@link Renderer.rules}.\n\t*/\n\trenderToken(tokens, idx, options) {\n\t\tconst token = tokens[idx];\n\t\tlet result = \"\";\n\t\tif (token.hidden) return \"\";\n\t\tlet prev = idx - 1;\n\t\twhile (prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === 0) prev--;\n\t\tif (token.block && token.nesting !== -1 && prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === -1) result += \"\\n\";\n\t\tresult += (token.nesting === -1 ? \"</\" : \"<\") + token.tag;\n\t\tresult += this.renderAttrs(token);\n\t\tif (token.nesting === 0 && options.xhtmlOut) result += \" /\";\n\t\tlet needLf = false;\n\t\tif (token.block) {\n\t\t\tneedLf = true;\n\t\t\tif (token.nesting === 1) {\n\t\t\t\tlet next = idx + 1;\n\t\t\t\twhile (next < tokens.length && tokens[next].hidden && tokens[next].nesting === 0) next++;\n\t\t\t\tif (next < tokens.length) {\n\t\t\t\t\tconst nextToken = tokens[next];\n\t\t\t\t\tif (nextToken.type === \"inline\" || nextToken.hidden) needLf = false;\n\t\t\t\t\telse if (nextToken.nesting === -1 && nextToken.tag === token.tag) needLf = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresult += needLf ? \">\\n\" : \">\";\n\t\treturn result;\n\t}\n\t/**\n\t* The same as {@link Renderer.render}, but for single token of `inline` type.\n\t*/\n\trenderInline(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tconst rules = this.rules;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst type = tokens[i].type;\n\t\t\tif (typeof rules[type] !== \"undefined\") result += rules[type](tokens, i, options, env, this);\n\t\t\telse result += this.renderToken(tokens, i, options);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Special kludge for image `alt` attributes to conform CommonMark spec.\n\t* Don't try to use it! Spec requires to show `alt` content with stripped markup,\n\t* instead of simple escaping.\n\t*/\n\trenderInlineAsText(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) switch (tokens[i].type) {\n\t\t\tcase \"text\":\n\t\t\tcase \"code_inline\":\n\t\t\t\tresult += tokens[i].content;\n\t\t\t\tbreak;\n\t\t\tcase \"image\":\n\t\t\t\tresult += this.renderInlineAsText(tokens[i].children, options, env);\n\t\t\t\tbreak;\n\t\t\tcase \"html_inline\":\n\t\t\tcase \"html_block\":\n\t\t\t\tresult += tokens[i].content;\n\t\t\t\tbreak;\n\t\t\tcase \"softbreak\":\n\t\t\tcase \"hardbreak\": result += \"\\n\";\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Takes token stream and generates HTML. Probably, you will never need to call\n\t* this method directly.\n\t*/\n\trender(tokens, options, env) {\n\t\tlet result = \"\";\n\t\tconst rules = this.rules;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst type = tokens[i].type;\n\t\t\tif (type === \"inline\") result += this.renderInline(tokens[i].children, options, env);\n\t\t\telse if (typeof rules[type] !== \"undefined\") result += rules[type](tokens, i, options, env, this);\n\t\t\telse result += this.renderToken(tokens, i, options);\n\t\t}\n\t\treturn result;\n\t}\n};\n//#endregion\n//#region src/rules_core/state_core.ts\n/** Mutable state passed through the core rules chain. */\nvar StateCore = class {\n\tconstructor(src, md, env) {\n\t\t_defineProperty(this, \"tokens\", []);\n\t\t_defineProperty(this, \"inlineMode\", false);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.env = env;\n\t\tthis.md = md;\n\t}\n};\n//#endregion\n//#region src/rules_core/normalize.ts\nvar UNNORMALIZED_NEWLINE_RE = /\\r\\n?/g;\nvar NULL_RE = /\\0/g;\nfunction normalize(state) {\n\tlet str;\n\tstr = state.src.replace(UNNORMALIZED_NEWLINE_RE, \"\\n\");\n\tstr = str.replace(NULL_RE, \"�\");\n\tstate.src = str;\n}\n//#endregion\n//#region src/rules_core/block.ts\nfunction block(state) {\n\tlet token;\n\tif (state.inlineMode) {\n\t\ttoken = new state.Token(\"inline\", \"\", 0);\n\t\ttoken.content = state.src;\n\t\ttoken.map = [0, 1];\n\t\ttoken.children = [];\n\t\tstate.tokens.push(token);\n\t} else state.md.block.parse(state.src, state.md, state.env, state.tokens);\n}\n//#endregion\n//#region src/rules_core/strip_references.ts\nfunction strip_references(state) {\n\tconst tokens = state.tokens;\n\tlet last = 0;\n\tfor (let curr = 0; curr < tokens.length; curr++) {\n\t\tif (tokens[curr].type === \"reference_definition\") continue;\n\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\tlast++;\n\t}\n\tif (tokens.length !== last) tokens.length = last;\n}\n//#endregion\n//#region src/rules_core/inline.ts\nfunction inline(state) {\n\tconst tokens = state.tokens;\n\tfor (let i = 0, l = tokens.length; i < l; i++) {\n\t\tconst tok = tokens[i];\n\t\tif (tok.type === \"inline\") state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n\t}\n}\n//#endregion\n//#region src/rules_core/linkify.ts\nfunction isLinkOpen$1(str) {\n\treturn /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose$1(str) {\n\treturn /^<\\/a\\s*>/i.test(str);\n}\nfunction linkify$1(state) {\n\tconst blockTokens = state.tokens;\n\tif (!state.md.options.linkify) return;\n\tfor (let j = 0, l = blockTokens.length; j < l; j++) {\n\t\tif (blockTokens[j].type !== \"inline\" || !state.md.linkify.test(blockTokens[j].content)) continue;\n\t\tconst tokens = blockTokens[j].children;\n\t\tconst replacements = [];\n\t\tlet htmlLinkLevel = 0;\n\t\tfor (let i = tokens.length - 1; i >= 0; i--) {\n\t\t\tconst currentToken = tokens[i];\n\t\t\tif (currentToken.type === \"link_close\") {\n\t\t\t\ti--;\n\t\t\t\twhile (tokens[i].level !== currentToken.level && tokens[i].type !== \"link_open\") i--;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (currentToken.type === \"html_inline\") {\n\t\t\t\tif (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) htmlLinkLevel--;\n\t\t\t\tif (isLinkClose$1(currentToken.content)) htmlLinkLevel++;\n\t\t\t}\n\t\t\tif (htmlLinkLevel > 0) continue;\n\t\t\tif (currentToken.type === \"text\" && state.md.linkify.test(currentToken.content)) {\n\t\t\t\tconst text = currentToken.content;\n\t\t\t\tlet links = state.md.linkify.match(text);\n\t\t\t\tconst nodes = [];\n\t\t\t\tlet level = currentToken.level;\n\t\t\t\tlet lastPos = 0;\n\t\t\t\tif (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === \"text_special\") links = links.slice(1);\n\t\t\t\tfor (let ln = 0; ln < links.length; ln++) {\n\t\t\t\t\tconst url = links[ln].url;\n\t\t\t\t\tconst fullUrl = state.md.normalizeLink(url);\n\t\t\t\t\tif (!state.md.validateLink(fullUrl)) continue;\n\t\t\t\t\tlet urlText = links[ln].text;\n\t\t\t\t\tif (!links[ln].schema) urlText = state.md.normalizeLinkText(`http://${urlText}`).replace(/^http:\\/\\//, \"\");\n\t\t\t\t\telse if (links[ln].schema === \"mailto:\" && !/^mailto:/i.test(urlText)) urlText = state.md.normalizeLinkText(`mailto:${urlText}`).replace(/^mailto:/, \"\");\n\t\t\t\t\telse urlText = state.md.normalizeLinkText(urlText);\n\t\t\t\t\tconst pos = links[ln].index;\n\t\t\t\t\tif (pos > lastPos) {\n\t\t\t\t\t\tconst token = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\t\ttoken.content = text.slice(lastPos, pos);\n\t\t\t\t\t\ttoken.level = level;\n\t\t\t\t\t\tnodes.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tconst token_o = new state.Token(\"link_open\", \"a\", 1);\n\t\t\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\t\t\ttoken_o.level = level++;\n\t\t\t\t\ttoken_o.markup = \"linkify\";\n\t\t\t\t\ttoken_o.info = \"auto\";\n\t\t\t\t\tnodes.push(token_o);\n\t\t\t\t\tconst token_t = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\ttoken_t.content = urlText;\n\t\t\t\t\ttoken_t.level = level;\n\t\t\t\t\tnodes.push(token_t);\n\t\t\t\t\tconst token_c = new state.Token(\"link_close\", \"a\", -1);\n\t\t\t\t\ttoken_c.level = --level;\n\t\t\t\t\ttoken_c.markup = \"linkify\";\n\t\t\t\t\ttoken_c.info = \"auto\";\n\t\t\t\t\tnodes.push(token_c);\n\t\t\t\t\tlastPos = links[ln].lastIndex;\n\t\t\t\t}\n\t\t\t\tif (lastPos < text.length) {\n\t\t\t\t\tconst token = new state.Token(\"text\", \"\", 0);\n\t\t\t\t\ttoken.content = text.slice(lastPos);\n\t\t\t\t\ttoken.level = level;\n\t\t\t\t\tnodes.push(token);\n\t\t\t\t}\n\t\t\t\treplacements.push({\n\t\t\t\t\tindex: i,\n\t\t\t\t\tnodes\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (replacements.length > 0) {\n\t\t\tlet newTokensLength = tokens.length;\n\t\t\tfor (const replacement of replacements) newTokensLength += replacement.nodes.length - 1;\n\t\t\tconst newTokens = new Array(newTokensLength);\n\t\t\tlet replacementIndex = 0;\n\t\t\tlet newTokenIndex = 0;\n\t\t\treplacements.reverse();\n\t\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\t\tconst replacement = replacements[replacementIndex];\n\t\t\t\tif ((replacement === null || replacement === void 0 ? void 0 : replacement.index) === i) {\n\t\t\t\t\tfor (const node of replacement.nodes) newTokens[newTokenIndex++] = node;\n\t\t\t\t\treplacementIndex++;\n\t\t\t\t} else newTokens[newTokenIndex++] = tokens[i];\n\t\t\t}\n\t\t\tblockTokens[j].children = newTokens;\n\t\t}\n\t}\n}\n//#endregion\n//#region src/rules_core/replacements.ts\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\nvar SCOPED_ABBR_RE = /\\((c|tm|r)\\)/gi;\nvar SCOPED_ABBR = {\n\tc: \"©\",\n\tr: \"®\",\n\ttm: \"™\"\n};\nfunction replaceFn(match, name) {\n\treturn SCOPED_ABBR[name.toLowerCase()];\n}\nfunction replace_scoped(inlineTokens) {\n\tlet inside_autolink = 0;\n\tfor (let i = inlineTokens.length - 1; i >= 0; i--) {\n\t\tconst token = inlineTokens[i];\n\t\tif (token.type === \"text\" && !inside_autolink) token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n\t\tif (token.type === \"link_open\" && token.info === \"auto\") inside_autolink--;\n\t\tif (token.type === \"link_close\" && token.info === \"auto\") inside_autolink++;\n\t}\n}\nfunction replace_rare(inlineTokens) {\n\tlet inside_autolink = 0;\n\tfor (let i = inlineTokens.length - 1; i >= 0; i--) {\n\t\tconst token = inlineTokens[i];\n\t\tif (token.type === \"text\" && !inside_autolink) {\n\t\t\tif (RARE_RE.test(token.content)) token.content = token.content.replace(/\\+-/g, \"±\").replace(/\\.{2,}/g, \"…\").replace(/([?!])…/g, \"$1..\").replace(/([?!]){4,}/g, \"$1$1$1\").replace(/,{2,}/g, \",\").replace(/(^|[^-])---(?=[^-]|$)/gm, \"$1—\").replace(/(^|\\s)--(?=\\s|$)/gm, \"$1–\").replace(/(^|[^-\\s])--(?=[^-\\s]|$)/gm, \"$1–\");\n\t\t}\n\t\tif (token.type === \"link_open\" && token.info === \"auto\") inside_autolink--;\n\t\tif (token.type === \"link_close\" && token.info === \"auto\") inside_autolink++;\n\t}\n}\nfunction replace(state) {\n\tlet blkIdx;\n\tif (!state.md.options.typographer) return;\n\tfor (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\t\tif (state.tokens[blkIdx].type !== \"inline\") continue;\n\t\tif (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) replace_scoped(state.tokens[blkIdx].children);\n\t\tif (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);\n\t}\n}\n//#endregion\n//#region src/rules_core/smartquotes.ts\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = \"’\";\nvar MAX_OPENERS = 1e3;\nfunction truncateStack(stack, heads, length) {\n\twhile (stack.length > length) {\n\t\tconst item = stack.pop();\n\t\tif (item.isSingleQuote) heads.single = item.prevSameQuoteIdx;\n\t\telse heads.double = item.prevSameQuoteIdx;\n\t}\n}\nfunction addReplacement(replacements, tokenIdx, pos, ch) {\n\tif (!replacements[tokenIdx]) replacements[tokenIdx] = [];\n\treplacements[tokenIdx].push({\n\t\tpos,\n\t\tch\n\t});\n}\nfunction applyReplacements(str, replacements) {\n\tlet result = \"\";\n\tlet lastPos = 0;\n\treplacements.sort((a, b) => a.pos - b.pos);\n\tfor (let i = 0; i < replacements.length; i++) {\n\t\tconst replacement = replacements[i];\n\t\tresult += str.slice(lastPos, replacement.pos) + replacement.ch;\n\t\tlastPos = replacement.pos + 1;\n\t}\n\treturn result + str.slice(lastPos);\n}\nfunction process_inlines(tokens, state) {\n\tlet j;\n\tconst stack = [];\n\tconst heads = {\n\t\tsingle: -1,\n\t\tdouble: -1\n\t};\n\tconst replacements = {};\n\tfor (let i = 0; i < tokens.length; i++) {\n\t\tconst token = tokens[i];\n\t\tconst thisLevel = tokens[i].level;\n\t\tfor (j = stack.length - 1; j >= 0; j--) if (stack[j].level <= thisLevel) break;\n\t\ttruncateStack(stack, heads, j + 1);\n\t\tif (token.type !== \"text\") continue;\n\t\tconst text = token.content;\n\t\tlet pos = 0;\n\t\tconst max = text.length;\n\t\tOUTER: while (pos < max) {\n\t\t\tQUOTE_RE.lastIndex = pos;\n\t\t\tconst t = QUOTE_RE.exec(text);\n\t\t\tif (!t) break;\n\t\t\tlet canOpen = true;\n\t\t\tlet canClose = true;\n\t\t\tpos = t.index + 1;\n\t\t\tconst isSingle = t[0] === \"'\";\n\t\t\tlet lastChar = 32;\n\t\t\tif (t.index - 1 >= 0) lastChar = text.charCodeAt(t.index - 1);\n\t\t\telse for (j = i - 1; j >= 0; j--) {\n\t\t\t\tif (tokens[j].type === \"softbreak\" || tokens[j].type === \"hardbreak\") break;\n\t\t\t\tif (!tokens[j].content) continue;\n\t\t\t\tlastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet nextChar = 32;\n\t\t\tif (pos < max) nextChar = text.charCodeAt(pos);\n\t\t\telse for (j = i + 1; j < tokens.length; j++) {\n\t\t\t\tif (tokens[j].type === \"softbreak\" || tokens[j].type === \"hardbreak\") break;\n\t\t\t\tif (!tokens[j].content) continue;\n\t\t\t\tnextChar = tokens[j].content.charCodeAt(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);\n\t\t\tconst isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);\n\t\t\tconst isLastWhiteSpace = isWhiteSpace(lastChar);\n\t\t\tconst isNextWhiteSpace = isWhiteSpace(nextChar);\n\t\t\tif (isNextWhiteSpace) canOpen = false;\n\t\t\telse if (isNextPunctChar) {\n\t\t\t\tif (!(isLastWhiteSpace || isLastPunctChar)) canOpen = false;\n\t\t\t}\n\t\t\tif (isLastWhiteSpace) canClose = false;\n\t\t\telse if (isLastPunctChar) {\n\t\t\t\tif (!(isNextWhiteSpace || isNextPunctChar)) canClose = false;\n\t\t\t}\n\t\t\tif (nextChar === 34 && t[0] === \"\\\"\") {\n\t\t\t\tif (lastChar >= 48 && lastChar <= 57) canClose = canOpen = false;\n\t\t\t}\n\t\t\tif (canOpen && canClose) {\n\t\t\t\tcanOpen = isLastPunctChar;\n\t\t\t\tcanClose = isNextPunctChar;\n\t\t\t}\n\t\t\tif (!canOpen && !canClose) {\n\t\t\t\tif (isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (canClose) {\n\t\t\t\tj = isSingle ? heads.single : heads.double;\n\t\t\t\tif (j >= 0 && stack[j].level === thisLevel) {\n\t\t\t\t\tconst item = stack[j];\n\t\t\t\t\tlet openQuote;\n\t\t\t\t\tlet closeQuote;\n\t\t\t\t\tif (isSingle) {\n\t\t\t\t\t\topenQuote = state.md.options.quotes[2];\n\t\t\t\t\t\tcloseQuote = state.md.options.quotes[3];\n\t\t\t\t\t} else {\n\t\t\t\t\t\topenQuote = state.md.options.quotes[0];\n\t\t\t\t\t\tcloseQuote = state.md.options.quotes[1];\n\t\t\t\t\t}\n\t\t\t\t\taddReplacement(replacements, i, t.index, closeQuote);\n\t\t\t\t\taddReplacement(replacements, item.tokenIdx, item.contentPos, openQuote);\n\t\t\t\t\ttruncateStack(stack, heads, j);\n\t\t\t\t\tcontinue OUTER;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (canOpen) {\n\t\t\t\tif (stack.length >= MAX_OPENERS) return;\n\t\t\t\tstack.push({\n\t\t\t\t\ttokenIdx: i,\n\t\t\t\t\tcontentPos: t.index,\n\t\t\t\t\tisSingleQuote: isSingle,\n\t\t\t\t\tlevel: thisLevel,\n\t\t\t\t\tprevSameQuoteIdx: isSingle ? heads.single : heads.double\n\t\t\t\t});\n\t\t\t\tif (isSingle) heads.single = stack.length - 1;\n\t\t\t\telse heads.double = stack.length - 1;\n\t\t\t} else if (canClose && isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);\n\t\t}\n\t}\n\tObject.keys(replacements).forEach(function(tokenIdx) {\n\t\tconst idx = Number(tokenIdx);\n\t\ttokens[idx].content = applyReplacements(tokens[idx].content, replacements[tokenIdx]);\n\t});\n}\nfunction smartquotes(state) {\n\tif (!state.md.options.typographer) return;\n\tfor (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\t\tif (state.tokens[blkIdx].type !== \"inline\" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) continue;\n\t\tprocess_inlines(state.tokens[blkIdx].children, state);\n\t}\n}\n//#endregion\n//#region src/rules_core/text_join.ts\nfunction join_alt(tokens) {\n\tlet curr, last;\n\tconst max = tokens.length;\n\tfor (curr = 0; curr < max; curr++) if (tokens[curr].type === \"text_special\") tokens[curr].type = \"text\";\n\tfor (curr = last = 0; curr < max; curr++) if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\telse {\n\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\tlast++;\n\t}\n\tif (curr !== last) tokens.length = last;\n}\nfunction text_join(state) {\n\tlet curr, last;\n\tconst blockTokens = state.tokens;\n\tconst l = blockTokens.length;\n\tfor (let j = 0; j < l; j++) {\n\t\tif (blockTokens[j].type !== \"inline\") continue;\n\t\tconst tokens = blockTokens[j].children;\n\t\tconst max = tokens.length;\n\t\tfor (curr = 0; curr < max; curr++) {\n\t\t\tif (tokens[curr].type === \"text_special\") tokens[curr].type = \"text\";\n\t\t\tif (tokens[curr].children) join_alt(tokens[curr].children);\n\t\t}\n\t\tfor (curr = last = 0; curr < max; curr++) if (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\t\telse {\n\t\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\t\tlast++;\n\t\t}\n\t\tif (curr !== last) tokens.length = last;\n\t}\n}\n//#endregion\n//#region src/parser_core.ts\nvar _rules$2 = [\n\t[\"normalize\", normalize],\n\t[\"block\", block],\n\t[\"strip_references\", strip_references],\n\t[\"inline\", inline],\n\t[\"linkify\", linkify$1],\n\t[\"replacements\", replace],\n\t[\"smartquotes\", smartquotes],\n\t[\"text_join\", text_join]\n];\n/**\n* Top-level rules executor. Glues block/inline parsers and does intermediate\n* transformations.\n*/\nvar ParserCore = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of core rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateCore);\n\t\tfor (let i = 0; i < _rules$2.length; i++) this.ruler.push(_rules$2[i][0], _rules$2[i][1]);\n\t}\n\t/**\n\t* Executes core chain rules.\n\t*/\n\tprocess(state) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tfor (let i = 0, l = rules.length; i < l; i++) rules[i](state);\n\t}\n};\n//#endregion\n//#region src/rules_block/state_block.ts\n/** Mutable state passed to block rules while tokenizing a source document. */\nvar StateBlock = class {\n\tconstructor(src, md, env, tokens) {\n\t\t_defineProperty(this, \"bMarks\", []);\n\t\t_defineProperty(this, \"eMarks\", []);\n\t\t_defineProperty(this, \"tShift\", []);\n\t\t_defineProperty(this, \"sCount\", []);\n\t\t_defineProperty(this, \"bsCount\", []);\n\t\t_defineProperty(this, \"blkIndent\", 0);\n\t\t_defineProperty(this, \"line\", 0);\n\t\t_defineProperty(this, \"lineMax\", 0);\n\t\t_defineProperty(this, \"tight\", false);\n\t\t_defineProperty(this, \"listIndent\", -1);\n\t\t_defineProperty(this, \"parentType\", \"root\");\n\t\t_defineProperty(this, \"level\", 0);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.md = md;\n\t\tthis.env = env;\n\t\tthis.tokens = tokens;\n\t\tconst s = this.src;\n\t\tfor (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n\t\t\tconst ch = s.charCodeAt(pos);\n\t\t\tif (!indent_found) if (isSpace(ch)) {\n\t\t\t\tindent++;\n\t\t\t\tif (ch === 9) offset += 4 - offset % 4;\n\t\t\t\telse offset++;\n\t\t\t\tcontinue;\n\t\t\t} else indent_found = true;\n\t\t\tif (ch === 10 || pos === len - 1) {\n\t\t\t\tif (ch !== 10) pos++;\n\t\t\t\tthis.bMarks.push(start);\n\t\t\t\tthis.eMarks.push(pos);\n\t\t\t\tthis.tShift.push(indent);\n\t\t\t\tthis.sCount.push(offset);\n\t\t\t\tthis.bsCount.push(0);\n\t\t\t\tindent_found = false;\n\t\t\t\tindent = 0;\n\t\t\t\toffset = 0;\n\t\t\t\tstart = pos + 1;\n\t\t\t}\n\t\t}\n\t\tthis.bMarks.push(s.length);\n\t\tthis.eMarks.push(s.length);\n\t\tthis.tShift.push(0);\n\t\tthis.sCount.push(0);\n\t\tthis.bsCount.push(0);\n\t\tthis.lineMax = this.bMarks.length - 1;\n\t}\n\tpush(type, tag, nesting) {\n\t\tconst token = new Token(type, tag, nesting);\n\t\ttoken.block = true;\n\t\tif (nesting < 0) this.level--;\n\t\ttoken.level = this.level;\n\t\tif (nesting > 0) this.level++;\n\t\tthis.tokens.push(token);\n\t\treturn token;\n\t}\n\tisEmpty(line) {\n\t\treturn this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n\t}\n\tskipEmptyLines(from) {\n\t\tfor (let max = this.lineMax; from < max; from++) if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) break;\n\t\treturn from;\n\t}\n\tskipSpaces(pos) {\n\t\tfor (let max = this.src.length; pos < max; pos++) if (!isSpace(this.src.charCodeAt(pos))) break;\n\t\treturn pos;\n\t}\n\tskipSpacesBack(pos, min) {\n\t\tif (pos <= min) return pos;\n\t\twhile (pos > min) if (!isSpace(this.src.charCodeAt(--pos))) return pos + 1;\n\t\treturn pos;\n\t}\n\tskipChars(pos, code) {\n\t\tfor (let max = this.src.length; pos < max; pos++) if (this.src.charCodeAt(pos) !== code) break;\n\t\treturn pos;\n\t}\n\tskipCharsBack(pos, code, min) {\n\t\tif (pos <= min) return pos;\n\t\twhile (pos > min) if (code !== this.src.charCodeAt(--pos)) return pos + 1;\n\t\treturn pos;\n\t}\n\tgetLines(begin, end, indent, keepLastLF) {\n\t\tif (begin >= end) return \"\";\n\t\tconst queue = new Array(end - begin);\n\t\tfor (let i = 0, line = begin; line < end; line++, i++) {\n\t\t\tlet lineIndent = 0;\n\t\t\tconst lineStart = this.bMarks[line];\n\t\t\tlet first = lineStart;\n\t\t\tlet last;\n\t\t\tif (line + 1 < end || keepLastLF) last = this.eMarks[line] + 1;\n\t\t\telse last = this.eMarks[line];\n\t\t\twhile (first < last && lineIndent < indent) {\n\t\t\t\tconst ch = this.src.charCodeAt(first);\n\t\t\t\tif (isSpace(ch)) if (ch === 9) lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n\t\t\t\telse lineIndent++;\n\t\t\t\telse if (first - lineStart < this.tShift[line]) lineIndent++;\n\t\t\t\telse break;\n\t\t\t\tfirst++;\n\t\t\t}\n\t\t\tif (lineIndent > indent) queue[i] = new Array(lineIndent - indent + 1).join(\" \") + this.src.slice(first, last);\n\t\t\telse queue[i] = this.src.slice(first, last);\n\t\t}\n\t\treturn queue.join(\"\");\n\t}\n};\n//#endregion\n//#region src/rules_block/table.ts\nvar MAX_AUTOCOMPLETED_CELLS = 65536;\nfunction getLine(state, line) {\n\tconst pos = state.bMarks[line] + state.tShift[line];\n\tconst max = state.eMarks[line];\n\treturn state.src.slice(pos, max);\n}\nfunction escapedSplit(str) {\n\tconst result = [];\n\tconst max = str.length;\n\tlet pos = 0;\n\tlet ch = str.charCodeAt(pos);\n\tlet isEscaped = false;\n\tlet lastPos = 0;\n\tlet current = \"\";\n\twhile (pos < max) {\n\t\tif (ch === 124) if (!isEscaped) {\n\t\t\tresult.push(current + str.substring(lastPos, pos));\n\t\t\tcurrent = \"\";\n\t\t\tlastPos = pos + 1;\n\t\t} else {\n\t\t\tcurrent += str.substring(lastPos, pos - 1);\n\t\t\tlastPos = pos;\n\t\t}\n\t\tisEscaped = ch === 92;\n\t\tpos++;\n\t\tch = str.charCodeAt(pos);\n\t}\n\tresult.push(current + str.substring(lastPos));\n\treturn result;\n}\nfunction table(state, startLine, endLine, silent) {\n\tif (startLine + 2 > endLine) return false;\n\tlet nextLine = startLine + 1;\n\tif (state.sCount[nextLine] < state.blkIndent) return false;\n\tif (state.sCount[nextLine] - state.blkIndent >= 4) return false;\n\tlet pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\tif (pos >= state.eMarks[nextLine]) return false;\n\tconst firstCh = state.src.charCodeAt(pos++);\n\tif (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) return false;\n\tif (pos >= state.eMarks[nextLine]) return false;\n\tconst secondCh = state.src.charCodeAt(pos++);\n\tif (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace(secondCh)) return false;\n\tif (firstCh === 45 && isSpace(secondCh)) return false;\n\twhile (pos < state.eMarks[nextLine]) {\n\t\tconst ch = state.src.charCodeAt(pos);\n\t\tif (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace(ch)) return false;\n\t\tpos++;\n\t}\n\tlet lineText = getLine(state, startLine + 1);\n\tlet columns = lineText.split(\"|\");\n\tconst aligns = [];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst t = columns[i].trim();\n\t\tif (!t) if (i === 0 || i === columns.length - 1) continue;\n\t\telse return false;\n\t\tif (!/^:?-+:?$/.test(t)) return false;\n\t\tif (t.charCodeAt(t.length - 1) === 58) aligns.push(t.charCodeAt(0) === 58 ? \"center\" : \"right\");\n\t\telse if (t.charCodeAt(0) === 58) aligns.push(\"left\");\n\t\telse aligns.push(\"\");\n\t}\n\tlineText = getLine(state, startLine).trim();\n\tif (lineText.indexOf(\"|\") === -1) return false;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tcolumns = escapedSplit(lineText);\n\tif (columns.length && columns[0] === \"\") columns.shift();\n\tif (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n\tconst columnCount = columns.length;\n\tif (columnCount === 0 || columnCount !== aligns.length) return false;\n\tif (silent) return true;\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"table\";\n\tconst terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n\tconst token_to = state.push(\"table_open\", \"table\", 1);\n\tconst tableLines = [startLine, 0];\n\ttoken_to.map = tableLines;\n\tconst token_tho = state.push(\"thead_open\", \"thead\", 1);\n\ttoken_tho.map = [startLine, startLine + 1];\n\tconst token_htro = state.push(\"tr_open\", \"tr\", 1);\n\ttoken_htro.map = [startLine, startLine + 1];\n\tfor (let i = 0; i < columns.length; i++) {\n\t\tconst token_ho = state.push(\"th_open\", \"th\", 1);\n\t\tif (aligns[i]) token_ho.attrs = [[\"style\", `text-align:${aligns[i]}`]];\n\t\tconst token_il = state.push(\"inline\", \"\", 0);\n\t\ttoken_il.content = columns[i].trim();\n\t\ttoken_il.children = [];\n\t\tstate.push(\"th_close\", \"th\", -1);\n\t}\n\tstate.push(\"tr_close\", \"tr\", -1);\n\tstate.push(\"thead_close\", \"thead\", -1);\n\tlet tbodyLines;\n\tlet autocompletedCells = 0;\n\tfor (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n\t\tif (state.sCount[nextLine] < state.blkIndent) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t\tlineText = getLine(state, nextLine).trim();\n\t\tif (!lineText) break;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) break;\n\t\tcolumns = escapedSplit(lineText);\n\t\tif (columns.length && columns[0] === \"\") columns.shift();\n\t\tif (columns.length && columns[columns.length - 1] === \"\") columns.pop();\n\t\tautocompletedCells += columnCount - columns.length;\n\t\tif (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) break;\n\t\tif (nextLine === startLine + 2) {\n\t\t\tconst token_tbo = state.push(\"tbody_open\", \"tbody\", 1);\n\t\t\ttoken_tbo.map = tbodyLines = [startLine + 2, 0];\n\t\t}\n\t\tconst token_tro = state.push(\"tr_open\", \"tr\", 1);\n\t\ttoken_tro.map = [nextLine, nextLine + 1];\n\t\tfor (let i = 0; i < columnCount; i++) {\n\t\t\tconst token_tdo = state.push(\"td_open\", \"td\", 1);\n\t\t\tif (aligns[i]) token_tdo.attrs = [[\"style\", `text-align:${aligns[i]}`]];\n\t\t\tconst token_il = state.push(\"inline\", \"\", 0);\n\t\t\ttoken_il.content = columns[i] ? columns[i].trim() : \"\";\n\t\t\ttoken_il.children = [];\n\t\t\tstate.push(\"td_close\", \"td\", -1);\n\t\t}\n\t\tstate.push(\"tr_close\", \"tr\", -1);\n\t}\n\tif (tbodyLines) {\n\t\tstate.push(\"tbody_close\", \"tbody\", -1);\n\t\ttbodyLines[1] = nextLine;\n\t}\n\tstate.push(\"table_close\", \"table\", -1);\n\ttableLines[1] = nextLine;\n\tstate.parentType = oldParentType;\n\tstate.line = nextLine;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/code.ts\nfunction code(state, startLine, endLine) {\n\tif (state.sCount[startLine] - state.blkIndent < 4) return false;\n\tlet nextLine = startLine + 1;\n\tlet last = nextLine;\n\twhile (nextLine < endLine) {\n\t\tif (state.isEmpty(nextLine)) {\n\t\t\tnextLine++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) {\n\t\t\tnextLine++;\n\t\t\tlast = nextLine;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tstate.line = last;\n\tconst token = state.push(\"code_block\", \"code\", 0);\n\ttoken.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + \"\\n\";\n\ttoken.map = [startLine, state.line];\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/fence.ts\nfunction fence(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (pos + 3 > max) return false;\n\tconst marker = state.src.charCodeAt(pos);\n\tif (marker !== 126 && marker !== 96) return false;\n\tlet mem = pos;\n\tpos = state.skipChars(pos, marker);\n\tlet len = pos - mem;\n\tif (len < 3) return false;\n\tconst markup = state.src.slice(mem, pos);\n\tconst params = state.src.slice(pos, max);\n\tif (marker === 96) {\n\t\tif (params.indexOf(String.fromCharCode(marker)) >= 0) return false;\n\t}\n\tif (silent) return true;\n\tlet nextLine = startLine;\n\tlet haveEndMarker = false;\n\tfor (;;) {\n\t\tnextLine++;\n\t\tif (nextLine >= endLine) break;\n\t\tpos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tif (pos < max && state.sCount[nextLine] < state.blkIndent) break;\n\t\tif (state.src.charCodeAt(pos) !== marker) continue;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) continue;\n\t\tpos = state.skipChars(pos, marker);\n\t\tif (pos - mem < len) continue;\n\t\tpos = state.skipSpaces(pos);\n\t\tif (pos < max) continue;\n\t\thaveEndMarker = true;\n\t\tbreak;\n\t}\n\tlen = state.sCount[startLine];\n\tstate.line = nextLine + (haveEndMarker ? 1 : 0);\n\tconst token = state.push(\"fence\", \"code\", 0);\n\ttoken.info = params;\n\ttoken.content = state.getLines(startLine + 1, nextLine, len, true);\n\ttoken.markup = markup;\n\ttoken.map = [startLine, state.line];\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/blockquote.ts\nfunction blockquote(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tconst oldLineMax = state.lineMax;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (state.src.charCodeAt(pos) !== 62) return false;\n\tif (silent) return true;\n\tconst oldBMarks = [];\n\tconst oldBSCount = [];\n\tconst oldSCount = [];\n\tconst oldTShift = [];\n\tconst terminatorRules = state.md.block.ruler.getRules(\"blockquote\");\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"blockquote\";\n\tlet lastLineEmpty = false;\n\tlet nextLine;\n\tfor (nextLine = startLine; nextLine < endLine; nextLine++) {\n\t\tconst isOutdented = state.sCount[nextLine] < state.blkIndent;\n\t\tpos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tif (pos >= max) break;\n\t\tif (state.src.charCodeAt(pos++) === 62 && !isOutdented) {\n\t\t\tlet initial = state.sCount[nextLine] + 1;\n\t\t\tlet spaceAfterMarker;\n\t\t\tlet adjustTab;\n\t\t\tif (state.src.charCodeAt(pos) === 32) {\n\t\t\t\tpos++;\n\t\t\t\tinitial++;\n\t\t\t\tadjustTab = false;\n\t\t\t\tspaceAfterMarker = true;\n\t\t\t} else if (state.src.charCodeAt(pos) === 9) {\n\t\t\t\tspaceAfterMarker = true;\n\t\t\t\tif ((state.bsCount[nextLine] + initial) % 4 === 3) {\n\t\t\t\t\tpos++;\n\t\t\t\t\tinitial++;\n\t\t\t\t\tadjustTab = false;\n\t\t\t\t} else adjustTab = true;\n\t\t\t} else spaceAfterMarker = false;\n\t\t\tlet offset = initial;\n\t\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\t\tstate.bMarks[nextLine] = pos;\n\t\t\twhile (pos < max) {\n\t\t\t\tconst ch = state.src.charCodeAt(pos);\n\t\t\t\tif (isSpace(ch)) if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n\t\t\t\telse offset++;\n\t\t\t\telse break;\n\t\t\t\tpos++;\n\t\t\t}\n\t\t\tlastLineEmpty = pos >= max;\n\t\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\t\tstate.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\t\t\toldSCount.push(state.sCount[nextLine]);\n\t\t\tstate.sCount[nextLine] = offset - initial;\n\t\t\toldTShift.push(state.tShift[nextLine]);\n\t\t\tstate.tShift[nextLine] = pos - state.bMarks[nextLine];\n\t\t\tcontinue;\n\t\t}\n\t\tif (lastLineEmpty) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) {\n\t\t\tstate.lineMax = nextLine;\n\t\t\tif (state.blkIndent !== 0) {\n\t\t\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\t\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\t\t\toldTShift.push(state.tShift[nextLine]);\n\t\t\t\toldSCount.push(state.sCount[nextLine]);\n\t\t\t\tstate.sCount[nextLine] -= state.blkIndent;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\toldBMarks.push(state.bMarks[nextLine]);\n\t\toldBSCount.push(state.bsCount[nextLine]);\n\t\toldTShift.push(state.tShift[nextLine]);\n\t\toldSCount.push(state.sCount[nextLine]);\n\t\tstate.sCount[nextLine] = -1;\n\t}\n\tconst oldIndent = state.blkIndent;\n\tstate.blkIndent = 0;\n\tconst token_o = state.push(\"blockquote_open\", \"blockquote\", 1);\n\ttoken_o.markup = \">\";\n\tconst lines = [startLine, 0];\n\ttoken_o.map = lines;\n\tstate.md.block.tokenize(state, startLine, nextLine);\n\tconst token_c = state.push(\"blockquote_close\", \"blockquote\", -1);\n\ttoken_c.markup = \">\";\n\tstate.lineMax = oldLineMax;\n\tstate.parentType = oldParentType;\n\tlines[1] = state.line;\n\tfor (let i = 0; i < oldTShift.length; i++) {\n\t\tstate.bMarks[i + startLine] = oldBMarks[i];\n\t\tstate.tShift[i + startLine] = oldTShift[i];\n\t\tstate.sCount[i + startLine] = oldSCount[i];\n\t\tstate.bsCount[i + startLine] = oldBSCount[i];\n\t}\n\tstate.blkIndent = oldIndent;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/hr.ts\nfunction hr(state, startLine, endLine, silent) {\n\tconst max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tconst marker = state.src.charCodeAt(pos++);\n\tif (marker !== 42 && marker !== 45 && marker !== 95) return false;\n\tlet cnt = 1;\n\twhile (pos < max) {\n\t\tconst ch = state.src.charCodeAt(pos++);\n\t\tif (ch !== marker && !isSpace(ch)) return false;\n\t\tif (ch === marker) cnt++;\n\t}\n\tif (cnt < 3) return false;\n\tif (silent) return true;\n\tstate.line = startLine + 1;\n\tconst token = state.push(\"hr\", \"hr\", 0);\n\ttoken.map = [startLine, state.line];\n\ttoken.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/list.ts\nfunction skipBulletListMarker(state, startLine) {\n\tconst max = state.eMarks[startLine];\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tconst marker = state.src.charCodeAt(pos++);\n\tif (marker !== 42 && marker !== 45 && marker !== 43) return -1;\n\tif (pos < max) {\n\t\tif (!isSpace(state.src.charCodeAt(pos))) return -1;\n\t}\n\treturn pos;\n}\nfunction skipOrderedListMarker(state, startLine) {\n\tconst start = state.bMarks[startLine] + state.tShift[startLine];\n\tconst max = state.eMarks[startLine];\n\tlet pos = start;\n\tif (pos + 1 >= max) return -1;\n\tlet ch = state.src.charCodeAt(pos++);\n\tif (ch < 48 || ch > 57) return -1;\n\tfor (;;) {\n\t\tif (pos >= max) return -1;\n\t\tch = state.src.charCodeAt(pos++);\n\t\tif (ch >= 48 && ch <= 57) {\n\t\t\tif (pos - start >= 10) return -1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === 41 || ch === 46) break;\n\t\treturn -1;\n\t}\n\tif (pos < max) {\n\t\tch = state.src.charCodeAt(pos);\n\t\tif (!isSpace(ch)) return -1;\n\t}\n\treturn pos;\n}\nfunction markTightParagraphs(state, idx) {\n\tconst level = state.level + 2;\n\tfor (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) if (state.tokens[i].level === level && state.tokens[i].type === \"paragraph_open\") {\n\t\tstate.tokens[i + 2].hidden = true;\n\t\tstate.tokens[i].hidden = true;\n\t\ti += 2;\n\t}\n}\nfunction list(state, startLine, endLine, silent) {\n\tlet max, pos, start, token;\n\tlet nextLine = startLine;\n\tlet tight = true;\n\tif (state.sCount[nextLine] - state.blkIndent >= 4) return false;\n\tif (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) return false;\n\tlet isTerminatingParagraph = false;\n\tif (silent && state.parentType === \"paragraph\") {\n\t\tif (state.sCount[nextLine] >= state.blkIndent) isTerminatingParagraph = true;\n\t}\n\tlet isOrdered;\n\tlet markerValue;\n\tlet posAfterMarker;\n\tif ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n\t\tisOrdered = true;\n\t\tstart = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmarkerValue = Number(state.src.slice(start, posAfterMarker - 1));\n\t\tif (isTerminatingParagraph && markerValue !== 1) return false;\n\t} else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) isOrdered = false;\n\telse return false;\n\tif (isTerminatingParagraph) {\n\t\tif (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n\t}\n\tif (silent) return true;\n\tconst markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\tconst listTokIdx = state.tokens.length;\n\tif (isOrdered) {\n\t\ttoken = state.push(\"ordered_list_open\", \"ol\", 1);\n\t\tif (markerValue !== 1) token.attrs = [[\"start\", markerValue]];\n\t} else token = state.push(\"bullet_list_open\", \"ul\", 1);\n\tconst listLines = [nextLine, 0];\n\ttoken.map = listLines;\n\ttoken.markup = String.fromCharCode(markerCharCode);\n\tlet prevEmptyEnd = false;\n\tconst terminatorRules = state.md.block.ruler.getRules(\"list\");\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"list\";\n\twhile (nextLine < endLine) {\n\t\tpos = posAfterMarker;\n\t\tmax = state.eMarks[nextLine];\n\t\tconst initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\t\tlet offset = initial;\n\t\twhile (pos < max) {\n\t\t\tconst ch = state.src.charCodeAt(pos);\n\t\t\tif (ch === 9) offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n\t\t\telse if (ch === 32) offset++;\n\t\t\telse break;\n\t\t\tpos++;\n\t\t}\n\t\tconst contentStart = pos;\n\t\tlet indentAfterMarker;\n\t\tif (contentStart >= max) indentAfterMarker = 1;\n\t\telse indentAfterMarker = offset - initial;\n\t\tif (indentAfterMarker > 4) indentAfterMarker = 1;\n\t\tconst indent = initial + indentAfterMarker;\n\t\ttoken = state.push(\"list_item_open\", \"li\", 1);\n\t\ttoken.markup = String.fromCharCode(markerCharCode);\n\t\tconst itemLines = [nextLine, 0];\n\t\ttoken.map = itemLines;\n\t\tif (isOrdered) token.info = state.src.slice(start, posAfterMarker - 1);\n\t\tconst oldTight = state.tight;\n\t\tconst oldTShift = state.tShift[nextLine];\n\t\tconst oldSCount = state.sCount[nextLine];\n\t\tconst oldListIndent = state.listIndent;\n\t\tstate.listIndent = state.blkIndent;\n\t\tstate.blkIndent = indent;\n\t\tstate.tight = true;\n\t\tstate.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n\t\tstate.sCount[nextLine] = offset;\n\t\tif (contentStart >= max && state.isEmpty(nextLine + 1)) state.line = Math.min(state.line + 2, endLine);\n\t\telse state.md.block.tokenize(state, nextLine, endLine);\n\t\tif (!state.tight || prevEmptyEnd) tight = false;\n\t\tprevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);\n\t\tstate.blkIndent = state.listIndent;\n\t\tstate.listIndent = oldListIndent;\n\t\tstate.tShift[nextLine] = oldTShift;\n\t\tstate.sCount[nextLine] = oldSCount;\n\t\tstate.tight = oldTight;\n\t\ttoken = state.push(\"list_item_close\", \"li\", -1);\n\t\ttoken.markup = String.fromCharCode(markerCharCode);\n\t\tnextLine = state.line;\n\t\titemLines[1] = nextLine;\n\t\tif (nextLine >= endLine) break;\n\t\tif (state.sCount[nextLine] < state.blkIndent) break;\n\t\tif (state.sCount[nextLine] - state.blkIndent >= 4) break;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t\tif (isOrdered) {\n\t\t\tposAfterMarker = skipOrderedListMarker(state, nextLine);\n\t\t\tif (posAfterMarker < 0) break;\n\t\t\tstart = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\t} else {\n\t\t\tposAfterMarker = skipBulletListMarker(state, nextLine);\n\t\t\tif (posAfterMarker < 0) break;\n\t\t}\n\t\tif (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) break;\n\t}\n\tif (isOrdered) token = state.push(\"ordered_list_close\", \"ol\", -1);\n\telse token = state.push(\"bullet_list_close\", \"ul\", -1);\n\ttoken.markup = String.fromCharCode(markerCharCode);\n\tlistLines[1] = nextLine;\n\tstate.line = nextLine;\n\tstate.parentType = oldParentType;\n\tif (tight) markTightParagraphs(state, listTokIdx);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/reference.ts\nfunction reference(state, startLine, _endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tlet nextLine = startLine + 1;\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (state.src.charCodeAt(pos) !== 91) return false;\n\tfunction getNextLine(nextLine) {\n\t\tconst endLine = state.lineMax;\n\t\tif (nextLine >= endLine || state.isEmpty(nextLine)) return null;\n\t\tlet isContinuation = false;\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) isContinuation = true;\n\t\tif (state.sCount[nextLine] < 0) isContinuation = true;\n\t\tif (!isContinuation) {\n\t\t\tconst terminatorRules = state.md.block.ruler.getRules(\"reference\");\n\t\t\tconst oldParentType = state.parentType;\n\t\t\tstate.parentType = \"reference\";\n\t\t\tlet terminate = false;\n\t\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\t\tterminate = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.parentType = oldParentType;\n\t\t\tif (terminate) return null;\n\t\t}\n\t\tconst pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tconst max = state.eMarks[nextLine];\n\t\treturn state.src.slice(pos, max + 1);\n\t}\n\tlet str = state.src.slice(pos, max + 1);\n\tmax = str.length;\n\tlet labelEnd = -1;\n\tfor (pos = 1; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 91) return false;\n\t\telse if (ch === 93) {\n\t\t\tlabelEnd = pos;\n\t\t\tbreak;\n\t\t} else if (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (ch === 92) {\n\t\t\tpos++;\n\t\t\tif (pos < max && str.charCodeAt(pos) === 10) {\n\t\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\t\tif (lineContent !== null) {\n\t\t\t\t\tstr += lineContent;\n\t\t\t\t\tmax = str.length;\n\t\t\t\t\tnextLine++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) return false;\n\tfor (pos = labelEnd + 2; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (isSpace(ch)) {} else break;\n\t}\n\tconst destRes = state.md.helpers.parseLinkDestination(str, pos, max);\n\tif (!destRes.ok) return false;\n\tconst href = state.md.normalizeLink(destRes.str);\n\tif (!state.md.validateLink(href)) return false;\n\tpos = destRes.pos;\n\tconst destEndPos = pos;\n\tconst destEndLineNo = nextLine;\n\tconst start = pos;\n\tfor (; pos < max; pos++) {\n\t\tconst ch = str.charCodeAt(pos);\n\t\tif (ch === 10) {\n\t\t\tconst lineContent = getNextLine(nextLine);\n\t\t\tif (lineContent !== null) {\n\t\t\t\tstr += lineContent;\n\t\t\t\tmax = str.length;\n\t\t\t\tnextLine++;\n\t\t\t}\n\t\t} else if (isSpace(ch)) {} else break;\n\t}\n\tlet titleRes = state.md.helpers.parseLinkTitle(str, pos, max);\n\twhile (titleRes.can_continue) {\n\t\tconst lineContent = getNextLine(nextLine);\n\t\tif (lineContent === null) break;\n\t\tstr += lineContent;\n\t\tpos = max;\n\t\tmax = str.length;\n\t\tnextLine++;\n\t\ttitleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);\n\t}\n\tlet title;\n\tif (pos < max && start !== pos && titleRes.ok) {\n\t\ttitle = titleRes.str;\n\t\tpos = titleRes.pos;\n\t} else {\n\t\ttitle = \"\";\n\t\tpos = destEndPos;\n\t\tnextLine = destEndLineNo;\n\t}\n\twhile (pos < max) {\n\t\tif (!isSpace(str.charCodeAt(pos))) break;\n\t\tpos++;\n\t}\n\tif (pos < max && str.charCodeAt(pos) !== 10) {\n\t\tif (title) {\n\t\t\ttitle = \"\";\n\t\t\tpos = destEndPos;\n\t\t\tnextLine = destEndLineNo;\n\t\t\twhile (pos < max) {\n\t\t\t\tif (!isSpace(str.charCodeAt(pos))) break;\n\t\t\t\tpos++;\n\t\t\t}\n\t\t}\n\t}\n\tif (pos < max && str.charCodeAt(pos) !== 10) return false;\n\tconst label = normalizeReference(str.slice(1, labelEnd));\n\tif (!label) return false;\n\t/* istanbul ignore if */\n\tif (silent) return true;\n\tif (typeof state.env.references === \"undefined\") state.env.references = {};\n\tif (typeof state.env.references[label] === \"undefined\") state.env.references[label] = {\n\t\ttitle,\n\t\thref\n\t};\n\tconst token = state.push(\"reference_definition\", \"\", 0);\n\ttoken.map = [startLine, nextLine];\n\ttoken.hidden = true;\n\tconst meta = Object.create(null);\n\tmeta.label = label;\n\ttoken.meta = meta;\n\tstate.line = nextLine;\n\treturn true;\n}\n//#endregion\n//#region src/common/html_blocks.ts\nvar html_blocks_default = [\n\t\"address\",\n\t\"article\",\n\t\"aside\",\n\t\"base\",\n\t\"basefont\",\n\t\"blockquote\",\n\t\"body\",\n\t\"caption\",\n\t\"center\",\n\t\"col\",\n\t\"colgroup\",\n\t\"dd\",\n\t\"details\",\n\t\"dialog\",\n\t\"dir\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"footer\",\n\t\"form\",\n\t\"frame\",\n\t\"frameset\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hr\",\n\t\"html\",\n\t\"iframe\",\n\t\"legend\",\n\t\"li\",\n\t\"link\",\n\t\"main\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"nav\",\n\t\"noframes\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"p\",\n\t\"param\",\n\t\"search\",\n\t\"section\",\n\t\"summary\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"title\",\n\t\"tr\",\n\t\"track\",\n\t\"ul\"\n];\n//#endregion\n//#region src/common/html_re.ts\nvar open_tag = `<[A-Za-z][A-Za-z0-9\\\\-]*(?:\\\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\\\s*=\\\\s*(?:[^\"'=<>\\`\\\\x00-\\\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\\\s*\\\\/?>`;\nvar close_tag = \"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\";\nvar HTML_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag}|<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->|<[?][\\\\s\\\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>)`);\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag})`);\n//#endregion\n//#region src/rules_block/html_block.ts\nvar HTML_SEQUENCES = [\n\t[\n\t\t/^<(script|pre|style|textarea)(?=(\\s|>|$))/i,\n\t\t/<\\/(script|pre|style|textarea)>/i,\n\t\ttrue\n\t],\n\t[\n\t\t/^<!--/,\n\t\t/-->/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<\\?/,\n\t\t/\\?>/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<![A-Za-z]/,\n\t\t/>/,\n\t\ttrue\n\t],\n\t[\n\t\t/^<!\\[CDATA\\[/,\n\t\t/\\]\\]>/,\n\t\ttrue\n\t],\n\t[\n\t\tnew RegExp(`^</?(${html_blocks_default.join(\"|\")})(?=(\\\\s|/?>|$))`, \"i\"),\n\t\t/^$/,\n\t\ttrue\n\t],\n\t[\n\t\tnew RegExp(`${HTML_OPEN_CLOSE_TAG_RE.source}\\\\s*$`),\n\t\t/^$/,\n\t\tfalse\n\t]\n];\nfunction html_block(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tif (!state.md.options.html) return false;\n\tif (state.src.charCodeAt(pos) !== 60) return false;\n\tlet lineText = state.src.slice(pos, max);\n\tlet i = 0;\n\tfor (; i < HTML_SEQUENCES.length; i++) if (HTML_SEQUENCES[i][0].test(lineText)) break;\n\tif (i === HTML_SEQUENCES.length) return false;\n\tif (silent) return HTML_SEQUENCES[i][2];\n\tlet nextLine = startLine + 1;\n\tconst endsOnBlankLine = HTML_SEQUENCES[i][1].test(\"\");\n\tif (!HTML_SEQUENCES[i][1].test(lineText)) for (; nextLine < endLine; nextLine++) {\n\t\tif (state.sCount[nextLine] < state.blkIndent) {\n\t\t\tif (endsOnBlankLine || !state.isEmpty(nextLine)) break;\n\t\t}\n\t\tpos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\tmax = state.eMarks[nextLine];\n\t\tlineText = state.src.slice(pos, max);\n\t\tif (HTML_SEQUENCES[i][1].test(lineText)) {\n\t\t\tif (lineText.length !== 0) nextLine++;\n\t\t\tbreak;\n\t\t}\n\t}\n\tstate.line = nextLine;\n\tconst token = state.push(\"html_block\", \"\", 0);\n\ttoken.map = [startLine, nextLine];\n\ttoken.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/heading.ts\nfunction heading(state, startLine, endLine, silent) {\n\tlet pos = state.bMarks[startLine] + state.tShift[startLine];\n\tlet max = state.eMarks[startLine];\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tlet ch = state.src.charCodeAt(pos);\n\tif (ch !== 35 || pos >= max) return false;\n\tlet level = 1;\n\tch = state.src.charCodeAt(++pos);\n\twhile (ch === 35 && pos < max && level <= 6) {\n\t\tlevel++;\n\t\tch = state.src.charCodeAt(++pos);\n\t}\n\tif (level > 6 || pos < max && !isSpace(ch)) return false;\n\tif (silent) return true;\n\tmax = state.skipSpacesBack(max, pos);\n\tconst tmp = state.skipCharsBack(max, 35, pos);\n\tif (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) max = tmp;\n\tstate.line = startLine + 1;\n\tconst token_o = state.push(\"heading_open\", `h${level}`, 1);\n\ttoken_o.markup = \"########\".slice(0, level);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = asciiTrim(state.src.slice(pos, max));\n\ttoken_i.map = [startLine, state.line];\n\ttoken_i.children = [];\n\tconst token_c = state.push(\"heading_close\", `h${level}`, -1);\n\ttoken_c.markup = \"########\".slice(0, level);\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/lheading.ts\nfunction lheading(state, startLine, endLine) {\n\tconst terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n\tif (state.sCount[startLine] - state.blkIndent >= 4) return false;\n\tconst oldParentType = state.parentType;\n\tstate.parentType = \"paragraph\";\n\tlet level = 0;\n\tlet marker;\n\tlet nextLine = startLine + 1;\n\tfor (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) continue;\n\t\tif (state.sCount[nextLine] >= state.blkIndent) {\n\t\t\tlet pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\t\t\tconst max = state.eMarks[nextLine];\n\t\t\tif (pos < max) {\n\t\t\t\tmarker = state.src.charCodeAt(pos);\n\t\t\t\tif (marker === 45 || marker === 61) {\n\t\t\t\t\tpos = state.skipChars(pos, marker);\n\t\t\t\t\tpos = state.skipSpaces(pos);\n\t\t\t\t\tif (pos >= max) {\n\t\t\t\t\t\tlevel = marker === 61 ? 1 : 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (state.sCount[nextLine] < 0) continue;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t}\n\tif (!level) {\n\t\tstate.parentType = oldParentType;\n\t\treturn false;\n\t}\n\tconst content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));\n\tstate.line = nextLine + 1;\n\tconst token_o = state.push(\"heading_open\", `h${level}`, 1);\n\ttoken_o.markup = String.fromCharCode(marker);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = content;\n\ttoken_i.map = [startLine, state.line - 1];\n\ttoken_i.children = [];\n\tconst token_c = state.push(\"heading_close\", `h${level}`, -1);\n\ttoken_c.markup = String.fromCharCode(marker);\n\tstate.parentType = oldParentType;\n\treturn true;\n}\n//#endregion\n//#region src/rules_block/paragraph.ts\nfunction paragraph(state, startLine, endLine) {\n\tconst terminatorRules = state.md.block.ruler.getRules(\"paragraph\");\n\tconst oldParentType = state.parentType;\n\tlet nextLine = startLine + 1;\n\tstate.parentType = \"paragraph\";\n\tfor (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n\t\tif (state.sCount[nextLine] - state.blkIndent > 3) continue;\n\t\tif (state.sCount[nextLine] < 0) continue;\n\t\tlet terminate = false;\n\t\tfor (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {\n\t\t\tterminate = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (terminate) break;\n\t}\n\tconst content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));\n\tstate.line = nextLine;\n\tconst token_o = state.push(\"paragraph_open\", \"p\", 1);\n\ttoken_o.map = [startLine, state.line];\n\tconst token_i = state.push(\"inline\", \"\", 0);\n\ttoken_i.content = content;\n\ttoken_i.map = [startLine, state.line];\n\ttoken_i.children = [];\n\tstate.push(\"paragraph_close\", \"p\", -1);\n\tstate.parentType = oldParentType;\n\treturn true;\n}\n//#endregion\n//#region src/parser_block.ts\nvar _rules$1 = [\n\t[\n\t\t\"table\",\n\t\ttable,\n\t\t[\"paragraph\", \"reference\"]\n\t],\n\t[\"code\", code],\n\t[\n\t\t\"fence\",\n\t\tfence,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"blockquote\",\n\t\tblockquote,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"hr\",\n\t\thr,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\",\n\t\t\t\"list\"\n\t\t]\n\t],\n\t[\n\t\t\"list\",\n\t\tlist,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\"reference\", reference],\n\t[\n\t\t\"html_block\",\n\t\thtml_block,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\n\t\t\"heading\",\n\t\theading,\n\t\t[\n\t\t\t\"paragraph\",\n\t\t\t\"reference\",\n\t\t\t\"blockquote\"\n\t\t]\n\t],\n\t[\"lheading\", lheading],\n\t[\"paragraph\", paragraph]\n];\n/**\n* Block-level tokenizer.\n*/\nvar ParserBlock = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of block rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateBlock);\n\t\tfor (let i = 0; i < _rules$1.length; i++) this.ruler.push(_rules$1[i][0], _rules$1[i][1], { alt: (_rules$1[i][2] || []).slice() });\n\t}\n\ttokenize(state, startLine, endLine) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\tlet line = startLine;\n\t\tlet hasEmptyLines = false;\n\t\twhile (line < endLine) {\n\t\t\tstate.line = line = state.skipEmptyLines(line);\n\t\t\tif (line >= endLine) break;\n\t\t\tif (state.sCount[line] < state.blkIndent) break;\n\t\t\tif (state.level >= maxNesting) {\n\t\t\t\tstate.line = endLine;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst prevLine = state.line;\n\t\t\tlet ok = false;\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tok = rules[i](state, line, endLine, false);\n\t\t\t\tif (ok) {\n\t\t\t\t\tif (prevLine >= state.line) throw new Error(\"block rule didn't increment state.line\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ok) throw new Error(\"none of the block rules matched\");\n\t\t\tstate.tight = !hasEmptyLines;\n\t\t\tif (state.isEmpty(state.line - 1)) hasEmptyLines = true;\n\t\t\tline = state.line;\n\t\t\tif (line < endLine && state.isEmpty(line)) {\n\t\t\t\thasEmptyLines = true;\n\t\t\t\tline++;\n\t\t\t\tstate.line = line;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Process input string and push block tokens into `outTokens`\n\t*/\n\tparse(src, md, env, outTokens) {\n\t\tif (!src) return;\n\t\tconst state = new this.State(src, md, env, outTokens);\n\t\tthis.tokenize(state, state.line, state.lineMax);\n\t}\n};\n//#endregion\n//#region src/rules_inline/state_inline.ts\n/** Mutable state passed to inline rules while tokenizing inline content. */\nvar StateInline = class {\n\tconstructor(src, md, env, outTokens) {\n\t\t_defineProperty(this, \"pos\", 0);\n\t\t_defineProperty(this, \"level\", 0);\n\t\t_defineProperty(this, \"pending\", \"\");\n\t\t_defineProperty(this, \"pendingLevel\", 0);\n\t\t_defineProperty(this, \"cache\", {});\n\t\t_defineProperty(this, \"backticks\", {});\n\t\t_defineProperty(this, \"backticksScanned\", false);\n\t\t_defineProperty(this, \"linkLevel\", 0);\n\t\t_defineProperty(this, \"delimiters\", []);\n\t\t_defineProperty(this, \"_prev_delimiters\", []);\n\t\t_defineProperty(this, \"Token\", Token);\n\t\tthis.src = src;\n\t\tthis.env = env;\n\t\tthis.md = md;\n\t\tthis.tokens = outTokens;\n\t\tthis.tokens_meta = Array(outTokens.length);\n\t\tthis.posMax = this.src.length;\n\t}\n\tpushPending() {\n\t\tconst token = new Token(\"text\", \"\", 0);\n\t\ttoken.content = this.pending;\n\t\ttoken.level = this.pendingLevel;\n\t\tthis.tokens.push(token);\n\t\tthis.pending = \"\";\n\t\treturn token;\n\t}\n\tpush(type, tag, nesting) {\n\t\tif (this.pending) this.pushPending();\n\t\tconst token = new Token(type, tag, nesting);\n\t\tlet token_meta = void 0;\n\t\tif (nesting < 0) {\n\t\t\tthis.level--;\n\t\t\tthis.delimiters = this._prev_delimiters.pop();\n\t\t}\n\t\ttoken.level = this.level;\n\t\tif (nesting > 0) {\n\t\t\tthis.level++;\n\t\t\tthis._prev_delimiters.push(this.delimiters);\n\t\t\tthis.delimiters = [];\n\t\t\ttoken_meta = { delimiters: this.delimiters };\n\t\t}\n\t\tthis.pendingLevel = this.level;\n\t\tthis.tokens.push(token);\n\t\tthis.tokens_meta.push(token_meta);\n\t\treturn token;\n\t}\n\tscanDelims(start, canSplitWord) {\n\t\tconst max = this.posMax;\n\t\tconst marker = this.src.charCodeAt(start);\n\t\tlet lastChar;\n\t\tif (start === 0) lastChar = 32;\n\t\telse if (start === 1) {\n\t\t\tlastChar = this.src.charCodeAt(0);\n\t\t\tif ((lastChar & 63488) === 55296) lastChar = 65533;\n\t\t} else {\n\t\t\tlastChar = this.src.charCodeAt(start - 1);\n\t\t\tif ((lastChar & 64512) === 56320) {\n\t\t\t\tconst highSurr = this.src.charCodeAt(start - 2);\n\t\t\t\tlastChar = (highSurr & 64512) === 55296 ? 65536 + (highSurr - 55296 << 10) + (lastChar - 56320) : 65533;\n\t\t\t} else if ((lastChar & 64512) === 55296) lastChar = 65533;\n\t\t}\n\t\tlet pos = start;\n\t\twhile (pos < max && this.src.charCodeAt(pos) === marker) pos++;\n\t\tconst count = pos - start;\n\t\tlet nextChar = pos < max ? this.src.charCodeAt(pos) : 32;\n\t\tif ((nextChar & 64512) === 55296) {\n\t\t\tconst lowSurr = this.src.charCodeAt(pos + 1);\n\t\t\tnextChar = (lowSurr & 64512) === 56320 ? 65536 + (nextChar - 55296 << 10) + (lowSurr - 56320) : 65533;\n\t\t} else if ((nextChar & 64512) === 56320) nextChar = 65533;\n\t\tconst isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);\n\t\tconst isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);\n\t\tconst isLastWhiteSpace = isWhiteSpace(lastChar);\n\t\tconst isNextWhiteSpace = isWhiteSpace(nextChar);\n\t\tconst left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);\n\t\tconst right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);\n\t\treturn {\n\t\t\tcan_open: left_flanking && (canSplitWord || !right_flanking || isLastPunctChar),\n\t\t\tcan_close: right_flanking && (canSplitWord || !left_flanking || isNextPunctChar),\n\t\t\tlength: count\n\t\t};\n\t}\n};\n//#endregion\n//#region src/rules_inline/text.ts\nfunction isTerminatorChar(ch) {\n\tswitch (ch) {\n\t\tcase 10:\n\t\tcase 33:\n\t\tcase 35:\n\t\tcase 36:\n\t\tcase 37:\n\t\tcase 38:\n\t\tcase 42:\n\t\tcase 43:\n\t\tcase 45:\n\t\tcase 58:\n\t\tcase 60:\n\t\tcase 61:\n\t\tcase 62:\n\t\tcase 64:\n\t\tcase 91:\n\t\tcase 92:\n\t\tcase 93:\n\t\tcase 94:\n\t\tcase 95:\n\t\tcase 96:\n\t\tcase 123:\n\t\tcase 125:\n\t\tcase 126: return true;\n\t\tdefault: return false;\n\t}\n}\nfunction text(state, silent) {\n\tlet pos = state.pos;\n\twhile (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) pos++;\n\tif (pos === state.pos) return false;\n\tif (!silent) state.pending += state.src.slice(state.pos, pos);\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/linkify.ts\nfunction isAsciiAlpha(code) {\n\treturn code >= 65 && code <= 90 || code >= 97 && code <= 122;\n}\nfunction isSchemeChar(code) {\n\treturn code >= 65 && code <= 90 || code >= 97 && code <= 122 || code >= 48 && code <= 57 || code === 43 || code === 45 || code === 46;\n}\nfunction linkify(state, silent) {\n\tif (!state.md.options.linkify) return false;\n\tif (state.linkLevel > 0) return false;\n\tconst pos = state.pos;\n\tconst max = state.posMax;\n\tif (pos + 3 > max) return false;\n\tif (state.src.charCodeAt(pos) !== 58) return false;\n\tif (state.src.charCodeAt(pos + 1) !== 47) return false;\n\tif (state.src.charCodeAt(pos + 2) !== 47) return false;\n\tconst protoMin = pos - Math.min(10, state.pending.length, pos);\n\tlet protoStart = pos;\n\twhile (protoStart > protoMin && isSchemeChar(state.src.charCodeAt(protoStart - 1))) protoStart--;\n\tif (protoStart === pos || !isAsciiAlpha(state.src.charCodeAt(protoStart))) return false;\n\tconst protoLength = pos - protoStart;\n\tconst link = state.md.linkify.matchAtStart(state.src.slice(protoStart));\n\tif (!link) return false;\n\tlet url = link.url;\n\tif (url.length <= protoLength) return false;\n\tlet urlEnd = url.length;\n\twhile (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 42) urlEnd--;\n\tif (urlEnd !== url.length) url = url.slice(0, urlEnd);\n\tconst fullUrl = state.md.normalizeLink(url);\n\tif (!state.md.validateLink(fullUrl)) return false;\n\tif (!silent) {\n\t\tstate.pending = state.pending.slice(0, -protoLength);\n\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\ttoken_o.markup = \"linkify\";\n\t\ttoken_o.info = \"auto\";\n\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\ttoken_c.markup = \"linkify\";\n\t\ttoken_c.info = \"auto\";\n\t}\n\tstate.pos += url.length - protoLength;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/newline.ts\nfunction newline(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 10) return false;\n\tconst pmax = state.pending.length - 1;\n\tconst max = state.posMax;\n\tif (!silent) if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {\n\t\tlet ws = pmax - 1;\n\t\twhile (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;\n\t\tstate.pending = state.pending.slice(0, ws);\n\t\tstate.push(\"hardbreak\", \"br\", 0);\n\t} else {\n\t\tstate.pending = state.pending.slice(0, -1);\n\t\tstate.push(\"softbreak\", \"br\", 0);\n\t}\n\telse state.push(\"softbreak\", \"br\", 0);\n\tpos++;\n\twhile (pos < max && isSpace(state.src.charCodeAt(pos))) pos++;\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/escape.ts\nvar ESCAPED = [];\nfor (let i = 0; i < 256; i++) ESCAPED.push(0);\n\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(ch) {\n\tESCAPED[ch.charCodeAt(0)] = 1;\n});\nfunction escape(state, silent) {\n\tlet pos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(pos) !== 92) return false;\n\tpos++;\n\tif (pos >= max) return false;\n\tlet ch1 = state.src.charCodeAt(pos);\n\tif (ch1 === 10) {\n\t\tif (!silent) state.push(\"hardbreak\", \"br\", 0);\n\t\tpos++;\n\t\twhile (pos < max) {\n\t\t\tch1 = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(ch1)) break;\n\t\t\tpos++;\n\t\t}\n\t\tstate.pos = pos;\n\t\treturn true;\n\t}\n\tif (ch1 === 32) {\n\t\tif (!silent) {\n\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\ttoken.content = \"\\\\\";\n\t\t\ttoken.markup = \"\\\\\";\n\t\t\ttoken.info = \"escape\";\n\t\t}\n\t\tstate.pos = pos;\n\t\treturn true;\n\t}\n\tlet escapedStr = state.src[pos];\n\tif (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) {\n\t\tconst ch2 = state.src.charCodeAt(pos + 1);\n\t\tif (ch2 >= 56320 && ch2 <= 57343) {\n\t\t\tescapedStr += state.src[pos + 1];\n\t\t\tpos++;\n\t\t}\n\t}\n\tconst origStr = \"\\\\\" + escapedStr;\n\tif (!silent) {\n\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\tif (ch1 < 256 && ESCAPED[ch1] !== 0) token.content = escapedStr;\n\t\telse token.content = origStr;\n\t\ttoken.markup = origStr;\n\t\ttoken.info = \"escape\";\n\t}\n\tstate.pos = pos + 1;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/backticks.ts\nfunction buildLastRuns(src) {\n\tconst lastRuns = {};\n\tlet pos = 0;\n\twhile ((pos = src.indexOf(\"`\", pos)) !== -1) {\n\t\tconst start = pos;\n\t\twhile (src.charCodeAt(++pos) === 96);\n\t\tlastRuns[pos - start] = start;\n\t}\n\treturn lastRuns;\n}\nfunction backtick(state, silent) {\n\tvar _state$backticks$open;\n\tconst start = state.pos;\n\tif (state.src.charCodeAt(start) !== 96) return false;\n\tconst max = state.posMax;\n\tlet pos = start + 1;\n\twhile (pos < max && state.src.charCodeAt(pos) === 96) pos++;\n\tconst marker = state.src.slice(start, pos);\n\tconst openerLength = marker.length;\n\tif (!state.backticksScanned) {\n\t\tstate.backticks = buildLastRuns(state.src);\n\t\tstate.backticksScanned = true;\n\t}\n\tif (((_state$backticks$open = state.backticks[openerLength]) !== null && _state$backticks$open !== void 0 ? _state$backticks$open : -1) >= pos) {\n\t\tlet matchEnd = pos;\n\t\tlet matchStart;\n\t\twhile ((matchStart = state.src.indexOf(\"`\", matchEnd)) !== -1 && matchStart < max) {\n\t\t\tmatchEnd = matchStart + 1;\n\t\t\twhile (state.src.charCodeAt(matchEnd) === 96) matchEnd++;\n\t\t\tif (matchEnd > max) break;\n\t\t\tif (matchEnd - matchStart === openerLength) {\n\t\t\t\tif (!silent) {\n\t\t\t\t\tconst token = state.push(\"code_inline\", \"code\", 0);\n\t\t\t\t\ttoken.markup = marker;\n\t\t\t\t\tlet content = state.src.slice(pos, matchStart).replace(/\\n/g, \" \");\n\t\t\t\t\tif (content.startsWith(\" \") && content.endsWith(\" \") && /[^ ]/.test(content)) content = content.slice(1, -1);\n\t\t\t\t\ttoken.content = content;\n\t\t\t\t}\n\t\t\t\tstate.pos = matchEnd;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\tif (!silent) state.pending += marker;\n\tstate.pos = pos;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/strikethrough.ts\nfunction strikethrough_tokenize(state, silent) {\n\tconst start = state.pos;\n\tconst marker = state.src.charCodeAt(start);\n\tif (silent) return false;\n\tif (marker !== 126) return false;\n\tconst scanned = state.scanDelims(state.pos, true);\n\tlet len = scanned.length;\n\tconst ch = String.fromCharCode(marker);\n\tif (len < 2) return false;\n\tlet token;\n\tif (len % 2) {\n\t\ttoken = state.push(\"text\", \"\", 0);\n\t\ttoken.content = ch;\n\t\tlen--;\n\t}\n\tfor (let i = 0; i < len; i += 2) {\n\t\ttoken = state.push(\"text\", \"\", 0);\n\t\ttoken.content = ch + ch;\n\t\tstate.delimiters.push({\n\t\t\tmarker,\n\t\t\tlength: 0,\n\t\t\ttoken: state.tokens.length - 1,\n\t\t\tend: -1,\n\t\t\topen: scanned.can_open,\n\t\t\tclose: scanned.can_close\n\t\t});\n\t}\n\tstate.pos += scanned.length;\n\treturn true;\n}\nfunction postProcess$1(state, delimiters) {\n\tlet token;\n\tconst loneMarkers = [];\n\tconst max = delimiters.length;\n\tfor (let i = 0; i < max; i++) {\n\t\tconst startDelim = delimiters[i];\n\t\tif (startDelim.marker !== 126) continue;\n\t\tif (startDelim.end === -1) continue;\n\t\tconst endDelim = delimiters[startDelim.end];\n\t\ttoken = state.tokens[startDelim.token];\n\t\ttoken.type = \"s_open\";\n\t\ttoken.tag = \"s\";\n\t\ttoken.nesting = 1;\n\t\ttoken.markup = \"~~\";\n\t\ttoken.content = \"\";\n\t\ttoken = state.tokens[endDelim.token];\n\t\ttoken.type = \"s_close\";\n\t\ttoken.tag = \"s\";\n\t\ttoken.nesting = -1;\n\t\ttoken.markup = \"~~\";\n\t\ttoken.content = \"\";\n\t\tif (state.tokens[endDelim.token - 1].type === \"text\" && state.tokens[endDelim.token - 1].content === \"~\") loneMarkers.push(endDelim.token - 1);\n\t}\n\twhile (loneMarkers.length) {\n\t\tconst i = loneMarkers.pop();\n\t\tlet j = i + 1;\n\t\twhile (j < state.tokens.length && state.tokens[j].type === \"s_close\") j++;\n\t\tj--;\n\t\tif (i !== j) {\n\t\t\ttoken = state.tokens[j];\n\t\t\tstate.tokens[j] = state.tokens[i];\n\t\t\tstate.tokens[i] = token;\n\t\t}\n\t}\n}\nfunction strikethrough_postProcess(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tpostProcess$1(state, state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) postProcess$1(state, delimiters);\n\t}\n}\nvar strikethrough_default = {\n\ttokenize: strikethrough_tokenize,\n\tpostProcess: strikethrough_postProcess\n};\n//#endregion\n//#region src/rules_inline/emphasis.ts\nfunction emphasis_tokenize(state, silent) {\n\tconst start = state.pos;\n\tconst marker = state.src.charCodeAt(start);\n\tif (silent) return false;\n\tif (marker !== 95 && marker !== 42) return false;\n\tconst scanned = state.scanDelims(state.pos, marker === 42);\n\tfor (let i = 0; i < scanned.length; i++) {\n\t\tconst token = state.push(\"text\", \"\", 0);\n\t\ttoken.content = String.fromCharCode(marker);\n\t\tstate.delimiters.push({\n\t\t\tmarker,\n\t\t\tlength: scanned.length,\n\t\t\ttoken: state.tokens.length - 1,\n\t\t\tend: -1,\n\t\t\topen: scanned.can_open,\n\t\t\tclose: scanned.can_close\n\t\t});\n\t}\n\tstate.pos += scanned.length;\n\treturn true;\n}\nfunction postProcess(state, delimiters) {\n\tconst max = delimiters.length;\n\tfor (let i = max - 1; i >= 0; i--) {\n\t\tconst startDelim = delimiters[i];\n\t\tif (startDelim.marker !== 95 && startDelim.marker !== 42) continue;\n\t\tif (startDelim.end === -1) continue;\n\t\tconst endDelim = delimiters[startDelim.end];\n\t\tconst isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && delimiters[startDelim.end + 1].token === endDelim.token + 1;\n\t\tconst ch = String.fromCharCode(startDelim.marker);\n\t\tconst token_o = state.tokens[startDelim.token];\n\t\ttoken_o.type = isStrong ? \"strong_open\" : \"em_open\";\n\t\ttoken_o.tag = isStrong ? \"strong\" : \"em\";\n\t\ttoken_o.nesting = 1;\n\t\ttoken_o.markup = isStrong ? ch + ch : ch;\n\t\ttoken_o.content = \"\";\n\t\tconst token_c = state.tokens[endDelim.token];\n\t\ttoken_c.type = isStrong ? \"strong_close\" : \"em_close\";\n\t\ttoken_c.tag = isStrong ? \"strong\" : \"em\";\n\t\ttoken_c.nesting = -1;\n\t\ttoken_c.markup = isStrong ? ch + ch : ch;\n\t\ttoken_c.content = \"\";\n\t\tif (isStrong) {\n\t\t\tstate.tokens[delimiters[i - 1].token].content = \"\";\n\t\t\tstate.tokens[delimiters[startDelim.end + 1].token].content = \"\";\n\t\t\ti--;\n\t\t}\n\t}\n}\nfunction emphasis_post_process(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tpostProcess(state, state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) postProcess(state, delimiters);\n\t}\n}\nvar emphasis_default = {\n\ttokenize: emphasis_tokenize,\n\tpostProcess: emphasis_post_process\n};\n//#endregion\n//#region src/rules_inline/link.ts\nfunction link(state, silent) {\n\tlet code, label, res, ref;\n\tlet href = \"\";\n\tlet title = \"\";\n\tlet start = state.pos;\n\tlet parseReference = true;\n\tif (state.src.charCodeAt(state.pos) !== 91) return false;\n\tconst oldPos = state.pos;\n\tconst max = state.posMax;\n\tconst labelStart = state.pos + 1;\n\tconst labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\tif (labelEnd < 0) return false;\n\tlet pos = labelEnd + 1;\n\tif (pos < max && state.src.charCodeAt(pos) === 40) {\n\t\tparseReference = false;\n\t\tpos++;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tif (pos >= max) return false;\n\t\tstart = pos;\n\t\tres = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\t\tif (res.ok) {\n\t\t\thref = state.md.normalizeLink(res.str);\n\t\t\tif (state.md.validateLink(href)) pos = res.pos;\n\t\t\telse href = \"\";\n\t\t\tstart = pos;\n\t\t\tfor (; pos < max; pos++) {\n\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t}\n\t\t\tres = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\t\t\tif (pos < max && start !== pos && res.ok) {\n\t\t\t\ttitle = res.str;\n\t\t\t\tpos = res.pos;\n\t\t\t\tfor (; pos < max; pos++) {\n\t\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pos >= max || state.src.charCodeAt(pos) !== 41) parseReference = true;\n\t\tpos++;\n\t}\n\tif (parseReference) {\n\t\tif (typeof state.env.references === \"undefined\") return false;\n\t\tif (pos < max && state.src.charCodeAt(pos) === 91) {\n\t\t\tstart = pos + 1;\n\t\t\tpos = state.md.helpers.parseLinkLabel(state, pos);\n\t\t\tif (pos >= 0) label = state.src.slice(start, pos++);\n\t\t\telse pos = labelEnd + 1;\n\t\t} else pos = labelEnd + 1;\n\t\tif (!label) label = state.src.slice(labelStart, labelEnd);\n\t\tlabel = normalizeReference(label);\n\t\tref = state.env.references[label];\n\t\tif (!ref) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\thref = ref.href;\n\t\ttitle = ref.title;\n\t}\n\tif (!silent) {\n\t\tstate.pos = labelStart;\n\t\tstate.posMax = labelEnd;\n\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\tconst attrs = [[\"href\", href]];\n\t\ttoken_o.attrs = attrs;\n\t\tif (title) attrs.push([\"title\", title]);\n\t\tif (label) {\n\t\t\tconst meta = Object.create(null);\n\t\t\tmeta.label = label;\n\t\t\ttoken_o.meta = meta;\n\t\t}\n\t\tstate.linkLevel++;\n\t\tstate.md.inline.tokenize(state);\n\t\tstate.linkLevel--;\n\t\tstate.push(\"link_close\", \"a\", -1);\n\t}\n\tstate.pos = pos;\n\tstate.posMax = max;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/image.ts\nfunction image(state, silent) {\n\tlet code, content, label, pos, ref, res, title, start;\n\tlet href = \"\";\n\tconst oldPos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(state.pos) !== 33) return false;\n\tif (state.src.charCodeAt(state.pos + 1) !== 91) return false;\n\tconst labelStart = state.pos + 2;\n\tconst labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\tif (labelEnd < 0) return false;\n\tpos = labelEnd + 1;\n\tif (pos < max && state.src.charCodeAt(pos) === 40) {\n\t\tpos++;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tif (pos >= max) return false;\n\t\tstart = pos;\n\t\tres = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\t\tif (res.ok) {\n\t\t\thref = state.md.normalizeLink(res.str);\n\t\t\tif (state.md.validateLink(href)) pos = res.pos;\n\t\t\telse href = \"\";\n\t\t}\n\t\tstart = pos;\n\t\tfor (; pos < max; pos++) {\n\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t}\n\t\tres = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\t\tif (pos < max && start !== pos && res.ok) {\n\t\t\ttitle = res.str;\n\t\t\tpos = res.pos;\n\t\t\tfor (; pos < max; pos++) {\n\t\t\t\tcode = state.src.charCodeAt(pos);\n\t\t\t\tif (!isSpace(code) && code !== 10) break;\n\t\t\t}\n\t\t} else title = \"\";\n\t\tif (pos >= max || state.src.charCodeAt(pos) !== 41) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\tpos++;\n\t} else {\n\t\tif (typeof state.env.references === \"undefined\") return false;\n\t\tif (pos < max && state.src.charCodeAt(pos) === 91) {\n\t\t\tstart = pos + 1;\n\t\t\tpos = state.md.helpers.parseLinkLabel(state, pos);\n\t\t\tif (pos >= 0) label = state.src.slice(start, pos++);\n\t\t\telse pos = labelEnd + 1;\n\t\t} else pos = labelEnd + 1;\n\t\tif (!label) label = state.src.slice(labelStart, labelEnd);\n\t\tlabel = normalizeReference(label);\n\t\tref = state.env.references[label];\n\t\tif (!ref) {\n\t\t\tstate.pos = oldPos;\n\t\t\treturn false;\n\t\t}\n\t\thref = ref.href;\n\t\ttitle = ref.title;\n\t}\n\tif (!silent) {\n\t\tcontent = state.src.slice(labelStart, labelEnd);\n\t\tconst tokens = [];\n\t\tstate.md.inline.parse(content, state.md, state.env, tokens);\n\t\tconst token = state.push(\"image\", \"img\", 0);\n\t\tconst attrs = [[\"src\", href], [\"alt\", \"\"]];\n\t\ttoken.attrs = attrs;\n\t\ttoken.children = tokens;\n\t\ttoken.content = content;\n\t\tif (title) attrs.push([\"title\", title]);\n\t\tif (label) {\n\t\t\tconst meta = Object.create(null);\n\t\t\tmeta.label = label;\n\t\t\ttoken.meta = meta;\n\t\t}\n\t}\n\tstate.pos = pos;\n\tstate.posMax = max;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/autolink.ts\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/;\nfunction autolink(state, silent) {\n\tlet pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 60) return false;\n\tconst start = state.pos;\n\tconst max = state.posMax;\n\tfor (;;) {\n\t\tif (++pos >= max) return false;\n\t\tconst ch = state.src.charCodeAt(pos);\n\t\tif (ch === 60) return false;\n\t\tif (ch === 62) break;\n\t}\n\tconst url = state.src.slice(start + 1, pos);\n\tif (AUTOLINK_RE.test(url)) {\n\t\tconst fullUrl = state.md.normalizeLink(url);\n\t\tif (!state.md.validateLink(fullUrl)) return false;\n\t\tif (!silent) {\n\t\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\ttoken_o.markup = \"autolink\";\n\t\t\ttoken_o.info = \"auto\";\n\t\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\t\ttoken_c.markup = \"autolink\";\n\t\t\ttoken_c.info = \"auto\";\n\t\t}\n\t\tstate.pos += url.length + 2;\n\t\treturn true;\n\t}\n\tif (EMAIL_RE.test(url)) {\n\t\tconst fullUrl = state.md.normalizeLink(`mailto:${url}`);\n\t\tif (!state.md.validateLink(fullUrl)) return false;\n\t\tif (!silent) {\n\t\t\tconst token_o = state.push(\"link_open\", \"a\", 1);\n\t\t\ttoken_o.attrs = [[\"href\", fullUrl]];\n\t\t\ttoken_o.markup = \"autolink\";\n\t\t\ttoken_o.info = \"auto\";\n\t\t\tconst token_t = state.push(\"text\", \"\", 0);\n\t\t\ttoken_t.content = state.md.normalizeLinkText(url);\n\t\t\tconst token_c = state.push(\"link_close\", \"a\", -1);\n\t\t\ttoken_c.markup = \"autolink\";\n\t\t\ttoken_c.info = \"auto\";\n\t\t}\n\t\tstate.pos += url.length + 2;\n\t\treturn true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/rules_inline/html_inline.ts\nfunction isLinkOpen(str) {\n\treturn /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n\treturn /^<\\/a\\s*>/i.test(str);\n}\nfunction isLetter(ch) {\n\tconst lc = ch | 32;\n\treturn lc >= 97 && lc <= 122;\n}\nfunction html_inline(state, silent) {\n\tif (!state.md.options.html) return false;\n\tconst max = state.posMax;\n\tconst pos = state.pos;\n\tif (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) return false;\n\tconst ch = state.src.charCodeAt(pos + 1);\n\tif (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) return false;\n\tconst match = state.src.slice(pos).match(HTML_TAG_RE);\n\tif (!match) return false;\n\tif (!silent) {\n\t\tconst token = state.push(\"html_inline\", \"\", 0);\n\t\ttoken.content = match[0];\n\t\tif (isLinkOpen(token.content)) state.linkLevel++;\n\t\tif (isLinkClose(token.content)) state.linkLevel--;\n\t}\n\tstate.pos += match[0].length;\n\treturn true;\n}\n//#endregion\n//#region src/rules_inline/entity.ts\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\nfunction entity(state, silent) {\n\tconst pos = state.pos;\n\tconst max = state.posMax;\n\tif (state.src.charCodeAt(pos) !== 38) return false;\n\tif (pos + 1 >= max) return false;\n\tif (state.src.charCodeAt(pos + 1) === 35) {\n\t\tconst match = state.src.slice(pos).match(DIGITAL_RE);\n\t\tif (match) {\n\t\t\tif (!silent) {\n\t\t\t\tconst code = match[1][0].toLowerCase() === \"x\" ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n\t\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\t\ttoken.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(65533);\n\t\t\t\ttoken.markup = match[0];\n\t\t\t\ttoken.info = \"entity\";\n\t\t\t}\n\t\t\tstate.pos += match[0].length;\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\tconst match = state.src.slice(pos).match(NAMED_RE);\n\t\tif (match) {\n\t\t\tconst decoded = decodeHTMLStrict(match[0]);\n\t\t\tif (decoded !== match[0]) {\n\t\t\t\tif (!silent) {\n\t\t\t\t\tconst token = state.push(\"text_special\", \"\", 0);\n\t\t\t\t\ttoken.content = decoded;\n\t\t\t\t\ttoken.markup = match[0];\n\t\t\t\t\ttoken.info = \"entity\";\n\t\t\t\t}\n\t\t\t\tstate.pos += match[0].length;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/rules_inline/balance_pairs.ts\nfunction processDelimiters(delimiters) {\n\tconst openersBottom = {};\n\tconst max = delimiters.length;\n\tif (!max) return;\n\tlet headerIdx = 0;\n\tlet lastTokenIdx = -2;\n\tconst jumps = [];\n\tfor (let closerIdx = 0; closerIdx < max; closerIdx++) {\n\t\tconst closer = delimiters[closerIdx];\n\t\tjumps.push(0);\n\t\tif (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) headerIdx = closerIdx;\n\t\tlastTokenIdx = closer.token;\n\t\tcloser.length = closer.length || 0;\n\t\tif (!closer.close) continue;\n\t\tif (!openersBottom.hasOwnProperty(closer.marker)) openersBottom[closer.marker] = [\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1,\n\t\t\t-1\n\t\t];\n\t\tconst minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];\n\t\tlet openerIdx = headerIdx - jumps[headerIdx] - 1;\n\t\tlet newMinOpenerIdx = openerIdx;\n\t\tfor (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n\t\t\tconst opener = delimiters[openerIdx];\n\t\t\tif (opener.marker !== closer.marker) continue;\n\t\t\tif (opener.open && opener.end < 0) {\n\t\t\t\tlet isOddMatch = false;\n\t\t\t\tif (opener.close || closer.open) {\n\t\t\t\t\tif ((opener.length + closer.length) % 3 === 0) {\n\t\t\t\t\t\tif (opener.length % 3 !== 0 || closer.length % 3 !== 0) isOddMatch = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isOddMatch) {\n\t\t\t\t\tconst lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;\n\t\t\t\t\tjumps[closerIdx] = closerIdx - openerIdx + lastJump;\n\t\t\t\t\tjumps[openerIdx] = lastJump;\n\t\t\t\t\tcloser.open = false;\n\t\t\t\t\topener.end = closerIdx;\n\t\t\t\t\topener.close = false;\n\t\t\t\t\tnewMinOpenerIdx = -1;\n\t\t\t\t\tlastTokenIdx = -2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (newMinOpenerIdx !== -1) openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;\n\t}\n}\nfunction link_pairs(state) {\n\tconst tokens_meta = state.tokens_meta;\n\tconst max = state.tokens_meta.length;\n\tprocessDelimiters(state.delimiters);\n\tfor (let curr = 0; curr < max; curr++) {\n\t\tvar _tokens_meta$curr;\n\t\tconst delimiters = (_tokens_meta$curr = tokens_meta[curr]) === null || _tokens_meta$curr === void 0 ? void 0 : _tokens_meta$curr.delimiters;\n\t\tif (delimiters) processDelimiters(delimiters);\n\t}\n}\n//#endregion\n//#region src/rules_inline/fragments_join.ts\nfunction fragments_join(state) {\n\tlet curr, last;\n\tlet level = 0;\n\tconst tokens = state.tokens;\n\tconst max = state.tokens.length;\n\tfor (curr = last = 0; curr < max; curr++) {\n\t\tif (tokens[curr].nesting < 0) level--;\n\t\ttokens[curr].level = level;\n\t\tif (tokens[curr].nesting > 0) level++;\n\t\tif (tokens[curr].type === \"text\" && curr + 1 < max && tokens[curr + 1].type === \"text\") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n\t\telse {\n\t\t\tif (curr !== last) tokens[last] = tokens[curr];\n\t\t\tlast++;\n\t\t}\n\t}\n\tif (curr !== last) tokens.length = last;\n}\n//#endregion\n//#region src/parser_inline.ts\nvar _rules = [\n\t[\"text\", text],\n\t[\"linkify\", linkify],\n\t[\"newline\", newline],\n\t[\"escape\", escape],\n\t[\"backticks\", backtick],\n\t[\"strikethrough\", strikethrough_default.tokenize],\n\t[\"emphasis\", emphasis_default.tokenize],\n\t[\"link\", link],\n\t[\"image\", image],\n\t[\"autolink\", autolink],\n\t[\"html_inline\", html_inline],\n\t[\"entity\", entity]\n];\nvar _rules2 = [\n\t[\"balance_pairs\", link_pairs],\n\t[\"strikethrough\", strikethrough_default.postProcess],\n\t[\"emphasis\", emphasis_default.postProcess],\n\t[\"fragments_join\", fragments_join]\n];\n/**\n* Tokenizes paragraph content.\n*/\nvar ParserInline = class {\n\tconstructor() {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Keep configuration of inline rules.\n\t\t\t*/\n\t\t\t\"ruler\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* {@link Ruler} instance. Second ruler used for post-processing\n\t\t\t* (e.g. in emphasis-like rules).\n\t\t\t*/\n\t\t\t\"ruler2\",\n\t\t\tnew Ruler()\n\t\t);\n\t\t_defineProperty(this, \"State\", StateInline);\n\t\tfor (let i = 0; i < _rules.length; i++) this.ruler.push(_rules[i][0], _rules[i][1]);\n\t\tfor (let i = 0; i < _rules2.length; i++) this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n\t}\n\tskipToken(state) {\n\t\tconst pos = state.pos;\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\tconst cache = state.cache;\n\t\tif (typeof cache[pos] !== \"undefined\") {\n\t\t\tstate.pos = cache[pos];\n\t\t\treturn;\n\t\t}\n\t\tlet ok = false;\n\t\tif (state.level < maxNesting) for (let i = 0; i < len; i++) {\n\t\t\tstate.level++;\n\t\t\tok = rules[i](state, true);\n\t\t\tstate.level--;\n\t\t\tif (ok) {\n\t\t\t\tif (pos >= state.pos) throw new Error(\"inline rule didn't increment state.pos\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse state.pos = state.posMax;\n\t\tif (!ok) state.pos++;\n\t\tcache[pos] = state.pos;\n\t}\n\ttokenize(state) {\n\t\tconst rules = this.ruler.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tconst end = state.posMax;\n\t\tconst maxNesting = state.md.options.maxNesting;\n\t\twhile (state.pos < end) {\n\t\t\tconst prevPos = state.pos;\n\t\t\tlet ok = false;\n\t\t\tif (state.level < maxNesting) for (let i = 0; i < len; i++) {\n\t\t\t\tok = rules[i](state, false);\n\t\t\t\tif (ok) {\n\t\t\t\t\tif (prevPos >= state.pos) throw new Error(\"inline rule didn't increment state.pos\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ok) {\n\t\t\t\tif (state.pos >= end) break;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstate.pending += state.src[state.pos++];\n\t\t}\n\t\tif (state.pending) state.pushPending();\n\t}\n\t/**\n\t* Process input string and push inline tokens into `outTokens`\n\t*/\n\tparse(str, md, env, outTokens) {\n\t\tconst state = new this.State(str, md, env, outTokens);\n\t\tthis.tokenize(state);\n\t\tconst rules = this.ruler2.getRules(\"\");\n\t\tconst len = rules.length;\n\t\tfor (let i = 0; i < len; i++) rules[i](state);\n\t}\n};\n//#endregion\n//#region src/markdownit.ts\nvar config = {\n\tdefault: {\n\t\toptions: {\n\t\t\thtml: false,\n\t\t\txhtmlOut: false,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 100\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: {},\n\t\t\tblock: {},\n\t\t\tinline: {}\n\t\t}\n\t},\n\tzero: {\n\t\toptions: {\n\t\t\thtml: false,\n\t\t\txhtmlOut: false,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 20\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: { rules: [\n\t\t\t\t\"normalize\",\n\t\t\t\t\"block\",\n\t\t\t\t\"strip_references\",\n\t\t\t\t\"inline\",\n\t\t\t\t\"text_join\"\n\t\t\t] },\n\t\t\tblock: { rules: [\"paragraph\"] },\n\t\t\tinline: {\n\t\t\t\trules: [\"text\"],\n\t\t\t\trules2: [\"balance_pairs\", \"fragments_join\"]\n\t\t\t}\n\t\t}\n\t},\n\tcommonmark: {\n\t\toptions: {\n\t\t\thtml: true,\n\t\t\txhtmlOut: true,\n\t\t\tbreaks: false,\n\t\t\tlangPrefix: \"language-\",\n\t\t\tlinkify: false,\n\t\t\ttypographer: false,\n\t\t\tquotes: \"“”‘’\",\n\t\t\thighlight: null,\n\t\t\tmaxNesting: 20\n\t\t},\n\t\tcomponents: {\n\t\t\tcore: { rules: [\n\t\t\t\t\"normalize\",\n\t\t\t\t\"block\",\n\t\t\t\t\"strip_references\",\n\t\t\t\t\"inline\",\n\t\t\t\t\"text_join\"\n\t\t\t] },\n\t\t\tblock: { rules: [\n\t\t\t\t\"blockquote\",\n\t\t\t\t\"code\",\n\t\t\t\t\"fence\",\n\t\t\t\t\"heading\",\n\t\t\t\t\"hr\",\n\t\t\t\t\"html_block\",\n\t\t\t\t\"lheading\",\n\t\t\t\t\"list\",\n\t\t\t\t\"reference\",\n\t\t\t\t\"paragraph\"\n\t\t\t] },\n\t\t\tinline: {\n\t\t\t\trules: [\n\t\t\t\t\t\"autolink\",\n\t\t\t\t\t\"backticks\",\n\t\t\t\t\t\"emphasis\",\n\t\t\t\t\t\"entity\",\n\t\t\t\t\t\"escape\",\n\t\t\t\t\t\"html_inline\",\n\t\t\t\t\t\"image\",\n\t\t\t\t\t\"link\",\n\t\t\t\t\t\"newline\",\n\t\t\t\t\t\"text\"\n\t\t\t\t],\n\t\t\t\trules2: [\n\t\t\t\t\t\"balance_pairs\",\n\t\t\t\t\t\"emphasis\",\n\t\t\t\t\t\"fragments_join\"\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t}\n};\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\nvar RECODE_HOSTNAME_FOR = [\n\t\"http:\",\n\t\"https:\",\n\t\"mailto:\"\n];\n/**\n* Parses Markdown into tokens and renders them to HTML.\n*\n* @category Main\n*/\nvar MarkdownIt = class {\n\t/**\n\t* Link validation function. CommonMark allows too much in links. By default\n\t* we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n\t* except some embedded image types.\n\t*\n\t* You can change this behaviour:\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* const md = new MarkdownIt()\n\t*\n\t* // enable everything\n\t* md.validateLink = function () { return true; }\n\t* ```\n\t*/\n\tvalidateLink(url) {\n\t\tconst str = url.trim().toLowerCase();\n\t\treturn BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true;\n\t}\n\t/**\n\t* Function used to encode link url to a machine-readable format,\n\t* which includes url-encoding, punycode, etc.\n\t*/\n\tnormalizeLink(url) {\n\t\tconst parsed = mdurl.parse(url, true);\n\t\tif (parsed.hostname) {\n\t\t\tif (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {\n\t\t\t\tparsed.hostname = punycode.toASCII(parsed.hostname);\n\t\t\t} catch (er) {}\n\t\t}\n\t\tif (parsed.auth) parsed.auth = mdurl.encode(parsed.auth);\n\t\tif (parsed.hostname) parsed.hostname = mdurl.encode(parsed.hostname);\n\t\tif (parsed.pathname) parsed.pathname = mdurl.encode(parsed.pathname);\n\t\tif (parsed.search) parsed.search = mdurl.encode(parsed.search);\n\t\tif (parsed.hash) parsed.hash = mdurl.encode(parsed.hash);\n\t\treturn mdurl.format(parsed);\n\t}\n\t/**\n\t* Function used to decode link url to a human-readable format`\n\t*/\n\tnormalizeLinkText(url) {\n\t\tconst parsed = mdurl.parse(url, true);\n\t\tif (parsed.hostname) {\n\t\t\tif (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {\n\t\t\t\tparsed.hostname = punycode.toUnicode(parsed.hostname);\n\t\t\t} catch (er) {}\n\t\t}\n\t\treturn mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + \"%\");\n\t}\n\tconstructor(...args) {\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserInline}. You may need it to add new rules when\n\t\t\t* writing plugins. For simple rules control use {@link MarkdownIt.disable}\n\t\t\t* and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"inline\",\n\t\t\tnew ParserInline()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserBlock}. You may need it to add new rules when\n\t\t\t* writing plugins. For simple rules control use {@link MarkdownIt.disable}\n\t\t\t* and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"block\",\n\t\t\tnew ParserBlock()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link ParserCore} chain executor. You may need it to add new\n\t\t\t* rules when writing plugins. For simple rules control use\n\t\t\t* {@link MarkdownIt.disable} and {@link MarkdownIt.enable}.\n\t\t\t*/\n\t\t\t\"core\",\n\t\t\tnew ParserCore()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Instance of {@link Renderer}. Use it to modify output look. Or to add rendering\n\t\t\t* rules for new token types, generated by plugins.\n\t\t\t*\n\t\t\t* See {@link Renderer} docs and\n\t\t\t* [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts).\n\t\t\t*\n\t\t\t* @example\n\t\t\t* ```javascript\n\t\t\t* import MarkdownIt from 'markdown-it'\n\t\t\t* const md = new MarkdownIt()\n\t\t\t*\n\t\t\t* function myToken(tokens, idx, options, env, self) {\n\t\t\t* //...\n\t\t\t* return result;\n\t\t\t* };\n\t\t\t*\n\t\t\t* md.renderer.rules['my_token'] = myToken\n\t\t\t* ```\n\t\t\t*/\n\t\t\t\"renderer\",\n\t\t\tnew Renderer()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n\t\t\t* Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/src/rules_core/linkify.ts)\n\t\t\t* rule.\n\t\t\t*/\n\t\t\t\"linkify\",\n\t\t\tnew LinkifyIt()\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Assorted utility functions, useful to write plugins. See details\n\t\t\t* [here](https://github.com/markdown-it/markdown-it/blob/master/src/common/utils.ts).\n\t\t\t*/\n\t\t\t\"utils\",\n\t\t\tutils_exports\n\t\t);\n\t\t_defineProperty(\n\t\t\tthis,\n\t\t\t/**\n\t\t\t* Link components parser functions, useful to write plugins. See details\n\t\t\t* [here](https://github.com/markdown-it/markdown-it/blob/master/src/helpers).\n\t\t\t*/\n\t\t\t\"helpers\",\n\t\t\tObject.assign({}, helpers_exports)\n\t\t);\n\t\tconst [presetNameOrOptions, options] = args;\n\t\tif (typeof presetNameOrOptions === \"string\") {\n\t\t\tthis.configure(presetNameOrOptions);\n\t\t\tif (options) this.set(options);\n\t\t} else {\n\t\t\tthis.configure(\"default\");\n\t\t\tthis.set(presetNameOrOptions || {});\n\t\t}\n\t}\n\t/**\n\t* Set parser options (in the same format as in constructor). Probably, you\n\t* will never need it, but you can change options after constructor call.\n\t*\n\t* __Note:__ To achieve the best possible performance, don't modify a\n\t* `markdown-it` instance options on the fly. If you need multiple configurations\n\t* it's best to create multiple instances and initialize each with separate\n\t* config.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t*\n\t* const md = new MarkdownIt()\n\t* .set({ html: true, breaks: true })\n\t* .set({ typographer: true })\n\t* ```\n\t*/\n\tset(options) {\n\t\tObject.assign(this.options, options);\n\t\treturn this;\n\t}\n\t/**\n\t* Batch load of all options and compenent settings. This is internal method,\n\t* and you probably will not need it. But if you will - see available presets\n\t* and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/src/presets)\n\t*\n\t* We strongly recommend to use presets instead of direct config loads. That\n\t* will give better compatibility with next versions.\n\t*/\n\tconfigure(presets) {\n\t\tlet p;\n\t\tif (typeof presets === \"string\") {\n\t\t\tconst presetName = presets;\n\t\t\tp = config[presetName];\n\t\t\tif (!p) throw new Error(`Wrong 'markdown-it' preset \"${presetName}\", check name`);\n\t\t} else p = presets;\n\t\tif (!p) throw new Error(\"Wrong `markdown-it` preset, can't be empty\");\n\t\tif (p.options) this.options = { ...p.options };\n\t\tconst components = p.components;\n\t\tif (components) {\n\t\t\tvar _components$inline;\n\t\t\t[\n\t\t\t\t\"core\",\n\t\t\t\t\"block\",\n\t\t\t\t\"inline\"\n\t\t\t].forEach((name) => {\n\t\t\t\tvar _components$name;\n\t\t\t\tconst rules = (_components$name = components[name]) === null || _components$name === void 0 ? void 0 : _components$name.rules;\n\t\t\t\tif (rules) this[name].ruler.enableOnly(rules);\n\t\t\t});\n\t\t\tconst rules2 = (_components$inline = components.inline) === null || _components$inline === void 0 ? void 0 : _components$inline.rules2;\n\t\t\tif (rules2) this.inline.ruler2.enableOnly(rules2);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Enable list or rules. It will automatically find appropriate components,\n\t* containing rules with given names. If rule not found, and `ignoreInvalid`\n\t* not set - throws exception.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t*\n\t* const md = new MarkdownIt()\n\t* .enable(['sub', 'sup'])\n\t* .disable('smartquotes')\n\t* ```\n\t*/\n\tenable(list, ignoreInvalid = false) {\n\t\tlet result = [];\n\t\tif (!Array.isArray(list)) list = [list];\n\t\t[\n\t\t\t\"core\",\n\t\t\t\"block\",\n\t\t\t\"inline\"\n\t\t].forEach((chain) => {\n\t\t\tresult = result.concat(this[chain].ruler.enable(list, true));\n\t\t});\n\t\tresult = result.concat(this.inline.ruler2.enable(list, true));\n\t\tconst missed = list.filter((name) => result.indexOf(name) < 0);\n\t\tif (missed.length && !ignoreInvalid) throw new Error(`MarkdownIt. Failed to enable unknown rule(s): ${missed}`);\n\t\treturn this;\n\t}\n\t/**\n\t* The same as {@link MarkdownIt.enable}, but turn specified rules off.\n\t*/\n\tdisable(list, ignoreInvalid = false) {\n\t\tlet result = [];\n\t\tif (!Array.isArray(list)) list = [list];\n\t\t[\n\t\t\t\"core\",\n\t\t\t\"block\",\n\t\t\t\"inline\"\n\t\t].forEach((chain) => {\n\t\t\tresult = result.concat(this[chain].ruler.disable(list, true));\n\t\t});\n\t\tresult = result.concat(this.inline.ruler2.disable(list, true));\n\t\tconst missed = list.filter((name) => result.indexOf(name) < 0);\n\t\tif (missed.length && !ignoreInvalid) throw new Error(`MarkdownIt. Failed to disable unknown rule(s): ${missed}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Load specified plugin with given params into current parser instance.\n\t* It's just a sugar to call `plugin(md, params)` with curring.\n\t*\n\t* @example\n\t* ```javascript\n\t* import MarkdownIt from 'markdown-it'\n\t* import iterator from 'markdown-it-for-inline'\n\t*\n\t* const md = new MarkdownIt()\n\t* .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n\t* tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar')\n\t* })\n\t* ```\n\t*/\n\tuse(plugin, ...params) {\n\t\tplugin.apply(plugin, [this, ...params]);\n\t\treturn this;\n\t}\n\t/**\n\t* Parse input string and return list of block tokens (special token type\n\t* \"inline\" will contain list of inline tokens). You should not call this\n\t* method directly, until you write custom renderer (for example, to produce\n\t* AST).\n\t*\n\t* `env` is used to pass data between \"distributed\" rules and return additional\n\t* metadata like reference info, needed for the renderer. It also can be used to\n\t* inject data in specific cases. Usually, you will be ok to pass `{}`,\n\t* and then pass updated object to renderer.\n\t*/\n\tparse(src, env) {\n\t\tif (typeof src !== \"string\") throw new Error(\"Input data should be a String\");\n\t\tconst state = new this.core.State(src, this, env);\n\t\tthis.core.process(state);\n\t\treturn state.tokens;\n\t}\n\t/**\n\t* Render markdown string into html. It does all magic for you :).\n\t*\n\t* `env` can be used to inject additional metadata (`{}` by default).\n\t* But you will not need it with high probability. See also comment\n\t* in {@link MarkdownIt.parse}.\n\t*/\n\trender(src, env = {}) {\n\t\treturn this.renderer.render(this.parse(src, env), this.options, env);\n\t}\n\t/**\n\t* The same as {@link MarkdownIt.parse} but skip all block rules. It returns\n\t* the block tokens list with the single `inline` element, containing parsed\n\t* inline tokens in `children` property. Also updates `env` object.\n\t*/\n\tparseInline(src, env) {\n\t\tconst state = new this.core.State(src, this, env);\n\t\tstate.inlineMode = true;\n\t\tthis.core.process(state);\n\t\treturn state.tokens;\n\t}\n\t/**\n\t* Similar to {@link MarkdownIt.render} but for single paragraph content.\n\t* Result will NOT be wrapped into `<p>` tags.\n\t*/\n\trenderInline(src, env = {}) {\n\t\treturn this.renderer.render(this.parseInline(src, env), this.options, env);\n\t}\n};\n_defineProperty(MarkdownIt, \"Token\", Token);\n_defineProperty(MarkdownIt, \"Ruler\", Ruler);\n_defineProperty(MarkdownIt, \"Renderer\", Renderer);\n_defineProperty(MarkdownIt, \"ParserCore\", ParserCore);\n_defineProperty(MarkdownIt, \"StateCore\", StateCore);\n_defineProperty(MarkdownIt, \"ParserBlock\", ParserBlock);\n_defineProperty(MarkdownIt, \"StateBlock\", StateBlock);\n_defineProperty(MarkdownIt, \"ParserInline\", ParserInline);\n_defineProperty(MarkdownIt, \"StateInline\", StateInline);\n//#endregion\n//#region src/index.ts\n/**\n* Default package export.\n*\n* For backward compatibility, the {@link MarkdownIt} class is wrapped so\n* legacy code can call it without `new`. New code should instantiate it as a\n* regular class with `new`. The compatibility wrapper may be removed in a\n* future release.\n*\n* @category Main\n*/\nvar MarkdownItCallable = callable(MarkdownIt);\n//#endregion\nexport { MarkdownItCallable as default };\n\n//# sourceMappingURL=markdown-it.mjs.map","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","/**\n * Markdown from the document (descriptions, summaries). HTML in the source is escaped, never\n * rendered (`html: false`), and no autolinking (`linkify: false`), per the spec decisions.\n */\nimport MarkdownIt from 'markdown-it';\nimport { html, nothing, type TemplateResult } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\n\nconst md = new MarkdownIt({ html: false, linkify: false, typographer: false, breaks: false });\n\n// Links open in a new tab only when they leave the page; rel keeps the referrer private.\nconst defaultLinkOpen = md.renderer.rules['link_open'] ?? ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options));\nmd.renderer.rules['link_open'] = (tokens, idx, options, env, self) => {\n const href = String(tokens[idx]?.attrGet('href') ?? '');\n if (/^[a-z][a-z0-9+.-]*:/i.test(href) && !href.startsWith('#')) {\n tokens[idx]!.attrSet('target', '_blank');\n tokens[idx]!.attrSet('rel', 'noopener');\n }\n return defaultLinkOpen(tokens, idx, options, env, self);\n};\n\nexport function renderMarkdown(text: string | undefined, className = 'md'): TemplateResult | typeof nothing {\n if (text === undefined || text.trim() === '') return nothing;\n return html`<div class=${className}>${unsafeHTML(md.render(text))}</div>`;\n}\n\n/** Inline markdown (no wrapping paragraph), for summaries and short descriptions. */\nexport function renderInline(text: string | undefined): TemplateResult | typeof nothing {\n if (text === undefined || text.trim() === '') return nothing;\n return html`${unsafeHTML(md.renderInline(text))}`;\n}\n","import { css, html, nothing, type TemplateResult } from 'lit';\nimport type { Document } from '../model/types.js';\nimport { tagChip } from './tag.js';\nimport { renderMarkdown } from './markdown.js';\n\nexport const infoStyles = css`\n .info__desc {\n margin-bottom: 20px;\n padding: 14px 18px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius);\n }\n .info__desc .md p {\n font-size: 15px;\n line-height: 1.65;\n color: var(--_ink-2);\n }\n`;\n\nexport function renderInfo(doc: Document, anchorId: string): TemplateResult {\n const facts: Array<[string, TemplateResult | typeof nothing]> = [];\n // Tags first: they say what the document is about before the administrative facts.\n if (doc.tags.length > 0) {\n facts.push([\n 'Tags',\n html`<ul class=\"chips\">\n ${doc.tags.map((t) => tagChip(t))}\n </ul>`,\n ]);\n }\n if (doc.contact) {\n const c = doc.contact;\n facts.push([\n 'Contact',\n html`${c.name ?? nothing}${c.name && (c.email || c.url) ? ' · ' : nothing}${c.email ? html`<a href=\"mailto:${c.email}\">${c.email}</a>` : nothing}${c.email && c.url ? ' · ' : nothing}${c.url ? html`<a href=${c.url} target=\"_blank\" rel=\"noopener\">${c.url}</a>` : nothing}`,\n ]);\n }\n if (doc.license) {\n facts.push(['License', doc.license.url ? html`<a href=${doc.license.url} target=\"_blank\" rel=\"noopener\">${doc.license.name}</a>` : html`${doc.license.name}`]);\n }\n if (doc.termsOfService) facts.push(['Terms of service', html`<a href=${doc.termsOfService} target=\"_blank\" rel=\"noopener\">${doc.termsOfService}</a>`]);\n if (doc.externalDocs) {\n facts.push(['Documentation', html`<a href=${doc.externalDocs.url} target=\"_blank\" rel=\"noopener\">${doc.externalDocs.description ?? doc.externalDocs.url}</a>`]);\n }\n if (doc.defaultContentType) facts.push(['Default content type', html`<code>${doc.defaultContentType}</code>`]);\n return html`\n <section class=\"info\" aria-labelledby=${anchorId}>\n <h2 class=\"section-title visually-hidden\" id=${anchorId} tabindex=\"-1\">${doc.title}</h2>\n ${doc.description ? html`<div class=\"info__desc\">${renderMarkdown(doc.description)}</div>` : nothing}\n ${facts.length > 0\n ? html`<dl class=\"facts\">${facts.map(([k, v]) => html`<dt>${k}</dt><dd>${v}</dd>`)}</dl>`\n : nothing}\n </section>\n `;\n}\n","/**\n * Shared detail blocks: the Parameters table, binding and security chips and the reply\n * block (spec 4.7 items 5, 7, 8, 9). Servers reuse the chips in their split style.\n */\nimport { css, html, nothing, type TemplateResult } from 'lit';\nimport type { Binding, Parameter, Reply, SecurityRequirement } from '../model/types.js';\nimport { renderInline } from './markdown.js';\n\nexport const detailStyles = css`\n .block {\n margin-top: 28px;\n }\n .block__title {\n margin: 0 0 10px;\n font: 500 11px/1 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_muted);\n }\n .block__title:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 4px;\n }\n .params {\n display: grid;\n grid-template-columns: 160px minmax(0, 1fr);\n gap: 12px 20px;\n margin: 0;\n padding: 14px 16px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius);\n background: var(--_surface);\n }\n .params dt {\n display: grid;\n gap: 2px;\n align-content: start;\n }\n .params__name {\n font: 500 13px/1.5 var(--_font-mono);\n color: var(--_primary-text);\n overflow-wrap: anywhere;\n }\n .params__schema {\n font: 400 11.5px/1.5 var(--_font-mono);\n color: var(--_muted);\n }\n .params dd {\n margin: 0;\n color: var(--_ink-2);\n font-size: 13px;\n }\n .params__facts {\n font: 400 11.5px/1.6 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n }\n @container viewer (max-width: 699px) {\n .params {\n grid-template-columns: 1fr;\n gap: 4px;\n }\n .params dd + dt {\n margin-top: 12px;\n }\n }\n .chip__scope {\n color: var(--_muted);\n }\n .chip__value {\n color: var(--_ink);\n }\n /* Pill style: key and value in one pill; a described one becomes a full-width row. */\n .chip__head {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n min-width: 0;\n }\n .chip--row {\n display: grid;\n gap: 4px;\n width: 100%;\n padding: 10px 14px;\n border-radius: var(--_radius-sm);\n }\n /* Split style (servers): the key in the pill, the value beside it. */\n .binding {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px 10px;\n min-width: 0;\n max-width: 100%;\n }\n .binding__head {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px 10px;\n min-width: 0;\n }\n .binding .chip__value {\n font-size: 13px;\n color: var(--_ink);\n overflow-wrap: anywhere;\n }\n .binding--described {\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n gap: 4px;\n }\n .chip__desc {\n min-width: 0;\n padding-left: 2px;\n font-size: 12.5px;\n line-height: 1.5;\n color: var(--_ink-2);\n overflow-wrap: anywhere;\n }\n .chip pre {\n margin: 0;\n font: 11.5px/1.4 var(--_font-mono);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n max-width: 48ch;\n }\n .sec__id {\n font: 500 12.5px/1.5 var(--_font-mono);\n color: var(--_primary-text);\n text-decoration: none;\n }\n .sec__id:hover,\n .sec__id:focus-visible {\n text-decoration: underline;\n }\n .sec--row {\n justify-items: start;\n gap: 8px;\n }\n .sec__pill {\n background: var(--_bg);\n }\n /* Hierarchy: details indent under the pill, items indent under their group label. */\n .sec__details {\n display: grid;\n gap: 6px;\n width: 100%;\n min-width: 0;\n padding-left: 14px;\n font-size: 12px;\n }\n .sec__details .chip__desc {\n padding-left: 0;\n }\n .sec__list {\n display: grid;\n gap: 4px;\n margin: 0;\n padding: 0;\n list-style: none;\n color: var(--_ink);\n }\n .sec__list li {\n min-width: 0;\n overflow-wrap: anywhere;\n }\n .sec__list .sec__list {\n margin-top: 4px;\n padding-left: 14px;\n }\n .sec__list a {\n color: var(--_primary-text);\n }\n .sec__pre {\n margin: 2px 0 0;\n padding: 8px 10px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n background: var(--_surface);\n font: 11.5px/1.5 var(--_font-mono);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n }\n .sec__group {\n display: grid;\n gap: 4px;\n }\n .sec__label {\n font: 400 12px/1.5 var(--_font-mono);\n color: var(--_muted);\n }\n .sec__group .sec__list,\n .sec__scopes {\n padding-left: 14px;\n }\n .sec__scopes {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n gap: 4px 14px;\n margin: 0;\n }\n .sec__scopes dt {\n color: var(--_ink);\n }\n .sec__scopes dd {\n margin: 0;\n min-width: 0;\n color: var(--_ink-2);\n overflow-wrap: anywhere;\n }\n @container viewer (max-width: 699px) {\n .sec__scopes {\n grid-template-columns: 1fr;\n gap: 2px;\n }\n .sec__scopes dd {\n margin-bottom: 6px;\n }\n }\n .reply {\n padding: 14px 16px;\n border: 1px solid var(--_line);\n border-top: 3px solid var(--_secondary);\n border-radius: var(--_radius);\n background: var(--_surface);\n display: grid;\n gap: 8px;\n }\n .reply__row {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 12px;\n min-width: 0;\n }\n .reply__address {\n font: 400 14px/1.5 var(--_font-mono);\n color: var(--_ink);\n word-break: break-all;\n }\n .reply__messages {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n .reply__desc {\n color: var(--_ink-2);\n font-size: 13px;\n }\n .reply__row--bindings {\n align-items: flex-start;\n }\n .reply__row--bindings .label {\n padding-top: 6px;\n }\n`;\n\nexport function renderParameters(parameters: Parameter[], anchor: string): TemplateResult | typeof nothing {\n if (parameters.length === 0) return nothing;\n return html`<div class=\"block\" id=\"${anchor}--parameters\">\n <h4 class=\"sub-title\" tabindex=\"-1\">Parameters</h4>\n <dl class=\"params\">\n ${parameters.map((p) => {\n const facts: string[] = [];\n if (p.enum && p.enum.length > 0) facts.push(`enum: ${p.enum.join(' · ')}`);\n if (p.default !== undefined) facts.push(`default: ${p.default}`);\n if (p.examples && p.examples.length > 0) facts.push(`examples: ${p.examples.join(' · ')}`);\n if (p.location) facts.push(`location: ${p.location}`);\n return html`<dt>\n <span class=\"params__name\">${p.name}</span>\n ${p.schemaType ? html`<span class=\"params__schema\">schema: ${p.schemaType}</span>` : nothing}\n </dt>\n <dd>\n ${p.description ? html`<div>${renderInline(p.description)}</div>` : nothing}\n ${facts.length > 0 ? html`<div class=\"params__facts\">${facts.join(' · ')}</div>` : nothing}\n </dd>`;\n })}\n </dl>\n </div>`;\n}\n\nfunction isSchemaShaped(value: unknown): value is { type: string; description?: unknown; enum?: unknown } {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && typeof (value as { type?: unknown }).type === 'string';\n}\n\nfunction chipValue(value: unknown): TemplateResult {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return html`<span class=\"chip__value mono\">${String(value)}</span>`;\n // Some bindings (Kafka groupId, clientId) carry a schema instead of a value: show its type.\n if (isSchemaShaped(value)) {\n const facts = [value.type, Array.isArray(value.enum) ? `enum: ${value.enum.map(String).join(' · ')}` : undefined].filter(Boolean).join(' · ');\n return html`<span class=\"chip__value mono\">${facts}</span>`;\n }\n const text = JSON.stringify(value);\n if (text.length <= 40) return html`<span class=\"chip__value mono\">${text}</span>`;\n return html`<pre class=\"chip__value\">${JSON.stringify(value, null, 2)}</pre>`;\n}\n\nexport type BindingStyle = 'pill' | 'split';\n\n/**\n * A binding. `pill`: key and value together in one pill (operations, replies). `split`: the key\n * in the pill and the value beside it (servers, whose values are URLs). A description, when\n * there is one, sits underneath on a full-width row.\n */\nfunction bindingChip(scopeLabel: string, protocol: string, leaf: { key: string; value: unknown }, title: string, style: BindingStyle): TemplateResult {\n const description = isSchemaShaped(leaf.value) && typeof leaf.value.description === 'string' ? leaf.value.description : undefined;\n const key = html`<span class=\"mono\"><span class=\"chip__scope\">${scopeLabel}</span>${leaf.key}</span>`;\n if (style === 'split') {\n return html`<li class=\"binding ${description ? 'binding--described' : ''}\" title=${title}>\n <span class=\"binding__head\"><span class=\"chip\">${key}</span>${chipValue(leaf.value)}</span>\n ${description ? html`<span class=\"chip__desc\">${renderInline(description)}</span>` : nothing}\n </li>`;\n }\n return html`<li class=\"chip ${description ? 'chip--row' : ''}\" title=${title}>\n <span class=\"chip__head\">${key}${chipValue(leaf.value)}</span>\n ${description ? html`<span class=\"chip__desc\">${renderInline(description)}</span>` : nothing}\n </li>`;\n}\n\n/**\n * Nested binding objects become one chip per leaf value with a dotted key\n * (`topicConfiguration.retention.ms 60000000`); scalar arrays are joined; schema-shaped\n * values (Kafka groupId) stay one chip showing the schema's type and description.\n */\nexport function flattenBinding(b: Binding): Array<{ key: string; value: unknown }> {\n const out: Array<{ key: string; value: unknown }> = [];\n const visit = (key: string, value: unknown) => {\n if (Array.isArray(value)) {\n if (value.every((v) => typeof v !== 'object' || v === null)) out.push({ key, value: value.map(String).join(' · ') });\n else out.push({ key, value });\n return;\n }\n if (typeof value === 'object' && value !== null) {\n if (typeof (value as { type?: unknown }).type === 'string') {\n out.push({ key, value });\n return;\n }\n for (const [k, v] of Object.entries(value)) visit(`${key}.${k}`, v);\n return;\n }\n out.push({ key, value });\n };\n visit(b.key, b.value);\n return out;\n}\n\n/** Chips reading `<scope>.<key> <value>`; empty when there are none. */\nexport function renderBindings(bindings: Binding[], title = 'Bindings', style: BindingStyle = 'pill'): TemplateResult | typeof nothing {\n if (bindings.length === 0) return nothing;\n return html`<div class=\"block\">\n <h4 class=\"sub-title\">${title}</h4>\n <ul class=\"chips\">\n ${bindings.flatMap((b) => flattenBinding(b).map((leaf) => bindingChip(`${b.scope}.`, b.protocol, leaf, `${b.protocol} binding`, style)))}\n </ul>\n </div>`;\n}\n\n/**\n * Everything under a security chip's head, as an indented hierarchy: description, scheme facts and\n * the OpenID discovery URL as lines; then a `flows` group with each flow's URLs stacked under its\n * name; then a `scopes` group listing each scope once with its description. Required scopes that\n * no flow declares are listed there too, so the head never needs to repeat them.\n */\nfunction securityDetails(s: SecurityRequirement): TemplateResult | typeof nothing {\n const flows = s.flows ?? [];\n const scopes = new Map<string, string>();\n for (const f of flows) for (const sc of f.scopes) if (!scopes.has(sc.name)) scopes.set(sc.name, sc.description);\n if (scopes.size > 0) for (const name of s.scopes) if (!scopes.has(name)) scopes.set(name, '');\n const facts = s.facts ?? [];\n const extensions = s.extensions ?? [];\n if (!s.description && facts.length === 0 && extensions.length === 0 && !s.openIdConnectUrl && flows.length === 0) return nothing;\n const url = (label: string, href: string | undefined) => (href ? html`<li class=\"mono\"><span class=\"chip__scope\">${label} </span><a href=${href}>${href}</a></li>` : nothing);\n return html`<div class=\"sec__details\">\n ${s.description ? html`<span class=\"chip__desc\">${renderInline(s.description)}</span>` : nothing}\n ${facts.length > 0 || extensions.length > 0 || s.openIdConnectUrl\n ? html`<ul class=\"sec__list\">\n ${facts.map((f) => html`<li class=\"mono\"><span class=\"chip__scope\">${f.label} </span>${f.value}</li>`)}\n ${url('discovery', s.openIdConnectUrl)}\n ${extensions.map((x) => html`<li class=\"mono\"><span class=\"chip__scope\">${x.key.slice(2)} </span>${extensionValue(x.value)}</li>`)}\n </ul>`\n : nothing}\n ${flows.length > 0\n ? html`<div class=\"sec__group\">\n <span class=\"sec__label\">flows</span>\n <ul class=\"sec__list\">\n ${flows.map(\n (f) => html`<li>\n <span class=\"mono\">${f.kind}</span>\n <ul class=\"sec__list\">${url('authorization', f.authorizationUrl)}${url('token', f.tokenUrl)}${url('refresh', f.refreshUrl)}</ul>\n </li>`,\n )}\n </ul>\n </div>`\n : nothing}\n ${scopes.size > 0\n ? html`<div class=\"sec__group\">\n <span class=\"sec__label\">scopes</span>\n <dl class=\"sec__scopes\">${[...scopes].map(([name, description]) => html`<dt class=\"mono\">${name}</dt><dd>${description ? renderInline(description) : nothing}</dd>`)}</dl>\n </div>`\n : nothing}\n </div>`;\n}\n\n/** An extension's value: scalars inline, long strings and objects as a small code block. */\nfunction extensionValue(value: unknown): TemplateResult {\n if (typeof value === 'string') {\n return value.length <= 60 && !value.includes('\\n') ? html`${value}` : html`<pre class=\"sec__pre\">${value}</pre>`;\n }\n if (typeof value === 'number' || typeof value === 'boolean' || value === null) return html`${String(value)}`;\n const text = JSON.stringify(value);\n return text.length <= 60 ? html`${text}` : html`<pre class=\"sec__pre\">${JSON.stringify(value, null, 2)}</pre>`;\n}\n\n/** True when the details list the scopes, so the head does not repeat them. */\nfunction scopesListed(s: SecurityRequirement): boolean {\n return (s.flows ?? []).some((f) => f.scopes.length > 0);\n}\n\n/**\n * A security requirement as a chip. The pill holds the scheme id only; its type sits beside it,\n * and the required scopes too unless the details list them. `pill` (operations) links the id to\n * the Servers section and, when there are details, boxes the whole entry as a full-width row like\n * a described binding; `split` (servers) has nothing to link to and stacks the details underneath\n * without a box.\n */\nfunction securityChip(s: SecurityRequirement, style: BindingStyle, serversHref?: string): TemplateResult {\n const id = serversHref ? html`<a class=\"sec__id\" href=${serversHref}>${s.id}</a>` : html`<span class=\"mono\">${s.id}</span>`;\n // An inline v3 requirement has no key, so the normaliser names it after its type: show it once.\n const type = s.type && s.type !== s.id ? html`<span class=\"chip__value mono\">${s.type}</span>` : nothing;\n const required = s.scopes.length > 0 && !scopesListed(s) ? html`<span class=\"chip__value mono\"><span class=\"chip__scope\">scopes </span>${s.scopes.join(' · ')}</span>` : nothing;\n const details = securityDetails(s);\n const head = html`<span class=\"binding__head\"><span class=\"chip ${style === 'pill' ? 'sec__pill' : ''}\">${id}</span>${type}${required}</span>`;\n if (style === 'split') {\n return html`<li class=\"binding ${details !== nothing ? 'binding--described' : ''}\">${head}${details}</li>`;\n }\n if (details === nothing) return html`<li class=\"binding\">${head}</li>`;\n return html`<li class=\"chip chip--row sec--row\">${head}${details}</li>`;\n}\n\n/** Security requirements as chips (spec 4.7 item 9). `serversHref` links each scheme to the Servers section. */\nexport function renderSecurity(security: SecurityRequirement[], style: BindingStyle = 'pill', serversHref?: string): TemplateResult | typeof nothing {\n if (security.length === 0) return nothing;\n return html`<div class=\"block\">\n <h4 class=\"sub-title\">Security</h4>\n <ul class=\"chips\">\n ${security.map((s) => securityChip(s, style, serversHref))}\n </ul>\n </div>`;\n}\n\nexport function renderReply(reply: Reply, prefix: string): TemplateResult {\n const address = reply.channel ? reply.channel.address : undefined;\n return html`<div class=\"block\">\n <h4 class=\"sub-title\">Reply</h4>\n <div class=\"reply\">\n ${reply.addressLocation\n ? html`<div class=\"reply__row\"><span class=\"label\">Address from</span><span class=\"reply__address\">${reply.addressLocation}</span></div>`\n : nothing}\n ${reply.addressDescription ? html`<div class=\"reply__desc\">${renderInline(reply.addressDescription)}</div>` : nothing}\n ${reply.channel\n ? html`<div class=\"reply__row\">\n <span class=\"label\">Channel</span>\n <span class=\"reply__address\">${address === null ? 'Address not specified' : address}</span>\n ${reply.channel.id !== address ? html`<span class=\"params__schema\">${reply.channel.id}</span>` : nothing}\n </div>`\n : nothing}\n ${reply.messages.length > 0\n ? html`<div class=\"reply__row\">\n <span class=\"label\">Messages</span>\n <ul class=\"reply__messages\">\n ${reply.messages.map((m) => html`<li><a class=\"chip\" href=\"#${prefix}--messages--${m.anchor}\">${m.title ?? m.name ?? m.id}</a></li>`)}\n </ul>\n </div>`\n : nothing}\n ${reply.channel && reply.channel.bindings.length > 0\n ? html`<div class=\"reply__row reply__row--bindings\">\n <span class=\"label\">Bindings</span>\n <ul class=\"chips\">\n ${reply.channel.bindings.flatMap((b) => flattenBinding(b).map((leaf) => bindingChip('reply.channel.', b.protocol, leaf, `${b.protocol} binding of the reply channel`, 'pill')))}\n </ul>\n </div>`\n : nothing}\n </div>\n </div>`;\n}\n","/**\n * Generated examples (ROADMAP amendment 9). When a message has no authored example, one is\n * built from the schema so readers get a taste of real traffic. Values come from, in order:\n * the field's own examples or default, const, the first enum value, the format, numeric bounds,\n * then field-name heuristics. Never a bare \"string\" or 0 when a hint exists.\n */\nimport type { Schema, SchemaNode } from '../model/types.js';\n\nexport function generateExample(schema: Schema | undefined): unknown {\n if (!schema || schema.kind !== 'node') return undefined;\n return fromNode(schema, 0);\n}\n\nconst MAX_DEPTH = 8;\n\nfunction fromNode(node: SchemaNode, depth: number): unknown {\n if (node.examples && node.examples.length > 0) return node.examples[0];\n if (node.default !== undefined) return node.default;\n if (node.const !== undefined) return node.const;\n if (node.enum && node.enum.length > 0) return node.enum[0];\n if (node.circularRef !== undefined || depth > MAX_DEPTH) return null;\n\n const item = node.children.length === 1 && node.children[0]!.name === '[]' ? node.children[0] : undefined;\n const type = pickType(node);\n\n if (node.composition && node.composition.variants.length > 0 && node.children.length === 0 && !item) {\n return fromNode(node.composition.variants[0]!.node, depth);\n }\n if (type === 'array' || item) {\n if (item) return [fromNode(item, depth + 1)];\n const tuple = node.children.filter((c) => /^\\[\\d+\\]$/.test(c.name));\n return tuple.map((c) => fromNode(c, depth + 1));\n }\n if (type === 'object' || node.children.length > 0) {\n const out: Record<string, unknown> = {};\n for (const child of node.children) {\n if (child.name === '*') out['key'] = fromNode(child, depth + 1);\n else if (child.name.startsWith('/')) out['x-example'] = fromNode(child, depth + 1);\n else out[child.name] = fromNode(child, depth + 1);\n }\n if (node.composition && node.composition.variants.length > 0) {\n Object.assign(out, asObject(fromNode(node.composition.variants[0]!.node, depth)));\n }\n return out;\n }\n switch (type) {\n case 'string':\n return stringFor(node);\n case 'integer':\n return integerFor(node);\n case 'number':\n return numberFor(node);\n case 'boolean':\n return true;\n case 'null':\n return null;\n default:\n return stringFor(node);\n }\n}\n\nfunction asObject(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value) ? (value as Record<string, unknown>) : {};\n}\n\nfunction pickType(node: SchemaNode): string | undefined {\n return node.types.find((t) => t !== 'null') ?? node.types[0];\n}\n\nfunction bound(node: SchemaNode, key: string): number | undefined {\n const c = node.constraints.find((x) => x.key === key);\n return typeof c?.value === 'number' ? c.value : undefined;\n}\n\nfunction integerFor(node: SchemaNode): number {\n const min = bound(node, 'minimum') ?? (bound(node, 'exclusiveMinimum') !== undefined ? bound(node, 'exclusiveMinimum')! + 1 : undefined);\n const max = bound(node, 'maximum') ?? (bound(node, 'exclusiveMaximum') !== undefined ? bound(node, 'exclusiveMaximum')! - 1 : undefined);\n const name = node.name.toLowerCase();\n let value = /quantity|count|qty|items|size/.test(name) ? 2 : /age/.test(name) ? 34 : /year/.test(name) ? 2026 : /port/.test(name) ? 8080 : 42;\n if (min !== undefined && value < min) value = min;\n if (max !== undefined && value > max) value = max;\n return value;\n}\n\nfunction numberFor(node: SchemaNode): number {\n const min = bound(node, 'minimum') ?? bound(node, 'exclusiveMinimum');\n const max = bound(node, 'maximum') ?? bound(node, 'exclusiveMaximum');\n const name = node.name.toLowerCase();\n let value = /price|amount|total|cost|fee/.test(name) ? 12.5 : /lat/.test(name) ? 52.37 : /lon|lng/.test(name) ? 4.89 : /percent|ratio|rate/.test(name) ? 0.25 : 3.14;\n if (min !== undefined && value <= min) value = min + 1;\n if (max !== undefined && value >= max) value = max - 1;\n return value;\n}\n\nfunction stringFor(node: SchemaNode): string {\n const format = node.format?.toLowerCase();\n const name = node.name;\n const lower = name.toLowerCase();\n let value: string | undefined;\n switch (format) {\n case 'uuid':\n value = '3fa85f64-5717-4562-b3fc-2c963f66afa6';\n break;\n case 'email':\n case 'idn-email':\n value = 'ada@example.com';\n break;\n case 'date-time':\n value = '2026-09-26T10:15:00Z';\n break;\n case 'date':\n value = '2026-09-26';\n break;\n case 'time':\n value = '10:15:00Z';\n break;\n case 'duration':\n value = 'PT15M';\n break;\n case 'uri':\n case 'url':\n case 'iri':\n case 'uri-reference':\n value = 'https://example.com/resource/42';\n break;\n case 'hostname':\n value = 'broker.example.com';\n break;\n case 'ipv4':\n value = '192.0.2.10';\n break;\n case 'ipv6':\n value = '2001:db8::10';\n break;\n case 'byte':\n value = 'aGVsbG8=';\n break;\n case 'binary':\n value = '<binary>';\n break;\n case 'password':\n value = '••••••••';\n break;\n }\n if (value === undefined) {\n if (/^id$|Id$|_id$|Ref$|Key$/.test(name)) {\n const stem = name.replace(/Id$|_id$|Ref$|Key$/, '').replace(/^id$/, 'item') || 'item';\n value = `${stem.slice(0, 3).toLowerCase()}_01HZ3`;\n } else if (/email/.test(lower)) value = 'ada@example.com';\n else if (/^(url|uri|link|href)$|url$|uri$/i.test(name)) value = 'https://example.com/resource/42';\n else if (/phone|tel/.test(lower)) value = '+31 20 555 0100';\n else if (/currency/.test(lower)) value = 'EUR';\n else if (/country/.test(lower)) value = 'NL';\n else if (/lang|locale/.test(lower)) value = 'en-GB';\n else if (/^(name|displayname|fullname)$/.test(lower)) value = 'Ada Lovelace';\n else if (/firstname|givenname/.test(lower)) value = 'Ada';\n else if (/lastname|surname|familyname/.test(lower)) value = 'Lovelace';\n else if (/username|login|handle/.test(lower)) value = 'ada';\n else if (/status|state/.test(lower)) value = 'active';\n else if (/type|kind|category/.test(lower)) value = 'standard';\n else if (/sku|code/.test(lower)) value = 'MUG-TEAL-01';\n else if (/description|text|message|comment|body|note|reason/.test(lower)) value = 'Example text';\n else if (/title|subject/.test(lower)) value = 'Example title';\n else if (/at$|time|date/.test(lower)) value = '2026-09-26T10:15:00Z';\n else if (/token|secret|key/.test(lower)) value = 'tok_9f8e7d6c';\n else if (/version/.test(lower)) value = '1.0.0';\n else if (/city/.test(lower)) value = 'Amsterdam';\n else if (/street|address/.test(lower)) value = 'Herengracht 1';\n else if (/zip|postal/.test(lower)) value = '1015 BA';\n else if (/color|colour/.test(lower)) value = 'teal';\n else value = name && !/^[[*/]/.test(name) ? `${name}-example` : 'example';\n }\n const min = bound(node, 'minLength');\n const max = bound(node, 'maxLength');\n if (min !== undefined && value.length < min) value = value.padEnd(min, 'x');\n if (max !== undefined && value.length > max) value = value.slice(0, max);\n return value;\n}\n","/**\n * The example panel (spec 4.7): a dark column beside the operation content with the message\n * name, Payload and Headers tabs, a Copy button that announces through a live region,\n * line-numbered highlighted JSON, a select when there are several examples, and the correlation\n * id location. When `messageExamples` is off the panel starts collapsed to a \"Show example\" bar.\n * Messages without an authored example get one generated from the schema (amendment 9).\n */\nimport { css, html, nothing, type TemplateResult } from 'lit';\nimport type { Message, MessageExample } from '../model/types.js';\nimport { generateExample } from '../util/example.js';\n\nexport const exampleStyles = css`\n .ex {\n min-width: 0;\n background: var(--_ex-bg);\n color: var(--_ex-ink);\n border-radius: var(--_radius);\n overflow: hidden;\n font-size: 13px;\n --_ex-key: color-mix(in srgb, var(--_primary) 50%, white);\n --_ex-string: color-mix(in srgb, var(--_secondary) 45%, white);\n }\n .ex__head {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 10px;\n padding: 18px 18px 0;\n }\n .ex__label {\n font: 500 11px/1 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_ex-muted);\n }\n .ex__name {\n font: 600 15px/1.4 var(--_font-heading);\n color: var(--_ex-heading);\n }\n .ex__generated {\n height: 20px;\n padding: 0 7px;\n border: 1px solid var(--_ex-lines);\n color: var(--_ex-muted);\n font-size: 11px;\n }\n .ex__bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px 10px;\n padding: 14px 18px 0;\n }\n .ex__tabs {\n display: inline-flex;\n gap: 4px;\n }\n .ex__tab {\n min-height: 34px;\n padding: 0 10px;\n border: 0;\n border-bottom: 2px solid transparent;\n background: none;\n color: var(--_ex-muted);\n font: 500 13px/1 var(--_font-body);\n cursor: pointer;\n }\n .ex__tab[aria-selected='true'] {\n color: var(--_ex-heading);\n border-bottom-color: var(--_ex-heading);\n }\n .ex__tab:focus-visible,\n .ex__copy:focus-visible,\n .ex__select:focus-visible {\n outline: 2px solid var(--_ex-key);\n outline-offset: 1px;\n }\n .ex__spacer {\n flex: 1;\n }\n .ex__select-wrap {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--_ex-muted);\n font-size: 12px;\n }\n .ex__select {\n min-height: 30px;\n padding: 0 8px;\n border: 1px solid var(--_ex-lines);\n border-radius: var(--_radius-sm);\n background: rgb(255 255 255 / 0.06);\n color: var(--_ex-ink);\n font: 12.5px/1 var(--_font-body);\n }\n .ex__copy {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-height: 30px;\n padding: 0 10px;\n border: 1px solid var(--_ex-lines);\n border-radius: var(--_radius-sm);\n background: none;\n color: var(--_ex-ink);\n font: 500 12.5px/1 var(--_font-body);\n cursor: pointer;\n }\n .ex__copy:hover {\n background: rgb(255 255 255 / 0.06);\n }\n .ex__copy svg {\n width: 14px;\n height: 14px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.8;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n .ex__code:focus-visible {\n outline: 2px solid var(--_ex-key);\n outline-offset: -2px;\n }\n .ex__code {\n margin: 8px 0 0;\n padding: 14px 18px 18px 0;\n overflow: auto;\n font: 12.5px/1.7 var(--_font-mono);\n border-top: 1px solid var(--_ex-divider);\n counter-reset: line;\n }\n .ex__line {\n display: grid;\n grid-template-columns: 44px minmax(0, 1fr);\n }\n .ex__text {\n white-space: pre;\n }\n .ex__line::before {\n counter-increment: line;\n content: counter(line);\n text-align: right;\n padding-right: 14px;\n color: var(--_ex-lines);\n user-select: none;\n }\n .tk-key {\n color: var(--_ex-key);\n }\n .tk-str {\n color: var(--_ex-string);\n }\n .tk-num,\n .tk-bool,\n .tk-null {\n color: var(--_ex-number);\n }\n .tk-punct {\n color: var(--_ex-muted);\n }\n .ex__foot {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n justify-content: space-between;\n gap: 6px 16px;\n padding: 12px 18px 14px;\n border-top: 1px solid var(--_ex-divider);\n font: 12px/1.5 var(--_font-body);\n color: var(--_ex-muted);\n }\n .ex__foot code {\n text-align: right;\n overflow-wrap: anywhere;\n }\n .ex__foot code {\n font: 12px/1.5 var(--_font-mono);\n }\n .ex__foot code {\n color: var(--_ex-ink);\n }\n .ex__live {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n }\n .ex__show {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-height: 36px;\n padding: 0 12px;\n border: 1px dashed var(--_line-2);\n border-radius: var(--_radius-sm);\n background: var(--_surface);\n color: var(--_ink-2);\n font: 500 12.5px/1 var(--_font-body);\n cursor: pointer;\n }\n .ex__show:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 2px;\n }\n`;\n\nexport interface ExamplePanelState {\n tab: 'payload' | 'headers';\n index: number;\n open: boolean | undefined;\n copied: 'copied' | 'failed' | undefined;\n}\n\nexport interface ExampleContext {\n state: ExamplePanelState;\n /** Whether panels start open (`messageExamples` option). */\n defaultOpen: boolean;\n onChange: () => void;\n}\n\nexport interface ResolvedExample {\n label: string;\n payload: unknown;\n headers: unknown;\n generated: boolean;\n}\n\n/** Authored examples, or one generated from the schemas. */\nexport function examplesFor(message: Message): ResolvedExample[] {\n if (message.examples.length > 0) {\n return message.examples.map((ex: MessageExample, i) => ({\n label: ex.name ?? `Example ${i + 1}`,\n payload: ex.payload,\n headers: ex.headers,\n generated: false,\n }));\n }\n const payload = generateExample(message.payload);\n const headers = generateExample(message.headers);\n if (payload === undefined && headers === undefined) return [];\n return [{ label: 'Generated', payload, headers, generated: true }];\n}\n\nexport function isPanelOpen(ctx: ExampleContext): boolean {\n return ctx.state.open ?? ctx.defaultOpen;\n}\n\nconst copyIcon = html`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" /><path d=\"M5 15V6a2 2 0 0 1 2-2h9\" /></svg>`;\n\n/** The slim bar shown in the content column while the panel is collapsed. */\nexport function renderShowExample(ctx: ExampleContext): TemplateResult {\n return html`<button\n class=\"ex__show\"\n type=\"button\"\n aria-expanded=\"false\"\n @click=${() => {\n ctx.state.open = true;\n ctx.onChange();\n }}\n >\n ${copyIcon} Show example\n </button>`;\n}\n\nexport function renderExamplePanel(message: Message, examples: ResolvedExample[], ctx: ExampleContext, panelId: string): TemplateResult | typeof nothing {\n if (examples.length === 0) return nothing;\n const state = ctx.state;\n const index = Math.min(state.index, examples.length - 1);\n const example = examples[index]!;\n const hasHeaders = example.headers !== undefined;\n const tab = hasHeaders && state.tab === 'headers' ? 'headers' : 'payload';\n const value = tab === 'headers' ? example.headers : example.payload;\n const text = value === undefined ? '' : JSON.stringify(value, null, 2);\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n state.copied = 'copied';\n } catch {\n state.copied = 'failed';\n }\n ctx.onChange();\n setTimeout(() => {\n state.copied = undefined;\n ctx.onChange();\n }, 2000);\n };\n return html`<aside class=\"ex\" aria-label=\"Example for ${message.title ?? message.name ?? message.id}\">\n <div class=\"ex__head\">\n <span class=\"ex__label\">Example</span>\n <span class=\"ex__name\">${message.title ?? message.name ?? message.id}</span>\n ${example.generated ? html`<span class=\"pill ex__generated\" title=\"No example in the document; this one was generated from the schema\">Generated from schema</span>` : nothing}\n </div>\n <div class=\"ex__bar\">\n ${hasHeaders\n ? html`<div class=\"ex__tabs\" role=\"tablist\" aria-label=\"Example parts\">\n ${(['payload', 'headers'] as const).map(\n (t) => html`<button\n class=\"ex__tab\"\n type=\"button\"\n role=\"tab\"\n id=\"${panelId}--tab-${t}\"\n aria-selected=${tab === t ? 'true' : 'false'}\n aria-controls=\"${panelId}--code\"\n tabindex=${tab === t ? '0' : '-1'}\n @click=${() => {\n state.tab = t;\n ctx.onChange();\n }}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n state.tab = state.tab === 'payload' ? 'headers' : 'payload';\n ctx.onChange();\n e.preventDefault();\n }\n }}\n >\n ${t === 'payload' ? 'Payload' : 'Headers'}\n </button>`,\n )}\n </div>`\n : nothing}\n ${examples.length > 1\n ? html`<label class=\"ex__select-wrap\"\n ><span>Example</span>\n <select\n class=\"ex__select\"\n @change=${(e: Event) => {\n state.index = Number((e.target as HTMLSelectElement).value);\n ctx.onChange();\n }}\n >\n ${examples.map((ex, i) => html`<option value=${i} ?selected=${i === index}>${ex.label}</option>`)}\n </select></label\n >`\n : nothing}\n <span class=\"ex__spacer\"></span>\n <button class=\"ex__copy\" type=\"button\" @click=${copy}>${copyIcon} ${state.copied === 'copied' ? 'Copied' : state.copied === 'failed' ? 'Copy failed' : 'Copy'}</button>\n <span class=\"ex__live\" aria-live=\"polite\">${state.copied === 'copied' ? 'Copied to clipboard' : state.copied === 'failed' ? 'Copying failed; select the text to copy it' : ''}</span>\n </div>\n <pre class=\"ex__code\" id=\"${panelId}--code\" tabindex=\"0\" role=${hasHeaders ? 'tabpanel' : nothing} aria-labelledby=${hasHeaders ? `${panelId}--tab-${tab}` : nothing} aria-label=${hasHeaders ? nothing : 'Example, scrollable'}><code>${highlight(text)}</code></pre>\n <div class=\"ex__foot\">\n ${message.correlationId ? html`<span>Correlation ID</span><code>${message.correlationId.location}</code>` : nothing}\n <span>Message ID</span><code>${message.id}</code>\n </div>\n </aside>`;\n}\n\n/** Tokenise pretty-printed JSON into spans, one grid row per line for the line numbers. */\nexport function highlight(text: string): TemplateResult[] {\n return text.split('\\n').map((line) => html`<span class=\"ex__line\"><span class=\"ex__text\">${tokens(line)}</span></span>`);\n}\n\nconst TOKEN = /(\"(?:[^\"\\\\]|\\\\.)*\")(\\s*:)?|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(true|false)|(null)|([{}[\\],:])|(\\s+)/g;\n\nfunction tokens(line: string): Array<TemplateResult | string> {\n const out: Array<TemplateResult | string> = [];\n let last = 0;\n for (const m of line.matchAll(TOKEN)) {\n if (m.index! > last) out.push(line.slice(last, m.index));\n last = m.index! + m[0].length;\n if (m[1] !== undefined) {\n if (m[2] !== undefined) out.push(html`<span class=\"tk-key\">${m[1]}</span><span class=\"tk-punct\">${m[2]}</span>`);\n else out.push(html`<span class=\"tk-str\">${m[1]}</span>`);\n } else if (m[3] !== undefined) out.push(html`<span class=\"tk-num\">${m[3]}</span>`);\n else if (m[4] !== undefined) out.push(html`<span class=\"tk-bool\">${m[4]}</span>`);\n else if (m[5] !== undefined) out.push(html`<span class=\"tk-null\">${m[5]}</span>`);\n else if (m[6] !== undefined) out.push(html`<span class=\"tk-punct\">${m[6]}</span>`);\n else out.push(m[0]);\n }\n if (last < line.length) out.push(line.slice(last));\n return out;\n}\n","/** Short labels for schema formats, for the \"contentType · format\" line (design: \"JSON Schema\"). */\nexport function schemaFormatLabel(schemaFormat: string): string {\n const f = schemaFormat.toLowerCase();\n if (f.includes('avro')) return 'Avro';\n if (f.includes('protobuf')) return 'Protobuf';\n if (f.includes('raml')) return 'RAML';\n if (f.includes('openapi')) return 'OpenAPI Schema';\n if (f.includes('vnd.aai.asyncapi') || f.includes('json-schema') || f.includes('schema+json') || f.includes('schema+yaml')) return 'JSON Schema';\n return schemaFormat;\n}\n","/**\n * The payload tree (spec 4.8): stacked rows, guide lines per level, expand/collapse with real\n * buttons, a toolbar with counts, oneOf/anyOf as a segmented control, constraints under the\n * description, and leaves for circular references. RawSchema renders as a labelled code block.\n *\n * Display rules that differ from the model: the \"[]\" item node of an array is not a row. A\n * primitive item folds into the parent's type (\"array of string\"); an object item's children\n * are shown as the array's children, and their path already reads \"items[]\".\n */\nimport { css, html, nothing, type TemplateResult } from 'lit';\nimport { slug } from '../model/context.js';\nimport type { Schema, SchemaNode } from '../model/types.js';\nimport { renderInline } from './markdown.js';\n\nexport const treeStyles = css`\n .tree {\n border: 1px solid var(--_line);\n border-radius: var(--_radius);\n background: var(--_surface);\n overflow: hidden;\n }\n .tree__bar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 14px;\n padding: 8px 12px 8px 16px;\n background: var(--_head);\n border-bottom: 1px solid var(--_line);\n font-size: 12.5px;\n color: var(--_muted);\n }\n .tree__bar .spacer {\n flex: 1;\n }\n .tree__bar button {\n min-height: 32px;\n padding: 0 10px;\n border: 0;\n background: none;\n color: var(--_primary-text);\n font: 500 12.5px/1 var(--_font-body);\n cursor: pointer;\n border-radius: var(--_radius-sm);\n }\n .tree__bar button:hover {\n background: var(--_tint);\n }\n .tree__bar button:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: -2px;\n }\n .tree__body {\n padding: 0;\n }\n .tree__empty {\n margin: 0;\n padding: 6px 4px;\n color: var(--_muted);\n font-size: 13px;\n }\n .tree__leaf {\n display: grid;\n gap: 4px;\n padding: 10px 12px;\n }\n\n ul.branch {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n ul.branch ul.branch {\n margin-left: 28px;\n padding-left: 22px;\n border-left: 1px solid var(--_line-2);\n }\n li.row + li.row,\n li.row > div > ul.branch > li.row:first-child {\n border-top: 1px solid var(--_line);\n }\n ul.branch[data-depth='4'] ul.branch,\n ul.branch[data-depth='5'] ul.branch,\n ul.branch[data-depth='6'] ul.branch,\n ul.branch[data-depth='7'] ul.branch,\n ul.branch[data-depth='8'] ul.branch,\n ul.branch[data-depth='9'] ul.branch {\n padding-left: 12px;\n }\n .row {\n display: grid;\n grid-template-columns: 26px minmax(0, 1fr);\n column-gap: 10px;\n padding: 11px 16px 11px 12px;\n }\n .row > div {\n min-width: 0;\n }\n .row__toggle {\n width: 26px;\n height: 26px;\n padding: 0;\n border: 1px solid var(--_line);\n border-radius: 6px;\n background: var(--_surface);\n color: var(--_ink-2);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .row__toggle:hover {\n border-color: var(--_line-2);\n }\n .row__toggle:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 1px;\n }\n .row__toggle svg {\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n transition: transform 120ms;\n }\n .row__toggle[aria-expanded='true'] svg {\n transform: rotate(90deg);\n }\n .row__spacer {\n width: 26px;\n }\n .row__line1 {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 4px 10px;\n min-height: 26px;\n }\n .row__name {\n font: 600 13px/1.5 var(--_font-mono);\n color: var(--_ink);\n overflow-wrap: anywhere;\n }\n .row__type {\n font: 400 12px/1.5 var(--_font-mono);\n color: var(--_muted);\n }\n .row__hidden {\n height: 20px;\n padding: 0 7px;\n font-size: 11px;\n }\n .row__req {\n margin-left: auto;\n font: 600 11.5px/1.5 var(--_font-body);\n color: var(--_secondary-text);\n }\n .row__req--optional {\n font-weight: 400;\n color: var(--_muted);\n }\n .row__path {\n font: 400 11.5px/1.5 var(--_font-mono);\n color: var(--_muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .row__desc {\n font-size: 13px;\n line-height: 1.5;\n color: var(--_ink-2);\n }\n .row__facts {\n font: 400 11.5px/1.6 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n }\n .row__circular {\n font-size: 13px;\n color: var(--_ink-2);\n }\n .variants {\n display: inline-flex;\n flex-wrap: wrap;\n gap: 2px;\n margin: 4px 0 6px;\n padding: 3px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n background: var(--_head);\n }\n .variants button {\n min-height: 28px;\n padding: 0 10px;\n border: 0;\n border-radius: calc(var(--_radius-sm) - 2px);\n background: none;\n color: var(--_ink-2);\n font: 500 12.5px/1 var(--_font-body);\n cursor: pointer;\n }\n .variants button[aria-pressed='true'] {\n background: var(--_surface);\n color: var(--_ink);\n box-shadow: 0 1px 2px rgb(0 0 0 / 0.08);\n }\n .variants button:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: -2px;\n }\n /* At the top of a tree the switcher hangs off the toolbar as a full-width strip. */\n .tree__body > .variants {\n display: flex;\n margin: 0;\n padding: 6px 12px;\n border: 0;\n border-bottom: 1px solid var(--_line);\n border-radius: 0;\n background: var(--_head);\n }\n .tree__body > .row__desc {\n padding: 10px 16px 4px;\n }\n .variants__label {\n align-self: center;\n padding: 0 6px 0 8px;\n font: 500 11px/1 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_muted);\n }\n .raw {\n border: 1px solid var(--_line);\n border-radius: var(--_radius);\n background: var(--_surface);\n overflow: hidden;\n }\n .raw__bar {\n padding: 8px 16px;\n background: var(--_head);\n border-bottom: 1px solid var(--_line);\n font: 400 12.5px/1.4 var(--_font-mono);\n color: var(--_muted);\n }\n .raw pre {\n margin: 0;\n padding: 12px 16px;\n overflow: auto;\n font: 12.5px/1.5 var(--_font-mono);\n color: var(--_ink);\n }\n @container viewer (max-width: 699px) {\n ul.branch ul.branch {\n margin-left: 14px;\n padding-left: 12px;\n }\n .row {\n padding: 10px 10px 10px 6px;\n }\n ul.branch[data-depth='4'] ul.branch,\n ul.branch[data-depth='5'] ul.branch,\n ul.branch[data-depth='6'] ul.branch,\n ul.branch[data-depth='7'] ul.branch,\n ul.branch[data-depth='8'] ul.branch,\n ul.branch[data-depth='9'] ul.branch {\n padding-left: 8px;\n }\n .tree__body {\n padding: 6px 8px 8px;\n }\n }\n`;\n\n/** Expansion and variant selection for one tree, keyed by node path. */\nexport class TreeState {\n readonly #expanded = new Set<string>();\n readonly #collapsed = new Set<string>();\n readonly #variant = new Map<string, number>();\n #all: boolean | undefined;\n\n constructor(readonly onChange: () => void) {}\n\n isExpanded(key: string, depth: number): boolean {\n if (this.#collapsed.has(key)) return false;\n if (this.#expanded.has(key)) return true;\n if (this.#all !== undefined) return this.#all;\n return depth <= 2; // levels 1 to 3 open by default\n }\n\n /** True once \"Expand all\" was used and nothing has been collapsed since. */\n get allExpanded(): boolean {\n return this.#all === true && this.#collapsed.size === 0;\n }\n\n toggle(key: string, depth: number): void {\n const next = !this.isExpanded(key, depth);\n this.#expanded.delete(key);\n this.#collapsed.delete(key);\n (next ? this.#expanded : this.#collapsed).add(key);\n this.onChange();\n }\n\n setAll(expanded: boolean): void {\n this.#all = expanded;\n this.#expanded.clear();\n this.#collapsed.clear();\n this.onChange();\n }\n\n variant(key: string): number {\n return this.#variant.get(key) ?? 0;\n }\n\n selectVariant(key: string, index: number): void {\n this.#variant.set(key, index);\n this.onChange();\n }\n}\n\nexport interface TreeOptions {\n /** Toolbar text at the left; the field count when absent. */\n label?: string;\n /** Anchor prefix of the viewer, for links to the Schemas section. */\n prefix: string;\n /** Unique within the viewer, e.g. the message anchor plus \"payload\". */\n key: string;\n state: TreeState;\n}\n\n/** The rows shown for a node: object properties, or the array item's children (folded). */\nfunction displayChildren(node: SchemaNode): SchemaNode[] {\n const item = arrayItem(node);\n if (item) return displayChildren(item);\n return node.children;\n}\n\nfunction arrayItem(node: SchemaNode): SchemaNode | undefined {\n const only = node.children.length === 1 ? node.children[0] : undefined;\n return only && only.name === '[]' ? only : undefined;\n}\n\n/** The composition to show for a node, following folded array items. */\nfunction displayComposition(node: SchemaNode): SchemaNode['composition'] {\n const item = arrayItem(node);\n return item ? displayComposition(item) : node.composition;\n}\n\nexport function typeLabel(node: SchemaNode): string {\n const item = arrayItem(node);\n if (item && node.types.length <= 1) {\n const inner = typeLabel(item);\n return inner ? `array<${inner}>` : 'array';\n }\n let label = node.types.join(' | ');\n if (node.format) label = `${label || 'string'} · ${node.format}`;\n if (node.enum && node.enum.length > 0) label = `${label || 'string'} · enum`;\n if (!label && node.composition) label = node.composition.kind;\n if (!label && node.circularRef) label = 'object';\n return label;\n}\n\nfunction countNodes(node: SchemaNode): { fields: number; levels: number } {\n let fields = 0;\n let levels = 0;\n const walk = (n: SchemaNode, depth: number) => {\n for (const c of displayChildren(n)) {\n fields++;\n levels = Math.max(levels, depth);\n walk(c, depth + 1);\n }\n const comp = displayComposition(n);\n if (comp) for (const v of comp.variants) walk(v.node, depth);\n };\n walk(node, 1);\n return { fields, levels };\n}\n\nfunction countDescendants(node: SchemaNode): number {\n let n = 0;\n for (const c of displayChildren(node)) n += 1 + countDescendants(c);\n return n;\n}\n\nfunction factsLine(node: SchemaNode): string | undefined {\n const parts: string[] = [];\n if (node.enum) parts.push(`enum: ${node.enum.map(short).join(' · ')}`);\n if (node.const !== undefined) parts.push(`const: ${short(node.const)}`);\n if (node.default !== undefined) parts.push(`default: ${short(node.default)}`);\n if (node.examples && node.examples.length > 0) parts.push(`examples: ${node.examples.map(short).join(' · ')}`);\n for (const c of node.constraints) parts.push(`${c.key}: ${short(c.value)}`);\n if (node.deprecated) parts.push('deprecated');\n if (node.readOnly) parts.push('read-only');\n if (node.writeOnly) parts.push('write-only');\n return parts.length > 0 ? parts.join(' · ') : undefined;\n}\n\nfunction short(value: unknown): string {\n if (typeof value === 'string') return value;\n const text = JSON.stringify(value);\n return text.length > 60 ? `${text.slice(0, 57)}…` : text;\n}\n\nconst chevron = html`<svg viewBox=\"0 0 12 12\" aria-hidden=\"true\"><path d=\"M4 2.5 7.5 6 4 9.5\" /></svg>`;\n\nexport function renderSchema(schema: Schema | undefined, options: TreeOptions): TemplateResult | typeof nothing {\n if (!schema) return nothing;\n if (schema.kind === 'raw') {\n return html`<div class=\"raw\">\n <div class=\"raw__bar\">${schema.schemaFormat}</div>\n <pre tabindex=\"0\" aria-label=\"Schema source, scrollable\"><code>${schema.source}</code></pre>\n </div>`;\n }\n const { fields } = countNodes(schema);\n const rows = displayChildren(schema);\n const composition = displayComposition(schema);\n const allOpen = options.state.allExpanded;\n // A root that is itself a value (a string schema with a format, say) has no fields to count:\n // the bar names its type instead, and the body describes the value.\n const leaf = rows.length === 0 && !composition;\n const bar = options.label ?? (leaf ? typeLabel(schema) || 'no fields' : `${fields} field${fields === 1 ? '' : 's'}`);\n return html`<div class=\"tree\">\n <div class=\"tree__bar\">\n <span class=${options.label || leaf ? 'mono' : ''}>${bar}</span>\n <span class=\"spacer\"></span>\n ${leaf ? nothing : html`<button type=\"button\" @click=${() => options.state.setAll(!allOpen)}>${allOpen ? 'Collapse all' : 'Expand all'}</button>`}\n </div>\n <div class=\"tree__body\">\n ${composition ? renderVariants(schema, composition, options, options.key, 1) : nothing}\n ${rows.length > 0 ? renderBranch(rows, options, options.key, 1) : composition ? nothing : renderLeaf(schema)}\n </div>\n </div>`;\n}\n\n/**\n * A schema with no fields: its description and facts (examples, constraints), or, when it has\n * neither, a sentence saying what the value is.\n */\nfunction renderLeaf(node: SchemaNode): TemplateResult {\n const facts = factsLine(node);\n if (!node.description && !facts) {\n return html`<p class=\"tree__empty\">${typeLabel(node) ? `A single value of type ${typeLabel(node)}.` : 'No fields are described.'}</p>`;\n }\n return html`<div class=\"tree__leaf\">\n ${node.description ? html`<div class=\"row__desc\">${renderInline(node.description)}</div>` : nothing}\n ${facts ? html`<div class=\"row__facts\">${facts}</div>` : nothing}\n </div>`;\n}\n\nfunction renderBranch(nodes: SchemaNode[], options: TreeOptions, parentKey: string, depth: number): TemplateResult {\n return html`<ul class=\"branch\" data-depth=${Math.min(depth, 9)}>\n ${nodes.map((node) => renderRow(node, options, `${parentKey}/${node.name}`, depth))}\n </ul>`;\n}\n\nfunction renderRow(node: SchemaNode, options: TreeOptions, key: string, depth: number): TemplateResult {\n const children = displayChildren(node);\n const composition = displayComposition(node);\n const expandable = children.length > 0 || composition !== undefined;\n const expanded = expandable && options.state.isExpanded(key, depth);\n const hidden = expandable && !expanded ? countDescendants(node) : 0;\n const facts = factsLine(node);\n const circularHref = node.circularRef ? `#${options.prefix}--schemas--${slug(node.circularRef)}` : undefined;\n return html`<li class=\"row ${depth === 1 ? 'row--top' : ''}\">\n ${expandable\n ? html`<button\n class=\"row__toggle\"\n type=\"button\"\n aria-expanded=${expanded ? 'true' : 'false'}\n aria-label=\"${expanded ? 'Collapse' : 'Expand'} ${node.name}\"\n @click=${() => options.state.toggle(key, depth)}\n >\n ${chevron}\n </button>`\n : html`<span class=\"row__spacer\"></span>`}\n <div>\n <div class=\"row__line1\">\n <span class=\"row__name\">${node.name}</span>\n <span class=\"row__type\">${typeLabel(node)}</span>\n ${hidden > 0 ? html`<span class=\"pill pill--outline row__hidden\">${hidden} hidden</span>` : nothing}\n ${node.required ? html`<span class=\"row__req\">required</span>` : html`<span class=\"row__req row__req--optional\">optional</span>`}\n </div>\n ${depth >= 4 && node.path.length > 0 ? html`<div class=\"row__path\">${node.path.join(' › ')}</div>` : nothing}\n ${node.circularRef\n ? html`<div class=\"row__circular\">Circular reference to <a href=${circularHref}>${node.circularRef}</a></div>`\n : nothing}\n ${node.description ? html`<div class=\"row__desc\">${renderInline(node.description)}</div>` : nothing}\n ${facts ? html`<div class=\"row__facts\">${facts}</div>` : nothing}\n ${expanded && composition ? renderVariants(node, composition, options, key, depth + 1) : nothing}\n ${expanded && children.length > 0 ? renderBranch(children, options, key, depth + 1) : nothing}\n </div>\n </li>`;\n}\n\nfunction renderVariants(\n owner: SchemaNode,\n composition: NonNullable<SchemaNode['composition']>,\n options: TreeOptions,\n key: string,\n depth: number,\n): TemplateResult {\n const selected = Math.min(options.state.variant(key), composition.variants.length - 1);\n const variant = composition.variants[selected]!;\n const rows = displayChildren(variant.node);\n return html`\n <div class=\"variants\" role=\"group\" aria-label=\"${composition.kind} variants of ${owner.name || 'the payload'}\">\n <span class=\"variants__label\">${composition.kind}</span>\n ${composition.variants.map(\n (v, i) => html`<button type=\"button\" aria-pressed=${i === selected ? 'true' : 'false'} @click=${() => options.state.selectVariant(key, i)}>${v.title}</button>`,\n )}\n </div>\n ${rows.length > 0\n ? html`${variant.node.description ? html`<div class=\"row__desc\">${renderInline(variant.node.description)}</div>` : nothing}\n ${renderBranch(rows, options, `${key}/${composition.kind}${selected}`, depth)}`\n : renderLeaf(variant.node)}\n `;\n}\n","import { css, html, nothing, type TemplateResult } from 'lit';\nimport type { Document, Message, Operation } from '../model/types.js';\nimport { tagChip } from './tag.js';\nimport { renderInline, renderMarkdown } from './markdown.js';\nimport { renderBindings, renderParameters, renderReply, renderSecurity } from './details.js';\nimport { examplesFor, isPanelOpen, renderExamplePanel, renderShowExample, type ExampleContext } from './example.js';\nimport { slug } from '../model/context.js';\nimport { schemaFormatLabel } from './format.js';\nimport { renderSchema, type TreeState } from './tree.js';\n\nexport interface OperationContext {\n prefix: string;\n tree: (key: string) => TreeState;\n example: (key: string) => ExampleContext;\n /** Selected message index per operation anchor. */\n messageIndex: (anchor: string) => number;\n selectMessage: (anchor: string, index: number) => void;\n}\n\nexport const operationStyles = css`\n .ops__list {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 40px;\n }\n .op {\n min-width: 0;\n scroll-margin-top: 16px;\n }\n .op + .op {\n padding-top: 40px;\n border-top: 1px solid var(--_line);\n }\n\n .op__content {\n min-width: 0;\n }\n .op__content > .block:first-child {\n margin-top: 0;\n }\n .op__example {\n margin-top: 24px;\n }\n .sub-title .ex__show {\n flex-basis: 100%;\n justify-content: center;\n }\n .op__desc .md p {\n font-size: 15px;\n line-height: 1.6;\n }\n /* Wide main column: the example panel is a full-height dark column at the right edge of the\n block, level with the breadcrumb (design reference). The split depends on the main\n column's width, so beside a sidebar the panel stacks until both have room. */\n @container main (min-width: 1100px) {\n .op--split {\n display: grid;\n grid-template-columns: minmax(0, 1fr) var(--_example-width);\n column-gap: 36px;\n margin-right: calc(-1 * var(--_pad-x));\n }\n .op--split .op__intro,\n .op--split .op__content {\n grid-column: 1;\n }\n .op--split .op__example {\n grid-column: 2;\n grid-row: 1 / span 2;\n margin-top: 0;\n background: var(--_ex-bg);\n border-radius: var(--_radius) 0 0 var(--_radius);\n }\n .op--split .op__example .ex {\n position: sticky;\n top: 0;\n border-radius: 0;\n }\n }\n /* Badge/id, CHANNEL/address and Available on/servers share two columns so the values line up. */\n .op__facts {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n align-items: center;\n gap: 8px 12px;\n margin-bottom: 16px;\n }\n .op__facts .label {\n font-size: 13px;\n letter-spacing: 0.06em;\n }\n .op__facts .badge {\n justify-self: start;\n }\n .badge {\n display: inline-flex;\n align-items: center;\n height: 26px;\n padding: 0 10px;\n border-radius: var(--_radius-sm);\n font: 500 12px/1 var(--_font-mono);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n white-space: nowrap;\n }\n .badge--send {\n background: var(--_send);\n color: var(--_badge-ink-send);\n }\n .badge--receive {\n background: var(--_receive);\n color: var(--_badge-ink-receive);\n }\n .op__tags {\n margin-bottom: 14px;\n }\n .op__tags .chip {\n min-height: 24px;\n padding: 2px 9px;\n font-size: 12px;\n }\n .op__hint {\n font: 400 12.5px/1.4 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n }\n .op__heading {\n margin: 0 0 12px;\n font: 600 28px/1.2 var(--_font-heading);\n letter-spacing: -0.01em;\n color: var(--_ink);\n overflow-wrap: anywhere;\n }\n .op__id {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 10px;\n font: 400 13px/1.5 var(--_font-mono);\n color: var(--_ink);\n overflow-wrap: anywhere;\n }\n @container viewer (max-width: 699px) {\n .op__heading {\n font-size: 22px;\n }\n }\n .op__heading:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 4px;\n border-radius: 2px;\n }\n .op__servers {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 10px;\n }\n .op__server {\n font: 400 13px/1.5 var(--_font-mono);\n color: var(--_primary-text);\n }\n .op__address {\n font: 400 13px/1.5 var(--_font-mono);\n color: var(--_ink);\n word-break: break-all;\n }\n .op__address--none {\n color: var(--_muted);\n font-style: italic;\n }\n .param {\n color: var(--_primary-text);\n }\n .op__summary {\n margin: 0 0 12px;\n }\n .op__desc {\n max-width: 72ch;\n }\n .msg {\n margin-top: 32px;\n }\n .msg__head {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 6px 12px;\n margin-bottom: 10px;\n }\n .msg__name {\n font: 600 15px/1.4 var(--_font-heading);\n color: var(--_ink);\n }\n .msg__format {\n margin-left: auto;\n font: 400 12px/1.5 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n }\n .msg__tabs {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 14px;\n padding-bottom: 0;\n border-bottom: 1px solid var(--_line);\n }\n .msg__tab {\n min-height: 40px;\n padding: 0 12px;\n border: 0;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n background: none;\n color: var(--_ink-2);\n font: 500 13px/1 var(--_font-body);\n cursor: pointer;\n }\n .msg__tab[aria-selected='true'] {\n color: var(--_primary-text);\n border-bottom-color: var(--_primary);\n }\n .msg__tab:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: -2px;\n border-radius: var(--_radius-sm);\n }\n .msg__part {\n margin-top: 16px;\n }\n .msg__desc {\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--_ink-2);\n }\n @container viewer (max-width: 699px) {\n .op + .op {\n padding-top: 28px;\n }\n .ops__list {\n gap: 28px;\n }\n }\n`;\n\nexport function operationAnchor(prefix: string, op: Operation): string {\n return `${prefix}--operations--${op.anchor}`;\n}\n\n/** The address; `{parameters}` are set off in the accent colour, without links. */\nexport function renderAddress(op: Operation): TemplateResult {\n const address = op.channel.address;\n if (address === null) return html`<span class=\"op__address op__address--none\">Address not specified</span>`;\n const parts = address.split(/(\\{[^}]+\\})/g).filter((s) => s !== '');\n return html`<span class=\"op__address\">${parts.map((part) => (/^\\{[^}]+\\}$/.test(part) ? html`<span class=\"param\">${part}</span>` : part))}</span>`;\n}\n\nfunction renderMessage(\n op: Operation,\n message: Message,\n anchor: string,\n index: number,\n ctx: OperationContext,\n showExample: TemplateResult | typeof nothing,\n): TemplateResult {\n const treeKey = `${anchor}--m${index}`;\n return html`<div class=\"msg\">\n ${op.messages.length > 1\n ? html`<div class=\"msg__tabs\" role=\"tablist\" aria-label=\"Messages of ${op.heading}\">\n ${op.messages.map(\n (m, i) => html`<button\n class=\"msg__tab\"\n type=\"button\"\n role=\"tab\"\n id=\"${anchor}--tab-${i}\"\n aria-selected=${i === index ? 'true' : 'false'}\n aria-controls=\"${anchor}--message\"\n tabindex=${i === index ? '0' : '-1'}\n @click=${() => ctx.selectMessage(anchor, i)}\n @keydown=${(e: KeyboardEvent) => {\n const delta = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0;\n if (delta === 0) return;\n const next = (index + delta + op.messages.length) % op.messages.length;\n ctx.selectMessage(anchor, next);\n e.preventDefault();\n (e.currentTarget as HTMLElement).parentElement?.querySelectorAll<HTMLElement>('.msg__tab')[next]?.focus();\n }}\n >\n ${m.id}\n </button>`,\n )}\n </div>`\n : nothing}\n <div id=\"${anchor}--message\" role=${op.messages.length > 1 ? 'tabpanel' : nothing} aria-labelledby=${op.messages.length > 1 ? `${anchor}--tab-${index}` : nothing}>\n <h4 class=\"sub-title\">\n Message <span class=\"mono\">${message.title ?? message.name ?? message.id}</span>\n <span class=\"sub-title__meta\">${message.contentType} · ${schemaFormatLabel(message.schemaFormat)}</span>\n ${showExample}\n </h4>\n ${message.summary ? html`<div class=\"msg__desc\">${renderInline(message.summary)}</div>` : nothing}\n ${message.description ? html`<div class=\"msg__desc\">${renderMarkdown(message.description)}</div>` : nothing}\n ${message.payload\n ? renderSchema(message.payload, { label: message.id, prefix: ctx.prefix, key: `${treeKey}--payload`, state: ctx.tree(`${treeKey}--payload`) })\n : html`<p class=\"tree__empty\">This message has no payload schema.</p>`}\n ${message.headers\n ? html`<div class=\"msg__part\">\n <h4 class=\"sub-title\">Headers</h4>\n ${renderSchema(message.headers, { prefix: ctx.prefix, key: `${treeKey}--headers`, state: ctx.tree(`${treeKey}--headers`) })}\n </div>`\n : nothing}\n </div>\n </div>`;\n}\n\nexport function renderOperation(op: Operation, ctx: OperationContext): TemplateResult {\n const prefix = ctx.prefix;\n const anchor = operationAnchor(prefix, op);\n const direction = op.action === 'send' ? 'send' : 'receive';\n const index = Math.min(ctx.messageIndex(anchor), Math.max(op.messages.length - 1, 0));\n const message = op.messages[index];\n const examples = message ? examplesFor(message) : [];\n const exampleCtx = ctx.example(`${anchor}--example--m${index}`);\n const open = examples.length > 0 && isPanelOpen(exampleCtx);\n const bindings = [...op.channel.bindings, ...op.bindings, ...(message?.bindings ?? [])];\n return html`\n <article class=\"op ${open ? 'op--split' : ''}\" id=${anchor} aria-labelledby=\"${anchor}--heading\">\n <div class=\"op__intro\">\n ${op.tags.length > 0\n ? html`<ul class=\"chips op__tags\" aria-label=\"Tags\">\n ${op.tags.map((t) => tagChip(t))}\n </ul>`\n : nothing}\n <h3 class=\"op__heading\" id=\"${anchor}--heading\" tabindex=\"-1\">${op.heading}</h3>\n <div class=\"op__facts\">\n <span class=\"badge badge--${direction}\">${op.badgeLabel}</span>\n <span class=\"op__id\">\n ${op.id}\n ${op.locationHint !== op.id && op.locationHint !== op.heading ? html`<span class=\"op__hint\">${op.locationHint}</span>` : nothing}\n </span>\n <span class=\"label\">Channel</span>\n ${renderAddress(op)}\n ${op.channel.servers.length > 0\n ? html`<span class=\"label\">Available on</span>\n <span class=\"op__servers\">\n ${op.channel.servers.map((id) => html`<a class=\"op__server\" href=\"#${prefix}--servers--${slug(id)}\">${id}</a>`)}\n </span>`\n : nothing}\n </div>\n ${op.summary ? html`<p class=\"summary op__summary\">${renderInline(op.summary)}</p>` : nothing}\n ${op.description ? html`<div class=\"op__desc\">${renderMarkdown(op.description)}</div>` : nothing}\n ${renderParameters(op.channel.parameters, anchor)}\n </div>\n <div class=\"op__content\">\n ${message\n ? renderMessage(\n op,\n message,\n anchor,\n index,\n ctx,\n examples.length > 0 && !open ? renderShowExample(exampleCtx) : nothing,\n )\n : html`<p class=\"tree__empty block\">This operation has no messages.</p>`}\n ${renderBindings(bindings)}\n ${renderSecurity(op.security, 'pill', `#${prefix}--servers`)}\n ${op.reply ? renderReply(op.reply, prefix) : nothing}\n </div>\n ${open && message ? html`<div class=\"op__example\">${renderExamplePanel(message, examples, exampleCtx, `${anchor}--example`)}</div>` : nothing}\n </article>\n `;\n}\n\nexport function renderOperations(doc: Document, ctx: OperationContext): TemplateResult | typeof nothing {\n if (doc.operations.length === 0) return nothing;\n const id = `${ctx.prefix}--operations`;\n return html`\n <section class=\"ops\" aria-labelledby=${id}>\n <h2 class=\"section-title\" id=${id} tabindex=\"-1\">Operations</h2>\n <div class=\"ops__list\">${doc.operations.map((op) => renderOperation(op, ctx))}</div>\n </section>\n `;\n}\n","/**\n * The sidebar's data (ROADMAP amendment 11): one generic list of nav items built once per\n * render, which the sidebar renders and the search filters. Sections and operations today;\n * messages and schemas can join later without touching search, grouping or highlighting.\n */\nimport type { Document, Operation, OperationAction } from '../model/types.js';\nimport type { GroupOperations, GroupServers } from '../options.js';\n\nexport type NavKind = 'section' | 'server' | 'operation' | 'message' | 'schema';\n\nexport interface NavItem {\n kind: NavKind;\n label: string;\n /** Full page anchor id (element id, section, item). */\n anchor: string;\n /** Group heading; items without one are listed flat. */\n group?: string;\n badge?: { label: string; action: OperationAction };\n /** Second line, e.g. the channel address. */\n sub?: string;\n /** Right-hand count, for the Messages and Schemas links. */\n count?: number;\n /** Lower-cased strings the search matches against. */\n search: string[];\n /** Operations: the tag names they carry, for the Tags facet. */\n tags?: string[];\n}\n\n/** One entry of the sidebar's Tags block: a tag and how many operations carry it. */\nexport interface TagFacet {\n name: string;\n description?: string;\n count: number;\n}\n\nexport interface NavOptions {\n info: boolean;\n servers: boolean;\n messages: boolean;\n schemas: boolean;\n showServers: GroupServers;\n showOperations: GroupOperations;\n}\n\nexport function buildNavItems(doc: Document, operations: Operation[], prefix: string, options: NavOptions): NavItem[] {\n const items: NavItem[] = [];\n if (options.info) items.push({ kind: 'section', label: doc.title, anchor: `${prefix}--info`, search: [] });\n if (options.servers && doc.servers.length > 0) {\n items.push({ kind: 'section', label: 'Servers', anchor: `${prefix}--servers`, count: doc.servers.length, search: [] });\n if (options.showServers !== 'byDefault') {\n for (const s of doc.servers) {\n const group = groupFor(s.tags.map((t) => t.name), doc, options.showServers === 'bySpecTags');\n items.push({ kind: 'server', label: s.id, anchor: `${prefix}--servers--${s.anchor}`, group, sub: s.hostDisplay, search: [] });\n }\n }\n }\n for (const op of operations) {\n // Flat mode lists every operation under one \"Operations\" heading; tag modes group by tag.\n const group = options.showOperations === 'byDefault' ? 'Operations' : groupFor(op.tags.map((t) => t.name), doc, options.showOperations === 'bySpecTags');\n const tags = op.tags.map((t) => t.name);\n items.push({\n kind: 'operation',\n label: op.heading,\n anchor: `${prefix}--operations--${op.anchor}`,\n group,\n badge: { label: op.badgeLabel, action: op.action },\n tags,\n // The channel address and tags are searchable but not shown: the list stays a list of operations.\n search: [op.heading, op.id, op.channel.address ?? '', ...op.messages.flatMap((m) => [m.name ?? '', m.title ?? '']), ...tags]\n .filter((s) => s !== '')\n .map((s) => s.toLowerCase()),\n });\n }\n if (options.messages && doc.messages.length > 0) {\n items.push({ kind: 'section', label: 'Messages', anchor: `${prefix}--messages`, group: 'Components', count: doc.messages.length, search: [] });\n }\n if (options.schemas && doc.schemas.length > 0) {\n items.push({ kind: 'section', label: 'Schemas', anchor: `${prefix}--schemas`, group: 'Components', count: doc.schemas.length, search: [] });\n }\n return items;\n}\n\n/** bySpecTags: the first document-level tag the item carries, in document order; else its own first tag. */\nfunction groupFor(tags: string[], doc: Document, bySpec: boolean): string {\n if (bySpec) {\n const declared = doc.tags.map((t) => t.name);\n const hit = declared.find((d) => tags.includes(d));\n return hit ?? 'Other';\n }\n return tags[0] ?? 'Other';\n}\n\n/**\n * The Tags block's entries (amendment 17): the document's declared tags first, in their order,\n * then any other tag an operation carries, in first-seen order. Tags no operation carries are\n * left out, since selecting them could only empty the list.\n */\nexport function tagFacets(doc: Document, operations: Operation[]): TagFacet[] {\n const counts = new Map<string, number>();\n for (const op of operations) for (const t of op.tags) counts.set(t.name, (counts.get(t.name) ?? 0) + 1);\n const out: TagFacet[] = [];\n const seen = new Set<string>();\n const add = (name: string, description?: string) => {\n const count = counts.get(name);\n if (count === undefined || seen.has(name)) return;\n seen.add(name);\n const facet: TagFacet = { name, count };\n if (description) facet.description = description;\n out.push(facet);\n };\n for (const t of doc.tags) add(t.name, t.description);\n for (const op of operations) for (const t of op.tags) add(t.name, t.description);\n return out;\n}\n\n/** Every space-separated term must match one of the item's search strings. */\nexport function matches(item: NavItem, query: string): boolean {\n const terms = query.toLowerCase().split(/\\s+/).filter((t) => t !== '');\n if (terms.length === 0) return true;\n return terms.every((term) => item.search.some((s) => s.includes(term)));\n}\n\nexport interface FilteredNav {\n items: NavItem[];\n /** Operations shown and total, for the live region. */\n shown: number;\n total: number;\n active: boolean;\n}\n\n/**\n * The search query and the selected tags together: an operation stays when every term matches\n * and, if any tags are selected, it carries at least one of them. Section links hide while a\n * query is typed unless `keepSections`; a tag selection alone keeps them.\n */\nexport function filterNav(items: NavItem[], query: string, keepSections: boolean, selectedTags: ReadonlySet<string> = new Set()): FilteredNav {\n const querying = query.trim() !== '';\n const active = querying || selectedTags.size > 0;\n const total = items.filter((i) => i.kind === 'operation').length;\n if (!active) return { items, shown: total, total, active };\n const tagged = (i: NavItem) => selectedTags.size === 0 || (i.tags ?? []).some((t) => selectedTags.has(t));\n const out = items.filter((i) => (i.kind === 'operation' ? matches(i, query) && tagged(i) : keepSections || !querying));\n return { items: out, shown: out.filter((i) => i.kind === 'operation').length, total, active };\n}\n\n/** Consecutive items with the same group form one block; `undefined` groups are flat. */\nexport function groupNav(items: NavItem[]): Array<{ group: string | undefined; items: NavItem[] }> {\n const out: Array<{ group: string | undefined; items: NavItem[] }> = [];\n for (const item of items) {\n const last = out[out.length - 1];\n if (last && last.group === item.group) last.items.push(item);\n else out.push({ group: item.group, items: [item] });\n }\n return out;\n}\n","/**\n * Servers, Messages, Schemas and Problems sections (spec 4.10) and the server selector (4.6).\n */\nimport { css, html, nothing, type TemplateResult } from 'lit';\nimport type { Document, Message, Problem, Server, Tag } from '../model/types.js';\nimport { tagChip } from './tag.js';\nimport { renderBindings, renderSecurity } from './details.js';\nimport { examplesFor, renderExamplePanel, type ExampleContext } from './example.js';\nimport { renderInline, renderMarkdown } from './markdown.js';\nimport { renderSchema, typeLabel, type TreeState } from './tree.js';\n\nexport const sectionStyles = css`\n .cards {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: 16px;\n }\n .card {\n min-width: 0;\n padding: 16px 18px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius);\n background: var(--_surface);\n scroll-margin-top: 16px;\n }\n .card__head {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 6px 12px;\n margin-bottom: 8px;\n }\n .card__id {\n margin: 0;\n font: 600 15px/1.4 var(--_font-heading);\n color: var(--_ink);\n }\n .card__id:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 4px;\n }\n .card__meta {\n font: 400 12.5px/1.5 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n min-width: 0;\n }\n .card__host {\n font: 400 14px/1.5 var(--_font-mono);\n color: var(--_ink);\n word-break: break-all;\n margin-bottom: 6px;\n }\n .card__desc {\n font-size: 13px;\n color: var(--_ink-2);\n }\n .vars {\n width: 100%;\n margin-top: 12px;\n border-collapse: collapse;\n font-size: 13px;\n }\n .vars th {\n text-align: left;\n font: 500 11px/1.6 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_muted);\n padding: 6px 10px 6px 0;\n border-bottom: 1px solid var(--_line);\n }\n .vars td {\n padding: 7px 10px 7px 0;\n vertical-align: top;\n border-bottom: 1px solid var(--_line);\n color: var(--_ink-2);\n }\n .vars tr:last-child td {\n border-bottom: 0;\n }\n .vars .mono {\n font-size: 12.5px;\n }\n .vars__name {\n color: var(--_primary-text);\n }\n .msg-example {\n margin-top: 16px;\n }\n details.entry {\n border: 1px solid var(--_line);\n border-radius: var(--_radius);\n background: var(--_surface);\n scroll-margin-top: 16px;\n }\n details.entry + details.entry {\n margin-top: 10px;\n }\n details.entry > summary {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 6px 12px;\n min-height: 44px;\n padding: 10px 16px;\n cursor: pointer;\n list-style: none;\n font: 600 14px/1.5 var(--_font-mono);\n color: var(--_ink);\n }\n details.entry > summary::-webkit-details-marker {\n display: none;\n }\n details.entry > summary::before {\n content: '';\n width: 7px;\n height: 7px;\n margin-right: 2px;\n border-right: 1.5px solid var(--_muted);\n border-bottom: 1.5px solid var(--_muted);\n transform: rotate(-45deg);\n transition: transform 120ms;\n align-self: center;\n }\n details.entry[open] > summary::before {\n transform: rotate(45deg);\n }\n details.entry > summary:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: -2px;\n border-radius: var(--_radius);\n }\n .entry__body {\n padding: 0 16px 16px;\n }\n .entry__body .tree,\n .entry__body .raw {\n border-color: var(--_line);\n }\n .entry__body > .block:first-child {\n margin-top: 4px;\n }\n .entry__title {\n font: 600 14px/1.5 var(--_font-heading);\n color: var(--_ink);\n }\n .entry__host {\n margin-left: auto;\n word-break: break-all;\n }\n .entry__body .card__desc + .card__desc {\n margin-top: 6px;\n }\n .entry__body .vars {\n margin-top: 12px;\n }\n .entry__desc {\n padding: 0 16px 12px;\n font-size: 13px;\n color: var(--_ink-2);\n }\n .entry__tags {\n margin-bottom: 12px;\n }\n .entry__tags .chip {\n min-height: 24px;\n padding: 2px 9px;\n font-size: 12px;\n }\n .problems {\n margin: 0;\n padding: 0;\n list-style: none;\n display: grid;\n gap: 8px;\n }\n .problems li {\n padding: 10px 14px;\n border: 1px solid var(--_line);\n border-left: 3px solid var(--_secondary);\n border-radius: var(--_radius-sm);\n background: var(--_surface);\n font-size: 13px;\n color: var(--_ink);\n }\n .problems li[data-severity='warning'] {\n border-left-color: var(--_line-2);\n }\n .problems__where {\n display: block;\n margin-top: 2px;\n font: 400 12px/1.5 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n }\n`;\n\nfunction tagChips(tags: Tag[]): TemplateResult | typeof nothing {\n if (tags.length === 0) return nothing;\n return html`<ul class=\"chips entry__tags\" aria-label=\"Tags\">\n ${tags.map((t) => tagChip(t))}\n </ul>`;\n}\n\nexport interface SectionContext {\n prefix: string;\n tree: (key: string) => TreeState;\n example: (key: string) => ExampleContext;\n}\n\nfunction serverEntry(server: Server, prefix: string): TemplateResult {\n const anchor = `${prefix}--servers--${server.anchor}`;\n return html`<details class=\"entry\" id=${anchor}>\n <summary>\n <span class=\"entry__title\">${server.id}</span>\n <span class=\"card__meta\">${server.protocol}${server.protocolVersion ? ` ${server.protocolVersion}` : ''}</span>\n <span class=\"card__meta entry__host\">${server.hostDisplay || 'Host not specified'}</span>\n </summary>\n <div class=\"entry__body\">\n ${server.title ? html`<div class=\"card__desc\"><strong>${server.title}</strong></div>` : nothing}\n ${server.summary ? html`<div class=\"card__desc\">${renderInline(server.summary)}</div>` : nothing}\n ${server.description ? html`<div class=\"card__desc\">${renderMarkdown(server.description)}</div>` : nothing}\n ${tagChips(server.tags)}\n ${server.variables.length > 0\n ? html`<table class=\"vars\">\n <thead><tr><th>Variable</th><th>Enum</th><th>Default</th><th>Description</th></tr></thead>\n <tbody>\n ${server.variables.map(\n (v) => html`<tr>\n <td class=\"mono vars__name\">${v.name}</td>\n <td class=\"mono\">${v.enum?.join(' · ') ?? ''}</td>\n <td class=\"mono\">${v.default ?? ''}</td>\n <td>${renderInline(v.description)}${v.examples ? html` <span class=\"card__meta\">examples: ${v.examples.join(' · ')}</span>` : nothing}</td>\n </tr>`,\n )}\n </tbody>\n </table>`\n : nothing}\n ${renderSecurity(server.security, 'split')}\n ${renderBindings(server.bindings, 'Bindings', 'split')}\n </div>\n </details>`;\n}\n\nexport function renderServers(doc: Document, prefix: string): TemplateResult | typeof nothing {\n if (doc.servers.length === 0) return nothing;\n const id = `${prefix}--servers`;\n return html`<section aria-labelledby=${id}>\n <h2 class=\"section-title\" id=${id} tabindex=\"-1\">Servers</h2>\n ${doc.servers.map((s) => serverEntry(s, prefix))}\n </section>`;\n}\n\nfunction messageEntry(message: Message, ctx: SectionContext, showExamples: boolean): TemplateResult {\n const anchor = `${ctx.prefix}--messages--${message.anchor}`;\n const examples = showExamples ? examplesFor(message) : [];\n const title = message.title ?? message.name ?? message.id;\n return html`<details class=\"entry\" id=${anchor}>\n <summary>\n <span class=\"entry__title\">${title}</span>\n ${message.name && message.name !== title ? html`<span class=\"card__meta\">${message.name}</span>` : nothing}\n <span class=\"card__meta\">${message.contentType} · ${message.schemaFormat}</span>\n </summary>\n ${message.summary ? html`<div class=\"entry__desc\">${renderInline(message.summary)}</div>` : nothing}\n ${message.description ? html`<div class=\"entry__desc\">${renderMarkdown(message.description)}</div>` : nothing}\n <div class=\"entry__body\">\n ${tagChips(message.tags)}\n ${message.payload\n ? html`<div class=\"block\"><h4 class=\"sub-title\">Payload</h4>${renderSchema(message.payload, { label: message.id, prefix: ctx.prefix, key: `${anchor}--payload`, state: ctx.tree(`${anchor}--payload`) })}</div>`\n : nothing}\n ${message.headers\n ? html`<div class=\"block\"><h4 class=\"sub-title\">Headers</h4>${renderSchema(message.headers, { prefix: ctx.prefix, key: `${anchor}--headers`, state: ctx.tree(`${anchor}--headers`) })}</div>`\n : nothing}\n ${examples.length > 0 ? html`<div class=\"msg-example\">${renderExamplePanel(message, examples, ctx.example(`${anchor}--example`), `${anchor}--example`)}</div>` : nothing}\n ${renderBindings(message.bindings)}\n </div>\n </details>`;\n}\n\nexport function renderMessages(doc: Document, ctx: SectionContext, showExamples: boolean): TemplateResult | typeof nothing {\n if (doc.messages.length === 0) return nothing;\n const id = `${ctx.prefix}--messages`;\n return html`<section aria-labelledby=${id}>\n <h2 class=\"section-title\" id=${id} tabindex=\"-1\">Messages</h2>\n ${doc.messages.map((m) => messageEntry(m, ctx, showExamples))}\n </section>`;\n}\n\nexport function renderSchemas(doc: Document, ctx: SectionContext): TemplateResult | typeof nothing {\n if (doc.schemas.length === 0) return nothing;\n const id = `${ctx.prefix}--schemas`;\n return html`<section aria-labelledby=${id}>\n <h2 class=\"section-title\" id=${id} tabindex=\"-1\">Schemas</h2>\n ${doc.schemas.map((s) => {\n const anchor = `${ctx.prefix}--schemas--${s.anchor}`;\n const label = s.schema.kind === 'node' ? typeLabel(s.schema) : s.schema.schemaFormat;\n return html`<details class=\"entry\" id=${anchor}>\n <summary><span class=\"entry__title mono\">${s.id}</span> ${label ? html`<span class=\"card__meta\">${label}</span>` : nothing}</summary>\n <div class=\"entry__body\">${renderSchema(s.schema, { prefix: ctx.prefix, key: anchor, state: ctx.tree(anchor) })}</div>\n </details>`;\n })}\n </section>`;\n}\n\nexport function renderProblems(problems: readonly Problem[], prefix: string): TemplateResult | typeof nothing {\n if (problems.length === 0) return nothing;\n const id = `${prefix}--problems`;\n return html`<section aria-labelledby=${id}>\n <h2 class=\"section-title\" id=${id} tabindex=\"-1\">Problems</h2>\n <ul class=\"problems\">\n ${problems.map(\n (p) => html`<li data-severity=${p.severity}>\n ${p.message}\n <span class=\"problems__where\">${p.severity} · at ${p.where}</span>\n </li>`,\n )}\n </ul>\n </section>`;\n}\n","/**\n * The sidebar (spec 4.9 and amendment 11): search, then the nav items grouped as configured,\n * with the current item highlighted. On narrow containers it is a drawer behind a menu button.\n */\nimport { css, html, nothing, type TemplateResult } from 'lit';\nimport { filterNav, groupNav, type NavItem, type TagFacet } from './nav.js';\n\nexport const sidebarStyles = css`\n .layout {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n }\n .main {\n min-width: 0;\n container-type: inline-size;\n container-name: main;\n }\n /* Base rule first, so the wide-container rule below wins on equal specificity. */\n .side__resize {\n display: none;\n }\n @container viewer (min-width: 1100px) {\n .layout--sidebar {\n position: relative;\n grid-template-columns: var(--_side-width, 292px) minmax(0, 1fr);\n }\n .layout--resizing {\n cursor: col-resize;\n user-select: none;\n }\n /* Resize handle (amendment 19): straddles the boundary, shows on hover, focus and drag. */\n .side__resize {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: calc(var(--_side-width, 292px) - 4px);\n width: 9px;\n z-index: 5;\n cursor: col-resize;\n touch-action: none;\n outline: none;\n }\n .side__resize::after {\n content: '';\n position: absolute;\n inset: 0 3px;\n background: transparent;\n transition: background 120ms;\n }\n .side__resize:hover::after,\n .side__resize:focus-visible::after,\n .side__resize--active::after {\n background: var(--_primary);\n }\n }\n .side {\n background: var(--_sidebar);\n border-right: 1px solid var(--_line);\n }\n @container viewer (min-width: 1100px) {\n .side {\n position: sticky;\n top: 0;\n max-height: 100vh;\n overflow: auto;\n }\n }\n .side__panel {\n display: flex;\n flex-direction: column;\n }\n @container viewer (min-width: 1100px) {\n .side__panel {\n min-height: 100%;\n }\n }\n .side__inner {\n display: flex;\n flex-direction: column;\n flex: 1 0 auto;\n min-height: 0;\n padding: 16px 12px 24px;\n }\n /* Items under a group heading sit a step in from it (specific enough to beat the list reset). */\n .side .side__block--grouped > ul {\n padding-left: 12px;\n }\n .side__block--components {\n margin-top: auto;\n padding-top: 12px;\n border-top: 1px solid var(--_line);\n }\n .side__search {\n display: block;\n width: 100%;\n min-height: 40px;\n margin-bottom: 12px;\n padding: 0 12px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n background: var(--_surface);\n color: var(--_ink);\n font: 13px/1 var(--_font-body);\n }\n .side__search:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 1px;\n }\n .side__group {\n display: flex;\n justify-content: space-between;\n margin: 18px 10px 6px;\n font: 500 11px/1 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_muted);\n }\n .side__group .mono {\n letter-spacing: 0;\n }\n .side ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n .side__item {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: 8px;\n min-height: 44px;\n padding: 6px 10px;\n border-radius: var(--_radius-sm);\n color: var(--_ink);\n text-decoration: none;\n font-size: 13px;\n line-height: 1.35;\n }\n .side__item:hover {\n background: color-mix(in srgb, var(--_primary) 6%, transparent);\n }\n .side__item:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: -2px;\n }\n .side__item[aria-current='true'] {\n background: var(--_tint);\n font-weight: 600;\n }\n .side__item--section {\n font-weight: 500;\n }\n /* No badge: no badge column, so the label starts where the group headings start. */\n .side__item--plain {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n .side__item--plain .side__label,\n .side__item--plain .side__sub {\n grid-column: 1;\n }\n .side__item--plain .side__count {\n grid-column: 2;\n }\n .side__badge {\n align-self: center;\n height: 18px;\n padding: 0 6px;\n border-radius: 5px;\n font: 500 10px/18px var(--_font-mono);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n .side__badge--send {\n background: var(--_send);\n color: var(--_badge-ink-send);\n }\n .side__badge--receive {\n background: var(--_receive);\n color: var(--_badge-ink-receive);\n }\n .side__label {\n grid-column: 2;\n align-self: center;\n overflow-wrap: anywhere;\n }\n .side__sub {\n grid-column: 2;\n font: 400 11.5px/1.4 var(--_font-mono);\n color: var(--_muted);\n overflow-wrap: anywhere;\n }\n .side__count {\n grid-column: 3;\n grid-row: 1;\n font: 400 12px/1 var(--_font-mono);\n color: var(--_muted);\n }\n /* Tags block: a header row that looks like a group heading, with a disclosure button. */\n .side__tags {\n margin-top: 6px;\n }\n .side__tags-head {\n justify-content: flex-start;\n align-items: center;\n gap: 8px;\n margin-bottom: 0;\n padding: 6px 0;\n }\n .side__tags-toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 0;\n border: 0;\n background: none;\n color: inherit;\n font: inherit;\n text-transform: inherit;\n letter-spacing: inherit;\n cursor: pointer;\n }\n .side__tags-toggle:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 3px;\n border-radius: 3px;\n }\n /* The same chevron as the collapsible entries: right when closed, down when open. */\n .side__tags-toggle::before {\n content: '';\n width: 6px;\n height: 6px;\n margin: 0 2px 1px 1px;\n border-right: 1.5px solid var(--_muted);\n border-bottom: 1.5px solid var(--_muted);\n transform: rotate(-45deg);\n transition: transform 120ms;\n }\n .side__tags-toggle[aria-expanded='true']::before {\n transform: rotate(45deg);\n margin-bottom: 3px;\n }\n .side__tags-count {\n margin-left: auto;\n }\n .side__tag-list[hidden] {\n display: none;\n }\n .side__tags-state {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n text-transform: none;\n letter-spacing: 0;\n font-weight: 400;\n }\n .side__tags-selected {\n color: var(--_ink-2);\n }\n .side__tags-clear {\n padding: 0;\n border: 0;\n background: none;\n color: var(--_primary-text);\n font: 500 11px/1 var(--_font-body);\n cursor: pointer;\n }\n .side__tags-clear:hover {\n color: var(--_primary);\n }\n .side__tags-clear:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 2px;\n border-radius: 3px;\n }\n .side .side__tag-list {\n padding-left: 12px;\n }\n /* A tag is a toggle button that looks like a nav row; pressed = the current-item highlight. */\n .side__tag {\n width: 100%;\n min-height: 40px;\n border: 0;\n background: none;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n }\n .side__tag[aria-pressed='true'] {\n background: var(--_tint);\n font-weight: 600;\n }\n .side__empty {\n margin: 8px 10px;\n color: var(--_muted);\n font-size: 13px;\n }\n .side__live {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n }\n\n /* Drawer (below 1100px). */\n .menu {\n width: 44px;\n height: 44px;\n padding: 0;\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n background: var(--_surface);\n color: var(--_ink);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n }\n .menu:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 2px;\n }\n .menu svg {\n width: 20px;\n height: 20px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.8;\n stroke-linecap: round;\n }\n /* After the base rules so the wide-container reset wins on equal specificity. */\n @container viewer (min-width: 1100px) {\n .side__close,\n .menu {\n display: none;\n }\n }\n @container viewer (max-width: 1099px) {\n .side {\n display: none;\n }\n .layout--open .side {\n display: block;\n position: absolute;\n inset: 0;\n z-index: 30;\n background: rgb(0 0 0 / 0.35);\n border: 0;\n }\n .side__panel {\n position: sticky;\n top: 0;\n width: 320px;\n max-width: calc(100% - 56px);\n height: 100vh;\n height: 100dvh;\n overflow: auto;\n background: var(--_sidebar);\n border-right: 1px solid var(--_line);\n box-shadow: 8px 0 24px rgb(0 0 0 / 0.12);\n }\n .side__close {\n display: inline-flex;\n margin: 12px 12px 0;\n }\n }\n`;\n\nexport interface SidebarInput {\n items: NavItem[];\n /** The Tags block's entries; empty hides the block. */\n tags: TagFacet[];\n selectedTags: ReadonlySet<string>;\n /** Whether the Tags block is expanded; kept by the element so a re-render never collapses it. */\n tagsOpen: boolean;\n onTagsToggle: (open: boolean) => void;\n onToggleTag: (name: string) => void;\n onClearTags: () => void;\n query: string;\n keepSections: boolean;\n current: string | undefined;\n open: boolean;\n liveText: string;\n onQuery: (query: string) => void;\n onEscape: () => void;\n onChoose: () => void;\n onClose: () => void;\n id: string;\n}\n\nconst closeIcon = html`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6 6 18\" /></svg>`;\n\nexport function renderSidebar(input: SidebarInput): TemplateResult {\n const filtered = filterNav(input.items, input.query, input.keepSections, input.selectedTags);\n const groups = groupNav(filtered.items);\n // The Tags block sits above the first operations group; with every operation filtered out it\n // still has to appear, so it goes before the empty state instead.\n const firstOps = groups.findIndex((g) => g.items.some((i) => i.kind === 'operation'));\n const tagsBlock = input.tags.length > 0 ? renderTags(input) : nothing;\n return html`<div\n class=\"side\"\n id=\"${input.id}--sidebar\"\n @click=${(e: Event) => {\n if (e.target === e.currentTarget) input.onClose();\n }}\n >\n <div class=\"side__panel\" role=${input.open ? 'dialog' : nothing} aria-modal=${input.open ? 'true' : nothing} aria-label=\"Navigation\">\n <button class=\"btn btn--icon side__close\" type=\"button\" aria-label=\"Close navigation\" @click=${input.onClose}>${closeIcon}</button>\n <nav class=\"side__inner\" aria-label=\"API navigation\">\n <label class=\"visually-hidden\" for=\"${input.id}--search\">Search operations, channels</label>\n <input\n class=\"side__search\"\n id=\"${input.id}--search\"\n type=\"search\"\n placeholder=\"Search operations, channels\"\n autocomplete=\"off\"\n .value=${input.query}\n @input=${(e: Event) => input.onQuery((e.target as HTMLInputElement).value)}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n e.preventDefault();\n if (input.query !== '') input.onQuery('');\n else input.onEscape();\n }}\n />\n <span class=\"side__live\" aria-live=\"polite\">${input.liveText}</span>\n ${groups.map(\n (g, index) => html`${index === firstOps ? tagsBlock : nothing}<div class=\"side__block ${g.group !== undefined ? 'side__block--grouped' : ''} ${g.group === 'Components' ? 'side__block--components' : ''}\">\n ${g.group !== undefined\n ? html`<div class=\"side__group\">\n <span>${g.group}</span>\n ${g.group !== 'Components' ? html`<span class=\"mono\">${g.items.length}</span>` : nothing}\n </div>`\n : nothing}\n <ul>\n ${g.items.map((item) => renderItem(item, input))}\n </ul>\n </div>`,\n )}\n ${firstOps === -1 && filtered.total > 0 ? tagsBlock : nothing}\n ${filtered.active && filtered.shown === 0 ? html`<p class=\"side__empty\">No operations match</p>` : nothing}\n </nav>\n </div>\n </div>`;\n}\n\n/**\n * The Tags block (amendment 17): a collapsible block above the operations whose header reads\n * like a group heading: a disclosure button, then \"n selected · Clear selection\" once anything\n * is selected (siblings, not nested controls), then the tag count. The list holds one toggle\n * button per tag with its operation count; a selected tag is highlighted like the current item.\n */\nfunction renderTags(input: SidebarInput): TemplateResult {\n const selected = input.selectedTags.size;\n const listId = `${input.id}--tags`;\n return html`<div class=\"side__tags\">\n <div class=\"side__group side__tags-head\">\n <button class=\"side__tags-toggle\" type=\"button\" aria-expanded=${input.tagsOpen ? 'true' : 'false'} aria-controls=${listId} @click=${() => input.onTagsToggle(!input.tagsOpen)}>\n Tags\n </button>\n ${selected > 0\n ? html`<span class=\"side__tags-state\">\n <span class=\"side__tags-selected\">${selected} selected</span>\n <span aria-hidden=\"true\">·</span>\n <button class=\"side__tags-clear\" type=\"button\" @click=${input.onClearTags}>Clear selection</button>\n </span>`\n : nothing}\n <span class=\"mono side__tags-count\">${input.tags.length}</span>\n </div>\n <ul class=\"side__tag-list\" id=${listId} ?hidden=${!input.tagsOpen}>\n ${input.tags.map(\n (t) => html`<li>\n <button class=\"side__item side__item--plain side__tag\" type=\"button\" aria-pressed=${input.selectedTags.has(t.name) ? 'true' : 'false'} title=${t.description ?? ''} @click=${() => input.onToggleTag(t.name)}>\n <span class=\"side__label\">${t.name}</span>\n <span class=\"side__count\">${t.count}</span>\n </button>\n </li>`,\n )}\n </ul>\n </div>`;\n}\n\nfunction renderItem(item: NavItem, input: SidebarInput): TemplateResult {\n const current = input.current === item.anchor;\n return html`<li>\n <a\n class=\"side__item ${item.kind === 'section' ? 'side__item--section' : ''} ${item.badge ? '' : 'side__item--plain'}\"\n href=\"#${item.anchor}\"\n aria-current=${current ? 'true' : nothing}\n @click=${input.onChoose}\n >\n ${item.badge ? html`<span class=\"side__badge side__badge--${item.badge.action}\">${item.badge.label}</span>` : nothing}\n <span class=\"side__label\">${item.label}</span>\n ${item.count !== undefined ? html`<span class=\"side__count\">${item.count}</span>` : nothing}\n ${item.sub ? html`<span class=\"side__sub\">${item.sub}</span>` : nothing}\n </a>\n </li>`;\n}\n\nexport const menuIcon = html`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4 7h16M4 12h16M4 17h10\" /></svg>`;\n","import { css } from 'lit';\n\n/** Layout shell, typography and the shared small components (pills, chips, buttons). */\nexport const base = css`\n :host {\n display: block;\n container-type: inline-size;\n container-name: viewer;\n position: relative;\n z-index: 0;\n color: var(--_ink);\n background: var(--_bg);\n font: 14px/1.55 var(--_font-body);\n border-radius: var(--_radius);\n overflow: clip;\n }\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n a {\n color: var(--_primary-text);\n }\n code,\n .mono {\n font-family: var(--_font-mono);\n overflow-wrap: anywhere;\n }\n .visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n\n /* Content column padding: 36/44/48 desktop, 28/32/40 tablet, 20/16/32 phone (spec 4.5). */\n .content {\n --_pad-x: 44px;\n padding: 36px var(--_pad-x) 48px;\n }\n @container viewer (max-width: 1099px) {\n .content {\n --_pad-x: 32px;\n padding: 28px var(--_pad-x) 40px;\n }\n }\n @container viewer (max-width: 699px) {\n .content {\n --_pad-x: 16px;\n padding: 20px var(--_pad-x) 32px;\n }\n }\n h4.sub-title {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 6px 12px;\n margin: 0 0 12px;\n font: 600 18px/1.3 var(--_font-heading);\n color: var(--_ink);\n }\n h4.sub-title .mono {\n font-size: 14px;\n font-weight: 500;\n color: var(--_ink-2);\n }\n h4.sub-title .sub-title__meta {\n margin-left: auto;\n font: 400 12px/1.5 var(--_font-mono);\n color: var(--_muted);\n white-space: nowrap;\n }\n\n section + section {\n margin-top: 40px;\n padding-top: 32px;\n border-top: 1px solid var(--_line);\n }\n h2.section-title {\n font: 600 20px/1.3 var(--_font-heading);\n margin: 0 0 16px;\n color: var(--_ink);\n }\n h2.section-title:focus-visible,\n h3:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 4px;\n }\n .label {\n font: 500 11px/1 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_muted);\n }\n .summary {\n font-size: 16px;\n line-height: 1.6;\n color: var(--_ink-2);\n margin: 0;\n }\n\n /* Markdown from the document. */\n .md > :first-child {\n margin-top: 0;\n }\n .md > :last-child {\n margin-bottom: 0;\n }\n .md p,\n .md ul,\n .md ol {\n margin: 0 0 0.8em;\n color: var(--_ink-2);\n }\n .md code {\n overflow-wrap: anywhere;\n font-size: 0.92em;\n padding: 0.1em 0.35em;\n background: var(--_head);\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n }\n .md pre {\n max-width: 100%;\n padding: 12px 14px;\n overflow: auto;\n background: var(--_head);\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n }\n .md pre code {\n padding: 0;\n border: 0;\n background: none;\n }\n\n /* Pills and chips. */\n .pill {\n display: inline-flex;\n align-items: center;\n height: 24px;\n padding: 0 9px;\n border-radius: 999px;\n font: 500 12px/1 var(--_font-mono);\n letter-spacing: 0.02em;\n white-space: nowrap;\n }\n .pill--tint {\n background: var(--_tint);\n color: var(--_tint-ink);\n }\n .pill--outline {\n border: 1px solid var(--_line-2);\n color: var(--_muted);\n }\n .chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 14px;\n padding: 0;\n margin: 0;\n min-width: 0;\n list-style: none;\n }\n .chip {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n max-width: 100%;\n min-width: 0;\n min-height: 26px;\n padding: 3px 10px;\n border: 1px solid var(--_line);\n border-radius: 999px;\n background: var(--_surface);\n font-size: 12.5px;\n color: var(--_ink-2);\n }\n /* Tag chips carry their description as a tooltip on hover and keyboard focus. */\n .chip--tip {\n position: relative;\n cursor: default;\n }\n .chip--tip:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 2px;\n }\n .chip--tip::after {\n content: attr(data-tip);\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n z-index: 25;\n width: max-content;\n max-width: min(320px, 70vw);\n padding: 6px 10px;\n border-radius: var(--_radius-sm);\n background: var(--_ink);\n color: var(--_bg);\n font: 400 12px/1.45 var(--_font-body);\n white-space: normal;\n text-align: left;\n box-shadow: 0 4px 14px rgb(0 0 0 / 0.18);\n opacity: 0;\n visibility: hidden;\n transition: opacity 100ms;\n pointer-events: none;\n }\n .chip--tip:hover::after,\n .chip--tip:focus-visible::after {\n opacity: 1;\n visibility: visible;\n }\n .chip .mono {\n font-size: 12px;\n overflow-wrap: anywhere;\n }\n\n /* Icon and text buttons: 44px targets (spec 4.11). */\n .btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n min-width: 44px;\n min-height: 44px;\n padding: 0 12px;\n border: 1px solid var(--_line);\n border-radius: var(--_radius-sm);\n background: var(--_surface);\n color: var(--_ink);\n font: 500 13px/1 var(--_font-body);\n cursor: pointer;\n text-decoration: none;\n }\n .btn:hover {\n border-color: var(--_line-2);\n }\n .btn:focus-visible {\n outline: 2px solid var(--_primary);\n outline-offset: 2px;\n }\n .btn svg {\n width: 18px;\n height: 18px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.8;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n .btn--icon {\n padding: 0;\n }\n\n /* Definition rows used by Info and Servers. */\n .facts {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n align-items: baseline;\n gap: 8px 14px;\n margin: 0;\n }\n .facts dt {\n font: 500 11px/1.6 var(--_font-body);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--_muted);\n padding-top: 2px;\n }\n .facts dd {\n margin: 0;\n color: var(--_ink-2);\n overflow-wrap: anywhere;\n }\n @container viewer (max-width: 699px) {\n .facts {\n grid-template-columns: 1fr;\n gap: 4px;\n }\n .facts dd + dt {\n margin-top: 10px;\n }\n }\n\n .alert {\n margin: 0;\n padding: 14px 16px;\n border: 1px solid var(--_secondary);\n border-radius: var(--_radius-sm);\n background: color-mix(in srgb, var(--_secondary) 8%, var(--_surface));\n color: var(--_ink);\n }\n .alert code {\n overflow-wrap: anywhere;\n }\n`;\n","import { css } from 'lit';\n\n/**\n * Design tokens (spec 4.3). Public variables are `--asyncapi-*`, set on the element by the\n * theme file or page CSS. Each maps to a private `--_*` with the design default, so page CSS\n * wins whenever it sets a public one. Dark values apply through the reflected\n * `resolved-theme` attribute, so page CSS can scope overrides per mode.\n */\nexport const tokens = css`\n :host {\n --_primary: var(--asyncapi-primary, #2944c9);\n --_secondary: var(--asyncapi-secondary, #b84e1a);\n /* Badge colours default to the accents but can be set on their own. */\n --_send: var(--asyncapi-send, var(--_primary));\n --_receive: var(--asyncapi-receive, var(--_secondary));\n\n --_bg: var(--asyncapi-bg, #f6f5f1);\n --_surface: var(--asyncapi-surface, #ffffff);\n --_sidebar: var(--asyncapi-sidebar, #efede7);\n --_head: var(--asyncapi-head, #f8f7f3);\n --_ink: var(--asyncapi-ink, #17191f);\n --_ink-2: var(--asyncapi-ink-2, #3a3e48);\n --_muted: var(--asyncapi-muted, #5e626d);\n --_line: var(--asyncapi-line, #e3e0d8);\n --_line-2: var(--asyncapi-line-2, #c9c5ba);\n --_tint-strength: 10%;\n\n /* Example panel: the same in both themes unless overridden. */\n --_ex-bg: var(--asyncapi-example-bg, #12141a);\n --_ex-ink: #dcdfe6;\n --_ex-muted: #8c92a0;\n --_ex-lines: #4a505c;\n --_ex-divider: #262a33;\n --_ex-heading: #f4f5f7;\n --_ex-number: #b7c4e8;\n\n /* Swagger UI's typefaces (amendment 18), falling back to system stacks: the viewer never\n loads web fonts itself, the page does (see theme/asyncapi-theme.css). */\n --_font-heading: var(--asyncapi-font-heading, 'Titillium Web', ui-sans-serif, system-ui, sans-serif);\n --_font-body: var(--asyncapi-font-body, 'Open Sans', ui-sans-serif, system-ui, sans-serif);\n --_font-mono: var(--asyncapi-font-mono, 'Source Code Pro', ui-monospace, SFMono-Regular, Menlo, monospace);\n --_radius: var(--asyncapi-radius, 10px);\n --_radius-sm: calc(var(--_radius) - 3px);\n --_example-width: clamp(360px, var(--asyncapi-example-width, 452px), 560px);\n\n /* Derived at runtime from the resolved colours (util/color.ts); these are the fallbacks. */\n --_badge-ink-send: #ffffff;\n --_badge-ink-receive: #ffffff;\n --_primary-text: var(--_primary);\n --_secondary-text: var(--_secondary);\n --_tint: color-mix(in srgb, var(--_primary) var(--_tint-strength), transparent);\n --_tint-ink: var(--_primary-text);\n --_logo: var(--asyncapi-logo, none);\n }\n\n :host([resolved-theme='dark']) {\n --_bg: var(--asyncapi-bg, #0f1115);\n --_surface: var(--asyncapi-surface, #161920);\n --_sidebar: var(--asyncapi-sidebar, #12151a);\n --_head: var(--asyncapi-head, #1b1f27);\n --_ink: var(--asyncapi-ink, #ecedef);\n --_ink-2: var(--asyncapi-ink-2, #c4c8d0);\n --_muted: var(--asyncapi-muted, #959ba7);\n --_line: var(--asyncapi-line, #262a33);\n --_line-2: var(--asyncapi-line-2, #3a404c);\n --_tint-strength: 20%;\n --_logo: var(--asyncapi-logo-dark, var(--asyncapi-logo, none));\n /* Accent text on the tint does not reach 4.5:1 in dark mode; use ink there. */\n --_tint-ink: var(--_ink);\n }\n`;\n","/**\n * Theme mode resolution (spec 4.4).\n *\n * `auto` follows the host page: Material for MkDocs (`body[data-md-color-scheme=\"slate\"]`),\n * then `html[data-theme=\"dark\"]`, then `prefers-color-scheme`. All three are watched so the\n * viewer follows the site's own toggle live. The in-viewer toggle overrides the host for this\n * element only. The resolved mode is reflected as `resolved-theme=\"light|dark\"` on the host so\n * page CSS can scope overrides to one mode.\n */\nexport type ThemeMode = 'auto' | 'light' | 'dark';\nexport type Resolved = 'light' | 'dark';\n\nexport class ThemeController {\n #mode: ThemeMode = 'auto';\n #override: Resolved | undefined;\n #resolved: Resolved = 'light';\n #observer: MutationObserver | undefined;\n #media: MediaQueryList | undefined;\n readonly #onMedia = () => this.#update();\n\n constructor(\n private readonly host: HTMLElement,\n private readonly onChange: (resolved: Resolved) => void,\n ) {}\n\n get resolved(): Resolved {\n return this.#resolved;\n }\n\n /** The option value; a change clears any toggle override. */\n set mode(mode: ThemeMode) {\n if (mode === this.#mode) return;\n this.#mode = mode;\n this.#override = undefined;\n this.#update();\n }\n\n /** The toggle button: flips the resolved mode for this element only. */\n toggle(): void {\n this.#override = this.#resolved === 'dark' ? 'light' : 'dark';\n this.#update();\n }\n\n connect(): void {\n const doc = this.host.ownerDocument;\n const win = doc.defaultView;\n if (win?.matchMedia) {\n this.#media = win.matchMedia('(prefers-color-scheme: dark)');\n this.#media.addEventListener('change', this.#onMedia);\n }\n this.#observer = new MutationObserver(() => this.#update());\n this.#observer.observe(doc.documentElement, { attributes: true, attributeFilter: ['data-theme', 'class'] });\n if (doc.body) this.#observer.observe(doc.body, { attributes: true, attributeFilter: ['data-md-color-scheme', 'class'] });\n this.#update();\n }\n\n disconnect(): void {\n this.#observer?.disconnect();\n this.#observer = undefined;\n this.#media?.removeEventListener('change', this.#onMedia);\n this.#media = undefined;\n }\n\n /** What the host page says, before any override. Exported for tests. */\n hostPreference(): Resolved {\n const doc = this.host.ownerDocument;\n const scheme = doc.body?.getAttribute('data-md-color-scheme');\n if (scheme) return scheme === 'slate' ? 'dark' : 'light';\n const dataTheme = doc.documentElement.getAttribute('data-theme');\n if (dataTheme === 'dark' || dataTheme === 'light') return dataTheme;\n return this.#media?.matches ? 'dark' : 'light';\n }\n\n #update(): void {\n const next = this.#override ?? (this.#mode === 'auto' ? this.hostPreference() : this.#mode);\n if (next === this.#resolved && this.host.getAttribute('resolved-theme') === next) return;\n this.#resolved = next;\n this.host.setAttribute('resolved-theme', next);\n this.onChange(next);\n }\n}\n","/**\n * Colour maths for the runtime rules in spec 4.2: badge text colour from the accent's\n * lightness, and a text-safe variant of the accent when it does not reach 4.5:1 on the\n * page background. Pure functions over `[r, g, b]` in 0-255 so they are easy to test.\n */\nexport type RGB = [number, number, number];\n\n/** Parse `rgb(…)`, `rgba(…)`, `#rgb`, `#rrggbb` or `#rrggbbaa`. Undefined for anything else. */\nexport function parseColor(text: string): RGB | undefined {\n const s = text.trim();\n const rgb = /^rgba?\\(\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)/i.exec(s);\n if (rgb) return [Number(rgb[1]), Number(rgb[2]), Number(rgb[3])];\n const hex = /^#([0-9a-f]{3,8})$/i.exec(s)?.[1];\n if (!hex) return undefined;\n if (hex.length === 3 || hex.length === 4) {\n return [parseInt(hex[0]! + hex[0]!, 16), parseInt(hex[1]! + hex[1]!, 16), parseInt(hex[2]! + hex[2]!, 16)];\n }\n if (hex.length === 6 || hex.length === 8) {\n return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16)];\n }\n return undefined;\n}\n\nexport function toHex([r, g, b]: RGB): string {\n return `#${[r, g, b].map((c) => Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, '0')).join('')}`;\n}\n\n/** WCAG relative luminance, 0 (black) to 1 (white). */\nexport function luminance([r, g, b]: RGB): number {\n const lin = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;\n };\n return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);\n}\n\n/** WCAG contrast ratio, 1 to 21. */\nexport function contrast(a: RGB, b: RGB): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** Spec 4.2: `#14161B` on light accents (lightness above 0.6), white otherwise. */\nexport function badgeInk(accent: RGB): string {\n return luminance(accent) > 0.6 ? '#14161B' : '#FFFFFF';\n}\n\n/**\n * The accent itself when it reaches `ratio` against `background`, otherwise the nearest\n * darker (light theme) or lighter (dark theme) shade that does. Mixes towards black or white\n * in small steps so the hue is kept.\n */\nexport function textSafe(accent: RGB, background: RGB, dark: boolean, ratio = 4.5): RGB {\n if (contrast(accent, background) >= ratio) return accent;\n const target: RGB = dark ? [255, 255, 255] : [0, 0, 0];\n for (let t = 0.05; t <= 1; t += 0.05) {\n const mixed = mix(accent, target, t);\n if (contrast(mixed, background) >= ratio) return mixed;\n }\n return target;\n}\n\nexport function mix(a: RGB, b: RGB, t: number): RGB {\n return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];\n}\n","import { LitElement, html, nothing } from 'lit';\nimport { loadDocument, resolveUrl, type LoadResult } from './load/loader.js';\nimport { RefResolver } from './load/refs.js';\nimport { normalize } from './model/normalize.js';\nimport type { Document, Problem } from './model/types.js';\nimport { parseOptions, type Options } from './options.js';\nimport { headerStyles, renderHeader } from './render/header.js';\nimport { infoStyles, renderInfo } from './render/info.js';\nimport { operationStyles, renderOperations } from './render/operation.js';\nimport { detailStyles } from './render/details.js';\nimport { exampleStyles, type ExampleContext, type ExamplePanelState } from './render/example.js';\nimport { buildNavItems, filterNav, tagFacets } from './render/nav.js';\nimport { renderMessages, renderProblems, renderSchemas, renderServers, sectionStyles } from './render/sections.js';\nimport { menuIcon, renderSidebar, sidebarStyles } from './render/sidebar.js';\nimport { TreeState, treeStyles } from './render/tree.js';\nimport { base } from './styles/base.js';\nimport { tokens } from './styles/tokens.js';\nimport { ThemeController, type Resolved } from './theme/theme.js';\nimport { badgeInk, parseColor, textSafe, toHex, type RGB } from './util/color.js';\n\nlet counter = 0;\n\n/**\n * <asyncapi-viewer src=\"...\"> renders an AsyncAPI document.\n *\n * Options are read from the element's attributes (see options.schema.json) and watched with a\n * MutationObserver, because each option has several accepted spellings and hand-written HTML\n * lowercases camelCase names. The theme controller reflects the resolved mode as\n * `resolved-theme` on the host. Derived colours (badge text, text-safe accents) are computed\n * from the resolved accent at runtime and set as private custom properties on the root.\n */\nexport class AsyncAPIViewerElement extends LitElement {\n static override styles = [tokens, base, headerStyles, infoStyles, operationStyles, treeStyles, exampleStyles, detailStyles, sectionStyles, sidebarStyles];\n\n #options: Options = parseOptions([]);\n #observer: MutationObserver | undefined;\n #loadedSrc: string | undefined;\n #result: LoadResult | undefined;\n #model: Document | undefined;\n #problems: Problem[] = [];\n #resolved: Resolved = 'light';\n #derived: Record<string, string> = {};\n #hasLogo = false;\n #hashHandled: string | undefined;\n readonly #trees = new Map<string, TreeState>();\n readonly #tree = (key: string): TreeState => {\n let state = this.#trees.get(key);\n if (!state) {\n state = new TreeState(() => this.requestUpdate());\n this.#trees.set(key, state);\n }\n return state;\n };\n readonly #messageIndex = new Map<string, number>();\n #downloadUrl: string | undefined;\n #query = '';\n #selectedTags = new Set<string>();\n #tagsOpen = false;\n /** Sidebar width chosen with the resize handle (amendment 19); undefined means the default. */\n #sideWidth: number | undefined;\n #resizeStart: { x: number; width: number } | undefined;\n #drawerOpen = false;\n #current: string | undefined;\n #liveText = '';\n #liveTimer: ReturnType<typeof setTimeout> | undefined;\n #intersection: IntersectionObserver | undefined;\n #visible = new Set<string>();\n readonly #panels = new Map<string, ExamplePanelState>();\n readonly #example = (key: string): ExampleContext => {\n let state = this.#panels.get(key);\n if (!state) {\n state = { tab: 'payload', index: 0, open: undefined, copied: undefined };\n this.#panels.set(key, state);\n }\n return { state, defaultOpen: this.#options.messageExamples, onChange: () => this.requestUpdate() };\n };\n readonly #onHashChange = () => {\n this.#hashHandled = undefined;\n this.#scrollToHash();\n };\n readonly #theme = new ThemeController(this, (resolved) => this.#onTheme(resolved));\n\n /** The validated options, re-read whenever an attribute changes. */\n get options(): Options {\n return this.#options;\n }\n\n /** The outcome of the last load, for tests and tooling. */\n get loadResult(): LoadResult | undefined {\n return this.#result;\n }\n\n /** Problems collected so far (reference loading and normalisation). */\n get problems(): readonly Problem[] {\n return this.#problems;\n }\n\n /** The normalised model, once loaded. */\n get model(): Document | undefined {\n return this.#model;\n }\n\n /** The element id used as the anchor prefix; generated when the tag has none. */\n get anchorPrefix(): string {\n return this.id;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.id) this.id = `asyncapi-viewer-${++counter}`;\n this.#readOptions();\n this.#observer = new MutationObserver(() => this.#readOptions());\n this.#observer.observe(this, { attributes: true });\n this.#theme.connect();\n this.ownerDocument.defaultView?.addEventListener('hashchange', this.#onHashChange);\n }\n\n override disconnectedCallback(): void {\n this.#observer?.disconnect();\n this.#observer = undefined;\n this.#theme.disconnect();\n this.#intersection?.disconnect();\n this.#intersection = undefined;\n this.ownerDocument.defaultView?.removeEventListener('hashchange', this.#onHashChange);\n super.disconnectedCallback();\n }\n\n protected override firstUpdated(): void {\n this.#deriveColors();\n // The build-time search fallback (a hidden list of headings for site search indexers,\n // emitted by the Python extension as light-DOM children) has done its job once we render.\n for (const el of this.querySelectorAll(':scope > [data-asyncapi-fallback]')) el.remove();\n }\n\n protected override updated(): void {\n this.#scrollToHash();\n this.#observeSections();\n // Written through the CSSOM, never as a style attribute, so a strict style-src holds.\n const layout = (this.renderRoot as ShadowRoot).querySelector<HTMLElement>('.layout');\n if (layout) {\n if (this.#sideWidth === undefined) layout.style.removeProperty('--_side-width');\n else layout.style.setProperty('--_side-width', `${this.#sideWidth}px`);\n }\n }\n\n /** Sidebar width bounds: never narrower than 220px, never leaving the main column under 600px. */\n #sideWidthBounds(): { min: number; max: number } {\n const min = 220;\n const max = Math.max(min, Math.min(560, Math.floor(this.getBoundingClientRect().width) - 600));\n return { min, max };\n }\n\n #setSideWidth(width: number): void {\n const { min, max } = this.#sideWidthBounds();\n const next = Math.round(Math.min(max, Math.max(min, width)));\n if (next !== this.#sideWidth) {\n this.#sideWidth = next;\n this.requestUpdate();\n }\n }\n\n #renderResizeHandle() {\n const { min, max } = this.#sideWidthBounds();\n const now = this.#sideWidth ?? 292;\n return html`<div\n class=\"side__resize ${this.#resizeStart ? 'side__resize--active' : ''}\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize sidebar\"\n aria-valuemin=${min}\n aria-valuemax=${max}\n aria-valuenow=${now}\n tabindex=\"0\"\n title=\"Drag to resize the sidebar; double-click to reset\"\n @pointerdown=${(e: PointerEvent) => {\n if (e.button !== 0) return;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n this.#resizeStart = { x: e.clientX, width: now };\n e.preventDefault();\n this.requestUpdate();\n }}\n @pointermove=${(e: PointerEvent) => {\n if (this.#resizeStart) this.#setSideWidth(this.#resizeStart.width + e.clientX - this.#resizeStart.x);\n }}\n @pointerup=${() => {\n this.#resizeStart = undefined;\n this.requestUpdate();\n }}\n @pointercancel=${() => {\n this.#resizeStart = undefined;\n this.requestUpdate();\n }}\n @dblclick=${() => {\n this.#sideWidth = undefined;\n this.requestUpdate();\n }}\n @keydown=${(e: KeyboardEvent) => {\n const step = 16;\n if (e.key === 'ArrowLeft') this.#setSideWidth(now - step);\n else if (e.key === 'ArrowRight') this.#setSideWidth(now + step);\n else if (e.key === 'Home') this.#setSideWidth(min);\n else if (e.key === 'End') this.#setSideWidth(max);\n else return;\n e.preventDefault();\n }}\n ></div>`;\n }\n\n /**\n * Spec 4.9: the sidebar highlights the block currently in view. Observed targets are the\n * section headings and operation blocks; the first visible one in document order wins.\n */\n #observeSections(): void {\n if (!this.#options.sidebar || !this.#model) {\n this.#intersection?.disconnect();\n this.#intersection = undefined;\n return;\n }\n const root = this.renderRoot as ShadowRoot;\n // The Operations section wrapper is skipped: its articles are the items, and the wrapper\n // would otherwise be \"visible\" whenever any of them is.\n const targets = [...root.querySelectorAll<HTMLElement>('section[aria-labelledby]:not(.ops), article.op')];\n this.#intersection?.disconnect();\n this.#visible.clear();\n this.#intersection = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n const id = e.target.id || e.target.getAttribute('aria-labelledby') || '';\n if (e.isIntersecting) this.#visible.add(id);\n else this.#visible.delete(id);\n }\n const order = targets.map((t) => t.id || t.getAttribute('aria-labelledby') || '');\n const first = order.find((id) => this.#visible.has(id));\n if (first !== this.#current) {\n this.#current = first;\n this.requestUpdate();\n }\n },\n { rootMargin: '0px 0px -60% 0px', threshold: 0 },\n );\n for (const t of targets) this.#intersection.observe(t);\n }\n\n #setQuery(query: string, shown: number, total: number): void {\n this.#query = query;\n this.#announce(shown, total);\n }\n\n #announce(shown: number, total: number): void {\n clearTimeout(this.#liveTimer);\n this.#liveTimer = setTimeout(() => {\n this.#liveText = this.#query.trim() === '' && this.#selectedTags.size === 0 ? '' : `${shown} of ${total} operations shown`;\n this.requestUpdate();\n }, 300);\n this.requestUpdate();\n }\n\n #openDrawer(): void {\n this.#drawerOpen = true;\n // The drawer is anchored to the viewer's top edge and fills one viewport height, so bring\n // that edge to the top of the viewport first when the viewer starts further down the page.\n const top = this.getBoundingClientRect().top;\n if (top > 0) this.ownerDocument.defaultView?.scrollBy({ top, behavior: 'smooth' });\n this.requestUpdate();\n this.updateComplete.then(() => (this.renderRoot as ShadowRoot).querySelector<HTMLInputElement>('.side__search')?.focus()).catch(() => undefined);\n }\n\n /** Close the drawer; focus returns to the menu button unless an item was chosen (amendment 10). */\n #closeDrawer(chosen = false): void {\n if (!this.#drawerOpen) return;\n this.#drawerOpen = false;\n this.requestUpdate();\n if (!chosen) {\n this.updateComplete.then(() => (this.renderRoot as ShadowRoot).querySelector<HTMLButtonElement>('.menu')?.focus()).catch(() => undefined);\n }\n }\n\n /** Keep Tab inside the open drawer. */\n #trapFocus(e: KeyboardEvent): void {\n if (e.key !== 'Tab' || !this.#drawerOpen) return;\n const panel = (this.renderRoot as ShadowRoot).querySelector<HTMLElement>('.side__panel');\n if (!panel) return;\n const focusable = [...panel.querySelectorAll<HTMLElement>('a[href], button, input, select, [tabindex=\"0\"]')].filter((el) => !el.hasAttribute('disabled'));\n if (focusable.length === 0) return;\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n const active = (this.renderRoot as ShadowRoot).activeElement;\n if (e.shiftKey && active === first) {\n last.focus();\n e.preventDefault();\n } else if (!e.shiftKey && active === last) {\n first.focus();\n e.preventDefault();\n }\n }\n\n /** Spec 4.11: a URL hash naming an anchor inside this viewer scrolls to it and focuses it. */\n #scrollToHash(): void {\n const hash = this.ownerDocument.defaultView?.location.hash ?? '';\n if (!this.#model || hash.length < 2 || hash === this.#hashHandled) return;\n const id = decodeURIComponent(hash.slice(1));\n if (!id.startsWith(`${this.id}--`)) return;\n const target = (this.renderRoot as ShadowRoot).getElementById(id) ?? (this.renderRoot as ShadowRoot).getElementById(`${id}--heading`);\n if (!target) return;\n this.#hashHandled = hash;\n if (target instanceof HTMLDetailsElement) target.open = true;\n target.scrollIntoView({ block: 'start' });\n (target.querySelector<HTMLElement>('[tabindex=\"-1\"], summary') ?? target).focus({ preventScroll: true });\n }\n\n #readOptions(): void {\n this.#options = parseOptions(this.getAttributeNames().map((n) => [n, this.getAttribute(n)] as const));\n this.#theme.mode = this.#options.theme;\n this.requestUpdate();\n void this.#load();\n }\n\n #onTheme(resolved: Resolved): void {\n this.#resolved = resolved;\n // Colours depend on the mode (background changes), so re-derive after the styles apply.\n this.updateComplete.then(() => this.#deriveColors()).catch(() => undefined);\n this.requestUpdate();\n }\n\n /**\n * Read the resolved accents and background through a probe element, then compute badge\n * text colour and text-safe accents (spec 4.2). Also detects whether a logo is configured.\n */\n #deriveColors(): void {\n const root = this.renderRoot as ShadowRoot | null;\n const probe = root?.querySelector<HTMLElement>('.probe');\n if (!probe) return;\n const read = (property: string): RGB | undefined => {\n probe.style.color = `var(${property})`;\n return parseColor(getComputedStyle(probe).color);\n };\n const primary = read('--_primary');\n const secondary = read('--_secondary');\n const send = read('--_send');\n const receive = read('--_receive');\n // The toolbar colour is the worst-case background for accent text: slightly darker than the\n // surface in light mode, slightly lighter than the page in dark mode.\n const bg = read('--_head');\n const dark = this.#resolved === 'dark';\n const derived: Record<string, string> = {};\n if (primary && bg) derived['--_primary-text'] = toHex(textSafe(primary, bg, dark));\n if (secondary && bg) derived['--_secondary-text'] = toHex(textSafe(secondary, bg, dark));\n if (send) derived['--_badge-ink-send'] = badgeInk(send);\n if (receive) derived['--_badge-ink-receive'] = badgeInk(receive);\n const logo = getComputedStyle(this).getPropertyValue('--_logo').trim();\n const hasLogo = logo !== '' && logo !== 'none';\n // Written through the CSSOM, never as a style attribute, so a strict style-src holds.\n const rootEl = root?.querySelector<HTMLElement>('.root');\n if (rootEl) for (const [k, v] of Object.entries(derived)) rootEl.style.setProperty(k, v);\n if (hasLogo !== this.#hasLogo || JSON.stringify(derived) !== JSON.stringify(this.#derived)) {\n this.#hasLogo = hasLogo;\n this.#derived = derived;\n this.requestUpdate();\n }\n }\n\n async #load(): Promise<void> {\n const src = this.#options.src;\n if (src === this.#loadedSrc) return;\n this.#loadedSrc = src;\n this.#result = undefined;\n this.#model = undefined;\n this.#problems = [];\n this.#trees.clear();\n this.#panels.clear();\n this.#messageIndex.clear();\n this.#query = '';\n this.#selectedTags = new Set();\n this.#tagsOpen = false;\n this.#drawerOpen = false;\n this.#current = undefined;\n if (this.#downloadUrl) URL.revokeObjectURL(this.#downloadUrl);\n this.#downloadUrl = undefined;\n if (src === undefined) return;\n const url = resolveUrl(src, this.ownerDocument.baseURI);\n const result = await loadDocument(url);\n if (this.#loadedSrc !== src) return; // src changed while loading\n this.#result = result;\n if (result.ok) {\n // Download spec serves the document exactly as fetched, whatever its origin.\n this.#downloadUrl = URL.createObjectURL(new Blob([result.text], { type: result.format === 'json' ? 'application/json' : 'application/yaml' }));\n const resolver = new RefResolver(result.url, result.data);\n const problems = await resolver.preload();\n if (this.#loadedSrc !== src) return;\n const o = this.#options;\n this.#model = normalize({\n resolver,\n data: result.data,\n specVersion: result.specVersion,\n specMajor: result.specMajor,\n problems,\n options: {\n labels: { publish: o.publishLabel, subscribe: o.subscribeLabel, send: o.sendLabel, receive: o.receiveLabel, request: o.requestLabel, reply: o.replyLabel },\n useChannelAddressAsIdentifier: o.useChannelAddressAsIdentifier,\n applyTraits: o.parserOptions.applyTraits,\n },\n });\n this.#problems = this.#model.problems;\n }\n this.requestUpdate();\n }\n\n override render() {\n return html`<div class=\"root\">\n <span class=\"probe visually-hidden\" aria-hidden=\"true\"></span>\n ${this.#renderBody()}\n </div>`;\n }\n\n #renderBody() {\n const src = this.#options.src;\n if (src === undefined) return html`<div class=\"content\"><p class=\"alert\" role=\"alert\">This viewer has no <code>src</code> attribute, so there is nothing to show.</p></div>`;\n const r = this.#result;\n if (!r) return html`<div class=\"content\"><p class=\"summary\">Loading ${src}…</p></div>`;\n if (!r.ok) {\n return html`<div class=\"content\">\n <p class=\"alert\" role=\"alert\">Could not load <code>${r.url}</code>: ${r.error.message}</p>\n </div>`;\n }\n const m = this.#model;\n if (!m) return html`<div class=\"content\"><p class=\"summary\">Preparing ${src}…</p></div>`;\n const o = this.#options;\n const operations = m.operations;\n const sectionCtx = { prefix: this.id, tree: this.#tree, example: this.#example };\n const navItems = o.sidebar\n ? buildNavItems(m, operations, this.id, {\n info: o.info,\n servers: o.servers,\n messages: o.messages,\n schemas: o.schemas,\n showServers: o.showServers,\n showOperations: o.showOperations,\n })\n : [];\n const filtered = filterNav(navItems, this.#query, o.searchKeepSections, this.#selectedTags);\n const count = (query: string, tags: ReadonlySet<string>) => filterNav(navItems, query, o.searchKeepSections, tags).shown;\n const menu = o.sidebar\n ? html`<button\n class=\"menu\"\n type=\"button\"\n aria-label=\"Open navigation\"\n aria-expanded=${this.#drawerOpen ? 'true' : 'false'}\n aria-controls=\"${this.id}--sidebar\"\n @click=${() => (this.#drawerOpen ? this.#closeDrawer() : this.#openDrawer())}\n >\n ${menuIcon}\n </button>`\n : nothing;\n const main = html`\n ${renderHeader({\n doc: m,\n src: r.url,\n downloadHref: this.#downloadUrl,\n hasLogo: this.#hasLogo,\n themeToggle: o.themeToggle,\n resolvedTheme: this.#resolved,\n onToggleTheme: () => this.#theme.toggle(),\n menu,\n })}\n <div class=\"content\">\n ${o.info ? renderInfo(m, `${this.id}--info`) : nothing}\n ${o.servers ? renderServers(m, this.id) : nothing}\n ${o.operations\n ? renderOperations(m, {\n ...sectionCtx,\n messageIndex: (anchor) => this.#messageIndex.get(anchor) ?? 0,\n selectMessage: (anchor, index) => {\n this.#messageIndex.set(anchor, index);\n this.requestUpdate();\n },\n })\n : nothing}\n ${o.messages ? renderMessages(m, sectionCtx, o.showMessageExamples) : nothing}\n ${o.schemas ? renderSchemas(m, sectionCtx) : nothing}\n ${o.errors ? renderProblems(this.#problems, this.id) : nothing}\n </div>\n `;\n if (!o.sidebar) return html`<div class=\"layout\"><div class=\"main\">${main}</div></div>`;\n return html`<div\n class=\"layout layout--sidebar ${this.#drawerOpen ? 'layout--open' : ''} ${this.#resizeStart ? 'layout--resizing' : ''}\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.#drawerOpen && !(e.target as HTMLElement).classList?.contains('side__search')) {\n this.#closeDrawer();\n e.preventDefault();\n }\n this.#trapFocus(e);\n }}\n >\n ${renderSidebar({\n items: navItems,\n tags: tagFacets(m, operations),\n selectedTags: this.#selectedTags,\n tagsOpen: this.#tagsOpen,\n onTagsToggle: (open) => {\n this.#tagsOpen = open;\n this.requestUpdate();\n },\n onToggleTag: (name) => {\n const next = new Set(this.#selectedTags);\n if (next.has(name)) next.delete(name);\n else next.add(name);\n this.#selectedTags = next;\n this.#announce(count(this.#query, next), filtered.total);\n },\n onClearTags: () => {\n this.#selectedTags = new Set();\n this.#announce(count(this.#query, this.#selectedTags), filtered.total);\n },\n query: this.#query,\n keepSections: o.searchKeepSections,\n current: this.#current,\n open: this.#drawerOpen,\n liveText: this.#liveText,\n onQuery: (q) => this.#setQuery(q, count(q, this.#selectedTags), filtered.total),\n onEscape: () => this.#closeDrawer(),\n onChoose: () => this.#closeDrawer(true),\n onClose: () => this.#closeDrawer(),\n id: this.id,\n })}\n ${this.#renderResizeHandle()}\n <div class=\"main\" ?inert=${this.#drawerOpen}>${main}</div>\n </div>`;\n }\n}\n\n// Loading the script twice (two <script> tags, instant navigation) must be harmless.\nif (!customElements.get('asyncapi-viewer')) {\n customElements.define('asyncapi-viewer', AsyncAPIViewerElement);\n}\n","/**\n * Structural rules every normalised Document must satisfy, whatever produced it.\n * Used by the fixture tests now and by the normaliser tests and the coverage gate later.\n * Returns human-readable violations; an empty array means the document is well formed.\n */\nimport type { Document, Schema, SchemaNode } from './types.js';\n\nconst ANCHOR = /^[A-Za-z0-9][A-Za-z0-9_.-]*$/;\n\nconst CONSTRAINT_KEYS = new Set([\n 'minimum',\n 'exclusiveMinimum',\n 'maximum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'minLength',\n 'maxLength',\n 'pattern',\n 'minItems',\n 'maxItems',\n 'uniqueItems',\n 'minProperties',\n 'maxProperties',\n]);\n\nexport function checkDocument(doc: Document): string[] {\n const out: string[] = [];\n const fail = (msg: string) => out.push(msg);\n\n const major = Number(doc.specVersion.split('.')[0]);\n if (major !== doc.specMajor) fail(`specMajor ${doc.specMajor} does not match specVersion ${doc.specVersion}`);\n if (!doc.title) fail('title is empty');\n\n checkAnchors('servers', doc.servers.map((s) => s.anchor), fail);\n checkAnchors('operations', doc.operations.map((o) => o.anchor), fail);\n checkAnchors('messages', doc.messages.map((m) => m.anchor), fail);\n checkAnchors('schemas', doc.schemas.map((s) => s.anchor), fail);\n\n const serverIds = new Set(doc.servers.map((s) => s.id));\n const schemaIds = new Set(doc.schemas.map((s) => s.id));\n\n for (const op of doc.operations) {\n const at = `operation ${op.id}`;\n if (op.action === 'send' && op.kind !== 'send' && op.kind !== 'request') fail(`${at}: action send with kind ${op.kind}`);\n if (op.action === 'receive' && op.kind !== 'receive' && op.kind !== 'reply') fail(`${at}: action receive with kind ${op.kind}`);\n const needsReply = op.kind === 'request' || op.kind === 'reply';\n if (needsReply !== (op.reply !== undefined)) fail(`${at}: kind ${op.kind} but reply is ${op.reply ? 'present' : 'absent'}`);\n if (!op.badgeLabel) fail(`${at}: empty badgeLabel`);\n if (!op.heading) fail(`${at}: empty heading`);\n for (const id of op.channel.servers) {\n if (!serverIds.has(id)) fail(`${at}: channel server \"${id}\" is not a known server`);\n }\n for (const m of op.messages) checkMessage(m, `${at} message ${m.id}`, schemaIds, fail);\n }\n for (const m of doc.messages) checkMessage(m, `message ${m.id}`, schemaIds, fail);\n for (const s of doc.schemas) {\n if (s.schema.kind === 'node') {\n if (s.schema.name !== s.id) fail(`schema ${s.id}: root name \"${s.schema.name}\" should equal its id`);\n checkNode(s.schema, `schema ${s.id}`, [], true, schemaIds, fail);\n }\n }\n return out;\n}\n\nfunction checkAnchors(section: string, anchors: string[], fail: (m: string) => void): void {\n const seen = new Set<string>();\n for (const a of anchors) {\n if (!ANCHOR.test(a)) fail(`${section}: anchor \"${a}\" is not a safe slug`);\n if (seen.has(a)) fail(`${section}: duplicate anchor \"${a}\"`);\n seen.add(a);\n }\n}\n\nfunction checkMessage(\n m: { contentType: string; schemaFormat: string; payload?: Schema; headers?: Schema },\n at: string,\n schemaIds: Set<string>,\n fail: (m: string) => void,\n): void {\n if (!m.contentType) fail(`${at}: empty contentType`);\n if (!m.schemaFormat) fail(`${at}: empty schemaFormat`);\n for (const [label, schema] of [\n ['payload', m.payload],\n ['headers', m.headers],\n ] as const) {\n if (!schema || schema.kind !== 'node') continue;\n if (schema.name !== '') fail(`${at} ${label}: root name should be \"\" but is \"${schema.name}\"`);\n checkNode(schema, `${at} ${label}`, [], true, schemaIds, fail);\n }\n}\n\nfunction checkNode(\n node: SchemaNode,\n at: string,\n expectedPath: string[],\n isRoot: boolean,\n schemaIds: Set<string>,\n fail: (m: string) => void,\n): void {\n const here = `${at} › ${node.name || '(root)'}`;\n if (isRoot && node.required) fail(`${here}: root nodes are never required`);\n if (!sameList(node.path, expectedPath)) fail(`${here}: path [${node.path}] should be [${expectedPath}]`);\n for (const c of node.constraints) {\n if (!CONSTRAINT_KEYS.has(c.key)) fail(`${here}: unknown constraint ${c.key}`);\n }\n if (node.circularRef !== undefined && node.children.length > 0) fail(`${here}: circular reference with children`);\n if (node.refName !== undefined && schemaIds.size > 0 && !schemaIds.has(node.refName)) {\n fail(`${here}: refName \"${node.refName}\" is not a component schema`);\n }\n const isArray = node.types.includes('array');\n const itemChildren = node.children.filter((c) => c.name === '[]');\n if (itemChildren.length > 1) fail(`${here}: more than one \"[]\" item node`);\n if (itemChildren.length === 1 && !isArray) fail(`${here}: \"[]\" item node on a non-array`);\n if (itemChildren.length === 1 && node.children.length !== 1) fail(`${here}: array with properties besides \"[]\"`);\n\n // Children's path: root contributes nothing; an item node contributes \"<array>[]\" in place of\n // its parent's segment (just \"[]\" when the array is the root); every other node its name.\n const childPath = isRoot\n ? []\n : node.name === '[]'\n ? [...expectedPath.slice(0, -1), `${expectedPath[expectedPath.length - 1] ?? ''}[]`]\n : [...expectedPath, node.name];\n for (const child of node.children) checkNode(child, at, childPath, false, schemaIds, fail);\n if (node.composition) {\n node.composition.variants.forEach((v, i) => {\n if (!v.title) fail(`${here}: variant ${i + 1} has no title`);\n checkNode(v.node, `${here} variant ${i + 1}`, expectedPath, isRoot, schemaIds, fail);\n });\n }\n}\n\nfunction sameList(a: string[], b: string[]): boolean {\n return a.length === b.length && a.every((x, i) => x === b[i]);\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100],"mappings":"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"}
|