@pierre/diffs 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/highlighter/themes/constants.d.ts +2 -2
- package/dist/highlighter/themes/constants.d.ts.map +1 -1
- package/dist/highlighter/themes/constants.js.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts +5 -0
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +18 -0
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -0
- package/dist/highlighter/themes/registerCustomTheme.d.ts +2 -2
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/areOptionsEqual.d.ts.map +1 -1
- package/dist/utils/areOptionsEqual.js.map +1 -1
- package/dist/utils/parseLineType.js +2 -1
- package/dist/utils/parseLineType.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +3 -3
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +3 -3
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-portable.js","names":["r","l","o","m","b","y","C","T","o","s","a","u","r","i","F","l","S","ee","K","w","R","A","I","k","L","f","Q","P","te","h","E","z","X","G","U","V","J","$","W","N","D","_","B","O","r","i","r","q","s","u","o","p","re","i","d","a","l","f","g","H","x","Z","v","M","S","u","r","s","i","d","a","o","b","y","x","m","h","v","p","R","P","incrementIfAtLeast","i","re","m","token","m","f","createCaptureMap","i","r","m","i","f","key","slug","p","i","createGroup","createLookaroundAssertion","createUnicodeProperty","createQuantifier","createAlternative","createAssertion","createCharacter","b","B","createCharacterClass","createCharacterSet","slug2","root","hasOnlyChild","f","createBackreference","createCapturingGroup","a","createSubroutine","body","parse","number","createCharacter2","createGroup2","createAlternative2","#pattern","re","#captureMap","#nameMap","#strategy","#compiled","#execCore","m","d","parse2","p","i","m","s","s","r","i","key","a","b","v","j","root","head","token","matchers","q","m","self","types","key","html","svg","htmlBase","svgBase","own","one","key","all","own","parse","token","stringify","stringify","emptyChildren","siblings","increment","html","body","tbody","html","head","child","key","x","y","commas","spaces","key","x","p","r","splitLines","i","highlighter","l","token","a","b","ShikiError$1","decorations","d","text","transform","j","_","s","root","clone","ShikiError","Registry","Registry$1","core","COMMIT_METADATA_SPLIT: RegExp","GIT_DIFF_FILE_BREAK_REGEX: RegExp","UNIFIED_DIFF_FILE_BREAK_REGEX: RegExp","FILE_CONTEXT_BLOB: RegExp","HUNK_HEADER: RegExp","SPLIT_WITH_NEWLINES: RegExp","FILENAME_HEADER_REGEX: RegExp","FILENAME_HEADER_REGEX_GIT: RegExp","ALTERNATE_FILE_NAMES_GIT: RegExp","FILE_MODE_FROM_INDEX: RegExp","DEFAULT_THEMES: ThemesType","ResolvedLanguages: Map<SupportedLanguages, ResolvedLanguage>","ResolvingLanguages: Map<\n SupportedLanguages,\n Promise<ResolvedLanguage>\n>","AttachedLanguages: Set<string>","ResolvedThemes: Map<DiffsThemeNames, ThemeRegistrationResolved>","ResolvingThemes: Map<\n DiffsThemeNames,\n Promise<ThemeRegistrationResolved>\n>","RegisteredCustomThemes: Map<\n string,\n () => Promise<ThemeRegistrationResolved>\n>","AttachedThemes: Set<string>","resolvedTheme: ThemeRegistrationResolved | undefined","i","value","i","a","b","k","j","i","token","i","i","v","key","i","p","i","i","i","distanceIterator","err","structuredPatch","l","i","text","i","i","s","element","token","i","head","text","comment","j","o","range","v","_","s","root","clone","key","firstChild: RootContent | HASTElement | Root | null","state: SharedRenderState","transformers: ShikiTransformer[]","children: ElementContent[]","tokenStyleNormalizer: ShikiTransformer","token","style: Record<string, string>","EXTENSION_TO_FILE_FORMAT: ExtensionFormatMap","key","highlighter","firstChild: RootContent | Element | Root | null","highlighter","code","hunks: RenderDiffFilesResult[]","lineDiff","deletionSpans: [0 | 1, string][]","additionSpans: [0 | 1, string][]","oldInfo: Record<number, LineInfo | undefined>","newInfo: Record<number, LineInfo | undefined>","oldDecorations: DecorationItem[]","newDecorations: DecorationItem[]","i","hastConfig: CodeToHastOptions<DiffsThemeNames>","highlighter","hastConfig: CodeToHastOptions<DiffsThemeNames>","highlighter: DiffsHighlighter | undefined","renderOptions: WorkerRenderingOptions","highlighter","response: RenderErrorResponse"],"sources":["../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/utils.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/tokenizer/tokenize.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/parser/node-utils.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/parser/parse.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/traverser/traverse.js","../../../../node_modules/.bun/regex@6.0.1/node_modules/regex/src/utils-internals.js","../../../../node_modules/.bun/regex-utilities@2.3.0/node_modules/regex-utilities/src/index.js","../../../../node_modules/.bun/regex@6.0.1/node_modules/regex/src/atomic.js","../../../../node_modules/.bun/regex@6.0.1/node_modules/regex/src/subclass.js","../../../../node_modules/.bun/regex-recursion@6.0.2/node_modules/regex-recursion/src/index.js","../../../../node_modules/.bun/oniguruma-to-es@4.3.4/node_modules/oniguruma-to-es/dist/esm/index.js","../../../../node_modules/.bun/@shikijs+engine-javascript@3.20.0/node_modules/@shikijs/engine-javascript/dist/shared/engine-javascript.hzpS1_41.mjs","../../../../node_modules/.bun/@shikijs+engine-javascript@3.20.0/node_modules/@shikijs/engine-javascript/dist/engine-compile.mjs","../../../../node_modules/.bun/@shikijs+engine-javascript@3.20.0/node_modules/@shikijs/engine-javascript/dist/engine-raw.mjs","../../../../node_modules/.bun/@shikijs+types@3.20.0/node_modules/@shikijs/types/dist/index.mjs","../../../../node_modules/.bun/@shikijs+vscode-textmate@10.0.2/node_modules/@shikijs/vscode-textmate/dist/index.js","../../../../node_modules/.bun/html-void-elements@3.0.0/node_modules/html-void-elements/index.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/schema.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/merge.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/normalize.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/info.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/types.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/defined-info.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/create.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/aria.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/html.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/svg.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/xlink.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/xmlns.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/xml.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/hast-to-react.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/find.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/index.js","../../../../node_modules/.bun/zwitch@2.0.4/node_modules/zwitch/index.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-decimal.js","../../../../node_modules/.bun/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../../../../node_modules/.bun/character-entities-html4@2.1.0/node_modules/character-entities-html4/index.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/constant/dangerous.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-named.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-smart.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-basic.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/comment.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/doctype.js","../../../../node_modules/.bun/ccount@2.0.1/node_modules/ccount/index.js","../../../../node_modules/.bun/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../../node_modules/.bun/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../../node_modules/.bun/hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/omission.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/closing.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/opening.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/element.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/text.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/raw.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/root.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/index.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/index.js","../../../../node_modules/.bun/@shikijs+core@3.20.0/node_modules/@shikijs/core/dist/index.mjs","../../src/constants.ts","../../src/highlighter/languages/constants.ts","../../src/highlighter/languages/attachResolvedLanguages.ts","../../src/highlighter/themes/constants.ts","../../src/highlighter/themes/attachResolvedThemes.ts","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/base.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/character.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/string.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/word.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/params.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/line.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/sentence.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/css.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/json.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/array.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/line-endings.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/parse.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/distance-iterator.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/apply.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/reverse.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/create.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/dmp.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/xml.js","../../src/utils/cleanLastNewline.ts","../../../../node_modules/.bun/@shikijs+transformers@3.20.0/node_modules/@shikijs/transformers/dist/index.mjs","../../src/utils/hast_utils.ts","../../src/utils/processLine.ts","../../src/utils/createTransformerWithState.ts","../../src/utils/formatCSSVariablePrefix.ts","../../src/utils/getFiletypeFromFileName.ts","../../src/utils/getHighlighterThemeStyles.ts","../../src/utils/getLineNodes.ts","../../src/utils/parseDiffDecorations.ts","../../src/utils/renderDiffWithHighlighter.ts","../../src/utils/renderFileWithHighlighter.ts","../../src/worker/worker.ts"],"sourcesContent":["\"use strict\";function r(e){if([...e].length!==1)throw new Error(`Expected \"${e}\" to be a single code point`);return e.codePointAt(0)}function l(e,t,n){return e.has(t)||e.set(t,n),e.get(t)}const i=new Set([\"alnum\",\"alpha\",\"ascii\",\"blank\",\"cntrl\",\"digit\",\"graph\",\"lower\",\"print\",\"punct\",\"space\",\"upper\",\"word\",\"xdigit\"]),o=String.raw;function u(e,t){if(e==null)throw new Error(t??\"Value expected\");return e}export{r as cpOf,l as getOrInsert,i as PosixClassNames,o as r,u as throwIfNullish};\n//# sourceMappingURL=utils.js.map\n","\"use strict\";import{cpOf as h,PosixClassNames as G,r as p,throwIfNullish as N}from\"../utils.js\";const m=p`\\[\\^?`,b=`c.? | C(?:-.?)?|${p`[pP]\\{(?:\\^?[-\\x20_]*[A-Za-z][-\\x20\\w]*\\})?`}|${p`x[89A-Fa-f]\\p{AHex}(?:\\\\x[89A-Fa-f]\\p{AHex})*`}|${p`u(?:\\p{AHex}{4})? | x\\{[^\\}]*\\}? | x\\p{AHex}{0,2}`}|${p`o\\{[^\\}]*\\}?`}|${p`\\d{1,3}`}`,y=/[?*+][?+]?|\\{(?:\\d+(?:,\\d*)?|,\\d+)\\}\\??/,C=new RegExp(p`\n \\\\ (?:\n ${b}\n | [gk]<[^>]*>?\n | [gk]'[^']*'?\n | .\n )\n | \\( (?:\n \\? (?:\n [:=!>({]\n | <[=!]\n | <[^>]*>\n | '[^']*'\n | ~\\|?\n | #(?:[^)\\\\]|\\\\.?)*\n | [^:)]*[:)]\n )?\n | \\*[^\\)]*\\)?\n )?\n | (?:${y.source})+\n | ${m}\n | .\n`.replace(/\\s+/g,\"\"),\"gsu\"),T=new RegExp(p`\n \\\\ (?:\n ${b}\n | .\n )\n | \\[:(?:\\^?\\p{Alpha}+|\\^):\\]\n | ${m}\n | &&\n | .\n`.replace(/\\s+/g,\"\"),\"gsu\");function M(e,n={}){const t={flags:\"\",...n,rules:{captureGroup:!1,singleline:!1,...n.rules}};if(typeof e!=\"string\")throw new Error(\"String expected as pattern\");const o=Y(t.flags),s=[o.extended],a={captureGroup:t.rules.captureGroup,getCurrentModX(){return s.at(-1)},numOpenGroups:0,popModX(){s.pop()},pushModX(u){s.push(u)},replaceCurrentModX(u){s[s.length-1]=u},singleline:t.rules.singleline};let r=[],i;for(C.lastIndex=0;i=C.exec(e);){const u=F(a,e,i[0],C.lastIndex);u.tokens?r.push(...u.tokens):u.token&&r.push(u.token),u.lastIndex!==void 0&&(C.lastIndex=u.lastIndex)}const l=[];let c=0;r.filter(u=>u.type===\"GroupOpen\").forEach(u=>{u.kind===\"capturing\"?u.number=++c:u.raw===\"(\"&&l.push(u)}),c||l.forEach((u,S)=>{u.kind=\"capturing\",u.number=S+1});const g=c||l.length;return{tokens:r.map(u=>u.type===\"EscapedNumber\"?ee(u,g):u).flat(),flags:o}}function F(e,n,t,o){const[s,a]=t;if(t===\"[\"||t===\"[^\"){const r=K(n,t,o);return{tokens:r.tokens,lastIndex:r.lastIndex}}if(s===\"\\\\\"){if(\"AbBGyYzZ\".includes(a))return{token:w(t,t)};if(/^\\\\g[<']/.test(t)){if(!/^\\\\g(?:<[^>]+>|'[^']+')$/.test(t))throw new Error(`Invalid group name \"${t}\"`);return{token:R(t)}}if(/^\\\\k[<']/.test(t)){if(!/^\\\\k(?:<[^>]+>|'[^']+')$/.test(t))throw new Error(`Invalid group name \"${t}\"`);return{token:A(t)}}if(a===\"K\")return{token:I(\"keep\",t)};if(a===\"N\"||a===\"R\")return{token:k(\"newline\",t,{negate:a===\"N\"})};if(a===\"O\")return{token:k(\"any\",t)};if(a===\"X\")return{token:k(\"text_segment\",t)};const r=x(t,{inCharClass:!1});return Array.isArray(r)?{tokens:r}:{token:r}}if(s===\"(\"){if(a===\"*\")return{token:j(t)};if(t===\"(?{\")throw new Error(`Unsupported callout \"${t}\"`);if(t.startsWith(\"(?#\")){if(n[o]!==\")\")throw new Error('Unclosed comment group \"(?#\"');return{lastIndex:o+1}}if(/^\\(\\?[-imx]+[:)]$/.test(t))return{token:L(t,e)};if(e.pushModX(e.getCurrentModX()),e.numOpenGroups++,t===\"(\"&&!e.captureGroup||t===\"(?:\")return{token:f(\"group\",t)};if(t===\"(?>\")return{token:f(\"atomic\",t)};if(t===\"(?=\"||t===\"(?!\"||t===\"(?<=\"||t===\"(?<!\")return{token:f(t[2]===\"<\"?\"lookbehind\":\"lookahead\",t,{negate:t.endsWith(\"!\")})};if(t===\"(\"&&e.captureGroup||t.startsWith(\"(?<\")&&t.endsWith(\">\")||t.startsWith(\"(?'\")&&t.endsWith(\"'\"))return{token:f(\"capturing\",t,{...t!==\"(\"&&{name:t.slice(3,-1)}})};if(t.startsWith(\"(?~\")){if(t===\"(?~|\")throw new Error(`Unsupported absence function kind \"${t}\"`);return{token:f(\"absence_repeater\",t)}}throw t===\"(?(\"?new Error(`Unsupported conditional \"${t}\"`):new Error(`Invalid or unsupported group option \"${t}\"`)}if(t===\")\"){if(e.popModX(),e.numOpenGroups--,e.numOpenGroups<0)throw new Error('Unmatched \")\"');return{token:Q(t)}}if(e.getCurrentModX()){if(t===\"#\"){const r=n.indexOf(`\n`,o);return{lastIndex:r===-1?n.length:r}}if(/^\\s$/.test(t)){const r=/\\s+/y;return r.lastIndex=o,{lastIndex:r.exec(n)?r.lastIndex:o}}}if(t===\".\")return{token:k(\"dot\",t)};if(t===\"^\"||t===\"$\"){const r=e.singleline?{\"^\":p`\\A`,$:p`\\Z`}[t]:t;return{token:w(r,t)}}return t===\"|\"?{token:P(t)}:y.test(t)?{tokens:te(t)}:{token:d(h(t),t)}}function K(e,n,t){const o=[E(n[1]===\"^\",n)];let s=1,a;for(T.lastIndex=t;a=T.exec(e);){const r=a[0];if(r[0]===\"[\"&&r[1]!==\":\")s++,o.push(E(r[1]===\"^\",r));else if(r===\"]\"){if(o.at(-1).type===\"CharacterClassOpen\")o.push(d(93,r));else if(s--,o.push(z(r)),!s)break}else{const i=X(r);Array.isArray(i)?o.push(...i):o.push(i)}}return{tokens:o,lastIndex:T.lastIndex||e.length}}function X(e){if(e[0]===\"\\\\\")return x(e,{inCharClass:!0});if(e[0]===\"[\"){const n=/\\[:(?<negate>\\^?)(?<name>[a-z]+):\\]/.exec(e);if(!n||!G.has(n.groups.name))throw new Error(`Invalid POSIX class \"${e}\"`);return k(\"posix\",e,{value:n.groups.name,negate:!!n.groups.negate})}return e===\"-\"?U(e):e===\"&&\"?H(e):d(h(e),e)}function x(e,{inCharClass:n}){const t=e[1];if(t===\"c\"||t===\"C\")return Z(e);if(\"dDhHsSwW\".includes(t))return q(e);if(e.startsWith(p`\\o{`))throw new Error(`Incomplete, invalid, or unsupported octal code point \"${e}\"`);if(/^\\\\[pP]\\{/.test(e)){if(e.length===3)throw new Error(`Incomplete or invalid Unicode property \"${e}\"`);return V(e)}if(/^\\\\x[89A-Fa-f]\\p{AHex}/u.test(e))try{const o=e.split(/\\\\x/).slice(1).map(i=>parseInt(i,16)),s=new TextDecoder(\"utf-8\",{ignoreBOM:!0,fatal:!0}).decode(new Uint8Array(o)),a=new TextEncoder;return[...s].map(i=>{const l=[...a.encode(i)].map(c=>`\\\\x${c.toString(16)}`).join(\"\");return d(h(i),l)})}catch{throw new Error(`Multibyte code \"${e}\" incomplete or invalid in Oniguruma`)}if(t===\"u\"||t===\"x\")return d(J(e),e);if($.has(t))return d($.get(t),e);if(/\\d/.test(t))return W(n,e);if(e===\"\\\\\")throw new Error(p`Incomplete escape \"\\\"`);if(t===\"M\")throw new Error(`Unsupported meta \"${e}\"`);if([...e].length===2)return d(e.codePointAt(1),e);throw new Error(`Unexpected escape \"${e}\"`)}function P(e){return{type:\"Alternator\",raw:e}}function w(e,n){return{type:\"Assertion\",kind:e,raw:n}}function A(e){return{type:\"Backreference\",raw:e}}function d(e,n){return{type:\"Character\",value:e,raw:n}}function z(e){return{type:\"CharacterClassClose\",raw:e}}function U(e){return{type:\"CharacterClassHyphen\",raw:e}}function H(e){return{type:\"CharacterClassIntersector\",raw:e}}function E(e,n){return{type:\"CharacterClassOpen\",negate:e,raw:n}}function k(e,n,t={}){return{type:\"CharacterSet\",kind:e,...t,raw:n}}function I(e,n,t={}){return e===\"keep\"?{type:\"Directive\",kind:e,raw:n}:{type:\"Directive\",kind:e,flags:N(t.flags),raw:n}}function W(e,n){return{type:\"EscapedNumber\",inCharClass:e,raw:n}}function Q(e){return{type:\"GroupClose\",raw:e}}function f(e,n,t={}){return{type:\"GroupOpen\",kind:e,...t,raw:n}}function D(e,n,t,o){return{type:\"NamedCallout\",kind:e,tag:n,arguments:t,raw:o}}function _(e,n,t,o){return{type:\"Quantifier\",kind:e,min:n,max:t,raw:o}}function R(e){return{type:\"Subroutine\",raw:e}}const B=new Set([\"COUNT\",\"CMP\",\"ERROR\",\"FAIL\",\"MAX\",\"MISMATCH\",\"SKIP\",\"TOTAL_COUNT\"]),$=new Map([[\"a\",7],[\"b\",8],[\"e\",27],[\"f\",12],[\"n\",10],[\"r\",13],[\"t\",9],[\"v\",11]]);function Z(e){const n=e[1]===\"c\"?e[2]:e[3];if(!n||!/[A-Za-z]/.test(n))throw new Error(`Unsupported control character \"${e}\"`);return d(h(n.toUpperCase())-64,e)}function L(e,n){let{on:t,off:o}=/^\\(\\?(?<on>[imx]*)(?:-(?<off>[-imx]*))?/.exec(e).groups;o??=\"\";const s=(n.getCurrentModX()||t.includes(\"x\"))&&!o.includes(\"x\"),a=v(t),r=v(o),i={};if(a&&(i.enable=a),r&&(i.disable=r),e.endsWith(\")\"))return n.replaceCurrentModX(s),I(\"flags\",e,{flags:i});if(e.endsWith(\":\"))return n.pushModX(s),n.numOpenGroups++,f(\"group\",e,{...(a||r)&&{flags:i}});throw new Error(`Unexpected flag modifier \"${e}\"`)}function j(e){const n=/\\(\\*(?<name>[A-Za-z_]\\w*)?(?:\\[(?<tag>(?:[A-Za-z_]\\w*)?)\\])?(?:\\{(?<args>[^}]*)\\})?\\)/.exec(e);if(!n)throw new Error(`Incomplete or invalid named callout \"${e}\"`);const{name:t,tag:o,args:s}=n.groups;if(!t)throw new Error(`Invalid named callout \"${e}\"`);if(o===\"\")throw new Error(`Named callout tag with empty value not allowed \"${e}\"`);const a=s?s.split(\",\").filter(g=>g!==\"\").map(g=>/^[+-]?\\d+$/.test(g)?+g:g):[],[r,i,l]=a,c=B.has(t)?t.toLowerCase():\"custom\";switch(c){case\"fail\":case\"mismatch\":case\"skip\":if(a.length>0)throw new Error(`Named callout arguments not allowed \"${a}\"`);break;case\"error\":if(a.length>1)throw new Error(`Named callout allows only one argument \"${a}\"`);if(typeof r==\"string\")throw new Error(`Named callout argument must be a number \"${r}\"`);break;case\"max\":if(!a.length||a.length>2)throw new Error(`Named callout must have one or two arguments \"${a}\"`);if(typeof r==\"string\"&&!/^[A-Za-z_]\\w*$/.test(r))throw new Error(`Named callout argument one must be a tag or number \"${r}\"`);if(a.length===2&&(typeof i==\"number\"||!/^[<>X]$/.test(i)))throw new Error(`Named callout optional argument two must be '<', '>', or 'X' \"${i}\"`);break;case\"count\":case\"total_count\":if(a.length>1)throw new Error(`Named callout allows only one argument \"${a}\"`);if(a.length===1&&(typeof r==\"number\"||!/^[<>X]$/.test(r)))throw new Error(`Named callout optional argument must be '<', '>', or 'X' \"${r}\"`);break;case\"cmp\":if(a.length!==3)throw new Error(`Named callout must have three arguments \"${a}\"`);if(typeof r==\"string\"&&!/^[A-Za-z_]\\w*$/.test(r))throw new Error(`Named callout argument one must be a tag or number \"${r}\"`);if(typeof i==\"number\"||!/^(?:[<>!=]=|[<>])$/.test(i))throw new Error(`Named callout argument two must be '==', '!=', '>', '<', '>=', or '<=' \"${i}\"`);if(typeof l==\"string\"&&!/^[A-Za-z_]\\w*$/.test(l))throw new Error(`Named callout argument three must be a tag or number \"${l}\"`);break;case\"custom\":throw new Error(`Undefined callout name \"${t}\"`);default:throw new Error(`Unexpected named callout kind \"${c}\"`)}return D(c,o??null,s?.split(\",\")??null,e)}function O(e){let n=null,t,o;if(e[0]===\"{\"){const{minStr:s,maxStr:a}=/^\\{(?<minStr>\\d*)(?:,(?<maxStr>\\d*))?/.exec(e).groups,r=1e5;if(+s>r||a&&+a>r)throw new Error(\"Quantifier value unsupported in Oniguruma\");if(t=+s,o=a===void 0?+s:a===\"\"?1/0:+a,t>o&&(n=\"possessive\",[t,o]=[o,t]),e.endsWith(\"?\")){if(n===\"possessive\")throw new Error('Unsupported possessive interval quantifier chain with \"?\"');n=\"lazy\"}else n||(n=\"greedy\")}else t=e[0]===\"+\"?1:0,o=e[0]===\"?\"?1:1/0,n=e[1]===\"+\"?\"possessive\":e[1]===\"?\"?\"lazy\":\"greedy\";return _(n,t,o,e)}function q(e){const n=e[1].toLowerCase();return k({d:\"digit\",h:\"hex\",s:\"space\",w:\"word\"}[n],e,{negate:e[1]!==n})}function V(e){const{p:n,neg:t,value:o}=/^\\\\(?<p>[pP])\\{(?<neg>\\^?)(?<value>[^}]+)/.exec(e).groups;return k(\"property\",e,{value:o,negate:n===\"P\"&&!t||n===\"p\"&&!!t})}function v(e){const n={};return e.includes(\"i\")&&(n.ignoreCase=!0),e.includes(\"m\")&&(n.dotAll=!0),e.includes(\"x\")&&(n.extended=!0),Object.keys(n).length?n:null}function Y(e){const n={ignoreCase:!1,dotAll:!1,extended:!1,digitIsAscii:!1,posixIsAscii:!1,spaceIsAscii:!1,wordIsAscii:!1,textSegmentMode:null};for(let t=0;t<e.length;t++){const o=e[t];if(!\"imxDPSWy\".includes(o))throw new Error(`Invalid flag \"${o}\"`);if(o===\"y\"){if(!/^y{[gw]}/.test(e.slice(t)))throw new Error('Invalid or unspecified flag \"y\" mode');n.textSegmentMode=e[t+2]===\"g\"?\"grapheme\":\"word\",t+=3;continue}n[{i:\"ignoreCase\",m:\"dotAll\",x:\"extended\",D:\"digitIsAscii\",P:\"posixIsAscii\",S:\"spaceIsAscii\",W:\"wordIsAscii\"}[o]]=!0}return n}function J(e){if(/^(?:\\\\u(?!\\p{AHex}{4})|\\\\x(?!\\p{AHex}{1,2}|\\{\\p{AHex}{1,8}\\}))/u.test(e))throw new Error(`Incomplete or invalid escape \"${e}\"`);const n=e[2]===\"{\"?/^\\\\x\\{\\s*(?<hex>\\p{AHex}+)/u.exec(e).groups.hex:e.slice(2);return parseInt(n,16)}function ee(e,n){const{raw:t,inCharClass:o}=e,s=t.slice(1);if(!o&&(s!==\"0\"&&s.length===1||s[0]!==\"0\"&&+s<=n))return[A(t)];const a=[],r=s.match(/^[0-7]+|\\d/g);for(let i=0;i<r.length;i++){const l=r[i];let c;if(i===0&&l!==\"8\"&&l!==\"9\"){if(c=parseInt(l,8),c>127)throw new Error(p`Octal encoded byte above 177 unsupported \"${t}\"`)}else c=h(l);a.push(d(c,(i===0?\"\\\\\":\"\")+l))}return a}function te(e){const n=[],t=new RegExp(y,\"gy\");let o;for(;o=t.exec(e);){const s=o[0];if(s[0]===\"{\"){const a=/^\\{(?<min>\\d+),(?<max>\\d+)\\}\\??$/.exec(s);if(a){const{min:r,max:i}=a.groups;if(+r>+i&&s.endsWith(\"?\")){t.lastIndex--,n.push(O(s.slice(0,-1)));continue}}}n.push(O(s))}return n}export{M as tokenize};\n//# sourceMappingURL=tokenize.js.map\n","\"use strict\";function o(e,t){if(!Array.isArray(e.body))throw new Error(\"Expected node with body array\");if(e.body.length!==1)return!1;const r=e.body[0];return!t||Object.keys(t).every(n=>t[n]===r[n])}function a(e){return!(!i.has(e.type)||e.type===\"AbsenceFunction\"&&e.kind!==\"repeater\")}const i=new Set([\"AbsenceFunction\",\"CapturingGroup\",\"Group\",\"LookaroundAssertion\",\"Regex\"]);function s(e){return y.has(e.type)}const y=new Set([\"AbsenceFunction\",\"Backreference\",\"CapturingGroup\",\"Character\",\"CharacterClass\",\"CharacterSet\",\"Group\",\"Quantifier\",\"Subroutine\"]);export{o as hasOnlyChild,a as isAlternativeContainer,s as isQuantifiable};\n//# sourceMappingURL=node-utils.js.map\n","\"use strict\";import{tokenize as q}from\"../tokenizer/tokenize.js\";import{cpOf as H,getOrInsert as Z,PosixClassNames as x,r as y,throwIfNullish as g}from\"../utils.js\";import{hasOnlyChild as Y,isAlternativeContainer as j,isQuantifiable as S}from\"./node-utils.js\";function J(e,r={}){const n={flags:\"\",normalizeUnknownPropertyNames:!1,skipBackrefValidation:!1,skipLookbehindValidation:!1,skipPropertyNameValidation:!1,unicodePropertyMap:null,...r,rules:{captureGroup:!1,singleline:!1,...r.rules}},t=q(e,{flags:n.flags,rules:{captureGroup:n.rules.captureGroup,singleline:n.rules.singleline}}),s=(p,N)=>{const u=t.tokens[o.nextIndex];switch(o.parent=p,o.nextIndex++,u.type){case\"Alternator\":return b();case\"Assertion\":return W(u);case\"Backreference\":return X(u,o);case\"Character\":return m(u.value,{useLastValid:!!N.isCheckingRangeEnd});case\"CharacterClassHyphen\":return ee(u,o,N);case\"CharacterClassOpen\":return re(u,o,N);case\"CharacterSet\":return ne(u,o);case\"Directive\":return I(u.kind,{flags:u.flags});case\"GroupOpen\":return te(u,o,N);case\"NamedCallout\":return U(u.kind,u.tag,u.arguments);case\"Quantifier\":return oe(u,o);case\"Subroutine\":return ae(u,o);default:throw new Error(`Unexpected token type \"${u.type}\"`)}},o={capturingGroups:[],hasNumberedRef:!1,namedGroupsByName:new Map,nextIndex:0,normalizeUnknownPropertyNames:n.normalizeUnknownPropertyNames,parent:null,skipBackrefValidation:n.skipBackrefValidation,skipLookbehindValidation:n.skipLookbehindValidation,skipPropertyNameValidation:n.skipPropertyNameValidation,subroutines:[],tokens:t.tokens,unicodePropertyMap:n.unicodePropertyMap,walk:s},i=B(T(t.flags));let d=i.body[0];for(;o.nextIndex<t.tokens.length;){const p=s(d,{});p.type===\"Alternative\"?(i.body.push(p),d=p):d.body.push(p)}const{capturingGroups:a,hasNumberedRef:l,namedGroupsByName:c,subroutines:f}=o;if(l&&c.size&&!n.rules.captureGroup)throw new Error(\"Numbered backref/subroutine not allowed when using named capture\");for(const{ref:p}of f)if(typeof p==\"number\"){if(p>a.length)throw new Error(\"Subroutine uses a group number that's not defined\");p&&(a[p-1].isSubroutined=!0)}else if(c.has(p)){if(c.get(p).length>1)throw new Error(y`Subroutine uses a duplicate group name \"\\g<${p}>\"`);c.get(p)[0].isSubroutined=!0}else throw new Error(y`Subroutine uses a group name that's not defined \"\\g<${p}>\"`);return i}function W({kind:e}){return F(g({\"^\":\"line_start\",$:\"line_end\",\"\\\\A\":\"string_start\",\"\\\\b\":\"word_boundary\",\"\\\\B\":\"word_boundary\",\"\\\\G\":\"search_start\",\"\\\\y\":\"text_segment_boundary\",\"\\\\Y\":\"text_segment_boundary\",\"\\\\z\":\"string_end\",\"\\\\Z\":\"string_end_newline\"}[e],`Unexpected assertion kind \"${e}\"`),{negate:e===y`\\B`||e===y`\\Y`})}function X({raw:e},r){const n=/^\\\\k[<']/.test(e),t=n?e.slice(3,-1):e.slice(1),s=(o,i=!1)=>{const d=r.capturingGroups.length;let a=!1;if(o>d)if(r.skipBackrefValidation)a=!0;else throw new Error(`Not enough capturing groups defined to the left \"${e}\"`);return r.hasNumberedRef=!0,k(i?d+1-o:o,{orphan:a})};if(n){const o=/^(?<sign>-?)0*(?<num>[1-9]\\d*)$/.exec(t);if(o)return s(+o.groups.num,!!o.groups.sign);if(/[-+]/.test(t))throw new Error(`Invalid backref name \"${e}\"`);if(!r.namedGroupsByName.has(t))throw new Error(`Group name not defined to the left \"${e}\"`);return k(t)}return s(+t)}function ee(e,r,n){const{tokens:t,walk:s}=r,o=r.parent,i=o.body.at(-1),d=t[r.nextIndex];if(!n.isCheckingRangeEnd&&i&&i.type!==\"CharacterClass\"&&i.type!==\"CharacterClassRange\"&&d&&d.type!==\"CharacterClassOpen\"&&d.type!==\"CharacterClassClose\"&&d.type!==\"CharacterClassIntersector\"){const a=s(o,{...n,isCheckingRangeEnd:!0});if(i.type===\"Character\"&&a.type===\"Character\")return o.body.pop(),L(i,a);throw new Error(\"Invalid character class range\")}return m(H(\"-\"))}function re({negate:e},r,n){const{tokens:t,walk:s}=r,o=t[r.nextIndex],i=[C()];let d=z(o);for(;d.type!==\"CharacterClassClose\";){if(d.type===\"CharacterClassIntersector\")i.push(C()),r.nextIndex++;else{const l=i.at(-1);l.body.push(s(l,n))}d=z(t[r.nextIndex],o)}const a=C({negate:e});return i.length===1?a.body=i[0].body:(a.kind=\"intersection\",a.body=i.map(l=>l.body.length===1?l.body[0]:l)),r.nextIndex++,a}function ne({kind:e,negate:r,value:n},t){const{normalizeUnknownPropertyNames:s,skipPropertyNameValidation:o,unicodePropertyMap:i}=t;if(e===\"property\"){const d=w(n);if(x.has(d)&&!i?.has(d))e=\"posix\",n=d;else return Q(n,{negate:r,normalizeUnknownPropertyNames:s,skipPropertyNameValidation:o,unicodePropertyMap:i})}return e===\"posix\"?R(n,{negate:r}):E(e,{negate:r})}function te(e,r,n){const{tokens:t,capturingGroups:s,namedGroupsByName:o,skipLookbehindValidation:i,walk:d}=r,a=ie(e),l=a.type===\"AbsenceFunction\",c=$(a),f=c&&a.negate;if(a.type===\"CapturingGroup\"&&(s.push(a),a.name&&Z(o,a.name,[]).push(a)),l&&n.isInAbsenceFunction)throw new Error(\"Nested absence function not supported by Oniguruma\");let p=D(t[r.nextIndex]);for(;p.type!==\"GroupClose\";){if(p.type===\"Alternator\")a.body.push(b()),r.nextIndex++;else{const N=a.body.at(-1),u=d(N,{...n,isInAbsenceFunction:n.isInAbsenceFunction||l,isInLookbehind:n.isInLookbehind||c,isInNegLookbehind:n.isInNegLookbehind||f});if(N.body.push(u),(c||n.isInLookbehind)&&!i){const v=\"Lookbehind includes a pattern not allowed by Oniguruma\";if(f||n.isInNegLookbehind){if(M(u)||u.type===\"CapturingGroup\")throw new Error(v)}else if(M(u)||$(u)&&u.negate)throw new Error(v)}}p=D(t[r.nextIndex])}return r.nextIndex++,a}function oe({kind:e,min:r,max:n},t){const s=t.parent,o=s.body.at(-1);if(!o||!S(o))throw new Error(\"Quantifier requires a repeatable token\");const i=_(e,r,n,o);return s.body.pop(),i}function ae({raw:e},r){const{capturingGroups:n,subroutines:t}=r;let s=e.slice(3,-1);const o=/^(?<sign>[-+]?)0*(?<num>[1-9]\\d*)$/.exec(s);if(o){const d=+o.groups.num,a=n.length;if(r.hasNumberedRef=!0,s={\"\":d,\"+\":a+d,\"-\":a+1-d}[o.groups.sign],s<1)throw new Error(\"Invalid subroutine number\")}else s===\"0\"&&(s=0);const i=O(s);return t.push(i),i}function G(e,r){if(e!==\"repeater\")throw new Error(`Unexpected absence function kind \"${e}\"`);return{type:\"AbsenceFunction\",kind:e,body:h(r?.body)}}function b(e){return{type:\"Alternative\",body:V(e?.body)}}function F(e,r){const n={type:\"Assertion\",kind:e};return(e===\"word_boundary\"||e===\"text_segment_boundary\")&&(n.negate=!!r?.negate),n}function k(e,r){const n=!!r?.orphan;return{type:\"Backreference\",ref:e,...n&&{orphan:n}}}function P(e,r){const n={name:void 0,isSubroutined:!1,...r};if(n.name!==void 0&&!se(n.name))throw new Error(`Group name \"${n.name}\" invalid in Oniguruma`);return{type:\"CapturingGroup\",number:e,...n.name&&{name:n.name},...n.isSubroutined&&{isSubroutined:n.isSubroutined},body:h(r?.body)}}function m(e,r){const n={useLastValid:!1,...r};if(e>1114111){const t=e.toString(16);if(n.useLastValid)e=1114111;else throw e>1310719?new Error(`Invalid code point out of range \"\\\\x{${t}}\"`):new Error(`Invalid code point out of range in JS \"\\\\x{${t}}\"`)}return{type:\"Character\",value:e}}function C(e){const r={kind:\"union\",negate:!1,...e};return{type:\"CharacterClass\",kind:r.kind,negate:r.negate,body:V(e?.body)}}function L(e,r){if(r.value<e.value)throw new Error(\"Character class range out of order\");return{type:\"CharacterClassRange\",min:e,max:r}}function E(e,r){const n=!!r?.negate,t={type:\"CharacterSet\",kind:e};return(e===\"digit\"||e===\"hex\"||e===\"newline\"||e===\"space\"||e===\"word\")&&(t.negate=n),(e===\"text_segment\"||e===\"newline\"&&!n)&&(t.variableLength=!0),t}function I(e,r={}){if(e===\"keep\")return{type:\"Directive\",kind:e};if(e===\"flags\")return{type:\"Directive\",kind:e,flags:g(r.flags)};throw new Error(`Unexpected directive kind \"${e}\"`)}function T(e){return{type:\"Flags\",...e}}function A(e){const r=e?.atomic,n=e?.flags;if(r&&n)throw new Error(\"Atomic group cannot have flags\");return{type:\"Group\",...r&&{atomic:r},...n&&{flags:n},body:h(e?.body)}}function K(e){const r={behind:!1,negate:!1,...e};return{type:\"LookaroundAssertion\",kind:r.behind?\"lookbehind\":\"lookahead\",negate:r.negate,body:h(e?.body)}}function U(e,r,n){return{type:\"NamedCallout\",kind:e,tag:r,arguments:n}}function R(e,r){const n=!!r?.negate;if(!x.has(e))throw new Error(`Invalid POSIX class \"${e}\"`);return{type:\"CharacterSet\",kind:\"posix\",value:e,negate:n}}function _(e,r,n,t){if(r>n)throw new Error(\"Invalid reversed quantifier range\");return{type:\"Quantifier\",kind:e,min:r,max:n,body:t}}function B(e,r){return{type:\"Regex\",body:h(r?.body),flags:e}}function O(e){return{type:\"Subroutine\",ref:e}}function Q(e,r){const n={negate:!1,normalizeUnknownPropertyNames:!1,skipPropertyNameValidation:!1,unicodePropertyMap:null,...r};let t=n.unicodePropertyMap?.get(w(e));if(!t){if(n.normalizeUnknownPropertyNames)t=de(e);else if(n.unicodePropertyMap&&!n.skipPropertyNameValidation)throw new Error(y`Invalid Unicode property \"\\p{${e}}\"`)}return{type:\"CharacterSet\",kind:\"property\",value:t??e,negate:n.negate}}function ie({flags:e,kind:r,name:n,negate:t,number:s}){switch(r){case\"absence_repeater\":return G(\"repeater\");case\"atomic\":return A({atomic:!0});case\"capturing\":return P(s,{name:n});case\"group\":return A({flags:e});case\"lookahead\":case\"lookbehind\":return K({behind:r===\"lookbehind\",negate:t});default:throw new Error(`Unexpected group kind \"${r}\"`)}}function h(e){if(e===void 0)e=[b()];else if(!Array.isArray(e)||!e.length||!e.every(r=>r.type===\"Alternative\"))throw new Error(\"Invalid body; expected array of one or more Alternative nodes\");return e}function V(e){if(e===void 0)e=[];else if(!Array.isArray(e)||!e.every(r=>!!r.type))throw new Error(\"Invalid body; expected array of nodes\");return e}function M(e){return e.type===\"LookaroundAssertion\"&&e.kind===\"lookahead\"}function $(e){return e.type===\"LookaroundAssertion\"&&e.kind===\"lookbehind\"}function se(e){return/^[\\p{Alpha}\\p{Pc}][^)]*$/u.test(e)}function de(e){return e.trim().replace(/[- _]+/g,\"_\").replace(/[A-Z][a-z]+(?=[A-Z])/g,\"$&_\").replace(/[A-Za-z]+/g,r=>r[0].toUpperCase()+r.slice(1).toLowerCase())}function w(e){return e.replace(/[- _]+/g,\"\").toLowerCase()}function z(e,r){return g(e,`${r?.type===\"Character\"&&r.value===93?\"Empty\":\"Unclosed\"} character class`)}function D(e){return g(e,\"Unclosed group\")}export{G as createAbsenceFunction,b as createAlternative,F as createAssertion,k as createBackreference,P as createCapturingGroup,m as createCharacter,C as createCharacterClass,L as createCharacterClassRange,E as createCharacterSet,I as createDirective,T as createFlags,A as createGroup,K as createLookaroundAssertion,U as createNamedCallout,R as createPosixClass,_ as createQuantifier,B as createRegex,O as createSubroutine,Q as createUnicodeProperty,Y as hasOnlyChild,j as isAlternativeContainer,S as isQuantifiable,J as parse,w as slug};\n//# sourceMappingURL=parse.js.map\n","\"use strict\";import{throwIfNullish as A}from\"../utils.js\";function S(a,v,N=null){function u(e,s){for(let t=0;t<e.length;t++){const r=n(e[t],s,t,e);t=Math.max(-1,t+r)}}function n(e,s=null,t=null,r=null){let i=0,c=!1;const d={node:e,parent:s,key:t,container:r,root:a,remove(){f(r).splice(Math.max(0,l(t)+i),1),i--,c=!0},removeAllNextSiblings(){return f(r).splice(l(t)+1)},removeAllPrevSiblings(){const o=l(t)+i;return i-=o,f(r).splice(0,Math.max(0,o))},replaceWith(o,y={}){const b=!!y.traverse;r?r[Math.max(0,l(t)+i)]=o:A(s,\"Can't replace root node\")[t]=o,b&&n(o,s,t,r),c=!0},replaceWithMultiple(o,y={}){const b=!!y.traverse;if(f(r).splice(Math.max(0,l(t)+i),1,...o),i+=o.length-1,b){let g=0;for(let x=0;x<o.length;x++)g+=n(o[x],s,l(t)+x+g,r)}c=!0},skip(){c=!0}},{type:m}=e,h=v[\"*\"],p=v[m],R=typeof h==\"function\"?h:h?.enter,P=typeof p==\"function\"?p:p?.enter;if(R?.(d,N),P?.(d,N),!c)switch(m){case\"AbsenceFunction\":case\"CapturingGroup\":case\"Group\":u(e.body,e);break;case\"Alternative\":case\"CharacterClass\":u(e.body,e);break;case\"Assertion\":case\"Backreference\":case\"Character\":case\"CharacterSet\":case\"Directive\":case\"Flags\":case\"NamedCallout\":case\"Subroutine\":break;case\"CharacterClassRange\":n(e.min,e,\"min\"),n(e.max,e,\"max\");break;case\"LookaroundAssertion\":u(e.body,e);break;case\"Quantifier\":n(e.body,e,\"body\");break;case\"Regex\":u(e.body,e),n(e.flags,e,\"flags\");break;default:throw new Error(`Unexpected node type \"${m}\"`)}return p?.exit?.(d,N),h?.exit?.(d,N),i}return n(a),a}function f(a){if(!Array.isArray(a))throw new Error(\"Container expected\");return a}function l(a){if(typeof a!=\"number\")throw new Error(\"Numeric key expected\");return a}export{S as traverse};\n//# sourceMappingURL=traverse.js.map\n","// Separating some utils for improved tree shaking of the `./internals` export\n\nconst noncapturingDelim = String.raw`\\(\\?(?:[:=!>A-Za-z\\-]|<[=!]|\\(DEFINE\\))`;\n\n/**\nUpdates the array in place by incrementing each value greater than or equal to the threshold.\n@param {Array<number>} arr\n@param {number} threshold\n*/\nfunction incrementIfAtLeast(arr, threshold) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] >= threshold) {\n arr[i]++;\n }\n }\n}\n\n/**\n@param {string} str\n@param {number} pos\n@param {string} oldValue\n@param {string} newValue\n@returns {string}\n*/\nfunction spliceStr(str, pos, oldValue, newValue) {\n return str.slice(0, pos) + newValue + str.slice(pos + oldValue.length);\n}\n\nexport {\n incrementIfAtLeast,\n noncapturingDelim,\n spliceStr,\n};\n","// Constant properties for tracking regex syntax context\nexport const Context = Object.freeze({\n DEFAULT: 'DEFAULT',\n CHAR_CLASS: 'CHAR_CLASS',\n});\n\n/**\nReplaces all unescaped instances of a regex pattern in the given context, using a replacement\nstring or callback.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {string | (match: RegExpExecArray, details: {\n context: 'DEFAULT' | 'CHAR_CLASS';\n negated: boolean;\n}) => string} replacement\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n@returns {string} Updated expression\n@example\nconst str = '.\\\\.\\\\\\\\.[[\\\\.].].';\nreplaceUnescaped(str, '\\\\.', '@');\n// → '@\\\\.\\\\\\\\@[[\\\\.]@]@'\nreplaceUnescaped(str, '\\\\.', '@', Context.DEFAULT);\n// → '@\\\\.\\\\\\\\@[[\\\\.].]@'\nreplaceUnescaped(str, '\\\\.', '@', Context.CHAR_CLASS);\n// → '.\\\\.\\\\\\\\.[[\\\\.]@].'\n*/\nexport function replaceUnescaped(expression, needle, replacement, context) {\n const re = new RegExp(String.raw`${needle}|(?<$skip>\\[\\^?|\\\\?.)`, 'gsu');\n const negated = [false];\n let numCharClassesOpen = 0;\n let result = '';\n for (const match of expression.matchAll(re)) {\n const {0: m, groups: {$skip}} = match;\n if (!$skip && (!context || (context === Context.DEFAULT) === !numCharClassesOpen)) {\n if (replacement instanceof Function) {\n result += replacement(match, {\n context: numCharClassesOpen ? Context.CHAR_CLASS : Context.DEFAULT,\n negated: negated[negated.length - 1],\n });\n } else {\n result += replacement;\n }\n continue;\n }\n if (m[0] === '[') {\n numCharClassesOpen++;\n negated.push(m[1] === '^');\n } else if (m === ']' && numCharClassesOpen) {\n numCharClassesOpen--;\n negated.pop();\n }\n result += m;\n }\n return result;\n}\n\n/**\nRuns a callback for each unescaped instance of a regex pattern in the given context.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {(match: RegExpExecArray, details: {\n context: 'DEFAULT' | 'CHAR_CLASS';\n negated: boolean;\n}) => void} callback\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n*/\nexport function forEachUnescaped(expression, needle, callback, context) {\n // Do this the easy way\n replaceUnescaped(expression, needle, callback, context);\n}\n\n/**\nReturns a match object for the first unescaped instance of a regex pattern in the given context, or\n`null`.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {number} [pos] Offset to start the search\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n@returns {RegExpExecArray | null}\n*/\nexport function execUnescaped(expression, needle, pos = 0, context) {\n // Quick partial test; avoid the loop if not needed\n if (!(new RegExp(needle, 'su').test(expression))) {\n return null;\n }\n const re = new RegExp(`${needle}|(?<$skip>\\\\\\\\?.)`, 'gsu');\n re.lastIndex = pos;\n let numCharClassesOpen = 0;\n let match;\n while (match = re.exec(expression)) {\n const {0: m, groups: {$skip}} = match;\n if (!$skip && (!context || (context === Context.DEFAULT) === !numCharClassesOpen)) {\n return match;\n }\n if (m === '[') {\n numCharClassesOpen++;\n } else if (m === ']' && numCharClassesOpen) {\n numCharClassesOpen--;\n }\n // Avoid an infinite loop on zero-length matches\n if (re.lastIndex == match.index) {\n re.lastIndex++;\n }\n }\n return null;\n}\n\n/**\nChecks whether an unescaped instance of a regex pattern appears in the given context.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n@returns {boolean} Whether the pattern was found\n*/\nexport function hasUnescaped(expression, needle, context) {\n // Do this the easy way\n return !!execUnescaped(expression, needle, 0, context);\n}\n\n/**\nExtracts the full contents of a group (subpattern) from the given expression, accounting for\nescaped characters, nested groups, and character classes. The group is identified by the position\nwhere its contents start (the string index just after the group's opening delimiter). Returns the\nrest of the string if the group is unclosed.\n\nAssumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {number} contentsStartPos\n@returns {string}\n*/\nexport function getGroupContents(expression, contentsStartPos) {\n const token = /\\\\?./gsu;\n token.lastIndex = contentsStartPos;\n let contentsEndPos = expression.length;\n let numCharClassesOpen = 0;\n // Starting search within an open group, after the group's opening\n let numGroupsOpen = 1;\n let match;\n while (match = token.exec(expression)) {\n const [m] = match;\n if (m === '[') {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n if (m === '(') {\n numGroupsOpen++;\n } else if (m === ')') {\n numGroupsOpen--;\n if (!numGroupsOpen) {\n contentsEndPos = match.index;\n break;\n }\n }\n } else if (m === ']') {\n numCharClassesOpen--;\n }\n }\n return expression.slice(contentsStartPos, contentsEndPos);\n}\n","import {incrementIfAtLeast, noncapturingDelim, spliceStr} from './utils-internals.js';\nimport {Context, replaceUnescaped} from 'regex-utilities';\n\nconst atomicPluginToken = new RegExp(String.raw`(?<noncapturingStart>${noncapturingDelim})|(?<capturingStart>\\((?:\\?<[^>]+>)?)|\\\\?.`, 'gsu');\n\n/**\nApply transformations for atomic groups: `(?>…)`.\n@param {string} expression\n@param {import('./regex.js').PluginData} [data]\n@returns {Required<import('./regex.js').PluginResult>}\n*/\nfunction atomic(expression, data) {\n const hiddenCaptures = data?.hiddenCaptures ?? [];\n // Capture transfer is used by <github.com/slevithan/oniguruma-to-es>\n let captureTransfers = data?.captureTransfers ?? new Map();\n if (!/\\(\\?>/.test(expression)) {\n return {\n pattern: expression,\n captureTransfers,\n hiddenCaptures,\n };\n }\n\n const aGDelim = '(?>';\n const emulatedAGDelim = '(?:(?=(';\n const captureNumMap = [0];\n const addedHiddenCaptures = [];\n let numCapturesBeforeAG = 0;\n let numAGs = 0;\n let aGPos = NaN;\n let hasProcessedAG;\n do {\n hasProcessedAG = false;\n let numCharClassesOpen = 0;\n let numGroupsOpenInAG = 0;\n let inAG = false;\n let match;\n atomicPluginToken.lastIndex = Number.isNaN(aGPos) ? 0 : aGPos + emulatedAGDelim.length;\n while (match = atomicPluginToken.exec(expression)) {\n const {0: m, index, groups: {capturingStart, noncapturingStart}} = match;\n if (m === '[') {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n\n if (m === aGDelim && !inAG) {\n aGPos = index;\n inAG = true;\n } else if (inAG && noncapturingStart) {\n numGroupsOpenInAG++;\n } else if (capturingStart) {\n if (inAG) {\n numGroupsOpenInAG++;\n } else {\n numCapturesBeforeAG++;\n captureNumMap.push(numCapturesBeforeAG + numAGs);\n }\n } else if (m === ')' && inAG) {\n if (!numGroupsOpenInAG) {\n numAGs++;\n const addedCaptureNum = numCapturesBeforeAG + numAGs;\n // Replace `expression` and use `<$$N>` as a temporary wrapper for the backref so it\n // can avoid backref renumbering afterward. Wrap the whole substitution (including the\n // lookahead and following backref) in a noncapturing group to handle following\n // quantifiers and literal digits\n expression = `${expression.slice(0, aGPos)}${emulatedAGDelim}${\n expression.slice(aGPos + aGDelim.length, index)\n }))<$$${addedCaptureNum}>)${expression.slice(index + 1)}`;\n hasProcessedAG = true;\n addedHiddenCaptures.push(addedCaptureNum);\n incrementIfAtLeast(hiddenCaptures, addedCaptureNum);\n if (captureTransfers.size) {\n const newCaptureTransfers = new Map();\n captureTransfers.forEach((from, to) => {\n newCaptureTransfers.set(\n to >= addedCaptureNum ? to + 1 : to,\n from.map(f => f >= addedCaptureNum ? f + 1 : f)\n );\n });\n captureTransfers = newCaptureTransfers;\n }\n break;\n }\n numGroupsOpenInAG--;\n }\n\n } else if (m === ']') {\n numCharClassesOpen--;\n }\n }\n // Start over from the beginning of the atomic group's contents, in case the processed group\n // contains additional atomic groups\n } while (hasProcessedAG);\n\n hiddenCaptures.push(...addedHiddenCaptures);\n\n // Second pass to adjust numbered backrefs\n expression = replaceUnescaped(\n expression,\n String.raw`\\\\(?<backrefNum>[1-9]\\d*)|<\\$\\$(?<wrappedBackrefNum>\\d+)>`,\n ({0: m, groups: {backrefNum, wrappedBackrefNum}}) => {\n if (backrefNum) {\n const bNum = +backrefNum;\n if (bNum > captureNumMap.length - 1) {\n throw new Error(`Backref \"${m}\" greater than number of captures`);\n }\n return `\\\\${captureNumMap[bNum]}`;\n }\n return `\\\\${wrappedBackrefNum}`;\n },\n Context.DEFAULT\n );\n\n return {\n pattern: expression,\n captureTransfers,\n hiddenCaptures,\n };\n}\n\nconst baseQuantifier = String.raw`(?:[?*+]|\\{\\d+(?:,\\d*)?\\})`;\n// Complete tokenizer for base syntax; doesn't (need to) know about character-class-only syntax\nconst possessivePluginToken = new RegExp(String.raw`\n\\\\(?: \\d+\n | c[A-Za-z]\n | [gk]<[^>]+>\n | [pPu]\\{[^\\}]+\\}\n | u[A-Fa-f\\d]{4}\n | x[A-Fa-f\\d]{2}\n )\n| \\((?: \\? (?: [:=!>]\n | <(?:[=!]|[^>]+>)\n | [A-Za-z\\-]+:\n | \\(DEFINE\\)\n ))?\n| (?<qBase>${baseQuantifier})(?<qMod>[?+]?)(?<invalidQ>[?*+\\{]?)\n| \\\\?.\n`.replace(/\\s+/g, ''), 'gsu');\n\n/**\nTransform posessive quantifiers into atomic groups. The posessessive quantifiers are:\n`?+`, `*+`, `++`, `{N}+`, `{N,}+`, `{N,N}+`.\nThis follows Java, PCRE, Perl, and Python.\nPossessive quantifiers in Oniguruma and Onigmo are only: `?+`, `*+`, `++`.\n@param {string} expression\n@returns {import('./regex.js').PluginResult}\n*/\nfunction possessive(expression) {\n if (!(new RegExp(`${baseQuantifier}\\\\+`).test(expression))) {\n return {\n pattern: expression,\n };\n }\n\n const openGroupIndices = [];\n let lastGroupIndex = null;\n let lastCharClassIndex = null;\n let lastToken = '';\n let numCharClassesOpen = 0;\n let match;\n possessivePluginToken.lastIndex = 0;\n while (match = possessivePluginToken.exec(expression)) {\n const {0: m, index, groups: {qBase, qMod, invalidQ}} = match;\n if (m === '[') {\n if (!numCharClassesOpen) {\n lastCharClassIndex = index;\n }\n numCharClassesOpen++;\n } else if (m === ']') {\n if (numCharClassesOpen) {\n numCharClassesOpen--;\n // Unmatched `]`\n } else {\n lastCharClassIndex = null;\n }\n } else if (!numCharClassesOpen) {\n\n if (qMod === '+' && lastToken && !lastToken.startsWith('(')) {\n // Invalid following quantifier would become valid via the wrapping group\n if (invalidQ) {\n throw new Error(`Invalid quantifier \"${m}\"`);\n }\n let charsAdded = -1; // -1 for removed trailing `+`\n // Possessivizing fixed repetition quantifiers like `{2}` does't change their behavior, so\n // avoid doing so (convert them to greedy)\n if (/^\\{\\d+\\}$/.test(qBase)) {\n expression = spliceStr(expression, index + qBase.length, qMod, '');\n } else {\n if (lastToken === ')' || lastToken === ']') {\n const nodeIndex = lastToken === ')' ? lastGroupIndex : lastCharClassIndex;\n // Unmatched `)` would break out of the wrapping group and mess with handling.\n // Unmatched `]` wouldn't be a problem, but it's unnecessary to have dedicated support\n // for unescaped `]++` since this won't work with flag u or v anyway\n if (nodeIndex === null) {\n throw new Error(`Invalid unmatched \"${lastToken}\"`);\n }\n expression = `${expression.slice(0, nodeIndex)}(?>${expression.slice(nodeIndex, index)}${qBase})${expression.slice(index + m.length)}`;\n } else {\n expression = `${expression.slice(0, index - lastToken.length)}(?>${lastToken}${qBase})${expression.slice(index + m.length)}`;\n }\n charsAdded += 4; // `(?>)`\n }\n possessivePluginToken.lastIndex += charsAdded;\n } else if (m[0] === '(') {\n openGroupIndices.push(index);\n } else if (m === ')') {\n lastGroupIndex = openGroupIndices.length ? openGroupIndices.pop() : null;\n }\n\n }\n lastToken = m;\n }\n\n return {\n pattern: expression,\n };\n}\n\nexport {\n atomic,\n possessive,\n};\n","/**\nWorks the same as JavaScript's native `RegExp` constructor in all contexts, but automatically\nadjusts subpattern matches and indices (with flag `d`) to account for captures added as part of\nemulating extended syntax.\n*/\nclass RegExpSubclass extends RegExp {\n // Avoid `#private` to allow for subclassing\n /**\n @private\n @type {Map<number, {\n hidden: true;\n }>}\n */\n _captureMap;\n /**\n @overload\n @param {string} expression\n @param {string} [flags]\n @param {{\n hiddenCaptures?: Array<number>;\n }} [options]\n */\n /**\n @overload\n @param {RegExpSubclass} expression\n @param {string} [flags]\n */\n constructor(expression, flags, options) {\n // Argument `options` isn't provided when regexes are copied via `new RegExpSubclass(regexp)`,\n // including as part of the internal handling of string methods `matchAll` and `split`\n if (expression instanceof RegExp) {\n if (options) {\n throw new Error('Cannot provide options when copying a regexp');\n }\n super(expression, flags);\n if (expression instanceof RegExpSubclass) {\n this._captureMap = expression._captureMap;\n } else {\n this._captureMap = new Map();\n }\n } else {\n super(expression, flags);\n const hiddenCaptures = options?.hiddenCaptures ?? [];\n this._captureMap = createCaptureMap(hiddenCaptures);\n }\n }\n /**\n Called internally by all String/RegExp methods that use regexes.\n @override\n @param {string} str\n @returns {RegExpExecArray | null}\n */\n exec(str) {\n const match = super.exec(str);\n if (!match || !this._captureMap.size) {\n return match;\n }\n const matchCopy = [...match];\n // Empty all but the first value of the array while preserving its other properties\n match.length = 1;\n let indicesCopy;\n if (this.hasIndices) {\n indicesCopy = [...match.indices];\n match.indices.length = 1;\n }\n for (let i = 1; i < matchCopy.length; i++) {\n if (!this._captureMap.get(i)?.hidden) {\n match.push(matchCopy[i]);\n if (this.hasIndices) {\n match.indices.push(indicesCopy[i]);\n }\n }\n }\n return match;\n }\n}\n\n/**\nBuild the capturing group map, with hidden captures marked to indicate their submatches shouldn't\nappear in match results.\n@param {Array<number>} hiddenCaptures\n@returns {Map<number, {\n hidden: true;\n}>}\n*/\nfunction createCaptureMap(hiddenCaptures) {\n const captureMap = new Map();\n for (const num of hiddenCaptures) {\n captureMap.set(num, {\n hidden: true,\n });\n }\n return captureMap;\n}\n\nexport {\n RegExpSubclass,\n};\n","import {Context, forEachUnescaped, getGroupContents, hasUnescaped, replaceUnescaped} from 'regex-utilities';\n\nconst r = String.raw;\nconst gRToken = r`\\\\g<(?<gRNameOrNum>[^>&]+)&R=(?<gRDepth>[^>]+)>`;\nconst recursiveToken = r`\\(\\?R=(?<rDepth>[^\\)]+)\\)|${gRToken}`;\nconst namedCaptureDelim = r`\\(\\?<(?![=!])(?<captureName>[^>]+)>`;\nconst captureDelim = r`${namedCaptureDelim}|(?<unnamed>\\()(?!\\?)`;\nconst token = new RegExp(r`${namedCaptureDelim}|${recursiveToken}|\\(\\?|\\\\?.`, 'gsu');\nconst overlappingRecursionMsg = 'Cannot use multiple overlapping recursions';\n\n/**\n@param {string} pattern\n@param {{\n flags?: string;\n captureTransfers?: Map<number, Array<number>>;\n hiddenCaptures?: Array<number>;\n mode?: 'plugin' | 'external';\n}} [data]\n@returns {{\n pattern: string;\n captureTransfers: Map<number, Array<number>>;\n hiddenCaptures: Array<number>;\n}}\n*/\nfunction recursion(pattern, data) {\n const {hiddenCaptures, mode} = {\n hiddenCaptures: [],\n mode: 'plugin',\n ...data,\n };\n // Capture transfer is used by <github.com/slevithan/oniguruma-to-es>\n let captureTransfers = data?.captureTransfers ?? new Map();\n // Keep the initial fail-check (which avoids unneeded processing) as fast as possible by testing\n // without the accuracy improvement of using `hasUnescaped` with `Context.DEFAULT`\n if (!(new RegExp(recursiveToken, 'su').test(pattern))) {\n return {\n pattern,\n captureTransfers,\n hiddenCaptures,\n };\n }\n if (mode === 'plugin' && hasUnescaped(pattern, r`\\(\\?\\(DEFINE\\)`, Context.DEFAULT)) {\n throw new Error('DEFINE groups cannot be used with recursion');\n }\n\n const addedHiddenCaptures = [];\n const hasNumberedBackref = hasUnescaped(pattern, r`\\\\[1-9]`, Context.DEFAULT);\n const groupContentsStartPos = new Map();\n const openGroups = [];\n let hasRecursed = false;\n let numCharClassesOpen = 0;\n let numCapturesPassed = 0;\n let match;\n token.lastIndex = 0;\n while ((match = token.exec(pattern))) {\n const {0: m, groups: {captureName, rDepth, gRNameOrNum, gRDepth}} = match;\n if (m === '[') {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n\n // `(?R=N)`\n if (rDepth) {\n assertMaxInBounds(rDepth);\n if (hasRecursed) {\n throw new Error(overlappingRecursionMsg);\n }\n if (hasNumberedBackref) {\n // Could add support for numbered backrefs with extra effort, but it's probably not worth\n // it. To trigger this error, the regex must include recursion and one of the following:\n // - An interpolated regex that contains a numbered backref (since other numbered\n // backrefs are prevented by implicit flag n).\n // - A numbered backref, when flag n is explicitly disabled.\n // Note that Regex+'s extended syntax (atomic groups and sometimes subroutines) can also\n // add numbered backrefs, but those work fine because external plugins like this one run\n // *before* the transformation of built-in syntax extensions\n throw new Error(\n // When used in `external` mode by transpilers other than Regex+, backrefs might have\n // gone through conversion from named to numbered, so avoid a misleading error\n `${mode === 'external' ? 'Backrefs' : 'Numbered backrefs'} cannot be used with global recursion`\n );\n }\n const left = pattern.slice(0, match.index);\n const right = pattern.slice(token.lastIndex);\n if (hasUnescaped(right, recursiveToken, Context.DEFAULT)) {\n throw new Error(overlappingRecursionMsg);\n }\n const reps = +rDepth - 1;\n pattern = makeRecursive(\n left,\n right,\n reps,\n false,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n );\n captureTransfers = mapCaptureTransfers(\n captureTransfers,\n left,\n reps,\n addedHiddenCaptures.length,\n 0,\n numCapturesPassed\n );\n // No need to parse further\n break;\n // `\\g<name&R=N>`, `\\g<number&R=N>`\n } else if (gRNameOrNum) {\n assertMaxInBounds(gRDepth);\n let isWithinReffedGroup = false;\n for (const g of openGroups) {\n if (g.name === gRNameOrNum || g.num === +gRNameOrNum) {\n isWithinReffedGroup = true;\n if (g.hasRecursedWithin) {\n throw new Error(overlappingRecursionMsg);\n }\n break;\n }\n }\n if (!isWithinReffedGroup) {\n throw new Error(r`Recursive \\g cannot be used outside the referenced group \"${\n mode === 'external' ? gRNameOrNum : r`\\g<${gRNameOrNum}&R=${gRDepth}>`\n }\"`);\n }\n const startPos = groupContentsStartPos.get(gRNameOrNum);\n const groupContents = getGroupContents(pattern, startPos);\n if (\n hasNumberedBackref &&\n hasUnescaped(groupContents, r`${namedCaptureDelim}|\\((?!\\?)`, Context.DEFAULT)\n ) {\n throw new Error(\n // When used in `external` mode by transpilers other than Regex+, backrefs might have\n // gone through conversion from named to numbered, so avoid a misleading error\n `${mode === 'external' ? 'Backrefs' : 'Numbered backrefs'} cannot be used with recursion of capturing groups`\n );\n }\n const groupContentsLeft = pattern.slice(startPos, match.index);\n const groupContentsRight = groupContents.slice(groupContentsLeft.length + m.length);\n const numAddedHiddenCapturesPreExpansion = addedHiddenCaptures.length;\n const reps = +gRDepth - 1;\n const expansion = makeRecursive(\n groupContentsLeft,\n groupContentsRight,\n reps,\n true,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n );\n captureTransfers = mapCaptureTransfers(\n captureTransfers,\n groupContentsLeft,\n reps,\n addedHiddenCaptures.length - numAddedHiddenCapturesPreExpansion,\n numAddedHiddenCapturesPreExpansion,\n numCapturesPassed\n );\n const pre = pattern.slice(0, startPos);\n const post = pattern.slice(startPos + groupContents.length);\n // Modify the string we're looping over\n pattern = `${pre}${expansion}${post}`;\n // Step forward for the next loop iteration\n token.lastIndex += expansion.length - m.length - groupContentsLeft.length - groupContentsRight.length;\n openGroups.forEach(g => g.hasRecursedWithin = true);\n hasRecursed = true;\n } else if (captureName) {\n numCapturesPassed++;\n groupContentsStartPos.set(String(numCapturesPassed), token.lastIndex);\n groupContentsStartPos.set(captureName, token.lastIndex);\n openGroups.push({\n num: numCapturesPassed,\n name: captureName,\n });\n } else if (m[0] === '(') {\n const isUnnamedCapture = m === '(';\n if (isUnnamedCapture) {\n numCapturesPassed++;\n groupContentsStartPos.set(String(numCapturesPassed), token.lastIndex);\n }\n openGroups.push(isUnnamedCapture ? {num: numCapturesPassed} : {});\n } else if (m === ')') {\n openGroups.pop();\n }\n\n } else if (m === ']') {\n numCharClassesOpen--;\n }\n }\n\n hiddenCaptures.push(...addedHiddenCaptures);\n\n return {\n pattern,\n captureTransfers,\n hiddenCaptures,\n };\n}\n\n/**\n@param {string} max\n*/\nfunction assertMaxInBounds(max) {\n const errMsg = `Max depth must be integer between 2 and 100; used ${max}`;\n if (!/^[1-9]\\d*$/.test(max)) {\n throw new Error(errMsg);\n }\n max = +max;\n if (max < 2 || max > 100) {\n throw new Error(errMsg);\n }\n}\n\n/**\n@param {string} left\n@param {string} right\n@param {number} reps\n@param {boolean} isSubpattern\n@param {Array<number>} hiddenCaptures\n@param {Array<number>} addedHiddenCaptures\n@param {number} numCapturesPassed\n@returns {string}\n*/\nfunction makeRecursive(\n left,\n right,\n reps,\n isSubpattern,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n) {\n const namesInRecursed = new Set();\n // Can skip this work if not needed\n if (isSubpattern) {\n forEachUnescaped(left + right, namedCaptureDelim, ({groups: {captureName}}) => {\n namesInRecursed.add(captureName);\n }, Context.DEFAULT);\n }\n const rest = [\n reps,\n isSubpattern ? namesInRecursed : null,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed,\n ];\n // Depth 2: 'left(?:left(?:)right)right'\n // Depth 3: 'left(?:left(?:left(?:)right)right)right'\n // Empty group in the middle separates tokens and absorbs a following quantifier if present\n return `${left}${\n repeatWithDepth(`(?:${left}`, 'forward', ...rest)\n }(?:)${\n repeatWithDepth(`${right})`, 'backward', ...rest)\n }${right}`;\n}\n\n/**\n@param {string} pattern\n@param {'forward' | 'backward'} direction\n@param {number} reps\n@param {Set<string> | null} namesInRecursed\n@param {Array<number>} hiddenCaptures\n@param {Array<number>} addedHiddenCaptures\n@param {number} numCapturesPassed\n@returns {string}\n*/\nfunction repeatWithDepth(\n pattern,\n direction,\n reps,\n namesInRecursed,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n) {\n const startNum = 2;\n const getDepthNum = i => direction === 'forward' ? (i + startNum) : (reps - i + startNum - 1);\n let result = '';\n for (let i = 0; i < reps; i++) {\n const depthNum = getDepthNum(i);\n result += replaceUnescaped(\n pattern,\n r`${captureDelim}|\\\\k<(?<backref>[^>]+)>`,\n ({0: m, groups: {captureName, unnamed, backref}}) => {\n if (backref && namesInRecursed && !namesInRecursed.has(backref)) {\n // Don't alter backrefs to groups outside the recursed subpattern\n return m;\n }\n const suffix = `_$${depthNum}`;\n if (unnamed || captureName) {\n const addedCaptureNum = numCapturesPassed + addedHiddenCaptures.length + 1;\n addedHiddenCaptures.push(addedCaptureNum);\n incrementIfAtLeast(hiddenCaptures, addedCaptureNum);\n return unnamed ? m : `(?<${captureName}${suffix}>`;\n }\n return r`\\k<${backref}${suffix}>`;\n },\n Context.DEFAULT\n );\n }\n return result;\n}\n\n/**\nUpdates the array in place by incrementing each value greater than or equal to the threshold.\n@param {Array<number>} arr\n@param {number} threshold\n*/\nfunction incrementIfAtLeast(arr, threshold) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] >= threshold) {\n arr[i]++;\n }\n }\n}\n\n/**\n@param {Map<number, Array<number>>} captureTransfers\n@param {string} left\n@param {number} reps\n@param {number} numCapturesAddedInExpansion\n@param {number} numAddedHiddenCapturesPreExpansion\n@param {number} numCapturesPassed\n@returns {Map<number, Array<number>>}\n*/\nfunction mapCaptureTransfers(captureTransfers, left, reps, numCapturesAddedInExpansion, numAddedHiddenCapturesPreExpansion, numCapturesPassed) {\n if (captureTransfers.size && numCapturesAddedInExpansion) {\n let numCapturesInLeft = 0;\n forEachUnescaped(left, captureDelim, () => numCapturesInLeft++, Context.DEFAULT);\n // Is 0 for global recursion\n const recursionDelimCaptureNum = numCapturesPassed - numCapturesInLeft + numAddedHiddenCapturesPreExpansion;\n const newCaptureTransfers = new Map();\n captureTransfers.forEach((from, to) => {\n const numCapturesInRight = (numCapturesAddedInExpansion - (numCapturesInLeft * reps)) / reps;\n const numCapturesAddedInLeft = numCapturesInLeft * reps;\n const newTo = to > (recursionDelimCaptureNum + numCapturesInLeft) ? to + numCapturesAddedInExpansion : to;\n const newFrom = [];\n for (const f of from) {\n // Before the recursed subpattern\n if (f <= recursionDelimCaptureNum) {\n newFrom.push(f);\n // After the recursed subpattern\n } else if (f > (recursionDelimCaptureNum + numCapturesInLeft + numCapturesInRight)) {\n newFrom.push(f + numCapturesAddedInExpansion);\n // Within the recursed subpattern, on the left of the recursion token\n } else if (f <= (recursionDelimCaptureNum + numCapturesInLeft)) {\n for (let i = 0; i <= reps; i++) {\n newFrom.push(f + (numCapturesInLeft * i));\n }\n // Within the recursed subpattern, on the right of the recursion token\n } else {\n for (let i = 0; i <= reps; i++) {\n newFrom.push(f + numCapturesAddedInLeft + (numCapturesInRight * i));\n }\n }\n }\n newCaptureTransfers.set(newTo, newFrom);\n });\n return newCaptureTransfers;\n }\n return captureTransfers;\n}\n\nexport {\n recursion,\n};\n","// src/utils.js\nvar cp = String.fromCodePoint;\nvar r = String.raw;\nvar envFlags = {\n flagGroups: (() => {\n try {\n new RegExp(\"(?i:)\");\n } catch {\n return false;\n }\n return true;\n })(),\n unicodeSets: (() => {\n try {\n new RegExp(\"[[]]\", \"v\");\n } catch {\n return false;\n }\n return true;\n })()\n};\nenvFlags.bugFlagVLiteralHyphenIsRange = envFlags.unicodeSets ? (() => {\n try {\n new RegExp(r`[\\d\\-a]`, \"v\");\n } catch {\n return true;\n }\n return false;\n})() : false;\nenvFlags.bugNestedClassIgnoresNegation = envFlags.unicodeSets && new RegExp(\"[[^a]]\", \"v\").test(\"a\");\nfunction getNewCurrentFlags(current, { enable, disable }) {\n return {\n dotAll: !disable?.dotAll && !!(enable?.dotAll || current.dotAll),\n ignoreCase: !disable?.ignoreCase && !!(enable?.ignoreCase || current.ignoreCase)\n };\n}\nfunction getOrInsert(map, key, defaultValue) {\n if (!map.has(key)) {\n map.set(key, defaultValue);\n }\n return map.get(key);\n}\nfunction isMinTarget(target, min) {\n return EsVersion[target] >= EsVersion[min];\n}\nfunction throwIfNullish(value, msg) {\n if (value == null) {\n throw new Error(msg ?? \"Value expected\");\n }\n return value;\n}\n\n// src/options.js\nvar EsVersion = {\n ES2025: 2025,\n ES2024: 2024,\n ES2018: 2018\n};\nvar Target = (\n /** @type {const} */\n {\n auto: \"auto\",\n ES2025: \"ES2025\",\n ES2024: \"ES2024\",\n ES2018: \"ES2018\"\n }\n);\nfunction getOptions(options = {}) {\n if ({}.toString.call(options) !== \"[object Object]\") {\n throw new Error(\"Unexpected options\");\n }\n if (options.target !== void 0 && !Target[options.target]) {\n throw new Error(`Unexpected target \"${options.target}\"`);\n }\n const opts = {\n // Sets the level of emulation rigor/strictness.\n accuracy: \"default\",\n // Disables advanced emulation that relies on returning a `RegExp` subclass, resulting in\n // certain patterns not being emulatable.\n avoidSubclass: false,\n // Oniguruma flags; a string with `i`, `m`, `x`, `D`, `S`, `W`, `y{g}` in any order (all\n // optional). Oniguruma's `m` is equivalent to JavaScript's `s` (`dotAll`).\n flags: \"\",\n // Include JavaScript flag `g` (`global`) in the result.\n global: false,\n // Include JavaScript flag `d` (`hasIndices`) in the result.\n hasIndices: false,\n // Delay regex construction until first use if the transpiled pattern is at least this length.\n lazyCompileLength: Infinity,\n // JavaScript version used for generated regexes. Using `auto` detects the best value based on\n // your environment. Later targets allow faster processing, simpler generated source, and\n // support for additional features.\n target: \"auto\",\n // Disables minifications that simplify the pattern without changing the meaning.\n verbose: false,\n ...options,\n // Advanced options that override standard behavior, error checking, and flags when enabled.\n rules: {\n // Useful with TextMate grammars that merge backreferences across patterns.\n allowOrphanBackrefs: false,\n // Use ASCII `\\b` and `\\B`, which increases search performance of generated regexes.\n asciiWordBoundaries: false,\n // Allow unnamed captures and numbered calls (backreferences and subroutines) when using\n // named capture. This is Oniguruma option `ONIG_OPTION_CAPTURE_GROUP`; on by default in\n // `vscode-oniguruma`.\n captureGroup: false,\n // Change the recursion depth limit from Oniguruma's `20` to an integer `2`–`20`.\n recursionLimit: 20,\n // `^` as `\\A`; `$` as`\\Z`. Improves search performance of generated regexes without changing\n // the meaning if searching line by line. This is Oniguruma option `ONIG_OPTION_SINGLELINE`.\n singleline: false,\n ...options.rules\n }\n };\n if (opts.target === \"auto\") {\n opts.target = envFlags.flagGroups ? \"ES2025\" : envFlags.unicodeSets ? \"ES2024\" : \"ES2018\";\n }\n return opts;\n}\n\n// src/unicode.js\nimport { slug } from \"oniguruma-parser/parser\";\nvar asciiSpaceChar = \"[\t-\\r ]\";\nvar CharsWithoutIgnoreCaseExpansion = /* @__PURE__ */ new Set([\n cp(304),\n // İ\n cp(305)\n // ı\n]);\nvar defaultWordChar = r`[\\p{L}\\p{M}\\p{N}\\p{Pc}]`;\nfunction getIgnoreCaseMatchChars(char) {\n if (CharsWithoutIgnoreCaseExpansion.has(char)) {\n return [char];\n }\n const set = /* @__PURE__ */ new Set();\n const lower = char.toLowerCase();\n const upper = lower.toUpperCase();\n const title = LowerToTitleCaseMap.get(lower);\n const altLower = LowerToAlternativeLowerCaseMap.get(lower);\n const altUpper = LowerToAlternativeUpperCaseMap.get(lower);\n if ([...upper].length === 1) {\n set.add(upper);\n }\n altUpper && set.add(altUpper);\n title && set.add(title);\n set.add(lower);\n altLower && set.add(altLower);\n return [...set];\n}\nvar JsUnicodePropertyMap = /* @__PURE__ */ new Map(\n `C Other\nCc Control cntrl\nCf Format\nCn Unassigned\nCo Private_Use\nCs Surrogate\nL Letter\nLC Cased_Letter\nLl Lowercase_Letter\nLm Modifier_Letter\nLo Other_Letter\nLt Titlecase_Letter\nLu Uppercase_Letter\nM Mark Combining_Mark\nMc Spacing_Mark\nMe Enclosing_Mark\nMn Nonspacing_Mark\nN Number\nNd Decimal_Number digit\nNl Letter_Number\nNo Other_Number\nP Punctuation punct\nPc Connector_Punctuation\nPd Dash_Punctuation\nPe Close_Punctuation\nPf Final_Punctuation\nPi Initial_Punctuation\nPo Other_Punctuation\nPs Open_Punctuation\nS Symbol\nSc Currency_Symbol\nSk Modifier_Symbol\nSm Math_Symbol\nSo Other_Symbol\nZ Separator\nZl Line_Separator\nZp Paragraph_Separator\nZs Space_Separator\nASCII\nASCII_Hex_Digit AHex\nAlphabetic Alpha\nAny\nAssigned\nBidi_Control Bidi_C\nBidi_Mirrored Bidi_M\nCase_Ignorable CI\nCased\nChanges_When_Casefolded CWCF\nChanges_When_Casemapped CWCM\nChanges_When_Lowercased CWL\nChanges_When_NFKC_Casefolded CWKCF\nChanges_When_Titlecased CWT\nChanges_When_Uppercased CWU\nDash\nDefault_Ignorable_Code_Point DI\nDeprecated Dep\nDiacritic Dia\nEmoji\nEmoji_Component EComp\nEmoji_Modifier EMod\nEmoji_Modifier_Base EBase\nEmoji_Presentation EPres\nExtended_Pictographic ExtPict\nExtender Ext\nGrapheme_Base Gr_Base\nGrapheme_Extend Gr_Ext\nHex_Digit Hex\nIDS_Binary_Operator IDSB\nIDS_Trinary_Operator IDST\nID_Continue IDC\nID_Start IDS\nIdeographic Ideo\nJoin_Control Join_C\nLogical_Order_Exception LOE\nLowercase Lower\nMath\nNoncharacter_Code_Point NChar\nPattern_Syntax Pat_Syn\nPattern_White_Space Pat_WS\nQuotation_Mark QMark\nRadical\nRegional_Indicator RI\nSentence_Terminal STerm\nSoft_Dotted SD\nTerminal_Punctuation Term\nUnified_Ideograph UIdeo\nUppercase Upper\nVariation_Selector VS\nWhite_Space space\nXID_Continue XIDC\nXID_Start XIDS`.split(/\\s/).map((p) => [slug(p), p])\n);\nvar LowerToAlternativeLowerCaseMap = /* @__PURE__ */ new Map([\n [\"s\", cp(383)],\n // s, ſ\n [cp(383), \"s\"]\n // ſ, s\n]);\nvar LowerToAlternativeUpperCaseMap = /* @__PURE__ */ new Map([\n [cp(223), cp(7838)],\n // ß, ẞ\n [cp(107), cp(8490)],\n // k, K (Kelvin)\n [cp(229), cp(8491)],\n // å, Å (Angstrom)\n [cp(969), cp(8486)]\n // ω, Ω (Ohm)\n]);\nvar LowerToTitleCaseMap = new Map([\n titleEntry(453),\n titleEntry(456),\n titleEntry(459),\n titleEntry(498),\n ...titleRange(8072, 8079),\n ...titleRange(8088, 8095),\n ...titleRange(8104, 8111),\n titleEntry(8124),\n titleEntry(8140),\n titleEntry(8188)\n]);\nvar PosixClassMap = /* @__PURE__ */ new Map([\n [\"alnum\", r`[\\p{Alpha}\\p{Nd}]`],\n [\"alpha\", r`\\p{Alpha}`],\n [\"ascii\", r`\\p{ASCII}`],\n [\"blank\", r`[\\p{Zs}\\t]`],\n [\"cntrl\", r`\\p{Cc}`],\n [\"digit\", r`\\p{Nd}`],\n [\"graph\", r`[\\P{space}&&\\P{Cc}&&\\P{Cn}&&\\P{Cs}]`],\n [\"lower\", r`\\p{Lower}`],\n [\"print\", r`[[\\P{space}&&\\P{Cc}&&\\P{Cn}&&\\P{Cs}]\\p{Zs}]`],\n [\"punct\", r`[\\p{P}\\p{S}]`],\n // Updated value from Onig 6.9.9; changed from Unicode `\\p{punct}`\n [\"space\", r`\\p{space}`],\n [\"upper\", r`\\p{Upper}`],\n [\"word\", r`[\\p{Alpha}\\p{M}\\p{Nd}\\p{Pc}]`],\n [\"xdigit\", r`\\p{AHex}`]\n]);\nfunction range(start, end) {\n const range2 = [];\n for (let i = start; i <= end; i++) {\n range2.push(i);\n }\n return range2;\n}\nfunction titleEntry(codePoint) {\n const char = cp(codePoint);\n return [char.toLowerCase(), char];\n}\nfunction titleRange(start, end) {\n return range(start, end).map((codePoint) => titleEntry(codePoint));\n}\nvar UnicodePropertiesWithSpecificCase = /* @__PURE__ */ new Set([\n \"Lower\",\n \"Lowercase\",\n \"Upper\",\n \"Uppercase\",\n \"Ll\",\n \"Lowercase_Letter\",\n \"Lt\",\n \"Titlecase_Letter\",\n \"Lu\",\n \"Uppercase_Letter\"\n // The `Changes_When_*` properties (and their aliases) could be included, but they're very rare.\n // Some other properties include a handful of chars with specific cases only, but these chars are\n // generally extreme edge cases and using such properties case insensitively generally produces\n // undesired behavior anyway\n]);\n\n// src/transform.js\nimport { createAlternative, createAssertion, createBackreference, createCapturingGroup, createCharacter, createCharacterClass, createCharacterSet, createGroup, createLookaroundAssertion, createQuantifier, createSubroutine, createUnicodeProperty, hasOnlyChild, parse, slug as slug2 } from \"oniguruma-parser/parser\";\nimport { traverse } from \"oniguruma-parser/traverser\";\nfunction transform(ast, options) {\n const opts = {\n // A couple edge cases exist where options `accuracy` and `bestEffortTarget` are used:\n // - `CharacterSet` kind `text_segment` (`\\X`): An exact representation would require heavy\n // Unicode data; a best-effort approximation requires knowing the target.\n // - `CharacterSet` kind `posix` with values `graph` and `print`: Their complex Unicode\n // representations would be hard to change to ASCII versions after the fact in the generator\n // based on `target`/`accuracy`, so produce the appropriate structure here.\n accuracy: \"default\",\n asciiWordBoundaries: false,\n avoidSubclass: false,\n bestEffortTarget: \"ES2025\",\n ...options\n };\n addParentProperties(ast);\n const firstPassState = {\n accuracy: opts.accuracy,\n asciiWordBoundaries: opts.asciiWordBoundaries,\n avoidSubclass: opts.avoidSubclass,\n flagDirectivesByAlt: /* @__PURE__ */ new Map(),\n jsGroupNameMap: /* @__PURE__ */ new Map(),\n minTargetEs2024: isMinTarget(opts.bestEffortTarget, \"ES2024\"),\n passedLookbehind: false,\n strategy: null,\n // Subroutines can appear before the groups they ref, so collect reffed nodes for a second pass \n subroutineRefMap: /* @__PURE__ */ new Map(),\n supportedGNodes: /* @__PURE__ */ new Set(),\n digitIsAscii: ast.flags.digitIsAscii,\n spaceIsAscii: ast.flags.spaceIsAscii,\n wordIsAscii: ast.flags.wordIsAscii\n };\n traverse(ast, FirstPassVisitor, firstPassState);\n const globalFlags = {\n dotAll: ast.flags.dotAll,\n ignoreCase: ast.flags.ignoreCase\n };\n const secondPassState = {\n currentFlags: globalFlags,\n prevFlags: null,\n globalFlags,\n groupOriginByCopy: /* @__PURE__ */ new Map(),\n groupsByName: /* @__PURE__ */ new Map(),\n multiplexCapturesToLeftByRef: /* @__PURE__ */ new Map(),\n openRefs: /* @__PURE__ */ new Map(),\n reffedNodesByReferencer: /* @__PURE__ */ new Map(),\n subroutineRefMap: firstPassState.subroutineRefMap\n };\n traverse(ast, SecondPassVisitor, secondPassState);\n const thirdPassState = {\n groupsByName: secondPassState.groupsByName,\n highestOrphanBackref: 0,\n numCapturesToLeft: 0,\n reffedNodesByReferencer: secondPassState.reffedNodesByReferencer\n };\n traverse(ast, ThirdPassVisitor, thirdPassState);\n ast._originMap = secondPassState.groupOriginByCopy;\n ast._strategy = firstPassState.strategy;\n return ast;\n}\nvar FirstPassVisitor = {\n AbsenceFunction({ node, parent, replaceWith }) {\n const { body, kind } = node;\n if (kind === \"repeater\") {\n const innerGroup = createGroup();\n innerGroup.body[0].body.push(\n // Insert own alts as `body`\n createLookaroundAssertion({ negate: true, body }),\n createUnicodeProperty(\"Any\")\n );\n const outerGroup = createGroup();\n outerGroup.body[0].body.push(\n createQuantifier(\"greedy\", 0, Infinity, innerGroup)\n );\n replaceWith(setParentDeep(outerGroup, parent), { traverse: true });\n } else {\n throw new Error(`Unsupported absence function \"(?~|\"`);\n }\n },\n Alternative: {\n enter({ node, parent, key }, { flagDirectivesByAlt }) {\n const flagDirectives = node.body.filter((el) => el.kind === \"flags\");\n for (let i = key + 1; i < parent.body.length; i++) {\n const forwardSiblingAlt = parent.body[i];\n getOrInsert(flagDirectivesByAlt, forwardSiblingAlt, []).push(...flagDirectives);\n }\n },\n exit({ node }, { flagDirectivesByAlt }) {\n if (flagDirectivesByAlt.get(node)?.length) {\n const flags = getCombinedFlagModsFromFlagNodes(flagDirectivesByAlt.get(node));\n if (flags) {\n const flagGroup = createGroup({ flags });\n flagGroup.body[0].body = node.body;\n node.body = [setParentDeep(flagGroup, node)];\n }\n }\n }\n },\n Assertion({ node, parent, key, container, root, remove, replaceWith }, state) {\n const { kind, negate } = node;\n const { asciiWordBoundaries, avoidSubclass, supportedGNodes, wordIsAscii } = state;\n if (kind === \"text_segment_boundary\") {\n throw new Error(`Unsupported text segment boundary \"\\\\${negate ? \"Y\" : \"y\"}\"`);\n } else if (kind === \"line_end\") {\n replaceWith(setParentDeep(createLookaroundAssertion({ body: [\n createAlternative({ body: [createAssertion(\"string_end\")] }),\n createAlternative({ body: [createCharacter(10)] })\n // `\\n`\n ] }), parent));\n } else if (kind === \"line_start\") {\n replaceWith(setParentDeep(parseFragment(r`(?<=\\A|\\n(?!\\z))`, { skipLookbehindValidation: true }), parent));\n } else if (kind === \"search_start\") {\n if (supportedGNodes.has(node)) {\n root.flags.sticky = true;\n remove();\n } else {\n const prev = container[key - 1];\n if (prev && isAlwaysNonZeroLength(prev)) {\n replaceWith(setParentDeep(createLookaroundAssertion({ negate: true }), parent));\n } else if (avoidSubclass) {\n throw new Error(r`Uses \"\\G\" in a way that requires a subclass`);\n } else {\n replaceWith(setParent(createAssertion(\"string_start\"), parent));\n state.strategy = \"clip_search\";\n }\n }\n } else if (kind === \"string_end\" || kind === \"string_start\") {\n } else if (kind === \"string_end_newline\") {\n replaceWith(setParentDeep(parseFragment(r`(?=\\n?\\z)`), parent));\n } else if (kind === \"word_boundary\") {\n if (!wordIsAscii && !asciiWordBoundaries) {\n const b = `(?:(?<=${defaultWordChar})(?!${defaultWordChar})|(?<!${defaultWordChar})(?=${defaultWordChar}))`;\n const B = `(?:(?<=${defaultWordChar})(?=${defaultWordChar})|(?<!${defaultWordChar})(?!${defaultWordChar}))`;\n replaceWith(setParentDeep(parseFragment(negate ? B : b), parent));\n }\n } else {\n throw new Error(`Unexpected assertion kind \"${kind}\"`);\n }\n },\n Backreference({ node }, { jsGroupNameMap }) {\n let { ref } = node;\n if (typeof ref === \"string\" && !isValidJsGroupName(ref)) {\n ref = getAndStoreJsGroupName(ref, jsGroupNameMap);\n node.ref = ref;\n }\n },\n CapturingGroup({ node }, { jsGroupNameMap, subroutineRefMap }) {\n let { name } = node;\n if (name && !isValidJsGroupName(name)) {\n name = getAndStoreJsGroupName(name, jsGroupNameMap);\n node.name = name;\n }\n subroutineRefMap.set(node.number, node);\n if (name) {\n subroutineRefMap.set(name, node);\n }\n },\n CharacterClassRange({ node, parent, replaceWith }) {\n if (parent.kind === \"intersection\") {\n const cc = createCharacterClass({ body: [node] });\n replaceWith(setParentDeep(cc, parent), { traverse: true });\n }\n },\n CharacterSet({ node, parent, replaceWith }, { accuracy, minTargetEs2024, digitIsAscii, spaceIsAscii, wordIsAscii }) {\n const { kind, negate, value } = node;\n if (digitIsAscii && (kind === \"digit\" || value === \"digit\")) {\n replaceWith(setParent(createCharacterSet(\"digit\", { negate }), parent));\n return;\n }\n if (spaceIsAscii && (kind === \"space\" || value === \"space\")) {\n replaceWith(setParentDeep(setNegate(parseFragment(asciiSpaceChar), negate), parent));\n return;\n }\n if (wordIsAscii && (kind === \"word\" || value === \"word\")) {\n replaceWith(setParent(createCharacterSet(\"word\", { negate }), parent));\n return;\n }\n if (kind === \"any\") {\n replaceWith(setParent(createUnicodeProperty(\"Any\"), parent));\n } else if (kind === \"digit\") {\n replaceWith(setParent(createUnicodeProperty(\"Nd\", { negate }), parent));\n } else if (kind === \"dot\") {\n } else if (kind === \"text_segment\") {\n if (accuracy === \"strict\") {\n throw new Error(r`Use of \"\\X\" requires non-strict accuracy`);\n }\n const eBase = \"\\\\p{Emoji}(?:\\\\p{EMod}|\\\\uFE0F\\\\u20E3?|[\\\\x{E0020}-\\\\x{E007E}]+\\\\x{E007F})?\";\n const emoji = r`\\p{RI}{2}|${eBase}(?:\\u200D${eBase})*`;\n replaceWith(setParentDeep(parseFragment(\n // Close approximation of an extended grapheme cluster; see <unicode.org/reports/tr29/>\n r`(?>\\r\\n|${minTargetEs2024 ? r`\\p{RGI_Emoji}` : emoji}|\\P{M}\\p{M}*)`,\n // Allow JS property `RGI_Emoji` through\n { skipPropertyNameValidation: true }\n ), parent));\n } else if (kind === \"hex\") {\n replaceWith(setParent(createUnicodeProperty(\"AHex\", { negate }), parent));\n } else if (kind === \"newline\") {\n replaceWith(setParentDeep(parseFragment(negate ? \"[^\\n]\" : \"(?>\\r\\n?|[\\n\\v\\f\\x85\\u2028\\u2029])\"), parent));\n } else if (kind === \"posix\") {\n if (!minTargetEs2024 && (value === \"graph\" || value === \"print\")) {\n if (accuracy === \"strict\") {\n throw new Error(`POSIX class \"${value}\" requires min target ES2024 or non-strict accuracy`);\n }\n let ascii = {\n graph: \"!-~\",\n print: \" -~\"\n }[value];\n if (negate) {\n ascii = `\\0-${cp(ascii.codePointAt(0) - 1)}${cp(ascii.codePointAt(2) + 1)}-\\u{10FFFF}`;\n }\n replaceWith(setParentDeep(parseFragment(`[${ascii}]`), parent));\n } else {\n replaceWith(setParentDeep(setNegate(parseFragment(PosixClassMap.get(value)), negate), parent));\n }\n } else if (kind === \"property\") {\n if (!JsUnicodePropertyMap.has(slug2(value))) {\n node.key = \"sc\";\n }\n } else if (kind === \"space\") {\n replaceWith(setParent(createUnicodeProperty(\"space\", { negate }), parent));\n } else if (kind === \"word\") {\n replaceWith(setParentDeep(setNegate(parseFragment(defaultWordChar), negate), parent));\n } else {\n throw new Error(`Unexpected character set kind \"${kind}\"`);\n }\n },\n Directive({ node, parent, root, remove, replaceWith, removeAllPrevSiblings, removeAllNextSiblings }) {\n const { kind, flags } = node;\n if (kind === \"flags\") {\n if (!flags.enable && !flags.disable) {\n remove();\n } else {\n const flagGroup = createGroup({ flags });\n flagGroup.body[0].body = removeAllNextSiblings();\n replaceWith(setParentDeep(flagGroup, parent), { traverse: true });\n }\n } else if (kind === \"keep\") {\n const firstAlt = root.body[0];\n const hasWrapperGroup = root.body.length === 1 && // Not emulatable if within a `CapturingGroup`\n hasOnlyChild(firstAlt, { type: \"Group\" }) && firstAlt.body[0].body.length === 1;\n const topLevel = hasWrapperGroup ? firstAlt.body[0] : root;\n if (parent.parent !== topLevel || topLevel.body.length > 1) {\n throw new Error(r`Uses \"\\K\" in a way that's unsupported`);\n }\n const lookbehind = createLookaroundAssertion({ behind: true });\n lookbehind.body[0].body = removeAllPrevSiblings();\n replaceWith(setParentDeep(lookbehind, parent));\n } else {\n throw new Error(`Unexpected directive kind \"${kind}\"`);\n }\n },\n Flags({ node, parent }) {\n if (node.posixIsAscii) {\n throw new Error('Unsupported flag \"P\"');\n }\n if (node.textSegmentMode === \"word\") {\n throw new Error('Unsupported flag \"y{w}\"');\n }\n [\n \"digitIsAscii\",\n // Flag D\n \"extended\",\n // Flag x\n \"posixIsAscii\",\n // Flag P\n \"spaceIsAscii\",\n // Flag S\n \"wordIsAscii\",\n // Flag W\n \"textSegmentMode\"\n // Flag y{g} or y{w}\n ].forEach((f) => delete node[f]);\n Object.assign(node, {\n // JS flag g; no Onig equiv\n global: false,\n // JS flag d; no Onig equiv\n hasIndices: false,\n // JS flag m; no Onig equiv but its behavior is always on in Onig. Onig's only line break\n // char is line feed, unlike JS, so this flag isn't used since it would produce inaccurate\n // results (also allows `^` and `$` to be used in the generator for string start and end)\n multiline: false,\n // JS flag y; no Onig equiv, but used for `\\G` emulation\n sticky: node.sticky ?? false\n // Note: Regex+ doesn't allow explicitly adding flags it handles implicitly, so leave out\n // properties `unicode` (JS flag u) and `unicodeSets` (JS flag v). Keep the existing values\n // for `ignoreCase` (flag i) and `dotAll` (JS flag s, but Onig flag m)\n });\n parent.options = {\n disable: {\n // Onig uses different rules for flag x than Regex+, so disable the implicit flag\n x: true,\n // Onig has no flag to control \"named capture only\" mode but contextually applies its\n // behavior when named capturing is used, so disable Regex+'s implicit flag for it\n n: true\n },\n force: {\n // Always add flag v because we're generating an AST that relies on it (it enables JS\n // support for Onig features nested classes, intersection, Unicode properties, etc.).\n // However, the generator might disable flag v based on its `target` option\n v: true\n }\n };\n },\n Group({ node }) {\n if (!node.flags) {\n return;\n }\n const { enable, disable } = node.flags;\n enable?.extended && delete enable.extended;\n disable?.extended && delete disable.extended;\n enable?.dotAll && disable?.dotAll && delete enable.dotAll;\n enable?.ignoreCase && disable?.ignoreCase && delete enable.ignoreCase;\n enable && !Object.keys(enable).length && delete node.flags.enable;\n disable && !Object.keys(disable).length && delete node.flags.disable;\n !node.flags.enable && !node.flags.disable && delete node.flags;\n },\n LookaroundAssertion({ node }, state) {\n const { kind } = node;\n if (kind === \"lookbehind\") {\n state.passedLookbehind = true;\n }\n },\n NamedCallout({ node, parent, replaceWith }) {\n const { kind } = node;\n if (kind === \"fail\") {\n replaceWith(setParentDeep(createLookaroundAssertion({ negate: true }), parent));\n } else {\n throw new Error(`Unsupported named callout \"(*${kind.toUpperCase()}\"`);\n }\n },\n Quantifier({ node }) {\n if (node.body.type === \"Quantifier\") {\n const group = createGroup();\n group.body[0].body.push(node.body);\n node.body = setParentDeep(group, node);\n }\n },\n Regex: {\n enter({ node }, { supportedGNodes }) {\n const leadingGs = [];\n let hasAltWithLeadG = false;\n let hasAltWithoutLeadG = false;\n for (const alt of node.body) {\n if (alt.body.length === 1 && alt.body[0].kind === \"search_start\") {\n alt.body.pop();\n } else {\n const leadingG = getLeadingG(alt.body);\n if (leadingG) {\n hasAltWithLeadG = true;\n Array.isArray(leadingG) ? leadingGs.push(...leadingG) : leadingGs.push(leadingG);\n } else {\n hasAltWithoutLeadG = true;\n }\n }\n }\n if (hasAltWithLeadG && !hasAltWithoutLeadG) {\n leadingGs.forEach((g) => supportedGNodes.add(g));\n }\n },\n exit(_, { accuracy, passedLookbehind, strategy }) {\n if (accuracy === \"strict\" && passedLookbehind && strategy) {\n throw new Error(r`Uses \"\\G\" in a way that requires non-strict accuracy`);\n }\n }\n },\n Subroutine({ node }, { jsGroupNameMap }) {\n let { ref } = node;\n if (typeof ref === \"string\" && !isValidJsGroupName(ref)) {\n ref = getAndStoreJsGroupName(ref, jsGroupNameMap);\n node.ref = ref;\n }\n }\n};\nvar SecondPassVisitor = {\n Backreference({ node }, { multiplexCapturesToLeftByRef, reffedNodesByReferencer }) {\n const { orphan, ref } = node;\n if (!orphan) {\n reffedNodesByReferencer.set(node, [...multiplexCapturesToLeftByRef.get(ref).map(({ node: node2 }) => node2)]);\n }\n },\n CapturingGroup: {\n enter({\n node,\n parent,\n replaceWith,\n skip\n }, {\n groupOriginByCopy,\n groupsByName,\n multiplexCapturesToLeftByRef,\n openRefs,\n reffedNodesByReferencer\n }) {\n const origin = groupOriginByCopy.get(node);\n if (origin && openRefs.has(node.number)) {\n const recursion2 = setParent(createRecursion(node.number), parent);\n reffedNodesByReferencer.set(recursion2, openRefs.get(node.number));\n replaceWith(recursion2);\n return;\n }\n openRefs.set(node.number, node);\n multiplexCapturesToLeftByRef.set(node.number, []);\n if (node.name) {\n getOrInsert(multiplexCapturesToLeftByRef, node.name, []);\n }\n const multiplexNodes = multiplexCapturesToLeftByRef.get(node.name ?? node.number);\n for (let i = 0; i < multiplexNodes.length; i++) {\n const multiplex = multiplexNodes[i];\n if (\n // This group is from subroutine expansion, and there's a multiplex value from either the\n // origin node or a prior subroutine expansion group with the same origin\n origin === multiplex.node || origin && origin === multiplex.origin || // This group is not from subroutine expansion, and it comes after a subroutine expansion\n // group that refers to this group\n node === multiplex.origin\n ) {\n multiplexNodes.splice(i, 1);\n break;\n }\n }\n multiplexCapturesToLeftByRef.get(node.number).push({ node, origin });\n if (node.name) {\n multiplexCapturesToLeftByRef.get(node.name).push({ node, origin });\n }\n if (node.name) {\n const groupsWithSameName = getOrInsert(groupsByName, node.name, /* @__PURE__ */ new Map());\n let hasDuplicateNameToRemove = false;\n if (origin) {\n hasDuplicateNameToRemove = true;\n } else {\n for (const groupInfo of groupsWithSameName.values()) {\n if (!groupInfo.hasDuplicateNameToRemove) {\n hasDuplicateNameToRemove = true;\n break;\n }\n }\n }\n groupsByName.get(node.name).set(node, { node, hasDuplicateNameToRemove });\n }\n },\n exit({ node }, { openRefs }) {\n openRefs.delete(node.number);\n }\n },\n Group: {\n enter({ node }, state) {\n state.prevFlags = state.currentFlags;\n if (node.flags) {\n state.currentFlags = getNewCurrentFlags(state.currentFlags, node.flags);\n }\n },\n exit(_, state) {\n state.currentFlags = state.prevFlags;\n }\n },\n Subroutine({ node, parent, replaceWith }, state) {\n const { isRecursive, ref } = node;\n if (isRecursive) {\n let reffed = parent;\n while (reffed = reffed.parent) {\n if (reffed.type === \"CapturingGroup\" && (reffed.name === ref || reffed.number === ref)) {\n break;\n }\n }\n state.reffedNodesByReferencer.set(node, reffed);\n return;\n }\n const reffedGroupNode = state.subroutineRefMap.get(ref);\n const isGlobalRecursion = ref === 0;\n const expandedSubroutine = isGlobalRecursion ? createRecursion(0) : (\n // The reffed group might itself contain subroutines, which are expanded during sub-traversal\n cloneCapturingGroup(reffedGroupNode, state.groupOriginByCopy, null)\n );\n let replacement = expandedSubroutine;\n if (!isGlobalRecursion) {\n const reffedGroupFlagMods = getCombinedFlagModsFromFlagNodes(getAllParents(\n reffedGroupNode,\n (p) => p.type === \"Group\" && !!p.flags\n ));\n const reffedGroupFlags = reffedGroupFlagMods ? getNewCurrentFlags(state.globalFlags, reffedGroupFlagMods) : state.globalFlags;\n if (!areFlagsEqual(reffedGroupFlags, state.currentFlags)) {\n replacement = createGroup({\n flags: getFlagModsFromFlags(reffedGroupFlags)\n });\n replacement.body[0].body.push(expandedSubroutine);\n }\n }\n replaceWith(setParentDeep(replacement, parent), { traverse: !isGlobalRecursion });\n }\n};\nvar ThirdPassVisitor = {\n Backreference({ node, parent, replaceWith }, state) {\n if (node.orphan) {\n state.highestOrphanBackref = Math.max(state.highestOrphanBackref, node.ref);\n return;\n }\n const reffedNodes = state.reffedNodesByReferencer.get(node);\n const participants = reffedNodes.filter((reffed) => canParticipateWithNode(reffed, node));\n if (!participants.length) {\n replaceWith(setParentDeep(createLookaroundAssertion({ negate: true }), parent));\n } else if (participants.length > 1) {\n const group = createGroup({\n atomic: true,\n body: participants.reverse().map((reffed) => createAlternative({\n body: [createBackreference(reffed.number)]\n }))\n });\n replaceWith(setParentDeep(group, parent));\n } else {\n node.ref = participants[0].number;\n }\n },\n CapturingGroup({ node }, state) {\n node.number = ++state.numCapturesToLeft;\n if (node.name) {\n if (state.groupsByName.get(node.name).get(node).hasDuplicateNameToRemove) {\n delete node.name;\n }\n }\n },\n Regex: {\n exit({ node }, state) {\n const numCapsNeeded = Math.max(state.highestOrphanBackref - state.numCapturesToLeft, 0);\n for (let i = 0; i < numCapsNeeded; i++) {\n const emptyCapture = createCapturingGroup();\n node.body.at(-1).body.push(emptyCapture);\n }\n }\n },\n Subroutine({ node }, state) {\n if (!node.isRecursive || node.ref === 0) {\n return;\n }\n node.ref = state.reffedNodesByReferencer.get(node).number;\n }\n};\nfunction addParentProperties(root) {\n traverse(root, {\n \"*\"({ node, parent }) {\n node.parent = parent;\n }\n });\n}\nfunction areFlagsEqual(a, b) {\n return a.dotAll === b.dotAll && a.ignoreCase === b.ignoreCase;\n}\nfunction canParticipateWithNode(capture, node) {\n let rightmostPoint = node;\n do {\n if (rightmostPoint.type === \"Regex\") {\n return false;\n }\n if (rightmostPoint.type === \"Alternative\") {\n continue;\n }\n if (rightmostPoint === capture) {\n return false;\n }\n const kidsOfParent = getKids(rightmostPoint.parent);\n for (const kid of kidsOfParent) {\n if (kid === rightmostPoint) {\n break;\n }\n if (kid === capture || isAncestorOf(kid, capture)) {\n return true;\n }\n }\n } while (rightmostPoint = rightmostPoint.parent);\n throw new Error(\"Unexpected path\");\n}\nfunction cloneCapturingGroup(obj, originMap, up, up2) {\n const store = Array.isArray(obj) ? [] : {};\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"parent\") {\n store.parent = Array.isArray(up) ? up2 : up;\n } else if (value && typeof value === \"object\") {\n store[key] = cloneCapturingGroup(value, originMap, store, up);\n } else {\n if (key === \"type\" && value === \"CapturingGroup\") {\n originMap.set(store, originMap.get(obj) ?? obj);\n }\n store[key] = value;\n }\n }\n return store;\n}\nfunction createRecursion(ref) {\n const node = createSubroutine(ref);\n node.isRecursive = true;\n return node;\n}\nfunction getAllParents(node, filterFn) {\n const results = [];\n while (node = node.parent) {\n if (!filterFn || filterFn(node)) {\n results.push(node);\n }\n }\n return results;\n}\nfunction getAndStoreJsGroupName(name, map) {\n if (map.has(name)) {\n return map.get(name);\n }\n const jsName = `$${map.size}_${name.replace(/^[^$_\\p{IDS}]|[^$\\u200C\\u200D\\p{IDC}]/ug, \"_\")}`;\n map.set(name, jsName);\n return jsName;\n}\nfunction getCombinedFlagModsFromFlagNodes(flagNodes) {\n const flagProps = [\"dotAll\", \"ignoreCase\"];\n const combinedFlags = { enable: {}, disable: {} };\n flagNodes.forEach(({ flags }) => {\n flagProps.forEach((prop) => {\n if (flags.enable?.[prop]) {\n delete combinedFlags.disable[prop];\n combinedFlags.enable[prop] = true;\n }\n if (flags.disable?.[prop]) {\n combinedFlags.disable[prop] = true;\n }\n });\n });\n if (!Object.keys(combinedFlags.enable).length) {\n delete combinedFlags.enable;\n }\n if (!Object.keys(combinedFlags.disable).length) {\n delete combinedFlags.disable;\n }\n if (combinedFlags.enable || combinedFlags.disable) {\n return combinedFlags;\n }\n return null;\n}\nfunction getFlagModsFromFlags({ dotAll, ignoreCase }) {\n const mods = {};\n if (dotAll || ignoreCase) {\n mods.enable = {};\n dotAll && (mods.enable.dotAll = true);\n ignoreCase && (mods.enable.ignoreCase = true);\n }\n if (!dotAll || !ignoreCase) {\n mods.disable = {};\n !dotAll && (mods.disable.dotAll = true);\n !ignoreCase && (mods.disable.ignoreCase = true);\n }\n return mods;\n}\nfunction getKids(node) {\n if (!node) {\n throw new Error(\"Node expected\");\n }\n const { body } = node;\n return Array.isArray(body) ? body : body ? [body] : null;\n}\nfunction getLeadingG(els) {\n const firstToConsider = els.find((el) => el.kind === \"search_start\" || isLoneGLookaround(el, { negate: false }) || !isAlwaysZeroLength(el));\n if (!firstToConsider) {\n return null;\n }\n if (firstToConsider.kind === \"search_start\") {\n return firstToConsider;\n }\n if (firstToConsider.type === \"LookaroundAssertion\") {\n return firstToConsider.body[0].body[0];\n }\n if (firstToConsider.type === \"CapturingGroup\" || firstToConsider.type === \"Group\") {\n const gNodesForGroup = [];\n for (const alt of firstToConsider.body) {\n const leadingG = getLeadingG(alt.body);\n if (!leadingG) {\n return null;\n }\n Array.isArray(leadingG) ? gNodesForGroup.push(...leadingG) : gNodesForGroup.push(leadingG);\n }\n return gNodesForGroup;\n }\n return null;\n}\nfunction isAncestorOf(node, descendant) {\n const kids = getKids(node) ?? [];\n for (const kid of kids) {\n if (kid === descendant || isAncestorOf(kid, descendant)) {\n return true;\n }\n }\n return false;\n}\nfunction isAlwaysZeroLength({ type }) {\n return type === \"Assertion\" || type === \"Directive\" || type === \"LookaroundAssertion\";\n}\nfunction isAlwaysNonZeroLength(node) {\n const types = [\n \"Character\",\n \"CharacterClass\",\n \"CharacterSet\"\n ];\n return types.includes(node.type) || node.type === \"Quantifier\" && node.min && types.includes(node.body.type);\n}\nfunction isLoneGLookaround(node, options) {\n const opts = {\n negate: null,\n ...options\n };\n return node.type === \"LookaroundAssertion\" && (opts.negate === null || node.negate === opts.negate) && node.body.length === 1 && hasOnlyChild(node.body[0], {\n type: \"Assertion\",\n kind: \"search_start\"\n });\n}\nfunction isValidJsGroupName(name) {\n return /^[$_\\p{IDS}][$\\u200C\\u200D\\p{IDC}]*$/u.test(name);\n}\nfunction parseFragment(pattern, options) {\n const ast = parse(pattern, {\n ...options,\n // Providing a custom set of Unicode property names avoids converting some JS Unicode\n // properties (ex: `\\p{Alpha}`) to Onig POSIX classes\n unicodePropertyMap: JsUnicodePropertyMap\n });\n const alts = ast.body;\n if (alts.length > 1 || alts[0].body.length > 1) {\n return createGroup({ body: alts });\n }\n return alts[0].body[0];\n}\nfunction setNegate(node, negate) {\n node.negate = negate;\n return node;\n}\nfunction setParent(node, parent) {\n node.parent = parent;\n return node;\n}\nfunction setParentDeep(node, parent) {\n addParentProperties(node);\n node.parent = parent;\n return node;\n}\n\n// src/generate.js\nimport { createAlternative as createAlternative2, createCharacter as createCharacter2, createGroup as createGroup2 } from \"oniguruma-parser/parser\";\nimport { traverse as traverse2 } from \"oniguruma-parser/traverser\";\nfunction generate(ast, options) {\n const opts = getOptions(options);\n const minTargetEs2024 = isMinTarget(opts.target, \"ES2024\");\n const minTargetEs2025 = isMinTarget(opts.target, \"ES2025\");\n const recursionLimit = opts.rules.recursionLimit;\n if (!Number.isInteger(recursionLimit) || recursionLimit < 2 || recursionLimit > 20) {\n throw new Error(\"Invalid recursionLimit; use 2-20\");\n }\n let hasCaseInsensitiveNode = null;\n let hasCaseSensitiveNode = null;\n if (!minTargetEs2025) {\n const iStack = [ast.flags.ignoreCase];\n traverse2(ast, FlagModifierVisitor, {\n getCurrentModI: () => iStack.at(-1),\n popModI() {\n iStack.pop();\n },\n pushModI(isIOn) {\n iStack.push(isIOn);\n },\n setHasCasedChar() {\n if (iStack.at(-1)) {\n hasCaseInsensitiveNode = true;\n } else {\n hasCaseSensitiveNode = true;\n }\n }\n });\n }\n const appliedGlobalFlags = {\n dotAll: ast.flags.dotAll,\n // - Turn global flag i on if a case insensitive node was used and no case sensitive nodes were\n // used (to avoid unnecessary node expansion).\n // - Turn global flag i off if a case sensitive node was used (since case sensitivity can't be\n // forced without the use of ES2025 flag groups)\n ignoreCase: !!((ast.flags.ignoreCase || hasCaseInsensitiveNode) && !hasCaseSensitiveNode)\n };\n let lastNode = ast;\n const state = {\n accuracy: opts.accuracy,\n appliedGlobalFlags,\n captureMap: /* @__PURE__ */ new Map(),\n currentFlags: {\n dotAll: ast.flags.dotAll,\n ignoreCase: ast.flags.ignoreCase\n },\n inCharClass: false,\n lastNode,\n originMap: ast._originMap,\n recursionLimit,\n useAppliedIgnoreCase: !!(!minTargetEs2025 && hasCaseInsensitiveNode && hasCaseSensitiveNode),\n useFlagMods: minTargetEs2025,\n useFlagV: minTargetEs2024,\n verbose: opts.verbose\n };\n function gen(node) {\n state.lastNode = lastNode;\n lastNode = node;\n const fn = throwIfNullish(generator[node.type], `Unexpected node type \"${node.type}\"`);\n return fn(node, state, gen);\n }\n const result = {\n pattern: ast.body.map(gen).join(\"|\"),\n // Could reset `lastNode` at this point via `lastNode = ast`, but it isn't needed by flags\n flags: gen(ast.flags),\n options: { ...ast.options }\n };\n if (!minTargetEs2024) {\n delete result.options.force.v;\n result.options.disable.v = true;\n result.options.unicodeSetsPlugin = null;\n }\n result._captureTransfers = /* @__PURE__ */ new Map();\n result._hiddenCaptures = [];\n state.captureMap.forEach((value, key) => {\n if (value.hidden) {\n result._hiddenCaptures.push(key);\n }\n if (value.transferTo) {\n getOrInsert(result._captureTransfers, value.transferTo, []).push(key);\n }\n });\n return result;\n}\nvar FlagModifierVisitor = {\n \"*\": {\n enter({ node }, state) {\n if (isAnyGroup(node)) {\n const currentModI = state.getCurrentModI();\n state.pushModI(\n node.flags ? getNewCurrentFlags({ ignoreCase: currentModI }, node.flags).ignoreCase : currentModI\n );\n }\n },\n exit({ node }, state) {\n if (isAnyGroup(node)) {\n state.popModI();\n }\n }\n },\n Backreference(_, state) {\n state.setHasCasedChar();\n },\n Character({ node }, state) {\n if (charHasCase(cp(node.value))) {\n state.setHasCasedChar();\n }\n },\n CharacterClassRange({ node, skip }, state) {\n skip();\n if (getCasesOutsideCharClassRange(node, { firstOnly: true }).length) {\n state.setHasCasedChar();\n }\n },\n CharacterSet({ node }, state) {\n if (node.kind === \"property\" && UnicodePropertiesWithSpecificCase.has(node.value)) {\n state.setHasCasedChar();\n }\n }\n};\nvar generator = {\n /**\n @param {AlternativeNode} node\n */\n Alternative({ body }, _, gen) {\n return body.map(gen).join(\"\");\n },\n /**\n @param {AssertionNode} node\n */\n Assertion({ kind, negate }) {\n if (kind === \"string_end\") {\n return \"$\";\n }\n if (kind === \"string_start\") {\n return \"^\";\n }\n if (kind === \"word_boundary\") {\n return negate ? r`\\B` : r`\\b`;\n }\n throw new Error(`Unexpected assertion kind \"${kind}\"`);\n },\n /**\n @param {BackreferenceNode} node\n */\n Backreference({ ref }, state) {\n if (typeof ref !== \"number\") {\n throw new Error(\"Unexpected named backref in transformed AST\");\n }\n if (!state.useFlagMods && state.accuracy === \"strict\" && state.currentFlags.ignoreCase && !state.captureMap.get(ref).ignoreCase) {\n throw new Error(\"Use of case-insensitive backref to case-sensitive group requires target ES2025 or non-strict accuracy\");\n }\n return \"\\\\\" + ref;\n },\n /**\n @param {CapturingGroupNode} node\n */\n CapturingGroup(node, state, gen) {\n const { body, name, number } = node;\n const data = { ignoreCase: state.currentFlags.ignoreCase };\n const origin = state.originMap.get(node);\n if (origin) {\n data.hidden = true;\n if (number > origin.number) {\n data.transferTo = origin.number;\n }\n }\n state.captureMap.set(number, data);\n return `(${name ? `?<${name}>` : \"\"}${body.map(gen).join(\"|\")})`;\n },\n /**\n @param {CharacterNode} node\n */\n Character({ value }, state) {\n const char = cp(value);\n const escaped = getCharEscape(value, {\n escDigit: state.lastNode.type === \"Backreference\",\n inCharClass: state.inCharClass,\n useFlagV: state.useFlagV\n });\n if (escaped !== char) {\n return escaped;\n }\n if (state.useAppliedIgnoreCase && state.currentFlags.ignoreCase && charHasCase(char)) {\n const cases = getIgnoreCaseMatchChars(char);\n return state.inCharClass ? cases.join(\"\") : cases.length > 1 ? `[${cases.join(\"\")}]` : cases[0];\n }\n return char;\n },\n /**\n @param {CharacterClassNode} node\n */\n CharacterClass(node, state, gen) {\n const { kind, negate, parent } = node;\n let { body } = node;\n if (kind === \"intersection\" && !state.useFlagV) {\n throw new Error(\"Use of character class intersection requires min target ES2024\");\n }\n if (envFlags.bugFlagVLiteralHyphenIsRange && state.useFlagV && body.some(isLiteralHyphen)) {\n body = [createCharacter2(45), ...body.filter((kid) => !isLiteralHyphen(kid))];\n }\n const genClass = () => `[${negate ? \"^\" : \"\"}${body.map(gen).join(kind === \"intersection\" ? \"&&\" : \"\")}]`;\n if (!state.inCharClass) {\n if (\n // Already established `kind !== 'intersection'` if `!state.useFlagV`; don't check again\n (!state.useFlagV || envFlags.bugNestedClassIgnoresNegation) && !negate\n ) {\n const negatedChildClasses = body.filter(\n (kid) => kid.type === \"CharacterClass\" && kid.kind === \"union\" && kid.negate\n );\n if (negatedChildClasses.length) {\n const group = createGroup2();\n const groupFirstAlt = group.body[0];\n group.parent = parent;\n groupFirstAlt.parent = group;\n body = body.filter((kid) => !negatedChildClasses.includes(kid));\n node.body = body;\n if (body.length) {\n node.parent = groupFirstAlt;\n groupFirstAlt.body.push(node);\n } else {\n group.body.pop();\n }\n negatedChildClasses.forEach((cc) => {\n const newAlt = createAlternative2({ body: [cc] });\n cc.parent = newAlt;\n newAlt.parent = group;\n group.body.push(newAlt);\n });\n return gen(group);\n }\n }\n state.inCharClass = true;\n const result = genClass();\n state.inCharClass = false;\n return result;\n }\n const firstEl = body[0];\n if (\n // Already established that the parent is a char class via `inCharClass`; don't check again\n kind === \"union\" && !negate && firstEl && // Allows many nested classes to work with `target` ES2018 which doesn't support nesting\n ((!state.useFlagV || !state.verbose) && parent.kind === \"union\" && !(envFlags.bugFlagVLiteralHyphenIsRange && state.useFlagV) || !state.verbose && parent.kind === \"intersection\" && // JS doesn't allow intersection with union or ranges\n body.length === 1 && firstEl.type !== \"CharacterClassRange\")\n ) {\n return body.map(gen).join(\"\");\n }\n if (!state.useFlagV && parent.type === \"CharacterClass\") {\n throw new Error(\"Uses nested character class in a way that requires min target ES2024\");\n }\n return genClass();\n },\n /**\n @param {CharacterClassRangeNode} node\n */\n CharacterClassRange(node, state) {\n const min = node.min.value;\n const max = node.max.value;\n const escOpts = {\n escDigit: false,\n inCharClass: true,\n useFlagV: state.useFlagV\n };\n const minStr = getCharEscape(min, escOpts);\n const maxStr = getCharEscape(max, escOpts);\n const extraChars = /* @__PURE__ */ new Set();\n if (state.useAppliedIgnoreCase && state.currentFlags.ignoreCase) {\n const charsOutsideRange = getCasesOutsideCharClassRange(node);\n const ranges = getCodePointRangesFromChars(charsOutsideRange);\n ranges.forEach((value) => {\n extraChars.add(\n Array.isArray(value) ? `${getCharEscape(value[0], escOpts)}-${getCharEscape(value[1], escOpts)}` : getCharEscape(value, escOpts)\n );\n });\n }\n return `${minStr}-${maxStr}${[...extraChars].join(\"\")}`;\n },\n /**\n @param {CharacterSetNode} node\n */\n CharacterSet({ kind, negate, value, key }, state) {\n if (kind === \"dot\") {\n return state.currentFlags.dotAll ? state.appliedGlobalFlags.dotAll || state.useFlagMods ? \".\" : \"[^]\" : (\n // Onig's only line break char is line feed, unlike JS\n r`[^\\n]`\n );\n }\n if (kind === \"digit\") {\n return negate ? r`\\D` : r`\\d`;\n }\n if (kind === \"property\") {\n if (state.useAppliedIgnoreCase && state.currentFlags.ignoreCase && UnicodePropertiesWithSpecificCase.has(value)) {\n throw new Error(`Unicode property \"${value}\" can't be case-insensitive when other chars have specific case`);\n }\n return `${negate ? r`\\P` : r`\\p`}{${key ? `${key}=` : \"\"}${value}}`;\n }\n if (kind === \"word\") {\n return negate ? r`\\W` : r`\\w`;\n }\n throw new Error(`Unexpected character set kind \"${kind}\"`);\n },\n /**\n @param {FlagsNode} node\n */\n Flags(node, state) {\n return (\n // The transformer should never turn on the properties for flags d, g, m since Onig doesn't\n // have equivs. Flag m is never used since Onig uses different line break chars than JS\n // (node.hasIndices ? 'd' : '') +\n // (node.global ? 'g' : '') +\n // (node.multiline ? 'm' : '') +\n (state.appliedGlobalFlags.ignoreCase ? \"i\" : \"\") + (node.dotAll ? \"s\" : \"\") + (node.sticky ? \"y\" : \"\")\n );\n },\n /**\n @param {GroupNode} node\n */\n Group({ atomic: atomic2, body, flags, parent }, state, gen) {\n const currentFlags = state.currentFlags;\n if (flags) {\n state.currentFlags = getNewCurrentFlags(currentFlags, flags);\n }\n const contents = body.map(gen).join(\"|\");\n const result = !state.verbose && body.length === 1 && // Single alt\n parent.type !== \"Quantifier\" && !atomic2 && (!state.useFlagMods || !flags) ? contents : `(?${getGroupPrefix(atomic2, flags, state.useFlagMods)}${contents})`;\n state.currentFlags = currentFlags;\n return result;\n },\n /**\n @param {LookaroundAssertionNode} node\n */\n LookaroundAssertion({ body, kind, negate }, _, gen) {\n const prefix = `${kind === \"lookahead\" ? \"\" : \"<\"}${negate ? \"!\" : \"=\"}`;\n return `(?${prefix}${body.map(gen).join(\"|\")})`;\n },\n /**\n @param {QuantifierNode} node\n */\n Quantifier(node, _, gen) {\n return gen(node.body) + getQuantifierStr(node);\n },\n /**\n @param {SubroutineNode & {isRecursive: true}} node\n */\n Subroutine({ isRecursive, ref }, state) {\n if (!isRecursive) {\n throw new Error(\"Unexpected non-recursive subroutine in transformed AST\");\n }\n const limit = state.recursionLimit;\n return ref === 0 ? `(?R=${limit})` : r`\\g<${ref}&R=${limit}>`;\n }\n};\nvar BaseEscapeChars = /* @__PURE__ */ new Set([\n \"$\",\n \"(\",\n \")\",\n \"*\",\n \"+\",\n \".\",\n \"?\",\n \"[\",\n \"\\\\\",\n \"]\",\n \"^\",\n \"{\",\n \"|\",\n \"}\"\n]);\nvar CharClassEscapeChars = /* @__PURE__ */ new Set([\n \"-\",\n \"\\\\\",\n \"]\",\n \"^\",\n // Literal `[` doesn't require escaping with flag u, but this can help work around regex source\n // linters and regex syntax processors that expect unescaped `[` to create a nested class\n \"[\"\n]);\nvar CharClassEscapeCharsFlagV = /* @__PURE__ */ new Set([\n \"(\",\n \")\",\n \"-\",\n \"/\",\n \"[\",\n \"\\\\\",\n \"]\",\n \"^\",\n \"{\",\n \"|\",\n \"}\",\n // Double punctuators; also includes already-listed `-` and `^`\n \"!\",\n \"#\",\n \"$\",\n \"%\",\n \"&\",\n \"*\",\n \"+\",\n \",\",\n \".\",\n \":\",\n \";\",\n \"<\",\n \"=\",\n \">\",\n \"?\",\n \"@\",\n \"`\",\n \"~\"\n]);\nvar CharCodeEscapeMap = /* @__PURE__ */ new Map([\n [9, r`\\t`],\n // horizontal tab\n [10, r`\\n`],\n // line feed\n [11, r`\\v`],\n // vertical tab\n [12, r`\\f`],\n // form feed\n [13, r`\\r`],\n // carriage return\n [8232, r`\\u2028`],\n // line separator\n [8233, r`\\u2029`],\n // paragraph separator\n [65279, r`\\uFEFF`]\n // ZWNBSP/BOM\n]);\nvar casedRe = /^\\p{Cased}$/u;\nfunction charHasCase(char) {\n return casedRe.test(char);\n}\nfunction getCasesOutsideCharClassRange(node, options) {\n const firstOnly = !!options?.firstOnly;\n const min = node.min.value;\n const max = node.max.value;\n const found = [];\n if (min < 65 && (max === 65535 || max >= 131071) || min === 65536 && max >= 131071) {\n return found;\n }\n for (let i = min; i <= max; i++) {\n const char = cp(i);\n if (!charHasCase(char)) {\n continue;\n }\n const charsOutsideRange = getIgnoreCaseMatchChars(char).filter((caseOfChar) => {\n const num = caseOfChar.codePointAt(0);\n return num < min || num > max;\n });\n if (charsOutsideRange.length) {\n found.push(...charsOutsideRange);\n if (firstOnly) {\n break;\n }\n }\n }\n return found;\n}\nfunction getCharEscape(codePoint, { escDigit, inCharClass, useFlagV }) {\n if (CharCodeEscapeMap.has(codePoint)) {\n return CharCodeEscapeMap.get(codePoint);\n }\n if (\n // Control chars, etc.; condition modeled on the Chrome developer console's display for strings\n codePoint < 32 || codePoint > 126 && codePoint < 160 || // Unicode planes 4-16; unassigned, special purpose, and private use area\n codePoint > 262143 || // Avoid corrupting a preceding backref by immediately following it with a literal digit\n escDigit && isDigitCharCode(codePoint)\n ) {\n return codePoint > 255 ? `\\\\u{${codePoint.toString(16).toUpperCase()}}` : `\\\\x${codePoint.toString(16).toUpperCase().padStart(2, \"0\")}`;\n }\n const escapeChars = inCharClass ? useFlagV ? CharClassEscapeCharsFlagV : CharClassEscapeChars : BaseEscapeChars;\n const char = cp(codePoint);\n return (escapeChars.has(char) ? \"\\\\\" : \"\") + char;\n}\nfunction getCodePointRangesFromChars(chars) {\n const codePoints = chars.map((char) => char.codePointAt(0)).sort((a, b) => a - b);\n const values = [];\n let start = null;\n for (let i = 0; i < codePoints.length; i++) {\n if (codePoints[i + 1] === codePoints[i] + 1) {\n start ??= codePoints[i];\n } else if (start === null) {\n values.push(codePoints[i]);\n } else {\n values.push([start, codePoints[i]]);\n start = null;\n }\n }\n return values;\n}\nfunction getGroupPrefix(atomic2, flagMods, useFlagMods) {\n if (atomic2) {\n return \">\";\n }\n let mods = \"\";\n if (flagMods && useFlagMods) {\n const { enable, disable } = flagMods;\n mods = (enable?.ignoreCase ? \"i\" : \"\") + (enable?.dotAll ? \"s\" : \"\") + (disable ? \"-\" : \"\") + (disable?.ignoreCase ? \"i\" : \"\") + (disable?.dotAll ? \"s\" : \"\");\n }\n return `${mods}:`;\n}\nfunction getQuantifierStr({ kind, max, min }) {\n let base;\n if (!min && max === 1) {\n base = \"?\";\n } else if (!min && max === Infinity) {\n base = \"*\";\n } else if (min === 1 && max === Infinity) {\n base = \"+\";\n } else if (min === max) {\n base = `{${min}}`;\n } else {\n base = `{${min},${max === Infinity ? \"\" : max}}`;\n }\n return base + {\n greedy: \"\",\n lazy: \"?\",\n possessive: \"+\"\n }[kind];\n}\nfunction isAnyGroup({ type }) {\n return type === \"CapturingGroup\" || type === \"Group\" || type === \"LookaroundAssertion\";\n}\nfunction isDigitCharCode(value) {\n return value > 47 && value < 58;\n}\nfunction isLiteralHyphen({ type, value }) {\n return type === \"Character\" && value === 45;\n}\n\n// src/subclass.js\nvar EmulatedRegExp = class _EmulatedRegExp extends RegExp {\n /**\n @type {Map<number, {\n hidden?: true;\n transferTo?: number;\n }>}\n */\n #captureMap = /* @__PURE__ */ new Map();\n /**\n @type {RegExp | EmulatedRegExp | null}\n */\n #compiled = null;\n /**\n @type {string}\n */\n #pattern;\n /**\n @type {Map<number, string>?}\n */\n #nameMap = null;\n /**\n @type {string?}\n */\n #strategy = null;\n /**\n Can be used to serialize the instance.\n @type {EmulatedRegExpOptions}\n */\n rawOptions = {};\n // Override the getter with one that works with lazy-compiled regexes\n get source() {\n return this.#pattern || \"(?:)\";\n }\n /**\n @overload\n @param {string} pattern\n @param {string} [flags]\n @param {EmulatedRegExpOptions} [options]\n */\n /**\n @overload\n @param {EmulatedRegExp} pattern\n @param {string} [flags]\n */\n constructor(pattern, flags, options) {\n const lazyCompile = !!options?.lazyCompile;\n if (pattern instanceof RegExp) {\n if (options) {\n throw new Error(\"Cannot provide options when copying a regexp\");\n }\n const re = pattern;\n super(re, flags);\n this.#pattern = re.source;\n if (re instanceof _EmulatedRegExp) {\n this.#captureMap = re.#captureMap;\n this.#nameMap = re.#nameMap;\n this.#strategy = re.#strategy;\n this.rawOptions = re.rawOptions;\n }\n } else {\n const opts = {\n hiddenCaptures: [],\n strategy: null,\n transfers: [],\n ...options\n };\n super(lazyCompile ? \"\" : pattern, flags);\n this.#pattern = pattern;\n this.#captureMap = createCaptureMap(opts.hiddenCaptures, opts.transfers);\n this.#strategy = opts.strategy;\n this.rawOptions = options ?? {};\n }\n if (!lazyCompile) {\n this.#compiled = this;\n }\n }\n /**\n Called internally by all String/RegExp methods that use regexes.\n @override\n @param {string} str\n @returns {RegExpExecArray?}\n */\n exec(str) {\n if (!this.#compiled) {\n const { lazyCompile, ...rest } = this.rawOptions;\n this.#compiled = new _EmulatedRegExp(this.#pattern, this.flags, rest);\n }\n const useLastIndex = this.global || this.sticky;\n const pos = this.lastIndex;\n if (this.#strategy === \"clip_search\" && useLastIndex && pos) {\n this.lastIndex = 0;\n const match = this.#execCore(str.slice(pos));\n if (match) {\n adjustMatchDetailsForOffset(match, pos, str, this.hasIndices);\n this.lastIndex += pos;\n }\n return match;\n }\n return this.#execCore(str);\n }\n /**\n Adds support for hidden and transfer captures.\n @param {string} str\n @returns\n */\n #execCore(str) {\n this.#compiled.lastIndex = this.lastIndex;\n const match = super.exec.call(this.#compiled, str);\n this.lastIndex = this.#compiled.lastIndex;\n if (!match || !this.#captureMap.size) {\n return match;\n }\n const matchCopy = [...match];\n match.length = 1;\n let indicesCopy;\n if (this.hasIndices) {\n indicesCopy = [...match.indices];\n match.indices.length = 1;\n }\n const mappedNums = [0];\n for (let i = 1; i < matchCopy.length; i++) {\n const { hidden, transferTo } = this.#captureMap.get(i) ?? {};\n if (hidden) {\n mappedNums.push(null);\n } else {\n mappedNums.push(match.length);\n match.push(matchCopy[i]);\n if (this.hasIndices) {\n match.indices.push(indicesCopy[i]);\n }\n }\n if (transferTo && matchCopy[i] !== void 0) {\n const to = mappedNums[transferTo];\n if (!to) {\n throw new Error(`Invalid capture transfer to \"${to}\"`);\n }\n match[to] = matchCopy[i];\n if (this.hasIndices) {\n match.indices[to] = indicesCopy[i];\n }\n if (match.groups) {\n if (!this.#nameMap) {\n this.#nameMap = createNameMap(this.source);\n }\n const name = this.#nameMap.get(transferTo);\n if (name) {\n match.groups[name] = matchCopy[i];\n if (this.hasIndices) {\n match.indices.groups[name] = indicesCopy[i];\n }\n }\n }\n }\n }\n return match;\n }\n};\nfunction adjustMatchDetailsForOffset(match, offset, input, hasIndices) {\n match.index += offset;\n match.input = input;\n if (hasIndices) {\n const indices = match.indices;\n for (let i = 0; i < indices.length; i++) {\n const arr = indices[i];\n if (arr) {\n indices[i] = [arr[0] + offset, arr[1] + offset];\n }\n }\n const groupIndices = indices.groups;\n if (groupIndices) {\n Object.keys(groupIndices).forEach((key) => {\n const arr = groupIndices[key];\n if (arr) {\n groupIndices[key] = [arr[0] + offset, arr[1] + offset];\n }\n });\n }\n }\n}\nfunction createCaptureMap(hiddenCaptures, transfers) {\n const captureMap = /* @__PURE__ */ new Map();\n for (const num of hiddenCaptures) {\n captureMap.set(num, {\n hidden: true\n });\n }\n for (const [to, from] of transfers) {\n for (const num of from) {\n getOrInsert(captureMap, num, {}).transferTo = to;\n }\n }\n return captureMap;\n}\nfunction createNameMap(pattern) {\n const re = /(?<capture>\\((?:\\?<(?![=!])(?<name>[^>]+)>|(?!\\?)))|\\\\?./gsu;\n const map = /* @__PURE__ */ new Map();\n let numCharClassesOpen = 0;\n let numCaptures = 0;\n let match;\n while (match = re.exec(pattern)) {\n const { 0: m, groups: { capture, name } } = match;\n if (m === \"[\") {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n if (capture) {\n numCaptures++;\n if (name) {\n map.set(numCaptures, name);\n }\n }\n } else if (m === \"]\") {\n numCharClassesOpen--;\n }\n }\n return map;\n}\n\n// src/index.js\nimport { parse as parse2 } from \"oniguruma-parser/parser\";\nimport { atomic, possessive } from \"regex/internals\";\nimport { recursion } from \"regex-recursion\";\nfunction toRegExp(pattern, options) {\n const d = toRegExpDetails(pattern, options);\n if (d.options) {\n return new EmulatedRegExp(d.pattern, d.flags, d.options);\n }\n return new RegExp(d.pattern, d.flags);\n}\nfunction toRegExpDetails(pattern, options) {\n const opts = getOptions(options);\n const onigurumaAst = parse2(pattern, {\n flags: opts.flags,\n normalizeUnknownPropertyNames: true,\n rules: {\n captureGroup: opts.rules.captureGroup,\n singleline: opts.rules.singleline\n },\n skipBackrefValidation: opts.rules.allowOrphanBackrefs,\n unicodePropertyMap: JsUnicodePropertyMap\n });\n const regexPlusAst = transform(onigurumaAst, {\n accuracy: opts.accuracy,\n asciiWordBoundaries: opts.rules.asciiWordBoundaries,\n avoidSubclass: opts.avoidSubclass,\n bestEffortTarget: opts.target\n });\n const generated = generate(regexPlusAst, opts);\n const recursionResult = recursion(generated.pattern, {\n captureTransfers: generated._captureTransfers,\n hiddenCaptures: generated._hiddenCaptures,\n mode: \"external\"\n });\n const possessiveResult = possessive(recursionResult.pattern);\n const atomicResult = atomic(possessiveResult.pattern, {\n captureTransfers: recursionResult.captureTransfers,\n hiddenCaptures: recursionResult.hiddenCaptures\n });\n const details = {\n pattern: atomicResult.pattern,\n flags: `${opts.hasIndices ? \"d\" : \"\"}${opts.global ? \"g\" : \"\"}${generated.flags}${generated.options.disable.v ? \"u\" : \"v\"}`\n };\n if (opts.avoidSubclass) {\n if (opts.lazyCompileLength !== Infinity) {\n throw new Error(\"Lazy compilation requires subclass\");\n }\n } else {\n const hiddenCaptures = atomicResult.hiddenCaptures.sort((a, b) => a - b);\n const transfers = Array.from(atomicResult.captureTransfers);\n const strategy = regexPlusAst._strategy;\n const lazyCompile = details.pattern.length >= opts.lazyCompileLength;\n if (hiddenCaptures.length || transfers.length || strategy || lazyCompile) {\n details.options = {\n ...hiddenCaptures.length && { hiddenCaptures },\n ...transfers.length && { transfers },\n ...strategy && { strategy },\n ...lazyCompile && { lazyCompile }\n };\n }\n }\n return details;\n}\nexport {\n EmulatedRegExp,\n toRegExp,\n toRegExpDetails\n};\n//# sourceMappingURL=index.js.map\n","const MAX = 4294967295;\nclass JavaScriptScanner {\n constructor(patterns, options = {}) {\n this.patterns = patterns;\n this.options = options;\n const {\n forgiving = false,\n cache,\n regexConstructor\n } = options;\n if (!regexConstructor) {\n throw new Error(\"Option `regexConstructor` is not provided\");\n }\n this.regexps = patterns.map((p) => {\n if (typeof p !== \"string\") {\n return p;\n }\n const cached = cache?.get(p);\n if (cached) {\n if (cached instanceof RegExp) {\n return cached;\n }\n if (forgiving)\n return null;\n throw cached;\n }\n try {\n const regex = regexConstructor(p);\n cache?.set(p, regex);\n return regex;\n } catch (e) {\n cache?.set(p, e);\n if (forgiving)\n return null;\n throw e;\n }\n });\n }\n regexps;\n findNextMatchSync(string, startPosition, _options) {\n const str = typeof string === \"string\" ? string : string.content;\n const pending = [];\n function toResult(index, match, offset = 0) {\n return {\n index,\n captureIndices: match.indices.map((indice) => {\n if (indice == null) {\n return {\n start: MAX,\n end: MAX,\n length: 0\n };\n }\n return {\n start: indice[0] + offset,\n end: indice[1] + offset,\n length: indice[1] - indice[0]\n };\n })\n };\n }\n for (let i = 0; i < this.regexps.length; i++) {\n const regexp = this.regexps[i];\n if (!regexp)\n continue;\n try {\n regexp.lastIndex = startPosition;\n const match = regexp.exec(str);\n if (!match)\n continue;\n if (match.index === startPosition) {\n return toResult(i, match, 0);\n }\n pending.push([i, match, 0]);\n } catch (e) {\n if (this.options.forgiving)\n continue;\n throw e;\n }\n }\n if (pending.length) {\n const minIndex = Math.min(...pending.map((m) => m[1].index));\n for (const [i, match, offset] of pending) {\n if (match.index === minIndex) {\n return toResult(i, match, offset);\n }\n }\n }\n return null;\n }\n}\n\nexport { JavaScriptScanner as J };\n","import { toRegExp } from 'oniguruma-to-es';\nimport { J as JavaScriptScanner } from './shared/engine-javascript.hzpS1_41.mjs';\n\nfunction defaultJavaScriptRegexConstructor(pattern, options) {\n return toRegExp(\n pattern,\n {\n global: true,\n hasIndices: true,\n // This has no benefit for the standard JS engine, but it avoids a perf penalty for\n // precompiled grammars when constructing extremely long patterns that aren't always used\n lazyCompileLength: 3e3,\n rules: {\n // Needed since TextMate grammars merge backrefs across patterns\n allowOrphanBackrefs: true,\n // Improves search performance for generated regexes\n asciiWordBoundaries: true,\n // Follow `vscode-oniguruma` which enables this Oniguruma option by default\n captureGroup: true,\n // Oniguruma uses depth limit `20`; lowered here to keep regexes shorter and maybe\n // sometimes faster, but can be increased if issues reported due to low limit\n recursionLimit: 5,\n // Oniguruma option for `^`->`\\A`, `$`->`\\Z`; improves search performance without any\n // change in meaning since TM grammars search line by line\n singleline: true\n },\n ...options\n }\n );\n}\nfunction createJavaScriptRegexEngine(options = {}) {\n const _options = Object.assign(\n {\n target: \"auto\",\n cache: /* @__PURE__ */ new Map()\n },\n options\n );\n _options.regexConstructor ||= (pattern) => defaultJavaScriptRegexConstructor(pattern, { target: _options.target });\n return {\n createScanner(patterns) {\n return new JavaScriptScanner(patterns, _options);\n },\n createString(s) {\n return {\n content: s\n };\n }\n };\n}\n\nexport { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor };\n","import { J as JavaScriptScanner } from './shared/engine-javascript.hzpS1_41.mjs';\n\nfunction createJavaScriptRawEngine() {\n const options = {\n cache: /* @__PURE__ */ new Map(),\n regexConstructor: () => {\n throw new Error(\"JavaScriptRawEngine: only support precompiled grammar\");\n }\n };\n return {\n createScanner(patterns) {\n return new JavaScriptScanner(patterns, options);\n },\n createString(s) {\n return {\n content: s\n };\n }\n };\n}\n\nexport { createJavaScriptRawEngine };\n","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nexport { ShikiError };\n","// src/utils.ts\nfunction clone(something) {\n return doClone(something);\n}\nfunction doClone(something) {\n if (Array.isArray(something)) {\n return cloneArray(something);\n }\n if (something instanceof RegExp) {\n return something;\n }\n if (typeof something === \"object\") {\n return cloneObj(something);\n }\n return something;\n}\nfunction cloneArray(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = doClone(arr[i]);\n }\n return r;\n}\nfunction cloneObj(obj) {\n let r = {};\n for (let key in obj) {\n r[key] = doClone(obj[key]);\n }\n return r;\n}\nfunction mergeObjects(target, ...sources) {\n sources.forEach((source) => {\n for (let key in source) {\n target[key] = source[key];\n }\n });\n return target;\n}\nfunction basename(path) {\n const idx = ~path.lastIndexOf(\"/\") || ~path.lastIndexOf(\"\\\\\");\n if (idx === 0) {\n return path;\n } else if (~idx === path.length - 1) {\n return basename(path.substring(0, path.length - 1));\n } else {\n return path.substr(~idx + 1);\n }\n}\nvar CAPTURING_REGEX_SOURCE = /\\$(\\d+)|\\${(\\d+):\\/(downcase|upcase)}/g;\nvar RegexSource = class {\n static hasCaptures(regexSource) {\n if (regexSource === null) {\n return false;\n }\n CAPTURING_REGEX_SOURCE.lastIndex = 0;\n return CAPTURING_REGEX_SOURCE.test(regexSource);\n }\n static replaceCaptures(regexSource, captureSource, captureIndices) {\n return regexSource.replace(CAPTURING_REGEX_SOURCE, (match, index, commandIndex, command) => {\n let capture = captureIndices[parseInt(index || commandIndex, 10)];\n if (capture) {\n let result = captureSource.substring(capture.start, capture.end);\n while (result[0] === \".\") {\n result = result.substring(1);\n }\n switch (command) {\n case \"downcase\":\n return result.toLowerCase();\n case \"upcase\":\n return result.toUpperCase();\n default:\n return result;\n }\n } else {\n return match;\n }\n });\n }\n};\nfunction strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\nfunction strArrCmp(a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (!a) {\n return -1;\n }\n if (!b) {\n return 1;\n }\n let len1 = a.length;\n let len2 = b.length;\n if (len1 === len2) {\n for (let i = 0; i < len1; i++) {\n let res = strcmp(a[i], b[i]);\n if (res !== 0) {\n return res;\n }\n }\n return 0;\n }\n return len1 - len2;\n}\nfunction isValidHexColor(hex) {\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{8}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{3}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{4}$/i.test(hex)) {\n return true;\n }\n return false;\n}\nfunction escapeRegExpCharacters(value) {\n return value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, \"\\\\$&\");\n}\nvar CachedFn = class {\n constructor(fn) {\n this.fn = fn;\n }\n cache = /* @__PURE__ */ new Map();\n get(key) {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n const value = this.fn(key);\n this.cache.set(key, value);\n return value;\n }\n};\n\n// src/theme.ts\nvar Theme = class {\n constructor(_colorMap, _defaults, _root) {\n this._colorMap = _colorMap;\n this._defaults = _defaults;\n this._root = _root;\n }\n static createFromRawTheme(source, colorMap) {\n return this.createFromParsedTheme(parseTheme(source), colorMap);\n }\n static createFromParsedTheme(source, colorMap) {\n return resolveParsedThemeRules(source, colorMap);\n }\n _cachedMatchRoot = new CachedFn(\n (scopeName) => this._root.match(scopeName)\n );\n getColorMap() {\n return this._colorMap.getColorMap();\n }\n getDefaults() {\n return this._defaults;\n }\n match(scopePath) {\n if (scopePath === null) {\n return this._defaults;\n }\n const scopeName = scopePath.scopeName;\n const matchingTrieElements = this._cachedMatchRoot.get(scopeName);\n const effectiveRule = matchingTrieElements.find(\n (v) => _scopePathMatchesParentScopes(scopePath.parent, v.parentScopes)\n );\n if (!effectiveRule) {\n return null;\n }\n return new StyleAttributes(\n effectiveRule.fontStyle,\n effectiveRule.foreground,\n effectiveRule.background\n );\n }\n};\nvar ScopeStack = class _ScopeStack {\n constructor(parent, scopeName) {\n this.parent = parent;\n this.scopeName = scopeName;\n }\n static push(path, scopeNames) {\n for (const name of scopeNames) {\n path = new _ScopeStack(path, name);\n }\n return path;\n }\n static from(...segments) {\n let result = null;\n for (let i = 0; i < segments.length; i++) {\n result = new _ScopeStack(result, segments[i]);\n }\n return result;\n }\n push(scopeName) {\n return new _ScopeStack(this, scopeName);\n }\n getSegments() {\n let item = this;\n const result = [];\n while (item) {\n result.push(item.scopeName);\n item = item.parent;\n }\n result.reverse();\n return result;\n }\n toString() {\n return this.getSegments().join(\" \");\n }\n extends(other) {\n if (this === other) {\n return true;\n }\n if (this.parent === null) {\n return false;\n }\n return this.parent.extends(other);\n }\n getExtensionIfDefined(base) {\n const result = [];\n let item = this;\n while (item && item !== base) {\n result.push(item.scopeName);\n item = item.parent;\n }\n return item === base ? result.reverse() : void 0;\n }\n};\nfunction _scopePathMatchesParentScopes(scopePath, parentScopes) {\n if (parentScopes.length === 0) {\n return true;\n }\n for (let index = 0; index < parentScopes.length; index++) {\n let scopePattern = parentScopes[index];\n let scopeMustMatch = false;\n if (scopePattern === \">\") {\n if (index === parentScopes.length - 1) {\n return false;\n }\n scopePattern = parentScopes[++index];\n scopeMustMatch = true;\n }\n while (scopePath) {\n if (_matchesScope(scopePath.scopeName, scopePattern)) {\n break;\n }\n if (scopeMustMatch) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n if (!scopePath) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n return true;\n}\nfunction _matchesScope(scopeName, scopePattern) {\n return scopePattern === scopeName || scopeName.startsWith(scopePattern) && scopeName[scopePattern.length] === \".\";\n}\nvar StyleAttributes = class {\n constructor(fontStyle, foregroundId, backgroundId) {\n this.fontStyle = fontStyle;\n this.foregroundId = foregroundId;\n this.backgroundId = backgroundId;\n }\n};\nfunction parseTheme(source) {\n if (!source) {\n return [];\n }\n if (!source.settings || !Array.isArray(source.settings)) {\n return [];\n }\n let settings = source.settings;\n let result = [], resultLen = 0;\n for (let i = 0, len = settings.length; i < len; i++) {\n let entry = settings[i];\n if (!entry.settings) {\n continue;\n }\n let scopes;\n if (typeof entry.scope === \"string\") {\n let _scope = entry.scope;\n _scope = _scope.replace(/^[,]+/, \"\");\n _scope = _scope.replace(/[,]+$/, \"\");\n scopes = _scope.split(\",\");\n } else if (Array.isArray(entry.scope)) {\n scopes = entry.scope;\n } else {\n scopes = [\"\"];\n }\n let fontStyle = -1 /* NotSet */;\n if (typeof entry.settings.fontStyle === \"string\") {\n fontStyle = 0 /* None */;\n let segments = entry.settings.fontStyle.split(\" \");\n for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n let segment = segments[j];\n switch (segment) {\n case \"italic\":\n fontStyle = fontStyle | 1 /* Italic */;\n break;\n case \"bold\":\n fontStyle = fontStyle | 2 /* Bold */;\n break;\n case \"underline\":\n fontStyle = fontStyle | 4 /* Underline */;\n break;\n case \"strikethrough\":\n fontStyle = fontStyle | 8 /* Strikethrough */;\n break;\n }\n }\n }\n let foreground = null;\n if (typeof entry.settings.foreground === \"string\" && isValidHexColor(entry.settings.foreground)) {\n foreground = entry.settings.foreground;\n }\n let background = null;\n if (typeof entry.settings.background === \"string\" && isValidHexColor(entry.settings.background)) {\n background = entry.settings.background;\n }\n for (let j = 0, lenJ = scopes.length; j < lenJ; j++) {\n let _scope = scopes[j].trim();\n let segments = _scope.split(\" \");\n let scope = segments[segments.length - 1];\n let parentScopes = null;\n if (segments.length > 1) {\n parentScopes = segments.slice(0, segments.length - 1);\n parentScopes.reverse();\n }\n result[resultLen++] = new ParsedThemeRule(\n scope,\n parentScopes,\n i,\n fontStyle,\n foreground,\n background\n );\n }\n }\n return result;\n}\nvar ParsedThemeRule = class {\n constructor(scope, parentScopes, index, fontStyle, foreground, background) {\n this.scope = scope;\n this.parentScopes = parentScopes;\n this.index = index;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n};\nvar FontStyle = /* @__PURE__ */ ((FontStyle2) => {\n FontStyle2[FontStyle2[\"NotSet\"] = -1] = \"NotSet\";\n FontStyle2[FontStyle2[\"None\"] = 0] = \"None\";\n FontStyle2[FontStyle2[\"Italic\"] = 1] = \"Italic\";\n FontStyle2[FontStyle2[\"Bold\"] = 2] = \"Bold\";\n FontStyle2[FontStyle2[\"Underline\"] = 4] = \"Underline\";\n FontStyle2[FontStyle2[\"Strikethrough\"] = 8] = \"Strikethrough\";\n return FontStyle2;\n})(FontStyle || {});\nfunction resolveParsedThemeRules(parsedThemeRules, _colorMap) {\n parsedThemeRules.sort((a, b) => {\n let r = strcmp(a.scope, b.scope);\n if (r !== 0) {\n return r;\n }\n r = strArrCmp(a.parentScopes, b.parentScopes);\n if (r !== 0) {\n return r;\n }\n return a.index - b.index;\n });\n let defaultFontStyle = 0 /* None */;\n let defaultForeground = \"#000000\";\n let defaultBackground = \"#ffffff\";\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === \"\") {\n let incomingDefaults = parsedThemeRules.shift();\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n defaultFontStyle = incomingDefaults.fontStyle;\n }\n if (incomingDefaults.foreground !== null) {\n defaultForeground = incomingDefaults.foreground;\n }\n if (incomingDefaults.background !== null) {\n defaultBackground = incomingDefaults.background;\n }\n }\n let colorMap = new ColorMap(_colorMap);\n let defaults = new StyleAttributes(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n let root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1 /* NotSet */, 0, 0), []);\n for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n let rule = parsedThemeRules[i];\n root.insert(0, rule.scope, rule.parentScopes, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n }\n return new Theme(colorMap, defaults, root);\n}\nvar ColorMap = class {\n _isFrozen;\n _lastColorId;\n _id2color;\n _color2id;\n constructor(_colorMap) {\n this._lastColorId = 0;\n this._id2color = [];\n this._color2id = /* @__PURE__ */ Object.create(null);\n if (Array.isArray(_colorMap)) {\n this._isFrozen = true;\n for (let i = 0, len = _colorMap.length; i < len; i++) {\n this._color2id[_colorMap[i]] = i;\n this._id2color[i] = _colorMap[i];\n }\n } else {\n this._isFrozen = false;\n }\n }\n getId(color) {\n if (color === null) {\n return 0;\n }\n color = color.toUpperCase();\n let value = this._color2id[color];\n if (value) {\n return value;\n }\n if (this._isFrozen) {\n throw new Error(`Missing color in color map - ${color}`);\n }\n value = ++this._lastColorId;\n this._color2id[color] = value;\n this._id2color[value] = color;\n return value;\n }\n getColorMap() {\n return this._id2color.slice(0);\n }\n};\nvar emptyParentScopes = Object.freeze([]);\nvar ThemeTrieElementRule = class _ThemeTrieElementRule {\n scopeDepth;\n parentScopes;\n fontStyle;\n foreground;\n background;\n constructor(scopeDepth, parentScopes, fontStyle, foreground, background) {\n this.scopeDepth = scopeDepth;\n this.parentScopes = parentScopes || emptyParentScopes;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n clone() {\n return new _ThemeTrieElementRule(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);\n }\n static cloneArr(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = arr[i].clone();\n }\n return r;\n }\n acceptOverwrite(scopeDepth, fontStyle, foreground, background) {\n if (this.scopeDepth > scopeDepth) {\n console.log(\"how did this happen?\");\n } else {\n this.scopeDepth = scopeDepth;\n }\n if (fontStyle !== -1 /* NotSet */) {\n this.fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n this.foreground = foreground;\n }\n if (background !== 0) {\n this.background = background;\n }\n }\n};\nvar ThemeTrieElement = class _ThemeTrieElement {\n constructor(_mainRule, rulesWithParentScopes = [], _children = {}) {\n this._mainRule = _mainRule;\n this._children = _children;\n this._rulesWithParentScopes = rulesWithParentScopes;\n }\n _rulesWithParentScopes;\n static _cmpBySpecificity(a, b) {\n if (a.scopeDepth !== b.scopeDepth) {\n return b.scopeDepth - a.scopeDepth;\n }\n let aParentIndex = 0;\n let bParentIndex = 0;\n while (true) {\n if (a.parentScopes[aParentIndex] === \">\") {\n aParentIndex++;\n }\n if (b.parentScopes[bParentIndex] === \">\") {\n bParentIndex++;\n }\n if (aParentIndex >= a.parentScopes.length || bParentIndex >= b.parentScopes.length) {\n break;\n }\n const parentScopeLengthDiff = b.parentScopes[bParentIndex].length - a.parentScopes[aParentIndex].length;\n if (parentScopeLengthDiff !== 0) {\n return parentScopeLengthDiff;\n }\n aParentIndex++;\n bParentIndex++;\n }\n return b.parentScopes.length - a.parentScopes.length;\n }\n match(scope) {\n if (scope !== \"\") {\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n if (this._children.hasOwnProperty(head)) {\n return this._children[head].match(tail);\n }\n }\n const rules = this._rulesWithParentScopes.concat(this._mainRule);\n rules.sort(_ThemeTrieElement._cmpBySpecificity);\n return rules;\n }\n insert(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {\n if (scope === \"\") {\n this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);\n return;\n }\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n let child;\n if (this._children.hasOwnProperty(head)) {\n child = this._children[head];\n } else {\n child = new _ThemeTrieElement(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));\n this._children[head] = child;\n }\n child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);\n }\n _doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background) {\n if (parentScopes === null) {\n this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n for (let i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {\n let rule = this._rulesWithParentScopes[i];\n if (strArrCmp(rule.parentScopes, parentScopes) === 0) {\n rule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n }\n if (fontStyle === -1 /* NotSet */) {\n fontStyle = this._mainRule.fontStyle;\n }\n if (foreground === 0) {\n foreground = this._mainRule.foreground;\n }\n if (background === 0) {\n background = this._mainRule.background;\n }\n this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));\n }\n};\n\n// src/encodedTokenAttributes.ts\nvar EncodedTokenMetadata = class _EncodedTokenMetadata {\n static toBinaryStr(encodedTokenAttributes) {\n return encodedTokenAttributes.toString(2).padStart(32, \"0\");\n }\n static print(encodedTokenAttributes) {\n const languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n const tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n const fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n const foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n const background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n console.log({\n languageId,\n tokenType,\n fontStyle,\n foreground,\n background\n });\n }\n static getLanguageId(encodedTokenAttributes) {\n return (encodedTokenAttributes & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(encodedTokenAttributes) {\n return (encodedTokenAttributes & 768 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static containsBalancedBrackets(encodedTokenAttributes) {\n return (encodedTokenAttributes & 1024 /* BALANCED_BRACKETS_MASK */) !== 0;\n }\n static getFontStyle(encodedTokenAttributes) {\n return (encodedTokenAttributes & 30720 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 16744448 /* FOREGROUND_MASK */) >>> 15 /* FOREGROUND_OFFSET */;\n }\n static getBackground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 4278190080 /* BACKGROUND_MASK */) >>> 24 /* BACKGROUND_OFFSET */;\n }\n /**\n * Updates the fields in `metadata`.\n * A value of `0`, `NotSet` or `null` indicates that the corresponding field should be left as is.\n */\n static set(encodedTokenAttributes, languageId, tokenType, containsBalancedBrackets, fontStyle, foreground, background) {\n let _languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n let _tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n let _containsBalancedBracketsBit = _EncodedTokenMetadata.containsBalancedBrackets(encodedTokenAttributes) ? 1 : 0;\n let _fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n let _foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n let _background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n if (languageId !== 0) {\n _languageId = languageId;\n }\n if (tokenType !== 8 /* NotSet */) {\n _tokenType = fromOptionalTokenType(tokenType);\n }\n if (containsBalancedBrackets !== null) {\n _containsBalancedBracketsBit = containsBalancedBrackets ? 1 : 0;\n }\n if (fontStyle !== -1 /* NotSet */) {\n _fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n _foreground = foreground;\n }\n if (background !== 0) {\n _background = background;\n }\n return (_languageId << 0 /* LANGUAGEID_OFFSET */ | _tokenType << 8 /* TOKEN_TYPE_OFFSET */ | _containsBalancedBracketsBit << 10 /* BALANCED_BRACKETS_OFFSET */ | _fontStyle << 11 /* FONT_STYLE_OFFSET */ | _foreground << 15 /* FOREGROUND_OFFSET */ | _background << 24 /* BACKGROUND_OFFSET */) >>> 0;\n }\n};\nfunction toOptionalTokenType(standardType) {\n return standardType;\n}\nfunction fromOptionalTokenType(standardType) {\n return standardType;\n}\n\n// src/matcher.ts\nfunction createMatchers(selector, matchesName) {\n const results = [];\n const tokenizer = newTokenizer(selector);\n let token = tokenizer.next();\n while (token !== null) {\n let priority = 0;\n if (token.length === 2 && token.charAt(1) === \":\") {\n switch (token.charAt(0)) {\n case \"R\":\n priority = 1;\n break;\n case \"L\":\n priority = -1;\n break;\n default:\n console.log(`Unknown priority ${token} in scope selector`);\n }\n token = tokenizer.next();\n }\n let matcher = parseConjunction();\n results.push({ matcher, priority });\n if (token !== \",\") {\n break;\n }\n token = tokenizer.next();\n }\n return results;\n function parseOperand() {\n if (token === \"-\") {\n token = tokenizer.next();\n const expressionToNegate = parseOperand();\n return (matcherInput) => !!expressionToNegate && !expressionToNegate(matcherInput);\n }\n if (token === \"(\") {\n token = tokenizer.next();\n const expressionInParents = parseInnerExpression();\n if (token === \")\") {\n token = tokenizer.next();\n }\n return expressionInParents;\n }\n if (isIdentifier(token)) {\n const identifiers = [];\n do {\n identifiers.push(token);\n token = tokenizer.next();\n } while (isIdentifier(token));\n return (matcherInput) => matchesName(identifiers, matcherInput);\n }\n return null;\n }\n function parseConjunction() {\n const matchers = [];\n let matcher = parseOperand();\n while (matcher) {\n matchers.push(matcher);\n matcher = parseOperand();\n }\n return (matcherInput) => matchers.every((matcher2) => matcher2(matcherInput));\n }\n function parseInnerExpression() {\n const matchers = [];\n let matcher = parseConjunction();\n while (matcher) {\n matchers.push(matcher);\n if (token === \"|\" || token === \",\") {\n do {\n token = tokenizer.next();\n } while (token === \"|\" || token === \",\");\n } else {\n break;\n }\n matcher = parseConjunction();\n }\n return (matcherInput) => matchers.some((matcher2) => matcher2(matcherInput));\n }\n}\nfunction isIdentifier(token) {\n return !!token && !!token.match(/[\\w\\.:]+/);\n}\nfunction newTokenizer(input) {\n let regex = /([LR]:|[\\w\\.:][\\w\\.:\\-]*|[\\,\\|\\-\\(\\)])/g;\n let match = regex.exec(input);\n return {\n next: () => {\n if (!match) {\n return null;\n }\n const res = match[0];\n match = regex.exec(input);\n return res;\n }\n };\n}\n\n// src/onigLib.ts\nvar FindOption = /* @__PURE__ */ ((FindOption2) => {\n FindOption2[FindOption2[\"None\"] = 0] = \"None\";\n FindOption2[FindOption2[\"NotBeginString\"] = 1] = \"NotBeginString\";\n FindOption2[FindOption2[\"NotEndString\"] = 2] = \"NotEndString\";\n FindOption2[FindOption2[\"NotBeginPosition\"] = 4] = \"NotBeginPosition\";\n FindOption2[FindOption2[\"DebugCall\"] = 8] = \"DebugCall\";\n return FindOption2;\n})(FindOption || {});\nfunction disposeOnigString(str) {\n if (typeof str.dispose === \"function\") {\n str.dispose();\n }\n}\n\n// src/grammar/grammarDependencies.ts\nvar TopLevelRuleReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n toKey() {\n return this.scopeName;\n }\n};\nvar TopLevelRepositoryRuleReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n toKey() {\n return `${this.scopeName}#${this.ruleName}`;\n }\n};\nvar ExternalReferenceCollector = class {\n _references = [];\n _seenReferenceKeys = /* @__PURE__ */ new Set();\n get references() {\n return this._references;\n }\n visitedRule = /* @__PURE__ */ new Set();\n add(reference) {\n const key = reference.toKey();\n if (this._seenReferenceKeys.has(key)) {\n return;\n }\n this._seenReferenceKeys.add(key);\n this._references.push(reference);\n }\n};\nvar ScopeDependencyProcessor = class {\n constructor(repo, initialScopeName) {\n this.repo = repo;\n this.initialScopeName = initialScopeName;\n this.seenFullScopeRequests.add(this.initialScopeName);\n this.Q = [new TopLevelRuleReference(this.initialScopeName)];\n }\n seenFullScopeRequests = /* @__PURE__ */ new Set();\n seenPartialScopeRequests = /* @__PURE__ */ new Set();\n Q;\n processQueue() {\n const q = this.Q;\n this.Q = [];\n const deps = new ExternalReferenceCollector();\n for (const dep of q) {\n collectReferencesOfReference(dep, this.initialScopeName, this.repo, deps);\n }\n for (const dep of deps.references) {\n if (dep instanceof TopLevelRuleReference) {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n this.seenFullScopeRequests.add(dep.scopeName);\n this.Q.push(dep);\n } else {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n if (this.seenPartialScopeRequests.has(dep.toKey())) {\n continue;\n }\n this.seenPartialScopeRequests.add(dep.toKey());\n this.Q.push(dep);\n }\n }\n }\n};\nfunction collectReferencesOfReference(reference, baseGrammarScopeName, repo, result) {\n const selfGrammar = repo.lookup(reference.scopeName);\n if (!selfGrammar) {\n if (reference.scopeName === baseGrammarScopeName) {\n throw new Error(`No grammar provided for <${baseGrammarScopeName}>`);\n }\n return;\n }\n const baseGrammar = repo.lookup(baseGrammarScopeName);\n if (reference instanceof TopLevelRuleReference) {\n collectExternalReferencesInTopLevelRule({ baseGrammar, selfGrammar }, result);\n } else {\n collectExternalReferencesInTopLevelRepositoryRule(\n reference.ruleName,\n { baseGrammar, selfGrammar, repository: selfGrammar.repository },\n result\n );\n }\n const injections = repo.injections(reference.scopeName);\n if (injections) {\n for (const injection of injections) {\n result.add(new TopLevelRuleReference(injection));\n }\n }\n}\nfunction collectExternalReferencesInTopLevelRepositoryRule(ruleName, context, result) {\n if (context.repository && context.repository[ruleName]) {\n const rule = context.repository[ruleName];\n collectExternalReferencesInRules([rule], context, result);\n }\n}\nfunction collectExternalReferencesInTopLevelRule(context, result) {\n if (context.selfGrammar.patterns && Array.isArray(context.selfGrammar.patterns)) {\n collectExternalReferencesInRules(\n context.selfGrammar.patterns,\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n if (context.selfGrammar.injections) {\n collectExternalReferencesInRules(\n Object.values(context.selfGrammar.injections),\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n}\nfunction collectExternalReferencesInRules(rules, context, result) {\n for (const rule of rules) {\n if (result.visitedRule.has(rule)) {\n continue;\n }\n result.visitedRule.add(rule);\n const patternRepository = rule.repository ? mergeObjects({}, context.repository, rule.repository) : context.repository;\n if (Array.isArray(rule.patterns)) {\n collectExternalReferencesInRules(rule.patterns, { ...context, repository: patternRepository }, result);\n }\n const include = rule.include;\n if (!include) {\n continue;\n }\n const reference = parseInclude(include);\n switch (reference.kind) {\n case 0 /* Base */:\n collectExternalReferencesInTopLevelRule({ ...context, selfGrammar: context.baseGrammar }, result);\n break;\n case 1 /* Self */:\n collectExternalReferencesInTopLevelRule(context, result);\n break;\n case 2 /* RelativeReference */:\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, { ...context, repository: patternRepository }, result);\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const selfGrammar = reference.scopeName === context.selfGrammar.scopeName ? context.selfGrammar : reference.scopeName === context.baseGrammar.scopeName ? context.baseGrammar : void 0;\n if (selfGrammar) {\n const newContext = { baseGrammar: context.baseGrammar, selfGrammar, repository: patternRepository };\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, newContext, result);\n } else {\n collectExternalReferencesInTopLevelRule(newContext, result);\n }\n } else {\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n result.add(new TopLevelRepositoryRuleReference(reference.scopeName, reference.ruleName));\n } else {\n result.add(new TopLevelRuleReference(reference.scopeName));\n }\n }\n break;\n }\n }\n}\nvar BaseReference = class {\n kind = 0 /* Base */;\n};\nvar SelfReference = class {\n kind = 1 /* Self */;\n};\nvar RelativeReference = class {\n constructor(ruleName) {\n this.ruleName = ruleName;\n }\n kind = 2 /* RelativeReference */;\n};\nvar TopLevelReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n kind = 3 /* TopLevelReference */;\n};\nvar TopLevelRepositoryReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n kind = 4 /* TopLevelRepositoryReference */;\n};\nfunction parseInclude(include) {\n if (include === \"$base\") {\n return new BaseReference();\n } else if (include === \"$self\") {\n return new SelfReference();\n }\n const indexOfSharp = include.indexOf(\"#\");\n if (indexOfSharp === -1) {\n return new TopLevelReference(include);\n } else if (indexOfSharp === 0) {\n return new RelativeReference(include.substring(1));\n } else {\n const scopeName = include.substring(0, indexOfSharp);\n const ruleName = include.substring(indexOfSharp + 1);\n return new TopLevelRepositoryReference(scopeName, ruleName);\n }\n}\n\n// src/rule.ts\nvar HAS_BACK_REFERENCES = /\\\\(\\d+)/;\nvar BACK_REFERENCING_END = /\\\\(\\d+)/g;\nvar ruleIdSymbol = Symbol(\"RuleId\");\nvar endRuleId = -1;\nvar whileRuleId = -2;\nfunction ruleIdFromNumber(id) {\n return id;\n}\nfunction ruleIdToNumber(id) {\n return id;\n}\nvar Rule = class {\n $location;\n id;\n _nameIsCapturing;\n _name;\n _contentNameIsCapturing;\n _contentName;\n constructor($location, id, name, contentName) {\n this.$location = $location;\n this.id = id;\n this._name = name || null;\n this._nameIsCapturing = RegexSource.hasCaptures(this._name);\n this._contentName = contentName || null;\n this._contentNameIsCapturing = RegexSource.hasCaptures(this._contentName);\n }\n get debugName() {\n const location = this.$location ? `${basename(this.$location.filename)}:${this.$location.line}` : \"unknown\";\n return `${this.constructor.name}#${this.id} @ ${location}`;\n }\n getName(lineText, captureIndices) {\n if (!this._nameIsCapturing || this._name === null || lineText === null || captureIndices === null) {\n return this._name;\n }\n return RegexSource.replaceCaptures(this._name, lineText, captureIndices);\n }\n getContentName(lineText, captureIndices) {\n if (!this._contentNameIsCapturing || this._contentName === null) {\n return this._contentName;\n }\n return RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);\n }\n};\nvar CaptureRule = class extends Rule {\n retokenizeCapturedWithRuleId;\n constructor($location, id, name, contentName, retokenizeCapturedWithRuleId) {\n super($location, id, name, contentName);\n this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;\n }\n dispose() {\n }\n collectPatterns(grammar, out) {\n throw new Error(\"Not supported!\");\n }\n compile(grammar, endRegexSource) {\n throw new Error(\"Not supported!\");\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n throw new Error(\"Not supported!\");\n }\n};\nvar MatchRule = class extends Rule {\n _match;\n captures;\n _cachedCompiledPatterns;\n constructor($location, id, name, match, captures) {\n super($location, id, name, null);\n this._match = new RegExpSource(match, this.id);\n this.captures = captures;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugMatchRegExp() {\n return `${this._match.source}`;\n }\n collectPatterns(grammar, out) {\n out.push(this._match);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar IncludeOnlyRule = class extends Rule {\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, patterns) {\n super($location, id, name, contentName);\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n collectPatterns(grammar, out) {\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, out);\n }\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginEndRule = class extends Rule {\n _begin;\n beginCaptures;\n _end;\n endHasBackReferences;\n endCaptures;\n applyEndPatternLast;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this._end = new RegExpSource(end ? end : \"\\uFFFF\", -1);\n this.endHasBackReferences = this._end.hasBackReferences;\n this.endCaptures = endCaptures;\n this.applyEndPatternLast = applyEndPatternLast || false;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugEndRegExp() {\n return `${this._end.source}`;\n }\n getEndWithResolvedBackReferences(lineText, captureIndices) {\n return this._end.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);\n } else {\n this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);\n }\n }\n if (this._end.hasBackReferences) {\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length() - 1, endRegexSource);\n } else {\n this._cachedCompiledPatterns.setSource(0, endRegexSource);\n }\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginWhileRule = class extends Rule {\n _begin;\n beginCaptures;\n whileCaptures;\n _while;\n whileHasBackReferences;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n _cachedCompiledWhilePatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this.whileCaptures = whileCaptures;\n this._while = new RegExpSource(_while, whileRuleId);\n this.whileHasBackReferences = this._while.hasBackReferences;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n this._cachedCompiledWhilePatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n if (this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns.dispose();\n this._cachedCompiledWhilePatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugWhileRegExp() {\n return `${this._while.source}`;\n }\n getWhileWithResolvedBackReferences(lineText, captureIndices) {\n return this._while.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n }\n return this._cachedCompiledPatterns;\n }\n compileWhile(grammar, endRegexSource) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compile(grammar);\n }\n compileWhileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledWhilePatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns = new RegExpSourceList();\n this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);\n }\n if (this._while.hasBackReferences) {\n this._cachedCompiledWhilePatterns.setSource(0, endRegexSource ? endRegexSource : \"\\uFFFF\");\n }\n return this._cachedCompiledWhilePatterns;\n }\n};\nvar RuleFactory = class _RuleFactory {\n static createCaptureRule(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {\n return helper.registerRule((id) => {\n return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);\n });\n }\n static getCompiledRuleId(desc, helper, repository) {\n if (!desc.id) {\n helper.registerRule((id) => {\n desc.id = id;\n if (desc.match) {\n return new MatchRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.match,\n _RuleFactory._compileCaptures(desc.captures, helper, repository)\n );\n }\n if (typeof desc.begin === \"undefined\") {\n if (desc.repository) {\n repository = mergeObjects({}, repository, desc.repository);\n }\n let patterns = desc.patterns;\n if (typeof patterns === \"undefined\" && desc.include) {\n patterns = [{ include: desc.include }];\n }\n return new IncludeOnlyRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n _RuleFactory._compilePatterns(patterns, helper, repository)\n );\n }\n if (desc.while) {\n return new BeginWhileRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.while,\n _RuleFactory._compileCaptures(desc.whileCaptures || desc.captures, helper, repository),\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n }\n return new BeginEndRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.end,\n _RuleFactory._compileCaptures(desc.endCaptures || desc.captures, helper, repository),\n desc.applyEndPatternLast,\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n });\n }\n return desc.id;\n }\n static _compileCaptures(captures, helper, repository) {\n let r = [];\n if (captures) {\n let maximumCaptureId = 0;\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n if (numericCaptureId > maximumCaptureId) {\n maximumCaptureId = numericCaptureId;\n }\n }\n for (let i = 0; i <= maximumCaptureId; i++) {\n r[i] = null;\n }\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n let retokenizeCapturedWithRuleId = 0;\n if (captures[captureId].patterns) {\n retokenizeCapturedWithRuleId = _RuleFactory.getCompiledRuleId(captures[captureId], helper, repository);\n }\n r[numericCaptureId] = _RuleFactory.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);\n }\n }\n return r;\n }\n static _compilePatterns(patterns, helper, repository) {\n let r = [];\n if (patterns) {\n for (let i = 0, len = patterns.length; i < len; i++) {\n const pattern = patterns[i];\n let ruleId = -1;\n if (pattern.include) {\n const reference = parseInclude(pattern.include);\n switch (reference.kind) {\n case 0 /* Base */:\n case 1 /* Self */:\n ruleId = _RuleFactory.getCompiledRuleId(repository[pattern.include], helper, repository);\n break;\n case 2 /* RelativeReference */:\n let localIncludedRule = repository[reference.ruleName];\n if (localIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(localIncludedRule, helper, repository);\n } else {\n }\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const externalGrammarName = reference.scopeName;\n const externalGrammarInclude = reference.kind === 4 /* TopLevelRepositoryReference */ ? reference.ruleName : null;\n const externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);\n if (externalGrammar) {\n if (externalGrammarInclude) {\n let externalIncludedRule = externalGrammar.repository[externalGrammarInclude];\n if (externalIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);\n } else {\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);\n }\n } else {\n }\n break;\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(pattern, helper, repository);\n }\n if (ruleId !== -1) {\n const rule = helper.getRule(ruleId);\n let skipRule = false;\n if (rule instanceof IncludeOnlyRule || rule instanceof BeginEndRule || rule instanceof BeginWhileRule) {\n if (rule.hasMissingPatterns && rule.patterns.length === 0) {\n skipRule = true;\n }\n }\n if (skipRule) {\n continue;\n }\n r.push(ruleId);\n }\n }\n }\n return {\n patterns: r,\n hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length\n };\n }\n};\nvar RegExpSource = class _RegExpSource {\n source;\n ruleId;\n hasAnchor;\n hasBackReferences;\n _anchorCache;\n constructor(regExpSource, ruleId) {\n if (regExpSource && typeof regExpSource === \"string\") {\n const len = regExpSource.length;\n let lastPushedPos = 0;\n let output = [];\n let hasAnchor = false;\n for (let pos = 0; pos < len; pos++) {\n const ch = regExpSource.charAt(pos);\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n const nextCh = regExpSource.charAt(pos + 1);\n if (nextCh === \"z\") {\n output.push(regExpSource.substring(lastPushedPos, pos));\n output.push(\"$(?!\\\\n)(?<!\\\\n)\");\n lastPushedPos = pos + 2;\n } else if (nextCh === \"A\" || nextCh === \"G\") {\n hasAnchor = true;\n }\n pos++;\n }\n }\n }\n this.hasAnchor = hasAnchor;\n if (lastPushedPos === 0) {\n this.source = regExpSource;\n } else {\n output.push(regExpSource.substring(lastPushedPos, len));\n this.source = output.join(\"\");\n }\n } else {\n this.hasAnchor = false;\n this.source = regExpSource;\n }\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n } else {\n this._anchorCache = null;\n }\n this.ruleId = ruleId;\n if (typeof this.source === \"string\") {\n this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);\n } else {\n this.hasBackReferences = false;\n }\n }\n clone() {\n return new _RegExpSource(this.source, this.ruleId);\n }\n setSource(newSource) {\n if (this.source === newSource) {\n return;\n }\n this.source = newSource;\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n }\n }\n resolveBackReferences(lineText, captureIndices) {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let capturedValues = captureIndices.map((capture) => {\n return lineText.substring(capture.start, capture.end);\n });\n BACK_REFERENCING_END.lastIndex = 0;\n return this.source.replace(BACK_REFERENCING_END, (match, g1) => {\n return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || \"\");\n });\n }\n _buildAnchorCache() {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let A0_G0_result = [];\n let A0_G1_result = [];\n let A1_G0_result = [];\n let A1_G1_result = [];\n let pos, len, ch, nextCh;\n for (pos = 0, len = this.source.length; pos < len; pos++) {\n ch = this.source.charAt(pos);\n A0_G0_result[pos] = ch;\n A0_G1_result[pos] = ch;\n A1_G0_result[pos] = ch;\n A1_G1_result[pos] = ch;\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n nextCh = this.source.charAt(pos + 1);\n if (nextCh === \"A\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"\\uFFFF\";\n A1_G0_result[pos + 1] = \"A\";\n A1_G1_result[pos + 1] = \"A\";\n } else if (nextCh === \"G\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"G\";\n A1_G0_result[pos + 1] = \"\\uFFFF\";\n A1_G1_result[pos + 1] = \"G\";\n } else {\n A0_G0_result[pos + 1] = nextCh;\n A0_G1_result[pos + 1] = nextCh;\n A1_G0_result[pos + 1] = nextCh;\n A1_G1_result[pos + 1] = nextCh;\n }\n pos++;\n }\n }\n }\n return {\n A0_G0: A0_G0_result.join(\"\"),\n A0_G1: A0_G1_result.join(\"\"),\n A1_G0: A1_G0_result.join(\"\"),\n A1_G1: A1_G1_result.join(\"\")\n };\n }\n resolveAnchors(allowA, allowG) {\n if (!this.hasAnchor || !this._anchorCache || typeof this.source !== \"string\") {\n return this.source;\n }\n if (allowA) {\n if (allowG) {\n return this._anchorCache.A1_G1;\n } else {\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n return this._anchorCache.A0_G1;\n } else {\n return this._anchorCache.A0_G0;\n }\n }\n }\n};\nvar RegExpSourceList = class {\n _items;\n _hasAnchors;\n _cached;\n _anchorCache;\n constructor() {\n this._items = [];\n this._hasAnchors = false;\n this._cached = null;\n this._anchorCache = {\n A0_G0: null,\n A0_G1: null,\n A1_G0: null,\n A1_G1: null\n };\n }\n dispose() {\n this._disposeCaches();\n }\n _disposeCaches() {\n if (this._cached) {\n this._cached.dispose();\n this._cached = null;\n }\n if (this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0.dispose();\n this._anchorCache.A0_G0 = null;\n }\n if (this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1.dispose();\n this._anchorCache.A0_G1 = null;\n }\n if (this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0.dispose();\n this._anchorCache.A1_G0 = null;\n }\n if (this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1.dispose();\n this._anchorCache.A1_G1 = null;\n }\n }\n push(item) {\n this._items.push(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n unshift(item) {\n this._items.unshift(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n length() {\n return this._items.length;\n }\n setSource(index, newSource) {\n if (this._items[index].source !== newSource) {\n this._disposeCaches();\n this._items[index].setSource(newSource);\n }\n }\n compile(onigLib) {\n if (!this._cached) {\n let regExps = this._items.map((e) => e.source);\n this._cached = new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n return this._cached;\n }\n compileAG(onigLib, allowA, allowG) {\n if (!this._hasAnchors) {\n return this.compile(onigLib);\n } else {\n if (allowA) {\n if (allowG) {\n if (!this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G1;\n } else {\n if (!this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n if (!this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G1;\n } else {\n if (!this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G0;\n }\n }\n }\n }\n _resolveAnchors(onigLib, allowA, allowG) {\n let regExps = this._items.map((e) => e.resolveAnchors(allowA, allowG));\n return new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n};\nvar CompiledRule = class {\n constructor(onigLib, regExps, rules) {\n this.regExps = regExps;\n this.rules = rules;\n this.scanner = onigLib.createOnigScanner(regExps);\n }\n scanner;\n dispose() {\n if (typeof this.scanner.dispose === \"function\") {\n this.scanner.dispose();\n }\n }\n toString() {\n const r = [];\n for (let i = 0, len = this.rules.length; i < len; i++) {\n r.push(\" - \" + this.rules[i] + \": \" + this.regExps[i]);\n }\n return r.join(\"\\n\");\n }\n findNextMatchSync(string, startPosition, options) {\n const result = this.scanner.findNextMatchSync(string, startPosition, options);\n if (!result) {\n return null;\n }\n return {\n ruleId: this.rules[result.index],\n captureIndices: result.captureIndices\n };\n }\n};\n\n// src/grammar/basicScopesAttributeProvider.ts\nvar BasicScopeAttributes = class {\n constructor(languageId, tokenType) {\n this.languageId = languageId;\n this.tokenType = tokenType;\n }\n};\nvar BasicScopeAttributesProvider = class _BasicScopeAttributesProvider {\n _defaultAttributes;\n _embeddedLanguagesMatcher;\n constructor(initialLanguageId, embeddedLanguages) {\n this._defaultAttributes = new BasicScopeAttributes(initialLanguageId, 8 /* NotSet */);\n this._embeddedLanguagesMatcher = new ScopeMatcher(Object.entries(embeddedLanguages || {}));\n }\n getDefaultAttributes() {\n return this._defaultAttributes;\n }\n getBasicScopeAttributes(scopeName) {\n if (scopeName === null) {\n return _BasicScopeAttributesProvider._NULL_SCOPE_METADATA;\n }\n return this._getBasicScopeAttributes.get(scopeName);\n }\n static _NULL_SCOPE_METADATA = new BasicScopeAttributes(0, 0);\n _getBasicScopeAttributes = new CachedFn((scopeName) => {\n const languageId = this._scopeToLanguage(scopeName);\n const standardTokenType = this._toStandardTokenType(scopeName);\n return new BasicScopeAttributes(languageId, standardTokenType);\n });\n /**\n * Given a produced TM scope, return the language that token describes or null if unknown.\n * e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null\n */\n _scopeToLanguage(scope) {\n return this._embeddedLanguagesMatcher.match(scope) || 0;\n }\n _toStandardTokenType(scopeName) {\n const m = scopeName.match(_BasicScopeAttributesProvider.STANDARD_TOKEN_TYPE_REGEXP);\n if (!m) {\n return 8 /* NotSet */;\n }\n switch (m[1]) {\n case \"comment\":\n return 1 /* Comment */;\n case \"string\":\n return 2 /* String */;\n case \"regex\":\n return 3 /* RegEx */;\n case \"meta.embedded\":\n return 0 /* Other */;\n }\n throw new Error(\"Unexpected match for standard token type!\");\n }\n static STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|meta\\.embedded)\\b/;\n};\nvar ScopeMatcher = class {\n values;\n scopesRegExp;\n constructor(values) {\n if (values.length === 0) {\n this.values = null;\n this.scopesRegExp = null;\n } else {\n this.values = new Map(values);\n const escapedScopes = values.map(\n ([scopeName, value]) => escapeRegExpCharacters(scopeName)\n );\n escapedScopes.sort();\n escapedScopes.reverse();\n this.scopesRegExp = new RegExp(\n `^((${escapedScopes.join(\")|(\")}))($|\\\\.)`,\n \"\"\n );\n }\n }\n match(scope) {\n if (!this.scopesRegExp) {\n return void 0;\n }\n const m = scope.match(this.scopesRegExp);\n if (!m) {\n return void 0;\n }\n return this.values.get(m[1]);\n }\n};\n\n// src/debug.ts\nvar DebugFlags = {\n InDebugMode: typeof process !== \"undefined\" && !!process.env[\"VSCODE_TEXTMATE_DEBUG\"]\n};\nvar UseOnigurumaFindOptions = false;\n\n// src/grammar/tokenizeString.ts\nvar TokenizeStringResult = class {\n constructor(stack, stoppedEarly) {\n this.stack = stack;\n this.stoppedEarly = stoppedEarly;\n }\n};\nfunction _tokenizeString(grammar, lineText, isFirstLine, linePos, stack, lineTokens, checkWhileConditions, timeLimit) {\n const lineLength = lineText.content.length;\n let STOP = false;\n let anchorPosition = -1;\n if (checkWhileConditions) {\n const whileCheckResult = _checkWhileConditions(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n lineTokens\n );\n stack = whileCheckResult.stack;\n linePos = whileCheckResult.linePos;\n isFirstLine = whileCheckResult.isFirstLine;\n anchorPosition = whileCheckResult.anchorPosition;\n }\n const startTime = Date.now();\n while (!STOP) {\n if (timeLimit !== 0) {\n const elapsedTime = Date.now() - startTime;\n if (elapsedTime > timeLimit) {\n return new TokenizeStringResult(stack, true);\n }\n }\n scanNext();\n }\n return new TokenizeStringResult(stack, false);\n function scanNext() {\n if (false) {\n console.log(\"\");\n console.log(\n `@@scanNext ${linePos}: |${lineText.content.substr(linePos).replace(/\\n$/, \"\\\\n\")}|`\n );\n }\n const r = matchRuleOrInjections(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n anchorPosition\n );\n if (!r) {\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n const captureIndices = r.captureIndices;\n const matchedRuleId = r.matchedRuleId;\n const hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;\n if (matchedRuleId === endRuleId) {\n const poppedRule = stack.getRule(grammar);\n if (false) {\n console.log(\n \" popping \" + poppedRule.debugName + \" - \" + poppedRule.debugEndRegExp\n );\n }\n lineTokens.produce(stack, captureIndices[0].start);\n stack = stack.withContentNameScopesList(stack.nameScopesList);\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n poppedRule.endCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n const popped = stack;\n stack = stack.parent;\n anchorPosition = popped.getAnchorPos();\n if (!hasAdvanced && popped.getEnterPos() === linePos) {\n if (false) {\n console.error(\n \"[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing\"\n );\n }\n stack = popped;\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const _rule = grammar.getRule(matchedRuleId);\n lineTokens.produce(stack, captureIndices[0].start);\n const beforePush = stack;\n const scopeName = _rule.getName(lineText.content, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(\n scopeName,\n grammar\n );\n stack = stack.push(\n matchedRuleId,\n linePos,\n anchorPosition,\n captureIndices[0].end === lineLength,\n null,\n nameScopesList,\n nameScopesList\n );\n if (_rule instanceof BeginEndRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\n \" pushing \" + pushedRule.debugName + \" - \" + pushedRule.debugBeginRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.endHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getEndWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else if (_rule instanceof BeginWhileRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\" pushing \" + pushedRule.debugName);\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.whileHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getWhileWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const matchingRule = _rule;\n if (false) {\n console.log(\n \" matched \" + matchingRule.debugName + \" - \" + matchingRule.debugMatchRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n matchingRule.captures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n stack = stack.pop();\n if (!hasAdvanced) {\n if (false) {\n console.error(\n \"[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping\"\n );\n }\n stack = stack.safePop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n }\n }\n if (captureIndices[0].end > linePos) {\n linePos = captureIndices[0].end;\n isFirstLine = false;\n }\n }\n}\nfunction _checkWhileConditions(grammar, lineText, isFirstLine, linePos, stack, lineTokens) {\n let anchorPosition = stack.beginRuleCapturedEOL ? 0 : -1;\n const whileRules = [];\n for (let node = stack; node; node = node.pop()) {\n const nodeRule = node.getRule(grammar);\n if (nodeRule instanceof BeginWhileRule) {\n whileRules.push({\n rule: nodeRule,\n stack: node\n });\n }\n }\n for (let whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {\n const { ruleScanner, findOptions } = prepareRuleWhileSearch(whileRule.rule, grammar, whileRule.stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (false) {\n console.log(\" scanning for while rule\");\n console.log(ruleScanner.toString());\n }\n if (r) {\n const matchedRuleId = r.ruleId;\n if (matchedRuleId !== whileRuleId) {\n stack = whileRule.stack.pop();\n break;\n }\n if (r.captureIndices && r.captureIndices.length) {\n lineTokens.produce(whileRule.stack, r.captureIndices[0].start);\n handleCaptures(grammar, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);\n lineTokens.produce(whileRule.stack, r.captureIndices[0].end);\n anchorPosition = r.captureIndices[0].end;\n if (r.captureIndices[0].end > linePos) {\n linePos = r.captureIndices[0].end;\n isFirstLine = false;\n }\n }\n } else {\n if (false) {\n console.log(\" popping \" + whileRule.rule.debugName + \" - \" + whileRule.rule.debugWhileRegExp);\n }\n stack = whileRule.stack.pop();\n break;\n }\n }\n return { stack, linePos, anchorPosition, isFirstLine };\n}\nfunction matchRuleOrInjections(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const matchResult = matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n const injections = grammar.getInjections();\n if (injections.length === 0) {\n return matchResult;\n }\n const injectionResult = matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n if (!injectionResult) {\n return matchResult;\n }\n if (!matchResult) {\n return injectionResult;\n }\n const matchResultScore = matchResult.captureIndices[0].start;\n const injectionResultScore = injectionResult.captureIndices[0].start;\n if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {\n return injectionResult;\n }\n return matchResult;\n}\nfunction matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const rule = stack.getRule(grammar);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (r) {\n return {\n captureIndices: r.captureIndices,\n matchedRuleId: r.ruleId\n };\n }\n return null;\n}\nfunction matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n let bestMatchRating = Number.MAX_VALUE;\n let bestMatchCaptureIndices = null;\n let bestMatchRuleId;\n let bestMatchResultPriority = 0;\n const scopes = stack.contentNameScopesList.getScopeNames();\n for (let i = 0, len = injections.length; i < len; i++) {\n const injection = injections[i];\n if (!injection.matcher(scopes)) {\n continue;\n }\n const rule = grammar.getRule(injection.ruleId);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, null, isFirstLine, linePos === anchorPosition);\n const matchResult = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (!matchResult) {\n continue;\n }\n if (false) {\n console.log(` matched injection: ${injection.debugSelector}`);\n console.log(ruleScanner.toString());\n }\n const matchRating = matchResult.captureIndices[0].start;\n if (matchRating >= bestMatchRating) {\n continue;\n }\n bestMatchRating = matchRating;\n bestMatchCaptureIndices = matchResult.captureIndices;\n bestMatchRuleId = matchResult.ruleId;\n bestMatchResultPriority = injection.priority;\n if (bestMatchRating === linePos) {\n break;\n }\n }\n if (bestMatchCaptureIndices) {\n return {\n priorityMatch: bestMatchResultPriority === -1,\n captureIndices: bestMatchCaptureIndices,\n matchedRuleId: bestMatchRuleId\n };\n }\n return null;\n}\nfunction prepareRuleSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction prepareRuleWhileSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compileWhile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileWhileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction getFindOptions(allowA, allowG) {\n let options = 0 /* None */;\n if (!allowA) {\n options |= 1 /* NotBeginString */;\n }\n if (!allowG) {\n options |= 4 /* NotBeginPosition */;\n }\n return options;\n}\nfunction handleCaptures(grammar, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {\n if (captures.length === 0) {\n return;\n }\n const lineTextContent = lineText.content;\n const len = Math.min(captures.length, captureIndices.length);\n const localStack = [];\n const maxEnd = captureIndices[0].end;\n for (let i = 0; i < len; i++) {\n const captureRule = captures[i];\n if (captureRule === null) {\n continue;\n }\n const captureIndex = captureIndices[i];\n if (captureIndex.length === 0) {\n continue;\n }\n if (captureIndex.start > maxEnd) {\n break;\n }\n while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n if (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);\n } else {\n lineTokens.produce(stack, captureIndex.start);\n }\n if (captureRule.retokenizeCapturedWithRuleId) {\n const scopeName = captureRule.getName(lineTextContent, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(scopeName, grammar);\n const contentName = captureRule.getContentName(lineTextContent, captureIndices);\n const contentNameScopesList = nameScopesList.pushAttributed(contentName, grammar);\n const stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, -1, false, null, nameScopesList, contentNameScopesList);\n const onigSubStr = grammar.createOnigString(lineTextContent.substring(0, captureIndex.end));\n _tokenizeString(\n grammar,\n onigSubStr,\n isFirstLine && captureIndex.start === 0,\n captureIndex.start,\n stackClone,\n lineTokens,\n false,\n /* no time limit */\n 0\n );\n disposeOnigString(onigSubStr);\n continue;\n }\n const captureRuleScopeName = captureRule.getName(lineTextContent, captureIndices);\n if (captureRuleScopeName !== null) {\n const base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;\n const captureRuleScopesList = base.pushAttributed(captureRuleScopeName, grammar);\n localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));\n }\n }\n while (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n}\nvar LocalStackElement = class {\n scopes;\n endPos;\n constructor(scopes, endPos) {\n this.scopes = scopes;\n this.endPos = endPos;\n }\n};\n\n// src/grammar/grammar.ts\nfunction createGrammar(scopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, onigLib) {\n return new Grammar(\n scopeName,\n grammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n grammarRepository,\n onigLib\n );\n}\nfunction collectInjections(result, selector, rule, ruleFactoryHelper, grammar) {\n const matchers = createMatchers(selector, nameMatcher);\n const ruleId = RuleFactory.getCompiledRuleId(rule, ruleFactoryHelper, grammar.repository);\n for (const matcher of matchers) {\n result.push({\n debugSelector: selector,\n matcher: matcher.matcher,\n ruleId,\n grammar,\n priority: matcher.priority\n });\n }\n}\nfunction nameMatcher(identifers, scopes) {\n if (scopes.length < identifers.length) {\n return false;\n }\n let lastIndex = 0;\n return identifers.every((identifier) => {\n for (let i = lastIndex; i < scopes.length; i++) {\n if (scopesAreMatching(scopes[i], identifier)) {\n lastIndex = i + 1;\n return true;\n }\n }\n return false;\n });\n}\nfunction scopesAreMatching(thisScopeName, scopeName) {\n if (!thisScopeName) {\n return false;\n }\n if (thisScopeName === scopeName) {\n return true;\n }\n const len = scopeName.length;\n return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === \".\";\n}\nvar Grammar = class {\n constructor(_rootScopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, _onigLib) {\n this._rootScopeName = _rootScopeName;\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._onigLib = _onigLib;\n this._basicScopeAttributesProvider = new BasicScopeAttributesProvider(\n initialLanguage,\n embeddedLanguages\n );\n this._rootId = -1;\n this._lastRuleId = 0;\n this._ruleId2desc = [null];\n this._includedGrammars = {};\n this._grammarRepository = grammarRepository;\n this._grammar = initGrammar(grammar, null);\n this._injections = null;\n this._tokenTypeMatchers = [];\n if (tokenTypes) {\n for (const selector of Object.keys(tokenTypes)) {\n const matchers = createMatchers(selector, nameMatcher);\n for (const matcher of matchers) {\n this._tokenTypeMatchers.push({\n matcher: matcher.matcher,\n type: tokenTypes[selector]\n });\n }\n }\n }\n }\n _rootId;\n _lastRuleId;\n _ruleId2desc;\n _includedGrammars;\n _grammarRepository;\n _grammar;\n _injections;\n _basicScopeAttributesProvider;\n _tokenTypeMatchers;\n get themeProvider() {\n return this._grammarRepository;\n }\n dispose() {\n for (const rule of this._ruleId2desc) {\n if (rule) {\n rule.dispose();\n }\n }\n }\n createOnigScanner(sources) {\n return this._onigLib.createOnigScanner(sources);\n }\n createOnigString(sources) {\n return this._onigLib.createOnigString(sources);\n }\n getMetadataForScope(scope) {\n return this._basicScopeAttributesProvider.getBasicScopeAttributes(scope);\n }\n _collectInjections() {\n const grammarRepository = {\n lookup: (scopeName2) => {\n if (scopeName2 === this._rootScopeName) {\n return this._grammar;\n }\n return this.getExternalGrammar(scopeName2);\n },\n injections: (scopeName2) => {\n return this._grammarRepository.injections(scopeName2);\n }\n };\n const result = [];\n const scopeName = this._rootScopeName;\n const grammar = grammarRepository.lookup(scopeName);\n if (grammar) {\n const rawInjections = grammar.injections;\n if (rawInjections) {\n for (let expression in rawInjections) {\n collectInjections(\n result,\n expression,\n rawInjections[expression],\n this,\n grammar\n );\n }\n }\n const injectionScopeNames = this._grammarRepository.injections(scopeName);\n if (injectionScopeNames) {\n injectionScopeNames.forEach((injectionScopeName) => {\n const injectionGrammar = this.getExternalGrammar(injectionScopeName);\n if (injectionGrammar) {\n const selector = injectionGrammar.injectionSelector;\n if (selector) {\n collectInjections(\n result,\n selector,\n injectionGrammar,\n this,\n injectionGrammar\n );\n }\n }\n });\n }\n }\n result.sort((i1, i2) => i1.priority - i2.priority);\n return result;\n }\n getInjections() {\n if (this._injections === null) {\n this._injections = this._collectInjections();\n }\n return this._injections;\n }\n registerRule(factory) {\n const id = ++this._lastRuleId;\n const result = factory(ruleIdFromNumber(id));\n this._ruleId2desc[id] = result;\n return result;\n }\n getRule(ruleId) {\n return this._ruleId2desc[ruleIdToNumber(ruleId)];\n }\n getExternalGrammar(scopeName, repository) {\n if (this._includedGrammars[scopeName]) {\n return this._includedGrammars[scopeName];\n } else if (this._grammarRepository) {\n const rawIncludedGrammar = this._grammarRepository.lookup(scopeName);\n if (rawIncludedGrammar) {\n this._includedGrammars[scopeName] = initGrammar(\n rawIncludedGrammar,\n repository && repository.$base\n );\n return this._includedGrammars[scopeName];\n }\n }\n return void 0;\n }\n tokenizeLine(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, false, timeLimit);\n return {\n tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n tokenizeLine2(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, true, timeLimit);\n return {\n tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n _tokenize(lineText, prevState, emitBinaryTokens, timeLimit) {\n if (this._rootId === -1) {\n this._rootId = RuleFactory.getCompiledRuleId(\n this._grammar.repository.$self,\n this,\n this._grammar.repository\n );\n this.getInjections();\n }\n let isFirstLine;\n if (!prevState || prevState === StateStackImpl.NULL) {\n isFirstLine = true;\n const rawDefaultMetadata = this._basicScopeAttributesProvider.getDefaultAttributes();\n const defaultStyle = this.themeProvider.getDefaults();\n const defaultMetadata = EncodedTokenMetadata.set(\n 0,\n rawDefaultMetadata.languageId,\n rawDefaultMetadata.tokenType,\n null,\n defaultStyle.fontStyle,\n defaultStyle.foregroundId,\n defaultStyle.backgroundId\n );\n const rootScopeName = this.getRule(this._rootId).getName(\n null,\n null\n );\n let scopeList;\n if (rootScopeName) {\n scopeList = AttributedScopeStack.createRootAndLookUpScopeName(\n rootScopeName,\n defaultMetadata,\n this\n );\n } else {\n scopeList = AttributedScopeStack.createRoot(\n \"unknown\",\n defaultMetadata\n );\n }\n prevState = new StateStackImpl(\n null,\n this._rootId,\n -1,\n -1,\n false,\n null,\n scopeList,\n scopeList\n );\n } else {\n isFirstLine = false;\n prevState.reset();\n }\n lineText = lineText + \"\\n\";\n const onigLineText = this.createOnigString(lineText);\n const lineLength = onigLineText.content.length;\n const lineTokens = new LineTokens(\n emitBinaryTokens,\n lineText,\n this._tokenTypeMatchers,\n this.balancedBracketSelectors\n );\n const r = _tokenizeString(\n this,\n onigLineText,\n isFirstLine,\n 0,\n prevState,\n lineTokens,\n true,\n timeLimit\n );\n disposeOnigString(onigLineText);\n return {\n lineLength,\n lineTokens,\n ruleStack: r.stack,\n stoppedEarly: r.stoppedEarly\n };\n }\n};\nfunction initGrammar(grammar, base) {\n grammar = clone(grammar);\n grammar.repository = grammar.repository || {};\n grammar.repository.$self = {\n $vscodeTextmateLocation: grammar.$vscodeTextmateLocation,\n patterns: grammar.patterns,\n name: grammar.scopeName\n };\n grammar.repository.$base = base || grammar.repository.$self;\n return grammar;\n}\nvar AttributedScopeStack = class _AttributedScopeStack {\n /**\n * Invariant:\n * ```\n * if (parent && !scopePath.extends(parent.scopePath)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, scopePath, tokenAttributes) {\n this.parent = parent;\n this.scopePath = scopePath;\n this.tokenAttributes = tokenAttributes;\n }\n static fromExtension(namesScopeList, contentNameScopesList) {\n let current = namesScopeList;\n let scopeNames = namesScopeList?.scopePath ?? null;\n for (const frame of contentNameScopesList) {\n scopeNames = ScopeStack.push(scopeNames, frame.scopeNames);\n current = new _AttributedScopeStack(current, scopeNames, frame.encodedTokenAttributes);\n }\n return current;\n }\n static createRoot(scopeName, tokenAttributes) {\n return new _AttributedScopeStack(null, new ScopeStack(null, scopeName), tokenAttributes);\n }\n static createRootAndLookUpScopeName(scopeName, tokenAttributes, grammar) {\n const rawRootMetadata = grammar.getMetadataForScope(scopeName);\n const scopePath = new ScopeStack(null, scopeName);\n const rootStyle = grammar.themeProvider.themeMatch(scopePath);\n const resolvedTokenAttributes = _AttributedScopeStack.mergeAttributes(\n tokenAttributes,\n rawRootMetadata,\n rootStyle\n );\n return new _AttributedScopeStack(null, scopePath, resolvedTokenAttributes);\n }\n get scopeName() {\n return this.scopePath.scopeName;\n }\n toString() {\n return this.getScopeNames().join(\" \");\n }\n equals(other) {\n return _AttributedScopeStack.equals(this, other);\n }\n static equals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.scopeName !== b.scopeName || a.tokenAttributes !== b.tokenAttributes) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n static mergeAttributes(existingTokenAttributes, basicScopeAttributes, styleAttributes) {\n let fontStyle = -1 /* NotSet */;\n let foreground = 0;\n let background = 0;\n if (styleAttributes !== null) {\n fontStyle = styleAttributes.fontStyle;\n foreground = styleAttributes.foregroundId;\n background = styleAttributes.backgroundId;\n }\n return EncodedTokenMetadata.set(\n existingTokenAttributes,\n basicScopeAttributes.languageId,\n basicScopeAttributes.tokenType,\n null,\n fontStyle,\n foreground,\n background\n );\n }\n pushAttributed(scopePath, grammar) {\n if (scopePath === null) {\n return this;\n }\n if (scopePath.indexOf(\" \") === -1) {\n return _AttributedScopeStack._pushAttributed(this, scopePath, grammar);\n }\n const scopes = scopePath.split(/ /g);\n let result = this;\n for (const scope of scopes) {\n result = _AttributedScopeStack._pushAttributed(result, scope, grammar);\n }\n return result;\n }\n static _pushAttributed(target, scopeName, grammar) {\n const rawMetadata = grammar.getMetadataForScope(scopeName);\n const newPath = target.scopePath.push(scopeName);\n const scopeThemeMatchResult = grammar.themeProvider.themeMatch(newPath);\n const metadata = _AttributedScopeStack.mergeAttributes(\n target.tokenAttributes,\n rawMetadata,\n scopeThemeMatchResult\n );\n return new _AttributedScopeStack(target, newPath, metadata);\n }\n getScopeNames() {\n return this.scopePath.getSegments();\n }\n getExtensionIfDefined(base) {\n const result = [];\n let self = this;\n while (self && self !== base) {\n result.push({\n encodedTokenAttributes: self.tokenAttributes,\n scopeNames: self.scopePath.getExtensionIfDefined(self.parent?.scopePath ?? null)\n });\n self = self.parent;\n }\n return self === base ? result.reverse() : void 0;\n }\n};\nvar StateStackImpl = class _StateStackImpl {\n /**\n * Invariant:\n * ```\n * if (contentNameScopesList !== nameScopesList && contentNameScopesList?.parent !== nameScopesList) {\n * \tthrow new Error();\n * }\n * if (this.parent && !nameScopesList.extends(this.parent.contentNameScopesList)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n this.parent = parent;\n this.ruleId = ruleId;\n this.beginRuleCapturedEOL = beginRuleCapturedEOL;\n this.endRule = endRule;\n this.nameScopesList = nameScopesList;\n this.contentNameScopesList = contentNameScopesList;\n this.depth = this.parent ? this.parent.depth + 1 : 1;\n this._enterPos = enterPos;\n this._anchorPos = anchorPos;\n }\n _stackElementBrand = void 0;\n // TODO remove me\n static NULL = new _StateStackImpl(\n null,\n 0,\n 0,\n 0,\n false,\n null,\n null,\n null\n );\n /**\n * The position on the current line where this state was pushed.\n * This is relevant only while tokenizing a line, to detect endless loops.\n * Its value is meaningless across lines.\n */\n _enterPos;\n /**\n * The captured anchor position when this stack element was pushed.\n * This is relevant only while tokenizing a line, to restore the anchor position when popping.\n * Its value is meaningless across lines.\n */\n _anchorPos;\n /**\n * The depth of the stack.\n */\n depth;\n equals(other) {\n if (other === null) {\n return false;\n }\n return _StateStackImpl._equals(this, other);\n }\n static _equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!this._structuralEquals(a, b)) {\n return false;\n }\n return AttributedScopeStack.equals(a.contentNameScopesList, b.contentNameScopesList);\n }\n /**\n * A structural equals check. Does not take into account `scopes`.\n */\n static _structuralEquals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n clone() {\n return this;\n }\n static _reset(el) {\n while (el) {\n el._enterPos = -1;\n el._anchorPos = -1;\n el = el.parent;\n }\n }\n reset() {\n _StateStackImpl._reset(this);\n }\n pop() {\n return this.parent;\n }\n safePop() {\n if (this.parent) {\n return this.parent;\n }\n return this;\n }\n push(ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n return new _StateStackImpl(\n this,\n ruleId,\n enterPos,\n anchorPos,\n beginRuleCapturedEOL,\n endRule,\n nameScopesList,\n contentNameScopesList\n );\n }\n getEnterPos() {\n return this._enterPos;\n }\n getAnchorPos() {\n return this._anchorPos;\n }\n getRule(grammar) {\n return grammar.getRule(this.ruleId);\n }\n toString() {\n const r = [];\n this._writeString(r, 0);\n return \"[\" + r.join(\",\") + \"]\";\n }\n _writeString(res, outIndex) {\n if (this.parent) {\n outIndex = this.parent._writeString(res, outIndex);\n }\n res[outIndex++] = `(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`;\n return outIndex;\n }\n withContentNameScopesList(contentNameScopeStack) {\n if (this.contentNameScopesList === contentNameScopeStack) {\n return this;\n }\n return this.parent.push(\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n this.endRule,\n this.nameScopesList,\n contentNameScopeStack\n );\n }\n withEndRule(endRule) {\n if (this.endRule === endRule) {\n return this;\n }\n return new _StateStackImpl(\n this.parent,\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n endRule,\n this.nameScopesList,\n this.contentNameScopesList\n );\n }\n // Used to warn of endless loops\n hasSameRuleAs(other) {\n let el = this;\n while (el && el._enterPos === other._enterPos) {\n if (el.ruleId === other.ruleId) {\n return true;\n }\n el = el.parent;\n }\n return false;\n }\n toStateStackFrame() {\n return {\n ruleId: ruleIdToNumber(this.ruleId),\n beginRuleCapturedEOL: this.beginRuleCapturedEOL,\n endRule: this.endRule,\n nameScopesList: this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList ?? null) ?? [],\n contentNameScopesList: this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList) ?? []\n };\n }\n static pushFrame(self, frame) {\n const namesScopeList = AttributedScopeStack.fromExtension(self?.nameScopesList ?? null, frame.nameScopesList);\n return new _StateStackImpl(\n self,\n ruleIdFromNumber(frame.ruleId),\n frame.enterPos ?? -1,\n frame.anchorPos ?? -1,\n frame.beginRuleCapturedEOL,\n frame.endRule,\n namesScopeList,\n AttributedScopeStack.fromExtension(namesScopeList, frame.contentNameScopesList)\n );\n }\n};\nvar BalancedBracketSelectors = class {\n balancedBracketScopes;\n unbalancedBracketScopes;\n allowAny = false;\n constructor(balancedBracketScopes, unbalancedBracketScopes) {\n this.balancedBracketScopes = balancedBracketScopes.flatMap(\n (selector) => {\n if (selector === \"*\") {\n this.allowAny = true;\n return [];\n }\n return createMatchers(selector, nameMatcher).map((m) => m.matcher);\n }\n );\n this.unbalancedBracketScopes = unbalancedBracketScopes.flatMap(\n (selector) => createMatchers(selector, nameMatcher).map((m) => m.matcher)\n );\n }\n get matchesAlways() {\n return this.allowAny && this.unbalancedBracketScopes.length === 0;\n }\n get matchesNever() {\n return this.balancedBracketScopes.length === 0 && !this.allowAny;\n }\n match(scopes) {\n for (const excluder of this.unbalancedBracketScopes) {\n if (excluder(scopes)) {\n return false;\n }\n }\n for (const includer of this.balancedBracketScopes) {\n if (includer(scopes)) {\n return true;\n }\n }\n return this.allowAny;\n }\n};\nvar LineTokens = class {\n constructor(emitBinaryTokens, lineText, tokenTypeOverrides, balancedBracketSelectors) {\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._emitBinaryTokens = emitBinaryTokens;\n this._tokenTypeOverrides = tokenTypeOverrides;\n if (false) {\n this._lineText = lineText;\n } else {\n this._lineText = null;\n }\n this._tokens = [];\n this._binaryTokens = [];\n this._lastTokenEndIndex = 0;\n }\n _emitBinaryTokens;\n /**\n * defined only if `false`.\n */\n _lineText;\n /**\n * used only if `_emitBinaryTokens` is false.\n */\n _tokens;\n /**\n * used only if `_emitBinaryTokens` is true.\n */\n _binaryTokens;\n _lastTokenEndIndex;\n _tokenTypeOverrides;\n produce(stack, endIndex) {\n this.produceFromScopes(stack.contentNameScopesList, endIndex);\n }\n produceFromScopes(scopesList, endIndex) {\n if (this._lastTokenEndIndex >= endIndex) {\n return;\n }\n if (this._emitBinaryTokens) {\n let metadata = scopesList?.tokenAttributes ?? 0;\n let containsBalancedBrackets = false;\n if (this.balancedBracketSelectors?.matchesAlways) {\n containsBalancedBrackets = true;\n }\n if (this._tokenTypeOverrides.length > 0 || this.balancedBracketSelectors && !this.balancedBracketSelectors.matchesAlways && !this.balancedBracketSelectors.matchesNever) {\n const scopes2 = scopesList?.getScopeNames() ?? [];\n for (const tokenType of this._tokenTypeOverrides) {\n if (tokenType.matcher(scopes2)) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n toOptionalTokenType(tokenType.type),\n null,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n }\n if (this.balancedBracketSelectors) {\n containsBalancedBrackets = this.balancedBracketSelectors.match(scopes2);\n }\n }\n if (containsBalancedBrackets) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n 8 /* NotSet */,\n containsBalancedBrackets,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {\n this._lastTokenEndIndex = endIndex;\n return;\n }\n this._binaryTokens.push(this._lastTokenEndIndex);\n this._binaryTokens.push(metadata);\n this._lastTokenEndIndex = endIndex;\n return;\n }\n const scopes = scopesList?.getScopeNames() ?? [];\n this._tokens.push({\n startIndex: this._lastTokenEndIndex,\n endIndex,\n // value: lineText.substring(lastTokenEndIndex, endIndex),\n scopes\n });\n this._lastTokenEndIndex = endIndex;\n }\n getResult(stack, lineLength) {\n if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {\n this._tokens.pop();\n }\n if (this._tokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._tokens[this._tokens.length - 1].startIndex = 0;\n }\n return this._tokens;\n }\n getBinaryResult(stack, lineLength) {\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {\n this._binaryTokens.pop();\n this._binaryTokens.pop();\n }\n if (this._binaryTokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._binaryTokens[this._binaryTokens.length - 2] = 0;\n }\n const result = new Uint32Array(this._binaryTokens.length);\n for (let i = 0, len = this._binaryTokens.length; i < len; i++) {\n result[i] = this._binaryTokens[i];\n }\n return result;\n }\n};\n\n// src/registry.ts\nvar SyncRegistry = class {\n constructor(theme, _onigLib) {\n this._onigLib = _onigLib;\n this._theme = theme;\n }\n _grammars = /* @__PURE__ */ new Map();\n _rawGrammars = /* @__PURE__ */ new Map();\n _injectionGrammars = /* @__PURE__ */ new Map();\n _theme;\n dispose() {\n for (const grammar of this._grammars.values()) {\n grammar.dispose();\n }\n }\n setTheme(theme) {\n this._theme = theme;\n }\n getColorMap() {\n return this._theme.getColorMap();\n }\n /**\n * Add `grammar` to registry and return a list of referenced scope names\n */\n addGrammar(grammar, injectionScopeNames) {\n this._rawGrammars.set(grammar.scopeName, grammar);\n if (injectionScopeNames) {\n this._injectionGrammars.set(grammar.scopeName, injectionScopeNames);\n }\n }\n /**\n * Lookup a raw grammar.\n */\n lookup(scopeName) {\n return this._rawGrammars.get(scopeName);\n }\n /**\n * Returns the injections for the given grammar\n */\n injections(targetScope) {\n return this._injectionGrammars.get(targetScope);\n }\n /**\n * Get the default theme settings\n */\n getDefaults() {\n return this._theme.getDefaults();\n }\n /**\n * Match a scope in the theme.\n */\n themeMatch(scopePath) {\n return this._theme.match(scopePath);\n }\n /**\n * Lookup a grammar.\n */\n grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n if (!this._grammars.has(scopeName)) {\n let rawGrammar = this._rawGrammars.get(scopeName);\n if (!rawGrammar) {\n return null;\n }\n this._grammars.set(scopeName, createGrammar(\n scopeName,\n rawGrammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n this,\n this._onigLib\n ));\n }\n return this._grammars.get(scopeName);\n }\n};\n\n// src/index.ts\nvar Registry = class {\n _options;\n _syncRegistry;\n _ensureGrammarCache;\n constructor(options) {\n this._options = options;\n this._syncRegistry = new SyncRegistry(\n Theme.createFromRawTheme(options.theme, options.colorMap),\n options.onigLib\n );\n this._ensureGrammarCache = /* @__PURE__ */ new Map();\n }\n dispose() {\n this._syncRegistry.dispose();\n }\n /**\n * Change the theme. Once called, no previous `ruleStack` should be used anymore.\n */\n setTheme(theme, colorMap) {\n this._syncRegistry.setTheme(Theme.createFromRawTheme(theme, colorMap));\n }\n /**\n * Returns a lookup array for color ids.\n */\n getColorMap() {\n return this._syncRegistry.getColorMap();\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithEmbeddedLanguages(initialScopeName, initialLanguage, embeddedLanguages) {\n return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithConfiguration(initialScopeName, initialLanguage, configuration) {\n return this._loadGrammar(\n initialScopeName,\n initialLanguage,\n configuration.embeddedLanguages,\n configuration.tokenTypes,\n new BalancedBracketSelectors(\n configuration.balancedBracketSelectors || [],\n configuration.unbalancedBracketSelectors || []\n )\n );\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n */\n loadGrammar(initialScopeName) {\n return this._loadGrammar(initialScopeName, 0, null, null, null);\n }\n _loadGrammar(initialScopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n const dependencyProcessor = new ScopeDependencyProcessor(this._syncRegistry, initialScopeName);\n while (dependencyProcessor.Q.length > 0) {\n dependencyProcessor.Q.map((request) => this._loadSingleGrammar(request.scopeName));\n dependencyProcessor.processQueue();\n }\n return this._grammarForScopeName(\n initialScopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n _loadSingleGrammar(scopeName) {\n if (!this._ensureGrammarCache.has(scopeName)) {\n this._doLoadSingleGrammar(scopeName);\n this._ensureGrammarCache.set(scopeName, true);\n }\n }\n _doLoadSingleGrammar(scopeName) {\n const grammar = this._options.loadGrammar(scopeName);\n if (grammar) {\n const injections = typeof this._options.getInjections === \"function\" ? this._options.getInjections(scopeName) : void 0;\n this._syncRegistry.addGrammar(grammar, injections);\n }\n }\n /**\n * Adds a rawGrammar.\n */\n addGrammar(rawGrammar, injections = [], initialLanguage = 0, embeddedLanguages = null) {\n this._syncRegistry.addGrammar(rawGrammar, injections);\n return this._grammarForScopeName(rawGrammar.scopeName, initialLanguage, embeddedLanguages);\n }\n /**\n * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `addGrammar`.\n */\n _grammarForScopeName(scopeName, initialLanguage = 0, embeddedLanguages = null, tokenTypes = null, balancedBracketSelectors = null) {\n return this._syncRegistry.grammarForScopeName(\n scopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n};\nvar INITIAL = StateStackImpl.NULL;\nexport {\n EncodedTokenMetadata,\n FindOption,\n FontStyle,\n INITIAL,\n Registry,\n Theme,\n disposeOnigString\n};\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n classId: 'classID',\n dataType: 'datatype',\n itemId: 'itemID',\n strokeDashArray: 'strokeDasharray',\n strokeDashOffset: 'strokeDashoffset',\n strokeLineCap: 'strokeLinecap',\n strokeLineJoin: 'strokeLinejoin',\n strokeMiterLimit: 'strokeMiterlimit',\n typeOf: 'typeof',\n xLinkActuate: 'xlinkActuate',\n xLinkArcRole: 'xlinkArcrole',\n xLinkHref: 'xlinkHref',\n xLinkRole: 'xlinkRole',\n xLinkShow: 'xlinkShow',\n xLinkTitle: 'xlinkTitle',\n xLinkType: 'xlinkType',\n xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '',\n zwj: '',\n lrm: '',\n rlm: '',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `c` vs `c` (decimal shorter)\n // * `d` vs `d` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * The smallest way to encode a character.\n *\n * @param {number} code\n * @returns {string}\n */\nexport function formatBasic(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","import { ShikiError as ShikiError$1 } from '@shikijs/types';\nexport * from '@shikijs/types';\nimport { FontStyle, INITIAL, EncodedTokenMetadata, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';\nimport { toHtml } from 'hast-util-to-html';\n\nfunction resolveColorReplacements(theme, options) {\n const replacements = typeof theme === \"string\" ? {} : { ...theme.colorReplacements };\n const themeName = typeof theme === \"string\" ? theme : theme.name;\n for (const [key, value] of Object.entries(options?.colorReplacements || {})) {\n if (typeof value === \"string\")\n replacements[key] = value;\n else if (key === themeName)\n Object.assign(replacements, value);\n }\n return replacements;\n}\nfunction applyColorReplacements(color, replacements) {\n if (!color)\n return color;\n return replacements?.[color?.toLowerCase()] || color;\n}\n\nfunction toArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nasync function normalizeGetter(p) {\n return Promise.resolve(typeof p === \"function\" ? p() : p).then((r) => r.default || r);\n}\nfunction isPlainLang(lang) {\n return !lang || [\"plaintext\", \"txt\", \"text\", \"plain\"].includes(lang);\n}\nfunction isSpecialLang(lang) {\n return lang === \"ansi\" || isPlainLang(lang);\n}\nfunction isNoneTheme(theme) {\n return theme === \"none\";\n}\nfunction isSpecialTheme(theme) {\n return isNoneTheme(theme);\n}\n\nfunction addClassToHast(node, className) {\n if (!className)\n return node;\n node.properties ||= {};\n node.properties.class ||= [];\n if (typeof node.properties.class === \"string\")\n node.properties.class = node.properties.class.split(/\\s+/g);\n if (!Array.isArray(node.properties.class))\n node.properties.class = [];\n const targets = Array.isArray(className) ? className : className.split(/\\s+/g);\n for (const c of targets) {\n if (c && !node.properties.class.includes(c))\n node.properties.class.push(c);\n }\n return node;\n}\n\nfunction splitLines(code, preserveEnding = false) {\n if (code.length === 0) {\n return [[\"\", 0]];\n }\n const parts = code.split(/(\\r?\\n)/g);\n let index = 0;\n const lines = [];\n for (let i = 0; i < parts.length; i += 2) {\n const line = preserveEnding ? parts[i] + (parts[i + 1] || \"\") : parts[i];\n lines.push([line, index]);\n index += parts[i].length;\n index += parts[i + 1]?.length || 0;\n }\n return lines;\n}\nfunction createPositionConverter(code) {\n const lines = splitLines(code, true).map(([line]) => line);\n function indexToPos(index) {\n if (index === code.length) {\n return {\n line: lines.length - 1,\n character: lines[lines.length - 1].length\n };\n }\n let character = index;\n let line = 0;\n for (const lineText of lines) {\n if (character < lineText.length)\n break;\n character -= lineText.length;\n line++;\n }\n return { line, character };\n }\n function posToIndex(line, character) {\n let index = 0;\n for (let i = 0; i < line; i++)\n index += lines[i].length;\n index += character;\n return index;\n }\n return {\n lines,\n indexToPos,\n posToIndex\n };\n}\nfunction guessEmbeddedLanguages(code, _lang, highlighter) {\n const langs = /* @__PURE__ */ new Set();\n for (const match of code.matchAll(/:?lang=[\"']([^\"']+)[\"']/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/(?:```|~~~)([\\w-]+)/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/\\\\begin\\{([\\w-]+)\\}/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/<script\\s+(?:type|lang)=[\"']([^\"']+)[\"']/gi)) {\n const fullType = match[1].toLowerCase().trim();\n const lang = fullType.includes(\"/\") ? fullType.split(\"/\").pop() : fullType;\n if (lang)\n langs.add(lang);\n }\n if (!highlighter)\n return Array.from(langs);\n const bundle = highlighter.getBundledLanguages();\n return Array.from(langs).filter((l) => l && bundle[l]);\n}\n\nconst DEFAULT_COLOR_LIGHT_DARK = \"light-dark()\";\nconst COLOR_KEYS = [\"color\", \"background-color\"];\n\nfunction splitToken(token, offsets) {\n let lastOffset = 0;\n const tokens = [];\n for (const offset of offsets) {\n if (offset > lastOffset) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset, offset),\n offset: token.offset + lastOffset\n });\n }\n lastOffset = offset;\n }\n if (lastOffset < token.content.length) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset),\n offset: token.offset + lastOffset\n });\n }\n return tokens;\n}\nfunction splitTokens(tokens, breakpoints) {\n const sorted = Array.from(breakpoints instanceof Set ? breakpoints : new Set(breakpoints)).sort((a, b) => a - b);\n if (!sorted.length)\n return tokens;\n return tokens.map((line) => {\n return line.flatMap((token) => {\n const breakpointsInToken = sorted.filter((i) => token.offset < i && i < token.offset + token.content.length).map((i) => i - token.offset).sort((a, b) => a - b);\n if (!breakpointsInToken.length)\n return token;\n return splitToken(token, breakpointsInToken);\n });\n });\n}\nfunction flatTokenVariants(merged, variantsOrder, cssVariablePrefix, defaultColor, colorsRendering = \"css-vars\") {\n const token = {\n content: merged.content,\n explanation: merged.explanation,\n offset: merged.offset\n };\n const styles = variantsOrder.map((t) => getTokenStyleObject(merged.variants[t]));\n const styleKeys = new Set(styles.flatMap((t) => Object.keys(t)));\n const mergedStyles = {};\n const varKey = (idx, key) => {\n const keyName = key === \"color\" ? \"\" : key === \"background-color\" ? \"-bg\" : `-${key}`;\n return cssVariablePrefix + variantsOrder[idx] + (key === \"color\" ? \"\" : keyName);\n };\n styles.forEach((cur, idx) => {\n for (const key of styleKeys) {\n const value = cur[key] || \"inherit\";\n if (idx === 0 && defaultColor && COLOR_KEYS.includes(key)) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && styles.length > 1) {\n const lightIndex = variantsOrder.findIndex((t) => t === \"light\");\n const darkIndex = variantsOrder.findIndex((t) => t === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = styles[lightIndex][key] || \"inherit\";\n const darkValue = styles[darkIndex][key] || \"inherit\";\n mergedStyles[key] = `light-dark(${lightValue}, ${darkValue})`;\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n } else {\n mergedStyles[key] = value;\n }\n } else {\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n }\n }\n });\n token.htmlStyle = mergedStyles;\n return token;\n}\nfunction getTokenStyleObject(token) {\n const styles = {};\n if (token.color)\n styles.color = token.color;\n if (token.bgColor)\n styles[\"background-color\"] = token.bgColor;\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Italic)\n styles[\"font-style\"] = \"italic\";\n if (token.fontStyle & FontStyle.Bold)\n styles[\"font-weight\"] = \"bold\";\n const decorations = [];\n if (token.fontStyle & FontStyle.Underline)\n decorations.push(\"underline\");\n if (token.fontStyle & FontStyle.Strikethrough)\n decorations.push(\"line-through\");\n if (decorations.length)\n styles[\"text-decoration\"] = decorations.join(\" \");\n }\n return styles;\n}\nfunction stringifyTokenStyle(token) {\n if (typeof token === \"string\")\n return token;\n return Object.entries(token).map(([key, value]) => `${key}:${value}`).join(\";\");\n}\n\nconst _grammarStateMap = /* @__PURE__ */ new WeakMap();\nfunction setLastGrammarStateToMap(keys, state) {\n _grammarStateMap.set(keys, state);\n}\nfunction getLastGrammarStateFromMap(keys) {\n return _grammarStateMap.get(keys);\n}\nclass GrammarState {\n /**\n * Theme to Stack mapping\n */\n _stacks = {};\n lang;\n get themes() {\n return Object.keys(this._stacks);\n }\n get theme() {\n return this.themes[0];\n }\n get _stack() {\n return this._stacks[this.theme];\n }\n /**\n * Static method to create a initial grammar state.\n */\n static initial(lang, themes) {\n return new GrammarState(\n Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),\n lang\n );\n }\n constructor(...args) {\n if (args.length === 2) {\n const [stacksMap, lang] = args;\n this.lang = lang;\n this._stacks = stacksMap;\n } else {\n const [stack, lang, theme] = args;\n this.lang = lang;\n this._stacks = { [theme]: stack };\n }\n }\n /**\n * Get the internal stack object.\n * @internal\n */\n getInternalStack(theme = this.theme) {\n return this._stacks[theme];\n }\n getScopes(theme = this.theme) {\n return getScopes(this._stacks[theme]);\n }\n toJSON() {\n return {\n lang: this.lang,\n theme: this.theme,\n themes: this.themes,\n scopes: this.getScopes()\n };\n }\n}\nfunction getScopes(stack) {\n const scopes = [];\n const visited = /* @__PURE__ */ new Set();\n function pushScope(stack2) {\n if (visited.has(stack2))\n return;\n visited.add(stack2);\n const name = stack2?.nameScopesList?.scopeName;\n if (name)\n scopes.push(name);\n if (stack2.parent)\n pushScope(stack2.parent);\n }\n pushScope(stack);\n return scopes;\n}\nfunction getGrammarStack(state, theme) {\n if (!(state instanceof GrammarState))\n throw new ShikiError$1(\"Invalid grammar state\");\n return state.getInternalStack(theme);\n}\n\nfunction transformerDecorations() {\n const map = /* @__PURE__ */ new WeakMap();\n function getContext(shiki) {\n if (!map.has(shiki.meta)) {\n let normalizePosition = function(p) {\n if (typeof p === \"number\") {\n if (p < 0 || p > shiki.source.length)\n throw new ShikiError$1(`Invalid decoration offset: ${p}. Code length: ${shiki.source.length}`);\n return {\n ...converter.indexToPos(p),\n offset: p\n };\n } else {\n const line = converter.lines[p.line];\n if (line === void 0)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Lines length: ${converter.lines.length}`);\n let character = p.character;\n if (character < 0)\n character = line.length + character;\n if (character < 0 || character > line.length)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Line ${p.line} length: ${line.length}`);\n return {\n ...p,\n character,\n offset: converter.posToIndex(p.line, character)\n };\n }\n };\n const converter = createPositionConverter(shiki.source);\n const decorations = (shiki.options.decorations || []).map((d) => ({\n ...d,\n start: normalizePosition(d.start),\n end: normalizePosition(d.end)\n }));\n verifyIntersections(decorations);\n map.set(shiki.meta, {\n decorations,\n converter,\n source: shiki.source\n });\n }\n return map.get(shiki.meta);\n }\n return {\n name: \"shiki:decorations\",\n tokens(tokens) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const breakpoints = ctx.decorations.flatMap((d) => [d.start.offset, d.end.offset]);\n const splitted = splitTokens(tokens, breakpoints);\n return splitted;\n },\n code(codeEl) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const lines = Array.from(codeEl.children).filter((i) => i.type === \"element\" && i.tagName === \"span\");\n if (lines.length !== ctx.converter.lines.length)\n throw new ShikiError$1(`Number of lines in code element (${lines.length}) does not match the number of lines in the source (${ctx.converter.lines.length}). Failed to apply decorations.`);\n function applyLineSection(line, start, end, decoration) {\n const lineEl = lines[line];\n let text = \"\";\n let startIndex = -1;\n let endIndex = -1;\n if (start === 0)\n startIndex = 0;\n if (end === 0)\n endIndex = 0;\n if (end === Number.POSITIVE_INFINITY)\n endIndex = lineEl.children.length;\n if (startIndex === -1 || endIndex === -1) {\n for (let i = 0; i < lineEl.children.length; i++) {\n text += stringify(lineEl.children[i]);\n if (startIndex === -1 && text.length === start)\n startIndex = i + 1;\n if (endIndex === -1 && text.length === end)\n endIndex = i + 1;\n }\n }\n if (startIndex === -1)\n throw new ShikiError$1(`Failed to find start index for decoration ${JSON.stringify(decoration.start)}`);\n if (endIndex === -1)\n throw new ShikiError$1(`Failed to find end index for decoration ${JSON.stringify(decoration.end)}`);\n const children = lineEl.children.slice(startIndex, endIndex);\n if (!decoration.alwaysWrap && children.length === lineEl.children.length) {\n applyDecoration(lineEl, decoration, \"line\");\n } else if (!decoration.alwaysWrap && children.length === 1 && children[0].type === \"element\") {\n applyDecoration(children[0], decoration, \"token\");\n } else {\n const wrapper = {\n type: \"element\",\n tagName: \"span\",\n properties: {},\n children\n };\n applyDecoration(wrapper, decoration, \"wrapper\");\n lineEl.children.splice(startIndex, children.length, wrapper);\n }\n }\n function applyLine(line, decoration) {\n lines[line] = applyDecoration(lines[line], decoration, \"line\");\n }\n function applyDecoration(el, decoration, type) {\n const properties = decoration.properties || {};\n const transform = decoration.transform || ((i) => i);\n el.tagName = decoration.tagName || \"span\";\n el.properties = {\n ...el.properties,\n ...properties,\n class: el.properties.class\n };\n if (decoration.properties?.class)\n addClassToHast(el, decoration.properties.class);\n el = transform(el, type) || el;\n return el;\n }\n const lineApplies = [];\n const sorted = ctx.decorations.sort((a, b) => b.start.offset - a.start.offset || a.end.offset - b.end.offset);\n for (const decoration of sorted) {\n const { start, end } = decoration;\n if (start.line === end.line) {\n applyLineSection(start.line, start.character, end.character, decoration);\n } else if (start.line < end.line) {\n applyLineSection(start.line, start.character, Number.POSITIVE_INFINITY, decoration);\n for (let i = start.line + 1; i < end.line; i++)\n lineApplies.unshift(() => applyLine(i, decoration));\n applyLineSection(end.line, 0, end.character, decoration);\n }\n }\n lineApplies.forEach((i) => i());\n }\n };\n}\nfunction verifyIntersections(items) {\n for (let i = 0; i < items.length; i++) {\n const foo = items[i];\n if (foo.start.offset > foo.end.offset)\n throw new ShikiError$1(`Invalid decoration range: ${JSON.stringify(foo.start)} - ${JSON.stringify(foo.end)}`);\n for (let j = i + 1; j < items.length; j++) {\n const bar = items[j];\n const isFooHasBarStart = foo.start.offset <= bar.start.offset && bar.start.offset < foo.end.offset;\n const isFooHasBarEnd = foo.start.offset < bar.end.offset && bar.end.offset <= foo.end.offset;\n const isBarHasFooStart = bar.start.offset <= foo.start.offset && foo.start.offset < bar.end.offset;\n const isBarHasFooEnd = bar.start.offset < foo.end.offset && foo.end.offset <= bar.end.offset;\n if (isFooHasBarStart || isFooHasBarEnd || isBarHasFooStart || isBarHasFooEnd) {\n if (isFooHasBarStart && isFooHasBarEnd)\n continue;\n if (isBarHasFooStart && isBarHasFooEnd)\n continue;\n if (isBarHasFooStart && foo.start.offset === foo.end.offset)\n continue;\n if (isFooHasBarEnd && bar.start.offset === bar.end.offset)\n continue;\n throw new ShikiError$1(`Decorations ${JSON.stringify(foo.start)} and ${JSON.stringify(bar.start)} intersect.`);\n }\n }\n }\n}\nfunction stringify(el) {\n if (el.type === \"text\")\n return el.value;\n if (el.type === \"element\")\n return el.children.map(stringify).join(\"\");\n return \"\";\n}\n\nconst builtInTransformers = [\n /* @__PURE__ */ transformerDecorations()\n];\nfunction getTransformers(options) {\n const transformers = sortTransformersByEnforcement(options.transformers || []);\n return [\n ...transformers.pre,\n ...transformers.normal,\n ...transformers.post,\n ...builtInTransformers\n ];\n}\nfunction sortTransformersByEnforcement(transformers) {\n const pre = [];\n const post = [];\n const normal = [];\n for (const transformer of transformers) {\n switch (transformer.enforce) {\n case \"pre\":\n pre.push(transformer);\n break;\n case \"post\":\n post.push(transformer);\n break;\n default:\n normal.push(transformer);\n }\n }\n return { pre, post, normal };\n}\n\n// src/colors.ts\nvar namedColors = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\"\n];\n\n// src/decorations.ts\nvar decorations = {\n 1: \"bold\",\n 2: \"dim\",\n 3: \"italic\",\n 4: \"underline\",\n 7: \"reverse\",\n 8: \"hidden\",\n 9: \"strikethrough\"\n};\n\n// src/parser.ts\nfunction findSequence(value, position) {\n const nextEscape = value.indexOf(\"\\x1B\", position);\n if (nextEscape !== -1) {\n if (value[nextEscape + 1] === \"[\") {\n const nextClose = value.indexOf(\"m\", nextEscape);\n if (nextClose !== -1) {\n return {\n sequence: value.substring(nextEscape + 2, nextClose).split(\";\"),\n startPosition: nextEscape,\n position: nextClose + 1\n };\n }\n }\n }\n return {\n position: value.length\n };\n}\nfunction parseColor(sequence) {\n const colorMode = sequence.shift();\n if (colorMode === \"2\") {\n const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));\n if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))\n return;\n return {\n type: \"rgb\",\n rgb\n };\n } else if (colorMode === \"5\") {\n const index = sequence.shift();\n if (index) {\n return { type: \"table\", index: Number(index) };\n }\n }\n}\nfunction parseSequence(sequence) {\n const commands = [];\n while (sequence.length > 0) {\n const code = sequence.shift();\n if (!code)\n continue;\n const codeInt = Number.parseInt(code);\n if (Number.isNaN(codeInt))\n continue;\n if (codeInt === 0) {\n commands.push({ type: \"resetAll\" });\n } else if (codeInt <= 9) {\n const decoration = decorations[codeInt];\n if (decoration) {\n commands.push({\n type: \"setDecoration\",\n value: decorations[codeInt]\n });\n }\n } else if (codeInt <= 29) {\n const decoration = decorations[codeInt - 20];\n if (decoration) {\n commands.push({\n type: \"resetDecoration\",\n value: decoration\n });\n if (decoration === \"dim\") {\n commands.push({\n type: \"resetDecoration\",\n value: \"bold\"\n });\n }\n }\n } else if (codeInt <= 37) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 30] }\n });\n } else if (codeInt === 38) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setForegroundColor\",\n value: color\n });\n }\n } else if (codeInt === 39) {\n commands.push({\n type: \"resetForegroundColor\"\n });\n } else if (codeInt <= 47) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 40] }\n });\n } else if (codeInt === 48) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setBackgroundColor\",\n value: color\n });\n }\n } else if (codeInt === 49) {\n commands.push({\n type: \"resetBackgroundColor\"\n });\n } else if (codeInt === 53) {\n commands.push({\n type: \"setDecoration\",\n value: \"overline\"\n });\n } else if (codeInt === 55) {\n commands.push({\n type: \"resetDecoration\",\n value: \"overline\"\n });\n } else if (codeInt >= 90 && codeInt <= 97) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 90 + 8] }\n });\n } else if (codeInt >= 100 && codeInt <= 107) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 100 + 8] }\n });\n }\n }\n return commands;\n}\nfunction createAnsiSequenceParser() {\n let foreground = null;\n let background = null;\n let decorations2 = /* @__PURE__ */ new Set();\n return {\n parse(value) {\n const tokens = [];\n let position = 0;\n do {\n const findResult = findSequence(value, position);\n const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);\n if (text.length > 0) {\n tokens.push({\n value: text,\n foreground,\n background,\n decorations: new Set(decorations2)\n });\n }\n if (findResult.sequence) {\n const commands = parseSequence(findResult.sequence);\n for (const styleToken of commands) {\n if (styleToken.type === \"resetAll\") {\n foreground = null;\n background = null;\n decorations2.clear();\n } else if (styleToken.type === \"resetForegroundColor\") {\n foreground = null;\n } else if (styleToken.type === \"resetBackgroundColor\") {\n background = null;\n } else if (styleToken.type === \"resetDecoration\") {\n decorations2.delete(styleToken.value);\n }\n }\n for (const styleToken of commands) {\n if (styleToken.type === \"setForegroundColor\") {\n foreground = styleToken.value;\n } else if (styleToken.type === \"setBackgroundColor\") {\n background = styleToken.value;\n } else if (styleToken.type === \"setDecoration\") {\n decorations2.add(styleToken.value);\n }\n }\n }\n position = findResult.position;\n } while (position < value.length);\n return tokens;\n }\n };\n}\n\n// src/palette.ts\nvar defaultNamedColorsMap = {\n black: \"#000000\",\n red: \"#bb0000\",\n green: \"#00bb00\",\n yellow: \"#bbbb00\",\n blue: \"#0000bb\",\n magenta: \"#ff00ff\",\n cyan: \"#00bbbb\",\n white: \"#eeeeee\",\n brightBlack: \"#555555\",\n brightRed: \"#ff5555\",\n brightGreen: \"#00ff00\",\n brightYellow: \"#ffff55\",\n brightBlue: \"#5555ff\",\n brightMagenta: \"#ff55ff\",\n brightCyan: \"#55ffff\",\n brightWhite: \"#ffffff\"\n};\nfunction createColorPalette(namedColorsMap = defaultNamedColorsMap) {\n function namedColor(name) {\n return namedColorsMap[name];\n }\n function rgbColor(rgb) {\n return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, \"0\")).join(\"\")}`;\n }\n let colorTable;\n function getColorTable() {\n if (colorTable) {\n return colorTable;\n }\n colorTable = [];\n for (let i = 0; i < namedColors.length; i++) {\n colorTable.push(namedColor(namedColors[i]));\n }\n let levels = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; r++) {\n for (let g = 0; g < 6; g++) {\n for (let b = 0; b < 6; b++) {\n colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));\n }\n }\n }\n let level = 8;\n for (let i = 0; i < 24; i++, level += 10) {\n colorTable.push(rgbColor([level, level, level]));\n }\n return colorTable;\n }\n function tableColor(index) {\n return getColorTable()[index];\n }\n function value(color) {\n switch (color.type) {\n case \"named\":\n return namedColor(color.name);\n case \"rgb\":\n return rgbColor(color.rgb);\n case \"table\":\n return tableColor(color.index);\n }\n }\n return {\n value\n };\n}\n\nconst defaultAnsiColors = {\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0DBC79\",\n yellow: \"#E5E510\",\n blue: \"#2472C8\",\n magenta: \"#BC3FBC\",\n cyan: \"#11A8CD\",\n white: \"#E5E5E5\",\n brightBlack: \"#666666\",\n brightRed: \"#F14C4C\",\n brightGreen: \"#23D18B\",\n brightYellow: \"#F5F543\",\n brightBlue: \"#3B8EEA\",\n brightMagenta: \"#D670D6\",\n brightCyan: \"#29B8DB\",\n brightWhite: \"#FFFFFF\"\n};\nfunction tokenizeAnsiWithTheme(theme, fileContents, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const lines = splitLines(fileContents);\n const ansiPalette = Object.fromEntries(\n namedColors.map((name) => {\n const key = `terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`;\n const themeColor = theme.colors?.[key];\n return [name, themeColor || defaultAnsiColors[name]];\n })\n );\n const colorPalette = createColorPalette(ansiPalette);\n const parser = createAnsiSequenceParser();\n return lines.map(\n (line) => parser.parse(line[0]).map((token) => {\n let color;\n let bgColor;\n if (token.decorations.has(\"reverse\")) {\n color = token.background ? colorPalette.value(token.background) : theme.bg;\n bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n } else {\n color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n bgColor = token.background ? colorPalette.value(token.background) : void 0;\n }\n color = applyColorReplacements(color, colorReplacements);\n bgColor = applyColorReplacements(bgColor, colorReplacements);\n if (token.decorations.has(\"dim\"))\n color = dimColor(color);\n let fontStyle = FontStyle.None;\n if (token.decorations.has(\"bold\"))\n fontStyle |= FontStyle.Bold;\n if (token.decorations.has(\"italic\"))\n fontStyle |= FontStyle.Italic;\n if (token.decorations.has(\"underline\"))\n fontStyle |= FontStyle.Underline;\n if (token.decorations.has(\"strikethrough\"))\n fontStyle |= FontStyle.Strikethrough;\n return {\n content: token.value,\n offset: line[1],\n // TODO: more accurate offset? might need to fork ansi-sequence-parser\n color,\n bgColor,\n fontStyle\n };\n })\n );\n}\nfunction dimColor(color) {\n const hexMatch = color.match(/#([0-9a-f]{3,8})/i);\n if (hexMatch) {\n const hex = hexMatch[1];\n if (hex.length === 8) {\n const alpha = Math.round(Number.parseInt(hex.slice(6, 8), 16) / 2).toString(16).padStart(2, \"0\");\n return `#${hex.slice(0, 6)}${alpha}`;\n } else if (hex.length === 6) {\n return `#${hex}80`;\n } else if (hex.length === 4) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n const a = hex[3];\n const alpha = Math.round(Number.parseInt(`${a}${a}`, 16) / 2).toString(16).padStart(2, \"0\");\n return `#${r}${r}${g}${g}${b}${b}${alpha}`;\n } else if (hex.length === 3) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n return `#${r}${r}${g}${g}${b}${b}80`;\n }\n }\n const cssVarMatch = color.match(/var\\((--[\\w-]+-ansi-[\\w-]+)\\)/);\n if (cssVarMatch)\n return `var(${cssVarMatch[1]}-dim)`;\n return color;\n}\n\nfunction codeToTokensBase(internal, code, options = {}) {\n const {\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n const lang = internal.resolveLangAlias(options.lang || \"text\");\n if (isPlainLang(lang) || isNoneTheme(themeName))\n return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);\n const { theme, colorMap } = internal.setTheme(themeName);\n if (lang === \"ansi\")\n return tokenizeAnsiWithTheme(theme, code, options);\n const _grammar = internal.getLanguage(options.lang || \"text\");\n if (options.grammarState) {\n if (options.grammarState.lang !== _grammar.name) {\n throw new ShikiError$1(`Grammar state language \"${options.grammarState.lang}\" does not match highlight language \"${_grammar.name}\"`);\n }\n if (!options.grammarState.themes.includes(theme.name)) {\n throw new ShikiError$1(`Grammar state themes \"${options.grammarState.themes}\" do not contain highlight theme \"${theme.name}\"`);\n }\n }\n return tokenizeWithTheme(code, _grammar, theme, colorMap, options);\n}\nfunction getLastGrammarState(...args) {\n if (args.length === 2) {\n return getLastGrammarStateFromMap(args[1]);\n }\n const [internal, code, options = {}] = args;\n const {\n lang = \"text\",\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n if (isPlainLang(lang) || isNoneTheme(themeName))\n throw new ShikiError$1(\"Plain language does not have grammar state\");\n if (lang === \"ansi\")\n throw new ShikiError$1(\"ANSI language does not have grammar state\");\n const { theme, colorMap } = internal.setTheme(themeName);\n const _grammar = internal.getLanguage(lang);\n return new GrammarState(\n _tokenizeWithTheme(code, _grammar, theme, colorMap, options).stateStack,\n _grammar.name,\n theme.name\n );\n}\nfunction tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);\n const grammarState = new GrammarState(\n result.stateStack,\n grammar.name,\n theme.name\n );\n setLastGrammarStateToMap(result.tokens, grammarState);\n return result.tokens;\n}\nfunction _tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const {\n tokenizeMaxLineLength = 0,\n tokenizeTimeLimit = 500\n } = options;\n const lines = splitLines(code);\n let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(\n options.grammarContextCode,\n grammar,\n theme,\n colorMap,\n {\n ...options,\n grammarState: void 0,\n grammarContextCode: void 0\n }\n ).stateStack : INITIAL;\n let actual = [];\n const final = [];\n for (let i = 0, len = lines.length; i < len; i++) {\n const [line, lineOffset] = lines[i];\n if (line === \"\") {\n actual = [];\n final.push([]);\n continue;\n }\n if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {\n actual = [];\n final.push([{\n content: line,\n offset: lineOffset,\n color: \"\",\n fontStyle: 0\n }]);\n continue;\n }\n let resultWithScopes;\n let tokensWithScopes;\n let tokensWithScopesIndex;\n if (options.includeExplanation) {\n resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);\n tokensWithScopes = resultWithScopes.tokens;\n tokensWithScopesIndex = 0;\n }\n const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);\n const tokensLength = result.tokens.length / 2;\n for (let j = 0; j < tokensLength; j++) {\n const startIndex = result.tokens[2 * j];\n const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;\n if (startIndex === nextStartIndex)\n continue;\n const metadata = result.tokens[2 * j + 1];\n const color = applyColorReplacements(\n colorMap[EncodedTokenMetadata.getForeground(metadata)],\n colorReplacements\n );\n const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);\n const token = {\n content: line.substring(startIndex, nextStartIndex),\n offset: lineOffset + startIndex,\n color,\n fontStyle\n };\n if (options.includeExplanation) {\n const themeSettingsSelectors = [];\n if (options.includeExplanation !== \"scopeName\") {\n for (const setting of theme.settings) {\n let selectors;\n switch (typeof setting.scope) {\n case \"string\":\n selectors = setting.scope.split(/,/).map((scope) => scope.trim());\n break;\n case \"object\":\n selectors = setting.scope;\n break;\n default:\n continue;\n }\n themeSettingsSelectors.push({\n settings: setting,\n selectors: selectors.map((selector) => selector.split(/ /))\n });\n }\n }\n token.explanation = [];\n let offset = 0;\n while (startIndex + offset < nextStartIndex) {\n const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];\n const tokenWithScopesText = line.substring(\n tokenWithScopes.startIndex,\n tokenWithScopes.endIndex\n );\n offset += tokenWithScopesText.length;\n token.explanation.push({\n content: tokenWithScopesText,\n scopes: options.includeExplanation === \"scopeName\" ? explainThemeScopesNameOnly(\n tokenWithScopes.scopes\n ) : explainThemeScopesFull(\n themeSettingsSelectors,\n tokenWithScopes.scopes\n )\n });\n tokensWithScopesIndex += 1;\n }\n }\n actual.push(token);\n }\n final.push(actual);\n actual = [];\n stateStack = result.ruleStack;\n }\n return {\n tokens: final,\n stateStack\n };\n}\nfunction explainThemeScopesNameOnly(scopes) {\n return scopes.map((scope) => ({ scopeName: scope }));\n}\nfunction explainThemeScopesFull(themeSelectors, scopes) {\n const result = [];\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i];\n result[i] = {\n scopeName: scope,\n themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))\n };\n }\n return result;\n}\nfunction matchesOne(selector, scope) {\n return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === \".\";\n}\nfunction matches(selectors, scope, parentScopes) {\n if (!matchesOne(selectors[selectors.length - 1], scope))\n return false;\n let selectorParentIndex = selectors.length - 2;\n let parentIndex = parentScopes.length - 1;\n while (selectorParentIndex >= 0 && parentIndex >= 0) {\n if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))\n selectorParentIndex -= 1;\n parentIndex -= 1;\n }\n if (selectorParentIndex === -1)\n return true;\n return false;\n}\nfunction explainThemeScope(themeSettingsSelectors, scope, parentScopes) {\n const result = [];\n for (const { selectors, settings } of themeSettingsSelectors) {\n for (const selectorPieces of selectors) {\n if (matches(selectorPieces, scope, parentScopes)) {\n result.push(settings);\n break;\n }\n }\n }\n return result;\n}\n\nfunction codeToTokensWithThemes(internal, code, options) {\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));\n const themedTokens = themes.map((t) => {\n const tokens2 = codeToTokensBase(internal, code, {\n ...options,\n theme: t.theme\n });\n const state = getLastGrammarStateFromMap(tokens2);\n const theme = typeof t.theme === \"string\" ? t.theme : t.theme.name;\n return {\n tokens: tokens2,\n state,\n theme\n };\n });\n const tokens = syncThemesTokenization(\n ...themedTokens.map((i) => i.tokens)\n );\n const mergedTokens = tokens[0].map(\n (line, lineIdx) => line.map((_token, tokenIdx) => {\n const mergedToken = {\n content: _token.content,\n variants: {},\n offset: _token.offset\n };\n if (\"includeExplanation\" in options && options.includeExplanation) {\n mergedToken.explanation = _token.explanation;\n }\n tokens.forEach((t, themeIdx) => {\n const {\n content: _,\n explanation: __,\n offset: ___,\n ...styles\n } = t[lineIdx][tokenIdx];\n mergedToken.variants[themes[themeIdx].color] = styles;\n });\n return mergedToken;\n })\n );\n const mergedGrammarState = themedTokens[0].state ? new GrammarState(\n Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),\n themedTokens[0].state.lang\n ) : void 0;\n if (mergedGrammarState)\n setLastGrammarStateToMap(mergedTokens, mergedGrammarState);\n return mergedTokens;\n}\nfunction syncThemesTokenization(...themes) {\n const outThemes = themes.map(() => []);\n const count = themes.length;\n for (let i = 0; i < themes[0].length; i++) {\n const lines = themes.map((t) => t[i]);\n const outLines = outThemes.map(() => []);\n outThemes.forEach((t, i2) => t.push(outLines[i2]));\n const indexes = lines.map(() => 0);\n const current = lines.map((l) => l[0]);\n while (current.every((t) => t)) {\n const minLength = Math.min(...current.map((t) => t.content.length));\n for (let n = 0; n < count; n++) {\n const token = current[n];\n if (token.content.length === minLength) {\n outLines[n].push(token);\n indexes[n] += 1;\n current[n] = lines[n][indexes[n]];\n } else {\n outLines[n].push({\n ...token,\n content: token.content.slice(0, minLength)\n });\n current[n] = {\n ...token,\n content: token.content.slice(minLength),\n offset: token.offset + minLength\n };\n }\n }\n }\n }\n return outThemes;\n}\n\nfunction codeToTokens(internal, code, options) {\n let bg;\n let fg;\n let tokens;\n let themeName;\n let rootStyle;\n let grammarState;\n if (\"themes\" in options) {\n const {\n defaultColor = \"light\",\n cssVariablePrefix = \"--shiki-\",\n colorsRendering = \"css-vars\"\n } = options;\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] })).sort((a, b) => a.color === defaultColor ? -1 : b.color === defaultColor ? 1 : 0);\n if (themes.length === 0)\n throw new ShikiError$1(\"`themes` option must not be empty\");\n const themeTokens = codeToTokensWithThemes(\n internal,\n code,\n options\n );\n grammarState = getLastGrammarStateFromMap(themeTokens);\n if (defaultColor && DEFAULT_COLOR_LIGHT_DARK !== defaultColor && !themes.find((t) => t.color === defaultColor))\n throw new ShikiError$1(`\\`themes\\` option must contain the defaultColor key \\`${defaultColor}\\``);\n const themeRegs = themes.map((t) => internal.getTheme(t.theme));\n const themesOrder = themes.map((t) => t.color);\n tokens = themeTokens.map((line) => line.map((token) => flatTokenVariants(token, themesOrder, cssVariablePrefix, defaultColor, colorsRendering)));\n if (grammarState)\n setLastGrammarStateToMap(tokens, grammarState);\n const themeColorReplacements = themes.map((t) => resolveColorReplacements(t.theme, options));\n fg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"fg\", colorsRendering);\n bg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"bg\", colorsRendering);\n themeName = `shiki-themes ${themeRegs.map((t) => t.name).join(\" \")}`;\n rootStyle = defaultColor ? void 0 : [fg, bg].join(\";\");\n } else if (\"theme\" in options) {\n const colorReplacements = resolveColorReplacements(options.theme, options);\n tokens = codeToTokensBase(\n internal,\n code,\n options\n );\n const _theme = internal.getTheme(options.theme);\n bg = applyColorReplacements(_theme.bg, colorReplacements);\n fg = applyColorReplacements(_theme.fg, colorReplacements);\n themeName = _theme.name;\n grammarState = getLastGrammarStateFromMap(tokens);\n } else {\n throw new ShikiError$1(\"Invalid options, either `theme` or `themes` must be provided\");\n }\n return {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n };\n}\nfunction mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, property, colorsRendering) {\n return themes.map((t, idx) => {\n const value = applyColorReplacements(themeRegs[idx][property], themeColorReplacements[idx]) || \"inherit\";\n const cssVar = `${cssVariablePrefix + t.color}${property === \"bg\" ? \"-bg\" : \"\"}:${value}`;\n if (idx === 0 && defaultColor) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && themes.length > 1) {\n const lightIndex = themes.findIndex((t2) => t2.color === \"light\");\n const darkIndex = themes.findIndex((t2) => t2.color === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = applyColorReplacements(themeRegs[lightIndex][property], themeColorReplacements[lightIndex]) || \"inherit\";\n const darkValue = applyColorReplacements(themeRegs[darkIndex][property], themeColorReplacements[darkIndex]) || \"inherit\";\n return `light-dark(${lightValue}, ${darkValue});${cssVar}`;\n }\n return value;\n }\n if (colorsRendering === \"css-vars\") {\n return cssVar;\n }\n return null;\n }).filter((i) => !!i).join(\";\");\n}\n\nfunction codeToHast(internal, code, options, transformerContext = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n}) {\n let input = code;\n for (const transformer of getTransformers(options))\n input = transformer.preprocess?.call(transformerContext, input, options) || input;\n let {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n } = codeToTokens(internal, input, options);\n const {\n mergeWhitespaces = true,\n mergeSameStyleTokens = false\n } = options;\n if (mergeWhitespaces === true)\n tokens = mergeWhitespaceTokens(tokens);\n else if (mergeWhitespaces === \"never\")\n tokens = splitWhitespaceTokens(tokens);\n if (mergeSameStyleTokens) {\n tokens = mergeAdjacentStyledTokens(tokens);\n }\n const contextSource = {\n ...transformerContext,\n get source() {\n return input;\n }\n };\n for (const transformer of getTransformers(options))\n tokens = transformer.tokens?.call(contextSource, tokens) || tokens;\n return tokensToHast(\n tokens,\n {\n ...options,\n fg,\n bg,\n themeName,\n rootStyle: options.rootStyle === false ? false : options.rootStyle ?? rootStyle\n },\n contextSource,\n grammarState\n );\n}\nfunction tokensToHast(tokens, options, transformerContext, grammarState = getLastGrammarStateFromMap(tokens)) {\n const transformers = getTransformers(options);\n const lines = [];\n const root = {\n type: \"root\",\n children: []\n };\n const {\n structure = \"classic\",\n tabindex = \"0\"\n } = options;\n const properties = {\n class: `shiki ${options.themeName || \"\"}`\n };\n if (options.rootStyle !== false) {\n if (options.rootStyle != null)\n properties.style = options.rootStyle;\n else\n properties.style = `background-color:${options.bg};color:${options.fg}`;\n }\n if (tabindex !== false && tabindex != null)\n properties.tabindex = tabindex.toString();\n for (const [key, value] of Object.entries(options.meta || {})) {\n if (!key.startsWith(\"_\"))\n properties[key] = value;\n }\n let preNode = {\n type: \"element\",\n tagName: \"pre\",\n properties,\n children: []\n };\n let codeNode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: lines\n };\n const lineNodes = [];\n const context = {\n ...transformerContext,\n structure,\n addClassToHast,\n get source() {\n return transformerContext.source;\n },\n get tokens() {\n return tokens;\n },\n get options() {\n return options;\n },\n get root() {\n return root;\n },\n get pre() {\n return preNode;\n },\n get code() {\n return codeNode;\n },\n get lines() {\n return lineNodes;\n }\n };\n tokens.forEach((line, idx) => {\n if (idx) {\n if (structure === \"inline\")\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n else if (structure === \"classic\")\n lines.push({ type: \"text\", value: \"\\n\" });\n }\n let lineNode = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n let col = 0;\n for (const token of line) {\n let tokenNode = {\n type: \"element\",\n tagName: \"span\",\n properties: {\n ...token.htmlAttrs\n },\n children: [{ type: \"text\", value: token.content }]\n };\n const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n if (style)\n tokenNode.properties.style = style;\n for (const transformer of transformers)\n tokenNode = transformer?.span?.call(context, tokenNode, idx + 1, col, lineNode, token) || tokenNode;\n if (structure === \"inline\")\n root.children.push(tokenNode);\n else if (structure === \"classic\")\n lineNode.children.push(tokenNode);\n col += token.content.length;\n }\n if (structure === \"classic\") {\n for (const transformer of transformers)\n lineNode = transformer?.line?.call(context, lineNode, idx + 1) || lineNode;\n lineNodes.push(lineNode);\n lines.push(lineNode);\n } else if (structure === \"inline\") {\n lineNodes.push(lineNode);\n }\n });\n if (structure === \"classic\") {\n for (const transformer of transformers)\n codeNode = transformer?.code?.call(context, codeNode) || codeNode;\n preNode.children.push(codeNode);\n for (const transformer of transformers)\n preNode = transformer?.pre?.call(context, preNode) || preNode;\n root.children.push(preNode);\n } else if (structure === \"inline\") {\n const syntheticLines = [];\n let currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n for (const child of root.children) {\n if (child.type === \"element\" && child.tagName === \"br\") {\n syntheticLines.push(currentLine);\n currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n } else if (child.type === \"element\" || child.type === \"text\") {\n currentLine.children.push(child);\n }\n }\n syntheticLines.push(currentLine);\n const syntheticCode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: syntheticLines\n };\n let transformedCode = syntheticCode;\n for (const transformer of transformers)\n transformedCode = transformer?.code?.call(context, transformedCode) || transformedCode;\n root.children = [];\n for (let i = 0; i < transformedCode.children.length; i++) {\n if (i > 0)\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n const line = transformedCode.children[i];\n if (line.type === \"element\")\n root.children.push(...line.children);\n }\n }\n let result = root;\n for (const transformer of transformers)\n result = transformer?.root?.call(context, result) || result;\n if (grammarState)\n setLastGrammarStateToMap(result, grammarState);\n return result;\n}\nfunction mergeWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n let carryOnContent = \"\";\n let firstOffset;\n line.forEach((token, idx) => {\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n const couldMerge = !isDecorated;\n if (couldMerge && token.content.match(/^\\s+$/) && line[idx + 1]) {\n if (firstOffset === void 0)\n firstOffset = token.offset;\n carryOnContent += token.content;\n } else {\n if (carryOnContent) {\n if (couldMerge) {\n newLine.push({\n ...token,\n offset: firstOffset,\n content: carryOnContent + token.content\n });\n } else {\n newLine.push(\n {\n content: carryOnContent,\n offset: firstOffset\n },\n token\n );\n }\n firstOffset = void 0;\n carryOnContent = \"\";\n } else {\n newLine.push(token);\n }\n }\n });\n return newLine;\n });\n}\nfunction splitWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n return line.flatMap((token) => {\n if (token.content.match(/^\\s+$/))\n return token;\n const match = token.content.match(/^(\\s*)(.*?)(\\s*)$/);\n if (!match)\n return token;\n const [, leading, content, trailing] = match;\n if (!leading && !trailing)\n return token;\n const expanded = [{\n ...token,\n offset: token.offset + leading.length,\n content\n }];\n if (leading) {\n expanded.unshift({\n content: leading,\n offset: token.offset\n });\n }\n if (trailing) {\n expanded.push({\n content: trailing,\n offset: token.offset + leading.length + content.length\n });\n }\n return expanded;\n });\n });\n}\nfunction mergeAdjacentStyledTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n for (const token of line) {\n if (newLine.length === 0) {\n newLine.push({ ...token });\n continue;\n }\n const prevToken = newLine[newLine.length - 1];\n const prevStyle = stringifyTokenStyle(prevToken.htmlStyle || getTokenStyleObject(prevToken));\n const currentStyle = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n const isPrevDecorated = prevToken.fontStyle && (prevToken.fontStyle & FontStyle.Underline || prevToken.fontStyle & FontStyle.Strikethrough);\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n if (!isPrevDecorated && !isDecorated && prevStyle === currentStyle) {\n prevToken.content += token.content;\n } else {\n newLine.push({ ...token });\n }\n }\n return newLine;\n });\n}\n\nconst hastToHtml = toHtml;\nfunction codeToHtml(internal, code, options) {\n const context = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n };\n let result = hastToHtml(codeToHast(internal, code, options, context));\n for (const transformer of getTransformers(options))\n result = transformer.postprocess?.call(context, result, options) || result;\n return result;\n}\n\nconst VSCODE_FALLBACK_EDITOR_FG = { light: \"#333333\", dark: \"#bbbbbb\" };\nconst VSCODE_FALLBACK_EDITOR_BG = { light: \"#fffffe\", dark: \"#1e1e1e\" };\nconst RESOLVED_KEY = \"__shiki_resolved\";\nfunction normalizeTheme(rawTheme) {\n if (rawTheme?.[RESOLVED_KEY])\n return rawTheme;\n const theme = {\n ...rawTheme\n };\n if (theme.tokenColors && !theme.settings) {\n theme.settings = theme.tokenColors;\n delete theme.tokenColors;\n }\n theme.type ||= \"dark\";\n theme.colorReplacements = { ...theme.colorReplacements };\n theme.settings ||= [];\n let { bg, fg } = theme;\n if (!bg || !fg) {\n const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;\n if (globalSetting?.settings?.foreground)\n fg = globalSetting.settings.foreground;\n if (globalSetting?.settings?.background)\n bg = globalSetting.settings.background;\n if (!fg && theme?.colors?.[\"editor.foreground\"])\n fg = theme.colors[\"editor.foreground\"];\n if (!bg && theme?.colors?.[\"editor.background\"])\n bg = theme.colors[\"editor.background\"];\n if (!fg)\n fg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;\n if (!bg)\n bg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;\n theme.fg = fg;\n theme.bg = bg;\n }\n if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {\n theme.settings.unshift({\n settings: {\n foreground: theme.fg,\n background: theme.bg\n }\n });\n }\n let replacementCount = 0;\n const replacementMap = /* @__PURE__ */ new Map();\n function getReplacementColor(value) {\n if (replacementMap.has(value))\n return replacementMap.get(value);\n replacementCount += 1;\n const hex = `#${replacementCount.toString(16).padStart(8, \"0\").toLowerCase()}`;\n if (theme.colorReplacements?.[`#${hex}`])\n return getReplacementColor(value);\n replacementMap.set(value, hex);\n return hex;\n }\n theme.settings = theme.settings.map((setting) => {\n const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith(\"#\");\n const replaceBg = setting.settings?.background && !setting.settings.background.startsWith(\"#\");\n if (!replaceFg && !replaceBg)\n return setting;\n const clone = {\n ...setting,\n settings: {\n ...setting.settings\n }\n };\n if (replaceFg) {\n const replacement = getReplacementColor(setting.settings.foreground);\n theme.colorReplacements[replacement] = setting.settings.foreground;\n clone.settings.foreground = replacement;\n }\n if (replaceBg) {\n const replacement = getReplacementColor(setting.settings.background);\n theme.colorReplacements[replacement] = setting.settings.background;\n clone.settings.background = replacement;\n }\n return clone;\n });\n for (const key of Object.keys(theme.colors || {})) {\n if (key === \"editor.foreground\" || key === \"editor.background\" || key.startsWith(\"terminal.ansi\")) {\n if (!theme.colors[key]?.startsWith(\"#\")) {\n const replacement = getReplacementColor(theme.colors[key]);\n theme.colorReplacements[replacement] = theme.colors[key];\n theme.colors[key] = replacement;\n }\n }\n }\n Object.defineProperty(theme, RESOLVED_KEY, {\n enumerable: false,\n writable: false,\n value: true\n });\n return theme;\n}\n\nasync function resolveLangs(langs) {\n return Array.from(new Set((await Promise.all(\n langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))\n )).flat()));\n}\nasync function resolveThemes(themes) {\n const resolved = await Promise.all(\n themes.map(\n async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))\n )\n );\n return resolved.filter((i) => !!i);\n}\n\nlet _emitDeprecation = 3;\nlet _emitError = false;\nfunction enableDeprecationWarnings(emitDeprecation = true, emitError = false) {\n _emitDeprecation = emitDeprecation;\n _emitError = emitError;\n}\nfunction warnDeprecated(message, version = 3) {\n if (!_emitDeprecation)\n return;\n if (typeof _emitDeprecation === \"number\" && version > _emitDeprecation)\n return;\n if (_emitError) {\n throw new Error(`[SHIKI DEPRECATE]: ${message}`);\n } else {\n console.trace(`[SHIKI DEPRECATE]: ${message}`);\n }\n}\n\nclass ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction resolveLangAlias(name, alias) {\n if (!alias)\n return name;\n if (alias[name]) {\n const resolved = /* @__PURE__ */ new Set([name]);\n while (alias[name]) {\n name = alias[name];\n if (resolved.has(name))\n throw new ShikiError(`Circular alias \\`${Array.from(resolved).join(\" -> \")} -> ${name}\\``);\n resolved.add(name);\n }\n }\n return name;\n}\n\nclass Registry extends Registry$1 {\n constructor(_resolver, _themes, _langs, _alias = {}) {\n super(_resolver);\n this._resolver = _resolver;\n this._themes = _themes;\n this._langs = _langs;\n this._alias = _alias;\n this._themes.map((t) => this.loadTheme(t));\n this.loadLanguages(this._langs);\n }\n _resolvedThemes = /* @__PURE__ */ new Map();\n _resolvedGrammars = /* @__PURE__ */ new Map();\n _langMap = /* @__PURE__ */ new Map();\n _langGraph = /* @__PURE__ */ new Map();\n _textmateThemeCache = /* @__PURE__ */ new WeakMap();\n _loadedThemesCache = null;\n _loadedLanguagesCache = null;\n getTheme(theme) {\n if (typeof theme === \"string\")\n return this._resolvedThemes.get(theme);\n else\n return this.loadTheme(theme);\n }\n loadTheme(theme) {\n const _theme = normalizeTheme(theme);\n if (_theme.name) {\n this._resolvedThemes.set(_theme.name, _theme);\n this._loadedThemesCache = null;\n }\n return _theme;\n }\n getLoadedThemes() {\n if (!this._loadedThemesCache)\n this._loadedThemesCache = [...this._resolvedThemes.keys()];\n return this._loadedThemesCache;\n }\n // Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`\n // is expensive. Themes can switch often especially for dual-theme support.\n //\n // The parent class also accepts `colorMap` as the second parameter, but since we don't use that,\n // we omit here so it's easier to cache the themes.\n setTheme(theme) {\n let textmateTheme = this._textmateThemeCache.get(theme);\n if (!textmateTheme) {\n textmateTheme = Theme.createFromRawTheme(theme);\n this._textmateThemeCache.set(theme, textmateTheme);\n }\n this._syncRegistry.setTheme(textmateTheme);\n }\n getGrammar(name) {\n name = resolveLangAlias(name, this._alias);\n return this._resolvedGrammars.get(name);\n }\n loadLanguage(lang) {\n if (this.getGrammar(lang.name))\n return;\n const embeddedLazilyBy = new Set(\n [...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))\n );\n this._resolver.addLanguage(lang);\n const grammarConfig = {\n balancedBracketSelectors: lang.balancedBracketSelectors || [\"*\"],\n unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []\n };\n this._syncRegistry._rawGrammars.set(lang.scopeName, lang);\n const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);\n g.name = lang.name;\n this._resolvedGrammars.set(lang.name, g);\n if (lang.aliases) {\n lang.aliases.forEach((alias) => {\n this._alias[alias] = lang.name;\n });\n }\n this._loadedLanguagesCache = null;\n if (embeddedLazilyBy.size) {\n for (const e of embeddedLazilyBy) {\n this._resolvedGrammars.delete(e.name);\n this._loadedLanguagesCache = null;\n this._syncRegistry?._injectionGrammars?.delete(e.scopeName);\n this._syncRegistry?._grammars?.delete(e.scopeName);\n this.loadLanguage(this._langMap.get(e.name));\n }\n }\n }\n dispose() {\n super.dispose();\n this._resolvedThemes.clear();\n this._resolvedGrammars.clear();\n this._langMap.clear();\n this._langGraph.clear();\n this._loadedThemesCache = null;\n }\n loadLanguages(langs) {\n for (const lang of langs)\n this.resolveEmbeddedLanguages(lang);\n const langsGraphArray = Array.from(this._langGraph.entries());\n const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);\n if (missingLangs.length) {\n const dependents = langsGraphArray.filter(([_, lang]) => {\n if (!lang)\n return false;\n const embedded = lang.embeddedLanguages || lang.embeddedLangs;\n return embedded?.some((l) => missingLangs.map(([name]) => name).includes(l));\n }).filter((lang) => !missingLangs.includes(lang));\n throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\\`${name}\\``).join(\", \")}, required by ${dependents.map(([name]) => `\\`${name}\\``).join(\", \")}`);\n }\n for (const [_, lang] of langsGraphArray)\n this._resolver.addLanguage(lang);\n for (const [_, lang] of langsGraphArray)\n this.loadLanguage(lang);\n }\n getLoadedLanguages() {\n if (!this._loadedLanguagesCache) {\n this._loadedLanguagesCache = [\n .../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])\n ];\n }\n return this._loadedLanguagesCache;\n }\n resolveEmbeddedLanguages(lang) {\n this._langMap.set(lang.name, lang);\n this._langGraph.set(lang.name, lang);\n const embedded = lang.embeddedLanguages ?? lang.embeddedLangs;\n if (embedded) {\n for (const embeddedLang of embedded)\n this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));\n }\n }\n}\n\nclass Resolver {\n _langs = /* @__PURE__ */ new Map();\n _scopeToLang = /* @__PURE__ */ new Map();\n _injections = /* @__PURE__ */ new Map();\n _onigLib;\n constructor(engine, langs) {\n this._onigLib = {\n createOnigScanner: (patterns) => engine.createScanner(patterns),\n createOnigString: (s) => engine.createString(s)\n };\n langs.forEach((i) => this.addLanguage(i));\n }\n get onigLib() {\n return this._onigLib;\n }\n getLangRegistration(langIdOrAlias) {\n return this._langs.get(langIdOrAlias);\n }\n loadGrammar(scopeName) {\n return this._scopeToLang.get(scopeName);\n }\n addLanguage(l) {\n this._langs.set(l.name, l);\n if (l.aliases) {\n l.aliases.forEach((a) => {\n this._langs.set(a, l);\n });\n }\n this._scopeToLang.set(l.scopeName, l);\n if (l.injectTo) {\n l.injectTo.forEach((i) => {\n if (!this._injections.get(i))\n this._injections.set(i, []);\n this._injections.get(i).push(l.scopeName);\n });\n }\n }\n getInjections(scopeName) {\n const scopeParts = scopeName.split(\".\");\n let injections = [];\n for (let i = 1; i <= scopeParts.length; i++) {\n const subScopeName = scopeParts.slice(0, i).join(\".\");\n injections = [...injections, ...this._injections.get(subScopeName) || []];\n }\n return injections;\n }\n}\n\nlet instancesCount = 0;\nfunction createShikiInternalSync(options) {\n instancesCount += 1;\n if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)\n console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \\`highlighter.dispose()\\` to release unused instances.`);\n let isDisposed = false;\n if (!options.engine)\n throw new ShikiError(\"`engine` option is required for synchronous mode\");\n const langs = (options.langs || []).flat(1);\n const themes = (options.themes || []).flat(1).map(normalizeTheme);\n const resolver = new Resolver(options.engine, langs);\n const _registry = new Registry(resolver, themes, langs, options.langAlias);\n let _lastTheme;\n function resolveLangAlias$1(name) {\n return resolveLangAlias(name, options.langAlias);\n }\n function getLanguage(name) {\n ensureNotDisposed();\n const _lang = _registry.getGrammar(typeof name === \"string\" ? name : name.name);\n if (!_lang)\n throw new ShikiError(`Language \\`${name}\\` not found, you may need to load it first`);\n return _lang;\n }\n function getTheme(name) {\n if (name === \"none\")\n return { bg: \"\", fg: \"\", name: \"none\", settings: [], type: \"dark\" };\n ensureNotDisposed();\n const _theme = _registry.getTheme(name);\n if (!_theme)\n throw new ShikiError(`Theme \\`${name}\\` not found, you may need to load it first`);\n return _theme;\n }\n function setTheme(name) {\n ensureNotDisposed();\n const theme = getTheme(name);\n if (_lastTheme !== name) {\n _registry.setTheme(theme);\n _lastTheme = name;\n }\n const colorMap = _registry.getColorMap();\n return {\n theme,\n colorMap\n };\n }\n function getLoadedThemes() {\n ensureNotDisposed();\n return _registry.getLoadedThemes();\n }\n function getLoadedLanguages() {\n ensureNotDisposed();\n return _registry.getLoadedLanguages();\n }\n function loadLanguageSync(...langs2) {\n ensureNotDisposed();\n _registry.loadLanguages(langs2.flat(1));\n }\n async function loadLanguage(...langs2) {\n return loadLanguageSync(await resolveLangs(langs2));\n }\n function loadThemeSync(...themes2) {\n ensureNotDisposed();\n for (const theme of themes2.flat(1)) {\n _registry.loadTheme(theme);\n }\n }\n async function loadTheme(...themes2) {\n ensureNotDisposed();\n return loadThemeSync(await resolveThemes(themes2));\n }\n function ensureNotDisposed() {\n if (isDisposed)\n throw new ShikiError(\"Shiki instance has been disposed\");\n }\n function dispose() {\n if (isDisposed)\n return;\n isDisposed = true;\n _registry.dispose();\n instancesCount -= 1;\n }\n return {\n setTheme,\n getTheme,\n getLanguage,\n getLoadedThemes,\n getLoadedLanguages,\n resolveLangAlias: resolveLangAlias$1,\n loadLanguage,\n loadLanguageSync,\n loadTheme,\n loadThemeSync,\n dispose,\n [Symbol.dispose]: dispose\n };\n}\n\nasync function createShikiInternal(options) {\n if (!options.engine) {\n warnDeprecated(\"`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.\");\n }\n const [\n themes,\n langs,\n engine\n ] = await Promise.all([\n resolveThemes(options.themes || []),\n resolveLangs(options.langs || []),\n options.engine\n ]);\n return createShikiInternalSync({\n ...options,\n themes,\n langs,\n engine\n });\n}\n\nasync function createHighlighterCore(options) {\n const internal = await createShikiInternal(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction createHighlighterCoreSync(options) {\n const internal = createShikiInternalSync(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction makeSingletonHighlighterCore(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighterCore2(options) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: options.themes || [],\n langs: options.langs || []\n });\n return _shiki;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighterCore2;\n}\nconst getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore);\n\nfunction createBundledHighlighter(options) {\n const bundledLanguages = options.langs;\n const bundledThemes = options.themes;\n const engine = options.engine;\n async function createHighlighter(options2) {\n function resolveLang(lang) {\n if (typeof lang === \"string\") {\n lang = options2.langAlias?.[lang] || lang;\n if (isSpecialLang(lang))\n return [];\n const bundle = bundledLanguages[lang];\n if (!bundle)\n throw new ShikiError$1(`Language \\`${lang}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return lang;\n }\n function resolveTheme(theme) {\n if (isSpecialTheme(theme))\n return \"none\";\n if (typeof theme === \"string\") {\n const bundle = bundledThemes[theme];\n if (!bundle)\n throw new ShikiError$1(`Theme \\`${theme}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return theme;\n }\n const _themes = (options2.themes ?? []).map((i) => resolveTheme(i));\n const langs = (options2.langs ?? []).map((i) => resolveLang(i));\n const core = await createHighlighterCore({\n engine: options2.engine ?? engine(),\n ...options2,\n themes: _themes,\n langs\n });\n return {\n ...core,\n loadLanguage(...langs2) {\n return core.loadLanguage(...langs2.map(resolveLang));\n },\n loadTheme(...themes) {\n return core.loadTheme(...themes.map(resolveTheme));\n },\n getBundledLanguages() {\n return bundledLanguages;\n },\n getBundledThemes() {\n return bundledThemes;\n }\n };\n }\n return createHighlighter;\n}\nfunction makeSingletonHighlighter(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighter(options = {}) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: [],\n langs: []\n });\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighter;\n}\nfunction createSingletonShorthands(createHighlighter, config) {\n const getSingletonHighlighter = makeSingletonHighlighter(createHighlighter);\n async function get(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: \"theme\" in options ? [options.theme] : Object.values(options.themes)\n });\n const langs = await config?.guessEmbeddedLanguages?.(code, options.lang, shiki);\n if (langs) {\n await shiki.loadLanguage(...langs);\n }\n return shiki;\n }\n return {\n getSingletonHighlighter(options) {\n return getSingletonHighlighter(options);\n },\n async codeToHtml(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHtml(code, options);\n },\n async codeToHast(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHast(code, options);\n },\n async codeToTokens(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokens(code, options);\n },\n async codeToTokensBase(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensBase(code, options);\n },\n async codeToTokensWithThemes(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensWithThemes(code, options);\n },\n async getLastGrammarState(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: [options.theme]\n });\n return shiki.getLastGrammarState(code, options);\n }\n };\n}\nconst createdBundledHighlighter = createBundledHighlighter;\n\nfunction createCssVariablesTheme(options = {}) {\n const {\n name = \"css-variables\",\n variablePrefix = \"--shiki-\",\n fontStyle = true\n } = options;\n const variable = (name2) => {\n if (options.variableDefaults?.[name2])\n return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;\n return `var(${variablePrefix}${name2})`;\n };\n const theme = {\n name,\n type: \"dark\",\n colors: {\n \"editor.foreground\": variable(\"foreground\"),\n \"editor.background\": variable(\"background\"),\n \"terminal.ansiBlack\": variable(\"ansi-black\"),\n \"terminal.ansiRed\": variable(\"ansi-red\"),\n \"terminal.ansiGreen\": variable(\"ansi-green\"),\n \"terminal.ansiYellow\": variable(\"ansi-yellow\"),\n \"terminal.ansiBlue\": variable(\"ansi-blue\"),\n \"terminal.ansiMagenta\": variable(\"ansi-magenta\"),\n \"terminal.ansiCyan\": variable(\"ansi-cyan\"),\n \"terminal.ansiWhite\": variable(\"ansi-white\"),\n \"terminal.ansiBrightBlack\": variable(\"ansi-bright-black\"),\n \"terminal.ansiBrightRed\": variable(\"ansi-bright-red\"),\n \"terminal.ansiBrightGreen\": variable(\"ansi-bright-green\"),\n \"terminal.ansiBrightYellow\": variable(\"ansi-bright-yellow\"),\n \"terminal.ansiBrightBlue\": variable(\"ansi-bright-blue\"),\n \"terminal.ansiBrightMagenta\": variable(\"ansi-bright-magenta\"),\n \"terminal.ansiBrightCyan\": variable(\"ansi-bright-cyan\"),\n \"terminal.ansiBrightWhite\": variable(\"ansi-bright-white\")\n },\n tokenColors: [\n {\n scope: [\n \"keyword.operator.accessor\",\n \"meta.group.braces.round.function.arguments\",\n \"meta.template.expression\",\n \"markup.fenced_code meta.embedded.block\"\n ],\n settings: {\n foreground: variable(\"foreground\")\n }\n },\n {\n scope: \"emphasis\",\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: [\"strong\", \"markup.heading.markdown\", \"markup.bold.markdown\"],\n settings: {\n fontStyle: \"bold\"\n }\n },\n {\n scope: [\"markup.italic.markdown\"],\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: \"meta.link.inline.markdown\",\n settings: {\n fontStyle: \"underline\",\n foreground: variable(\"token-link\")\n }\n },\n {\n scope: [\"string\", \"markup.fenced_code\", \"markup.inline\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n scope: [\"comment\", \"string.quoted.docstring.multi\"],\n settings: {\n foreground: variable(\"token-comment\")\n }\n },\n {\n scope: [\n \"constant.numeric\",\n \"constant.language\",\n \"constant.other.placeholder\",\n \"constant.character.format.placeholder\",\n \"variable.language.this\",\n \"variable.other.object\",\n \"variable.other.class\",\n \"variable.other.constant\",\n \"meta.property-name\",\n \"meta.property-value\",\n \"support\"\n ],\n settings: {\n foreground: variable(\"token-constant\")\n }\n },\n {\n scope: [\n \"keyword\",\n \"storage.modifier\",\n \"storage.type\",\n \"storage.control.clojure\",\n \"entity.name.function.clojure\",\n \"entity.name.tag.yaml\",\n \"support.function.node\",\n \"support.type.property-name.json\",\n \"punctuation.separator.key-value\",\n \"punctuation.definition.template-expression\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n scope: \"variable.parameter.function\",\n settings: {\n foreground: variable(\"token-parameter\")\n }\n },\n {\n scope: [\n \"support.function\",\n \"entity.name.type\",\n \"entity.other.inherited-class\",\n \"meta.function-call\",\n \"meta.instance.constructor\",\n \"entity.other.attribute-name\",\n \"entity.name.function\",\n \"constant.keyword.clojure\"\n ],\n settings: {\n foreground: variable(\"token-function\")\n }\n },\n {\n scope: [\n \"entity.name.tag\",\n \"string.quoted\",\n \"string.regexp\",\n \"string.interpolated\",\n \"string.template\",\n \"string.unquoted.plain.out.yaml\",\n \"keyword.other.template\"\n ],\n settings: {\n foreground: variable(\"token-string-expression\")\n }\n },\n {\n scope: [\n \"punctuation.definition.arguments\",\n \"punctuation.definition.dict\",\n \"punctuation.separator\",\n \"meta.function-call.arguments\"\n ],\n settings: {\n foreground: variable(\"token-punctuation\")\n }\n },\n {\n // [Custom] Markdown links\n scope: [\n \"markup.underline.link\",\n \"punctuation.definition.metadata.markdown\"\n ],\n settings: {\n foreground: variable(\"token-link\")\n }\n },\n {\n // [Custom] Markdown list\n scope: [\"beginning.punctuation.definition.list.markdown\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n // [Custom] Markdown punctuation definition brackets\n scope: [\n \"punctuation.definition.string.begin.markdown\",\n \"punctuation.definition.string.end.markdown\",\n \"string.other.link.title.markdown\",\n \"string.other.link.description.markdown\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n // [Custom] Diff\n scope: [\n \"markup.inserted\",\n \"meta.diff.header.to-file\",\n \"punctuation.definition.inserted\"\n ],\n settings: {\n foreground: variable(\"token-inserted\")\n }\n },\n {\n scope: [\n \"markup.deleted\",\n \"meta.diff.header.from-file\",\n \"punctuation.definition.deleted\"\n ],\n settings: {\n foreground: variable(\"token-deleted\")\n }\n },\n {\n scope: [\n \"markup.changed\",\n \"punctuation.definition.changed\"\n ],\n settings: {\n foreground: variable(\"token-changed\")\n }\n }\n ]\n };\n if (!fontStyle) {\n theme.tokenColors = theme.tokenColors?.map((tokenColor) => {\n if (tokenColor.settings?.fontStyle)\n delete tokenColor.settings.fontStyle;\n return tokenColor;\n });\n }\n return theme;\n}\n\nexport { addClassToHast, applyColorReplacements, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createBundledHighlighter, createCssVariablesTheme, createHighlighterCore, createHighlighterCoreSync, createPositionConverter, createShikiInternal, createShikiInternalSync, createSingletonShorthands, createdBundledHighlighter, enableDeprecationWarnings, flatTokenVariants, getSingletonHighlighterCore, getTokenStyleObject, guessEmbeddedLanguages, hastToHtml, isNoneTheme, isPlainLang, isSpecialLang, isSpecialTheme, makeSingletonHighlighter, makeSingletonHighlighterCore, normalizeGetter, normalizeTheme, resolveColorReplacements, splitLines, splitToken, splitTokens, stringifyTokenStyle, toArray, tokenizeAnsiWithTheme, tokenizeWithTheme, tokensToHast, transformerDecorations, warnDeprecated };\n","import type { ThemesType } from './types';\n\nexport const DIFFS_TAG_NAME = 'diffs-container' as const;\n\n// Misc patch/content parsing regexes\nexport const COMMIT_METADATA_SPLIT: RegExp = /(?=^From [a-f0-9]+ .+$)/m;\nexport const GIT_DIFF_FILE_BREAK_REGEX: RegExp = /(?=^diff --git)/gm;\nexport const UNIFIED_DIFF_FILE_BREAK_REGEX: RegExp = /(?=^---\\s+\\S)/gm;\nexport const FILE_CONTEXT_BLOB: RegExp = /(?=^@@ )/gm;\nexport const HUNK_HEADER: RegExp =\n /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@(?: (.*))?/m;\nexport const SPLIT_WITH_NEWLINES: RegExp = /(?<=\\n)/;\nexport const FILENAME_HEADER_REGEX: RegExp = /^(---|\\+\\+\\+)\\s+([^\\t\\r\\n]+)/;\nexport const FILENAME_HEADER_REGEX_GIT: RegExp =\n /^(---|\\+\\+\\+)\\s+[ab]\\/([^\\t\\r\\n]+)/;\nexport const ALTERNATE_FILE_NAMES_GIT: RegExp =\n /^diff --git (?:\"a\\/(.+?)\"|a\\/(.+?)) (?:\"b\\/(.+?)\"|b\\/(.+?))$/;\nexport const FILE_MODE_FROM_INDEX: RegExp =\n /^index (?:[0-9a-f]+)\\.\\.(?:[0-9a-f]+)(?: (\\d+))?/;\n\nexport const HEADER_METADATA_SLOT_ID = 'header-metadata';\n\nexport const DEFAULT_THEMES: ThemesType = {\n dark: 'pierre-dark',\n light: 'pierre-light',\n};\n\nexport const UNSAFE_CSS_ATTRIBUTE = 'data-unsafe-css';\nexport const CORE_CSS_ATTRIBUTE = 'data-core-css';\n","import type { SupportedLanguages } from '../../types';\nimport type { ResolvedLanguage } from '../../worker';\n\nexport const ResolvedLanguages: Map<SupportedLanguages, ResolvedLanguage> =\n new Map();\n\nexport const ResolvingLanguages: Map<\n SupportedLanguages,\n Promise<ResolvedLanguage>\n> = new Map();\n\nexport const AttachedLanguages: Set<string> = new Set();\n","import type { DiffsHighlighter } from '../../types';\nimport type { ResolvedLanguage } from '../../worker';\nimport { AttachedLanguages, ResolvedLanguages } from './constants';\n\nexport function attachResolvedLanguages(\n resolvedLanguages: ResolvedLanguage | ResolvedLanguage[],\n highlighter: DiffsHighlighter\n): void {\n resolvedLanguages = Array.isArray(resolvedLanguages)\n ? resolvedLanguages\n : [resolvedLanguages];\n\n for (const resolvedLang of resolvedLanguages) {\n if (AttachedLanguages.has(resolvedLang.name)) continue;\n let lang = ResolvedLanguages.get(resolvedLang.name);\n if (lang == null) {\n lang = resolvedLang;\n ResolvedLanguages.set(resolvedLang.name, lang);\n }\n AttachedLanguages.add(lang.name);\n highlighter.loadLanguageSync(lang.data);\n }\n}\n","import type { ThemeRegistrationResolved } from 'shiki';\n\nimport type { DiffsThemeNames } from '../../types';\n\nexport const ResolvedThemes: Map<DiffsThemeNames, ThemeRegistrationResolved> =\n new Map();\n\nexport const ResolvingThemes: Map<\n DiffsThemeNames,\n Promise<ThemeRegistrationResolved>\n> = new Map();\n\nexport const RegisteredCustomThemes: Map<\n string,\n () => Promise<ThemeRegistrationResolved>\n> = new Map();\n\nexport const AttachedThemes: Set<string> = new Set();\n","import type {\n DiffsHighlighter,\n DiffsThemeNames,\n ThemeRegistrationResolved,\n} from '../../types';\nimport { AttachedThemes, ResolvedThemes } from './constants';\n\nexport function attachResolvedThemes(\n themes:\n | DiffsThemeNames\n | ThemeRegistrationResolved\n | (DiffsThemeNames | ThemeRegistrationResolved)[],\n highlighter: DiffsHighlighter\n): void {\n themes = Array.isArray(themes) ? themes : [themes];\n for (let themeRef of themes) {\n let resolvedTheme: ThemeRegistrationResolved | undefined;\n if (typeof themeRef === 'string') {\n resolvedTheme = ResolvedThemes.get(themeRef);\n if (resolvedTheme == null) {\n throw new Error(\n `loadResolvedThemes: ${themeRef} is not resolved, you must resolve it before calling loadResolvedThemes`\n );\n }\n } else {\n resolvedTheme = themeRef;\n themeRef = themeRef.name;\n if (!ResolvedThemes.has(themeRef)) {\n ResolvedThemes.set(themeRef, resolvedTheme);\n }\n }\n if (AttachedThemes.has(themeRef)) continue;\n AttachedThemes.add(themeRef);\n highlighter.loadThemeSync(resolvedTheme);\n }\n}\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nclass CharacterDiff extends Diff {\n}\nexport const characterDiff = new CharacterDiff();\nexport function diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n","export function longestCommonPrefix(str1, str2) {\n let i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nexport function longestCommonSuffix(str1, str2) {\n let i;\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nexport function replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(`string ${JSON.stringify(string)} doesn't start with prefix ${JSON.stringify(oldPrefix)}; this is a bug`);\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nexport function replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(`string ${JSON.stringify(string)} doesn't end with suffix ${JSON.stringify(oldSuffix)}; this is a bug`);\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nexport function removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nexport function removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nexport function maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n let startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n let endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n const map = Array(endB);\n let k = 0; // Index that lags behind j\n map[0] = 0;\n for (let j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n }\n else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (let i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nexport function hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nexport function hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\nexport function trailingWs(string) {\n // Yes, this looks overcomplicated and dumb - why not replace the whole function with\n // return string match(/\\s*$/)[0]\n // you ask? Because:\n // 1. the trap described at https://markamery.com/blog/quadratic-time-regexes/ would mean doing\n // this would cause this function to take O(n²) time in the worst case (specifically when\n // there is a massive run of NON-TRAILING whitespace in `string`), and\n // 2. the fix proposed in the same blog post, of using a negative lookbehind, is incompatible\n // with old Safari versions that we'd like to not break if possible (see\n // https://github.com/kpdecker/jsdiff/pull/550)\n // It feels absurd to do this with an explicit loop instead of a regex, but I really can't see a\n // better way that doesn't result in broken behaviour.\n let i;\n for (i = string.length - 1; i >= 0; i--) {\n if (!string[i].match(/\\s/)) {\n break;\n }\n }\n return string.substring(i + 1);\n}\nexport function leadingWs(string) {\n // Thankfully the annoying considerations described in trailingWs don't apply here:\n const match = string.match(/^\\s*/);\n return match ? match[0] : '';\n}\n","import Diff from './base.js';\nimport { longestCommonPrefix, longestCommonSuffix, replacePrefix, replaceSuffix, removePrefix, removeSuffix, maximumOverlap, leadingWs, trailingWs } from '../util/string.js';\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nconst extendedWordChars = 'a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}';\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nconst tokenizeIncludingWhitespace = new RegExp(`[${extendedWordChars}]+|\\\\s+|[^${extendedWordChars}]`, 'ug');\nclass WordDiff extends Diff {\n equals(left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n }\n tokenize(value, options = {}) {\n let parts;\n if (options.intlSegmenter) {\n const segmenter = options.intlSegmenter;\n if (segmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n parts = Array.from(segmenter.segment(value), segment => segment.segment);\n }\n else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n const tokens = [];\n let prevPart = null;\n parts.forEach(part => {\n if ((/\\s/).test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n }\n else {\n tokens.push(tokens.pop() + part);\n }\n }\n else if (prevPart != null && (/\\s/).test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n }\n else {\n tokens.push(prevPart + part);\n }\n }\n else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n }\n join(tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map((token, i) => {\n if (i == 0) {\n return token;\n }\n else {\n return token.replace((/^\\s+/), '');\n }\n }).join('');\n }\n postProcess(changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n let lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n let insertion = null;\n let deletion = null;\n changes.forEach(change => {\n if (change.added) {\n insertion = change;\n }\n else if (change.removed) {\n deletion = change;\n }\n else {\n if (insertion || deletion) { // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n }\n return changes;\n }\n}\nexport const wordDiff = new WordDiff();\nexport function diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n const oldWsPrefix = leadingWs(deletion.value);\n const oldWsSuffix = trailingWs(deletion.value);\n const newWsPrefix = leadingWs(insertion.value);\n const newWsSuffix = trailingWs(insertion.value);\n if (startKeep) {\n const commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n const commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n }\n else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n const ws = leadingWs(insertion.value);\n insertion.value = insertion.value.substring(ws.length);\n }\n if (endKeep) {\n const ws = leadingWs(endKeep.value);\n endKeep.value = endKeep.value.substring(ws.length);\n }\n // otherwise we've got a deletion and no insertion\n }\n else if (startKeep && endKeep) {\n const newWsFull = leadingWs(endKeep.value), delWsStart = leadingWs(deletion.value), delWsEnd = trailingWs(deletion.value);\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n const newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n const newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n }\n else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n const endKeepWsPrefix = leadingWs(endKeep.value);\n const deletionWsSuffix = trailingWs(deletion.value);\n const overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n }\n else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n const startKeepWsSuffix = trailingWs(startKeep.value);\n const deletionWsPrefix = leadingWs(deletion.value);\n const overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, overlap);\n }\n}\nclass WordsWithSpaceDiff extends Diff {\n tokenize(value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct tokens, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n const regex = new RegExp(`(\\\\r?\\\\n)|[${extendedWordChars}]+|[^\\\\S\\\\n\\\\r]+|[^${extendedWordChars}]`, 'ug');\n return value.match(regex) || [];\n }\n}\nexport const wordsWithSpaceDiff = new WordsWithSpaceDiff();\nexport function diffWordsWithSpace(oldStr, newStr, options) {\n return wordsWithSpaceDiff.diff(oldStr, newStr, options);\n}\n","export function generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n }\n else if (options) {\n for (const name in options) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(options, name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","import Diff from './base.js';\nfunction isSentenceEndPunct(char) {\n return char == '.' || char == '!' || char == '?';\n}\nclass SentenceDiff extends Diff {\n tokenize(value) {\n var _a;\n // If in future we drop support for environments that don't support lookbehinds, we can replace\n // this entire function with:\n // return value.split(/(?<=[.!?])(\\s+|$)/);\n // but until then, for similar reasons to the trailingWs function in string.ts, we are forced\n // to do this verbosely \"by hand\" instead of using a regex.\n const result = [];\n let tokenStartI = 0;\n for (let i = 0; i < value.length; i++) {\n if (i == value.length - 1) {\n result.push(value.slice(tokenStartI));\n break;\n }\n if (isSentenceEndPunct(value[i]) && value[i + 1].match(/\\s/)) {\n // We've hit a sentence break - i.e. a punctuation mark followed by whitespace.\n // We now want to push TWO tokens to the result:\n // 1. the sentence\n result.push(value.slice(tokenStartI, i + 1));\n // 2. the whitespace\n i = tokenStartI = i + 1;\n while ((_a = value[i + 1]) === null || _a === void 0 ? void 0 : _a.match(/\\s/)) {\n i++;\n }\n result.push(value.slice(tokenStartI, i + 1));\n // Then the next token (a sentence) starts on the character after the whitespace.\n // (It's okay if this is off the end of the string - then the outer loop will terminate\n // here anyway.)\n tokenStartI = i + 1;\n }\n }\n return result;\n }\n}\nexport const sentenceDiff = new SentenceDiff();\nexport function diffSentences(oldStr, newStr, options) {\n return sentenceDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nclass CssDiff extends Diff {\n tokenize(value) {\n return value.split(/([{}:;,]|\\s+)/);\n }\n}\nexport const cssDiff = new CssDiff();\nexport function diffCss(oldStr, newStr, options) {\n return cssDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nimport { tokenize } from './line.js';\nclass JsonDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n get useLongestToken() {\n // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n return true;\n }\n castInput(value, options) {\n const { undefinedReplacement, stringifyReplacer = (k, v) => typeof v === 'undefined' ? undefinedReplacement : v } = options;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), null, ' ');\n }\n equals(left, right, options) {\n return super.equals(left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n }\n}\nexport const jsonDiff = new JsonDiff();\nexport function diffJson(oldStr, newStr, options) {\n return jsonDiff.diff(oldStr, newStr, options);\n}\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nexport function canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key === undefined ? '' : key, obj);\n }\n let i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n let canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, String(i));\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (typeof obj === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n const sortedKeys = [];\n let key;\n for (key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n sortedKeys.push(key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n key = sortedKeys[i];\n canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n }\n else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n","import Diff from './base.js';\nclass ArrayDiff extends Diff {\n tokenize(value) {\n return value.slice();\n }\n join(value) {\n return value;\n }\n removeEmpty(value) {\n return value;\n }\n}\nexport const arrayDiff = new ArrayDiff();\nexport function diffArrays(oldArr, newArr, options) {\n return arrayDiff.diff(oldArr, newArr, options);\n}\n","export function unixToWin(patch) {\n if (Array.isArray(patch)) {\n // It would be cleaner if instead of the line below we could just write\n // return patch.map(unixToWin)\n // but mysteriously TypeScript (v5.7.3 at the time of writing) does not like this and it will\n // refuse to compile, thinking that unixToWin could then return StructuredPatch[][] and the\n // result would be incompatible with the overload signatures.\n // See bug report at https://github.com/microsoft/TypeScript/issues/61398.\n return patch.map(p => unixToWin(p));\n }\n return Object.assign(Object.assign({}, patch), { hunks: patch.hunks.map(hunk => (Object.assign(Object.assign({}, hunk), { lines: hunk.lines.map((line, i) => {\n var _a;\n return (line.startsWith('\\\\') || line.endsWith('\\r') || ((_a = hunk.lines[i + 1]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\')))\n ? line\n : line + '\\r';\n }) }))) });\n}\nexport function winToUnix(patch) {\n if (Array.isArray(patch)) {\n // (See comment above equivalent line in unixToWin)\n return patch.map(p => winToUnix(p));\n }\n return Object.assign(Object.assign({}, patch), { hunks: patch.hunks.map(hunk => (Object.assign(Object.assign({}, hunk), { lines: hunk.lines.map(line => line.endsWith('\\r') ? line.substring(0, line.length - 1) : line) }))) });\n}\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nexport function isUnix(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return !patch.some(index => index.hunks.some(hunk => hunk.lines.some(line => !line.startsWith('\\\\') && line.endsWith('\\r'))));\n}\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nexport function isWin(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return patch.some(index => index.hunks.some(hunk => hunk.lines.some(line => line.endsWith('\\r'))))\n && patch.every(index => index.hunks.every(hunk => hunk.lines.every((line, i) => { var _a; return line.startsWith('\\\\') || line.endsWith('\\r') || ((_a = hunk.lines[i + 1]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\')); })));\n}\n","/**\n * Parses a patch into structured data, in the same structure returned by `structuredPatch`.\n *\n * @return a JSON object representation of the a patch, suitable for use with the `applyPatch` method.\n */\nexport function parsePatch(uniDiff) {\n const diffstr = uniDiff.split(/\\n/), list = [];\n let i = 0;\n function parseIndex() {\n const index = {};\n list.push(index);\n // Parse diff metadata\n while (i < diffstr.length) {\n const line = diffstr[i];\n // File header found, end parsing diff metadata\n if ((/^(---|\\+\\+\\+|@@)\\s/).test(line)) {\n break;\n }\n // Diff index\n const header = (/^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/).exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n const line = diffstr[i];\n if ((/^(Index:\\s|diff\\s|---\\s|\\+\\+\\+\\s|===================================================================)/).test(line)) {\n break;\n }\n else if ((/^@@/).test(line)) {\n index.hunks.push(parseHunk());\n }\n else if (line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(line));\n }\n else {\n i++;\n }\n }\n }\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n const fileHeader = (/^(---|\\+\\+\\+)\\s+(.*)\\r?$/).exec(diffstr[i]);\n if (fileHeader) {\n const data = fileHeader[2].split('\\t', 2), header = (data[1] || '').trim();\n let fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if ((/^\".*\"$/).test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n if (fileHeader[1] === '---') {\n index.oldFileName = fileName;\n index.oldHeader = header;\n }\n else {\n index.newFileName = fileName;\n index.newHeader = header;\n }\n i++;\n }\n }\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var _a;\n const chunkHeaderIndex = i, chunkHeaderLine = diffstr[i++], chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n const hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n let addCount = 0, removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || ((_a = diffstr[i]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\'))); i++) {\n const operation = (diffstr[i].length == 0 && i != (diffstr.length - 1)) ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n }\n else if (operation === '-') {\n removeCount++;\n }\n else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n }\n else {\n throw new Error(`Hunk at line ${chunkHeaderIndex + 1} contained invalid line ${diffstr[i]}`);\n }\n }\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n","// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nexport default function (start, minLine, maxLine) {\n let wantForward = true, backwardExhausted = false, forwardExhausted = false, localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n }\n else {\n wantForward = false;\n }\n // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return start + localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n }\n // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return start - localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n }\n // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n return undefined;\n };\n}\n","import { hasOnlyWinLineEndings, hasOnlyUnixLineEndings } from '../util/string.js';\nimport { isWin, isUnix, unixToWin, winToUnix } from './line-endings.js';\nimport { parsePatch } from './parse.js';\nimport distanceIterator from '../util/distance-iterator.js';\n/**\n * attempts to apply a unified diff patch.\n *\n * Hunks are applied first to last.\n * `applyPatch` first tries to apply the first hunk at the line number specified in the hunk header, and with all context lines matching exactly.\n * If that fails, it tries scanning backwards and forwards, one line at a time, to find a place to apply the hunk where the context lines match exactly.\n * If that still fails, and `fuzzFactor` is greater than zero, it increments the maximum number of mismatches (missing, extra, or changed context lines) that there can be between the hunk context and a region where we are trying to apply the patch such that the hunk will still be considered to match.\n * Regardless of `fuzzFactor`, lines to be deleted in the hunk *must* be present for a hunk to match, and the context lines *immediately* before and after an insertion must match exactly.\n *\n * Once a hunk is successfully fitted, the process begins again with the next hunk.\n * Regardless of `fuzzFactor`, later hunks must be applied later in the file than earlier hunks.\n *\n * If a hunk cannot be successfully fitted *anywhere* with fewer than `fuzzFactor` mismatches, `applyPatch` fails and returns `false`.\n *\n * If a hunk is successfully fitted but not at the line number specified by the hunk header, all subsequent hunks have their target line number adjusted accordingly.\n * (e.g. if the first hunk is applied 10 lines below where the hunk header said it should fit, `applyPatch` will *start* looking for somewhere to apply the second hunk 10 lines below where its hunk header says it goes.)\n *\n * If the patch was applied successfully, returns a string containing the patched text.\n * If the patch could not be applied (because some hunks in the patch couldn't be fitted to the text in `source`), `applyPatch` returns false.\n *\n * @param patch a string diff or the output from the `parsePatch` or `structuredPatch` methods.\n */\nexport function applyPatch(source, patch, options = {}) {\n let patches;\n if (typeof patch === 'string') {\n patches = parsePatch(patch);\n }\n else if (Array.isArray(patch)) {\n patches = patch;\n }\n else {\n patches = [patch];\n }\n if (patches.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n return applyStructuredPatch(source, patches[0], options);\n}\nfunction applyStructuredPatch(source, patch, options = {}) {\n if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n if (hasOnlyWinLineEndings(source) && isUnix(patch)) {\n patch = unixToWin(patch);\n }\n else if (hasOnlyUnixLineEndings(source) && isWin(patch)) {\n patch = winToUnix(patch);\n }\n }\n // Apply the diff to the input\n const lines = source.split('\\n'), hunks = patch.hunks, compareLine = options.compareLine || ((lineNumber, line, operation, patchContent) => line === patchContent), fuzzFactor = options.fuzzFactor || 0;\n let minLine = 0;\n if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n throw new Error('fuzzFactor must be a non-negative integer');\n }\n // Special case for empty patch.\n if (!hunks.length) {\n return source;\n }\n // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n // newline that already exists - then we either return false and fail to apply the patch (if\n // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n let prevLine = '', removeEOFNL = false, addEOFNL = false;\n for (let i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n const line = hunks[hunks.length - 1].lines[i];\n if (line[0] == '\\\\') {\n if (prevLine[0] == '+') {\n removeEOFNL = true;\n }\n else if (prevLine[0] == '-') {\n addEOFNL = true;\n }\n }\n prevLine = line;\n }\n if (removeEOFNL) {\n if (addEOFNL) {\n // This means the final line gets changed but doesn't have a trailing newline in either the\n // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n if (!fuzzFactor && lines[lines.length - 1] == '') {\n return false;\n }\n }\n else if (lines[lines.length - 1] == '') {\n lines.pop();\n }\n else if (!fuzzFactor) {\n return false;\n }\n }\n else if (addEOFNL) {\n if (lines[lines.length - 1] != '') {\n lines.push('');\n }\n else if (!fuzzFactor) {\n return false;\n }\n }\n /**\n * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n * insertions, substitutions, or deletions, while ensuring also that:\n * - lines deleted in the hunk match exactly, and\n * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n * immediately preceding and following lines of context match exactly\n *\n * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n *\n * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n * `replacementLines`. Otherwise, returns null.\n */\n function applyHunk(hunkLines, toPos, maxErrors, hunkLinesI = 0, lastContextLineMatched = true, patchedLines = [], patchedLinesLength = 0) {\n let nConsecutiveOldContextLines = 0;\n let nextContextLineMustMatch = false;\n for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n const hunkLine = hunkLines[hunkLinesI], operation = (hunkLine.length > 0 ? hunkLine[0] : ' '), content = (hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine);\n if (operation === '-') {\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n toPos++;\n nConsecutiveOldContextLines = 0;\n }\n else {\n if (!maxErrors || lines[toPos] == null) {\n return null;\n }\n patchedLines[patchedLinesLength] = lines[toPos];\n return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n }\n }\n if (operation === '+') {\n if (!lastContextLineMatched) {\n return null;\n }\n patchedLines[patchedLinesLength] = content;\n patchedLinesLength++;\n nConsecutiveOldContextLines = 0;\n nextContextLineMustMatch = true;\n }\n if (operation === ' ') {\n nConsecutiveOldContextLines++;\n patchedLines[patchedLinesLength] = lines[toPos];\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n patchedLinesLength++;\n lastContextLineMatched = true;\n nextContextLineMustMatch = false;\n toPos++;\n }\n else {\n if (nextContextLineMustMatch || !maxErrors) {\n return null;\n }\n // Consider 3 possibilities in sequence:\n // 1. lines contains a *substitution* not included in the patch context, or\n // 2. lines contains an *insertion* not included in the patch context, or\n // 3. lines contains a *deletion* not included in the patch context\n // The first two options are of course only possible if the line from lines is non-null -\n // i.e. only option 3 is possible if we've overrun the end of the old file.\n return (lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength));\n }\n }\n }\n // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n // that starts in this hunk's trailing context.\n patchedLinesLength -= nConsecutiveOldContextLines;\n toPos -= nConsecutiveOldContextLines;\n patchedLines.length = patchedLinesLength;\n return {\n patchedLines,\n oldLineLastI: toPos - 1\n };\n }\n const resultLines = [];\n // Search best fit offsets for each hunk based on the previous ones\n let prevHunkOffset = 0;\n for (let i = 0; i < hunks.length; i++) {\n const hunk = hunks[i];\n let hunkResult;\n const maxLine = lines.length - hunk.oldLines + fuzzFactor;\n let toPos;\n for (let maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n toPos = hunk.oldStart + prevHunkOffset - 1;\n const iterator = distanceIterator(toPos, minLine, maxLine);\n for (; toPos !== undefined; toPos = iterator()) {\n hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n if (hunkResult) {\n break;\n }\n }\n if (hunkResult) {\n break;\n }\n }\n if (!hunkResult) {\n return false;\n }\n // Copy everything from the end of where we applied the last hunk to the start of this hunk\n for (let i = minLine; i < toPos; i++) {\n resultLines.push(lines[i]);\n }\n // Add the lines produced by applying the hunk:\n for (let i = 0; i < hunkResult.patchedLines.length; i++) {\n const line = hunkResult.patchedLines[i];\n resultLines.push(line);\n }\n // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunkResult.oldLineLastI + 1;\n // Note the offset between where the patch said the hunk should've applied and where we\n // applied it, so we can adjust future hunks accordingly:\n prevHunkOffset = toPos + 1 - hunk.oldStart;\n }\n // Copy over the rest of the lines from the old text\n for (let i = minLine; i < lines.length; i++) {\n resultLines.push(lines[i]);\n }\n return resultLines.join('\\n');\n}\n/**\n * applies one or more patches.\n *\n * `patch` may be either an array of structured patch objects, or a string representing a patch in unified diff format (which may patch one or more files).\n *\n * This method will iterate over the contents of the patch and apply to data provided through callbacks. The general flow for each patch index is:\n *\n * - `options.loadFile(index, callback)` is called. The caller should then load the contents of the file and then pass that to the `callback(err, data)` callback. Passing an `err` will terminate further patch execution.\n * - `options.patched(index, content, callback)` is called once the patch has been applied. `content` will be the return value from `applyPatch`. When it's ready, the caller should call `callback(err)` callback. Passing an `err` will terminate further patch execution.\n *\n * Once all patches have been applied or an error occurs, the `options.complete(err)` callback is made.\n */\nexport function applyPatches(uniDiff, options) {\n const spDiff = typeof uniDiff === 'string' ? parsePatch(uniDiff) : uniDiff;\n let currentIndex = 0;\n function processIndex() {\n const index = spDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n const updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\n","export function reversePatch(structuredPatch) {\n if (Array.isArray(structuredPatch)) {\n // (See comment in unixToWin for why we need the pointless-looking anonymous function here)\n return structuredPatch.map(patch => reversePatch(patch)).reverse();\n }\n return Object.assign(Object.assign({}, structuredPatch), { oldFileName: structuredPatch.newFileName, oldHeader: structuredPatch.newHeader, newFileName: structuredPatch.oldFileName, newHeader: structuredPatch.oldHeader, hunks: structuredPatch.hunks.map(hunk => {\n return {\n oldLines: hunk.newLines,\n oldStart: hunk.newStart,\n newLines: hunk.oldLines,\n newStart: hunk.oldStart,\n lines: hunk.lines.map(l => {\n if (l.startsWith('-')) {\n return `+${l.slice(1)}`;\n }\n if (l.startsWith('+')) {\n return `-${l.slice(1)}`;\n }\n return l;\n })\n };\n }) });\n}\n","import { diffLines } from '../diff/line.js';\nexport function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n let optionsObj;\n if (!options) {\n optionsObj = {};\n }\n else if (typeof options === 'function') {\n optionsObj = { callback: options };\n }\n else {\n optionsObj = options;\n }\n if (typeof optionsObj.context === 'undefined') {\n optionsObj.context = 4;\n }\n // We copy this into its own variable to placate TypeScript, which thinks\n // optionsObj.context might be undefined in the callbacks below.\n const context = optionsObj.context;\n // @ts-expect-error (runtime check for something that is correctly a static type error)\n if (optionsObj.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!optionsObj.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, optionsObj));\n }\n else {\n const { callback } = optionsObj;\n diffLines(oldStr, newStr, Object.assign(Object.assign({}, optionsObj), { callback: (diff) => {\n const patch = diffLinesResultToPatch(diff);\n // TypeScript is unhappy without the cast because it does not understand that `patch` may\n // be undefined here only if `callback` is StructuredPatchCallbackAbortable:\n callback(patch);\n } }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n if (!diff) {\n return;\n }\n diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n function contextLines(lines) {\n return lines.map(function (entry) { return ' ' + entry; });\n }\n const hunks = [];\n let oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1;\n for (let i = 0; i < diff.length; i++) {\n const current = diff[i], lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n // If we have previous context, start with that\n if (!oldRangeStart) {\n const prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = context > 0 ? contextLines(prev.lines.slice(-context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n // Output our changes\n for (const line of lines) {\n curRange.push((current.added ? '+' : '-') + line);\n }\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n }\n else {\n oldLine += lines.length;\n }\n }\n else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= context * 2 && i < diff.length - 2) {\n // Overlapping\n for (const line of contextLines(lines)) {\n curRange.push(line);\n }\n }\n else {\n // end the range and output\n const contextSize = Math.min(lines.length, context);\n for (const line of contextLines(lines.slice(0, contextSize))) {\n curRange.push(line);\n }\n const hunk = {\n oldStart: oldRangeStart,\n oldLines: (oldLine - oldRangeStart + contextSize),\n newStart: newRangeStart,\n newLines: (newLine - newRangeStart + contextSize),\n lines: curRange\n };\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n }\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (const hunk of hunks) {\n for (let i = 0; i < hunk.lines.length; i++) {\n if (hunk.lines[i].endsWith('\\n')) {\n hunk.lines[i] = hunk.lines[i].slice(0, -1);\n }\n else {\n hunk.lines.splice(i + 1, 0, '\\\');\n i++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName, newFileName: newFileName,\n oldHeader: oldHeader, newHeader: newHeader,\n hunks: hunks\n };\n }\n}\n/**\n * creates a unified diff patch.\n * @param patch either a single structured patch object (as returned by `structuredPatch`) or an array of them (as returned by `parsePatch`)\n */\nexport function formatPatch(patch) {\n if (Array.isArray(patch)) {\n return patch.map(formatPatch).join('\\n');\n }\n const ret = [];\n if (patch.oldFileName == patch.newFileName) {\n ret.push('Index: ' + patch.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + patch.oldFileName + (typeof patch.oldHeader === 'undefined' ? '' : '\\t' + patch.oldHeader));\n ret.push('+++ ' + patch.newFileName + (typeof patch.newHeader === 'undefined' ? '' : '\\t' + patch.newHeader));\n for (let i = 0; i < patch.hunks.length; i++) {\n const hunk = patch.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines\n + ' +' + hunk.newStart + ',' + hunk.newLines\n + ' @@');\n for (const line of hunk.lines) {\n ret.push(line);\n }\n }\n return ret.join('\\n') + '\\n';\n}\nexport function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (typeof options === 'function') {\n options = { callback: options };\n }\n if (!(options === null || options === void 0 ? void 0 : options.callback)) {\n const patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n }\n else {\n const { callback } = options;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: patchObj => {\n if (!patchObj) {\n callback(undefined);\n }\n else {\n callback(formatPatch(patchObj));\n }\n } }));\n }\n}\nexport function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n const hasTrailingNl = text.endsWith('\\n');\n const result = text.split('\\n').map(line => line + '\\n');\n if (hasTrailingNl) {\n result.pop();\n }\n else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n","/**\n * converts a list of change objects to the format returned by Google's [diff-match-patch](https://github.com/google/diff-match-patch) library\n */\nexport function convertChangesToDMP(changes) {\n const ret = [];\n let change, operation;\n for (let i = 0; i < changes.length; i++) {\n change = changes[i];\n if (change.added) {\n operation = 1;\n }\n else if (change.removed) {\n operation = -1;\n }\n else {\n operation = 0;\n }\n ret.push([operation, change.value]);\n }\n return ret;\n}\n","/**\n * converts a list of change objects to a serialized XML format\n */\nexport function convertChangesToXML(changes) {\n const ret = [];\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n }\n else if (change.removed) {\n ret.push('<del>');\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push('</ins>');\n }\n else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n}\nfunction escapeHTML(s) {\n let n = s;\n n = n.replace(/&/g, '&');\n n = n.replace(/</g, '<');\n n = n.replace(/>/g, '>');\n n = n.replace(/\"/g, '"');\n return n;\n}\n","export function cleanLastNewline(contents: string): string {\n return contents.replace(/\\n$|\\r\\n$/, '');\n}\n","const matchers = [\n [/^(<!--)(.+)(-->)$/, false],\n [/^(\\/\\*)(.+)(\\*\\/)$/, false],\n [/^(\\/\\/|[\"'#]|;{1,2}|%{1,2}|--)(.*)$/, true],\n /**\n * for multi-line comments like this\n */\n [/^(\\*)(.+)$/, true]\n];\nfunction parseComments(lines, jsx, matchAlgorithm) {\n const out = [];\n for (const line of lines) {\n if (matchAlgorithm === \"v3\") {\n const splittedElements = line.children.flatMap((element, idx) => {\n if (element.type !== \"element\")\n return element;\n const token = element.children[0];\n if (token.type !== \"text\")\n return element;\n const isLast = idx === line.children.length - 1;\n const isComment = matchToken(token.value, isLast);\n if (!isComment)\n return element;\n const rawSplits = token.value.split(/(\\s+\\/\\/)/);\n if (rawSplits.length <= 1)\n return element;\n let splits = [rawSplits[0]];\n for (let i = 1; i < rawSplits.length; i += 2) {\n splits.push(rawSplits[i] + (rawSplits[i + 1] || \"\"));\n }\n splits = splits.filter(Boolean);\n if (splits.length <= 1)\n return element;\n return splits.map((split) => {\n return {\n ...element,\n children: [\n {\n type: \"text\",\n value: split\n }\n ]\n };\n });\n });\n if (splittedElements.length !== line.children.length)\n line.children = splittedElements;\n }\n const elements = line.children;\n let start = elements.length - 1;\n if (matchAlgorithm === \"v1\")\n start = 0;\n else if (jsx)\n start = elements.length - 2;\n for (let i = Math.max(start, 0); i < elements.length; i++) {\n const token = elements[i];\n if (token.type !== \"element\")\n continue;\n const head = token.children.at(0);\n if (head?.type !== \"text\")\n continue;\n const isLast = i === elements.length - 1;\n let match = matchToken(head.value, isLast);\n let additionalTokens;\n if (!match && i > 0 && head.value.trim().startsWith(\"[!code\")) {\n const prevToken = elements[i - 1];\n if (prevToken?.type === \"element\") {\n const prevHead = prevToken.children.at(0);\n if (prevHead?.type === \"text\" && prevHead.value.includes(\"//\")) {\n const combinedValue = prevHead.value + head.value;\n const combinedMatch = matchToken(combinedValue, isLast);\n if (combinedMatch) {\n match = combinedMatch;\n out.push({\n info: combinedMatch,\n line,\n token: prevToken,\n // Use the previous token as the main token\n isLineCommentOnly: elements.length === 2 && prevToken.children.length === 1 && token.children.length === 1,\n isJsxStyle: false,\n additionalTokens: [token]\n // Current token is the additional one\n });\n continue;\n }\n }\n }\n }\n if (!match)\n continue;\n if (jsx && !isLast && i !== 0) {\n const isJsxStyle = isValue(elements[i - 1], \"{\") && isValue(elements[i + 1], \"}\");\n out.push({\n info: match,\n line,\n token,\n isLineCommentOnly: elements.length === 3 && token.children.length === 1,\n isJsxStyle,\n additionalTokens\n });\n } else {\n out.push({\n info: match,\n line,\n token,\n isLineCommentOnly: elements.length === 1 && token.children.length === 1,\n isJsxStyle: false,\n additionalTokens\n });\n }\n }\n }\n return out;\n}\nfunction isValue(element, value) {\n if (element.type !== \"element\")\n return false;\n const text = element.children[0];\n if (text.type !== \"text\")\n return false;\n return text.value.trim() === value;\n}\nfunction matchToken(text, isLast) {\n let trimmed = text.trimStart();\n const spaceFront = text.length - trimmed.length;\n trimmed = trimmed.trimEnd();\n const spaceEnd = text.length - trimmed.length - spaceFront;\n for (const [matcher, endOfLine] of matchers) {\n if (endOfLine && !isLast)\n continue;\n const result = matcher.exec(trimmed);\n if (!result)\n continue;\n return [\n \" \".repeat(spaceFront) + result[1],\n result[2],\n result[3] ? result[3] + \" \".repeat(spaceEnd) : void 0\n ];\n }\n}\nfunction v1ClearEndCommentPrefix(text) {\n const match = text.match(/(?:\\/\\/|[\"'#]|;{1,2}|%{1,2}|--)(\\s*)$/);\n if (match && match[1].trim().length === 0) {\n return text.slice(0, match.index);\n }\n return text;\n}\n\nfunction createCommentNotationTransformer(name, regex, onMatch, matchAlgorithm) {\n if (matchAlgorithm == null) {\n matchAlgorithm = \"v3\";\n }\n return {\n name,\n code(code) {\n const lines = code.children.filter((i) => i.type === \"element\");\n const linesToRemove = [];\n code.data ??= {};\n const data = code.data;\n data._shiki_notation ??= parseComments(lines, [\"jsx\", \"tsx\"].includes(this.options.lang), matchAlgorithm);\n const parsed = data._shiki_notation;\n for (const comment of parsed) {\n if (comment.info[1].length === 0)\n continue;\n let lineIdx = lines.indexOf(comment.line);\n if (comment.isLineCommentOnly && matchAlgorithm !== \"v1\")\n lineIdx++;\n let replaced = false;\n comment.info[1] = comment.info[1].replace(regex, (...match) => {\n if (onMatch.call(this, match, comment.line, comment.token, lines, lineIdx)) {\n replaced = true;\n return \"\";\n }\n return match[0];\n });\n if (!replaced)\n continue;\n if (matchAlgorithm === \"v1\")\n comment.info[1] = v1ClearEndCommentPrefix(comment.info[1]);\n const isEmpty = comment.info[1].trim().length === 0;\n if (isEmpty)\n comment.info[1] = \"\";\n if (isEmpty && comment.isLineCommentOnly) {\n linesToRemove.push(comment.line);\n } else if (isEmpty && comment.isJsxStyle) {\n comment.line.children.splice(comment.line.children.indexOf(comment.token) - 1, 3);\n } else if (isEmpty) {\n if (comment.additionalTokens) {\n for (let j = comment.additionalTokens.length - 1; j >= 0; j--) {\n const additionalToken = comment.additionalTokens[j];\n const tokenIndex = comment.line.children.indexOf(additionalToken);\n if (tokenIndex !== -1) {\n comment.line.children.splice(tokenIndex, 1);\n }\n }\n }\n comment.line.children.splice(comment.line.children.indexOf(comment.token), 1);\n } else {\n const head = comment.token.children[0];\n if (head.type === \"text\") {\n head.value = comment.info.join(\"\");\n if (comment.additionalTokens) {\n for (const additionalToken of comment.additionalTokens) {\n const additionalHead = additionalToken.children[0];\n if (additionalHead?.type === \"text\") {\n additionalHead.value = \"\";\n }\n }\n }\n }\n }\n }\n for (const line of linesToRemove) {\n const index = code.children.indexOf(line);\n const nextLine = code.children[index + 1];\n let removeLength = 1;\n if (nextLine?.type === \"text\" && nextLine?.value === \"\\n\")\n removeLength = 2;\n code.children.splice(index, removeLength);\n }\n }\n };\n}\n\nfunction transformerCompactLineOptions(lineOptions = []) {\n return {\n name: \"@shikijs/transformers:compact-line-options\",\n line(node, line) {\n const lineOption = lineOptions.find((o) => o.line === line);\n if (lineOption?.classes)\n this.addClassToHast(node, lineOption.classes);\n return node;\n }\n };\n}\n\nfunction parseMetaHighlightString(meta) {\n if (!meta)\n return null;\n const match = meta.match(/\\{([\\d,-]+)\\}/);\n if (!match)\n return null;\n const lines = match[1].split(\",\").flatMap((v) => {\n const range = v.split(\"-\").map((n) => Number.parseInt(n, 10));\n return range.length === 1 ? [range[0]] : Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[0] + i);\n });\n return lines;\n}\nconst symbol = Symbol(\"highlighted-lines\");\nfunction transformerMetaHighlight(options = {}) {\n const { className = \"highlighted\", zeroIndexed = false } = options;\n return {\n name: \"@shikijs/transformers:meta-highlight\",\n line(node, lineNumber) {\n if (!this.options.meta?.__raw)\n return;\n const meta = this.meta;\n meta[symbol] ??= parseMetaHighlightString(this.options.meta.__raw);\n const highlightedLines = meta[symbol] ?? [];\n const effectiveLine = zeroIndexed ? lineNumber - 1 : lineNumber;\n if (highlightedLines.includes(effectiveLine))\n this.addClassToHast(node, className);\n return node;\n }\n };\n}\n\nfunction parseMetaHighlightWords(meta) {\n if (!meta)\n return [];\n const match = Array.from(meta.matchAll(/\\/((?:\\\\.|[^/])+)\\//g));\n return match.map((v) => v[1].replace(/\\\\(.)/g, \"$1\"));\n}\nfunction transformerMetaWordHighlight(options = {}) {\n const {\n className = \"highlighted-word\"\n } = options;\n return {\n name: \"@shikijs/transformers:meta-word-highlight\",\n preprocess(code, options2) {\n if (!this.options.meta?.__raw)\n return;\n const words = parseMetaHighlightWords(this.options.meta.__raw);\n options2.decorations ||= [];\n for (const word of words) {\n const indexes = findAllSubstringIndexes(code, word);\n for (const index of indexes) {\n options2.decorations.push({\n start: index,\n end: index + word.length,\n properties: {\n class: className\n }\n });\n }\n }\n }\n };\n}\nfunction findAllSubstringIndexes(str, substr) {\n const indexes = [];\n let cursor = 0;\n while (true) {\n const index = str.indexOf(substr, cursor);\n if (index === -1 || index >= str.length)\n break;\n if (index < cursor)\n break;\n indexes.push(index);\n cursor = index + substr.length;\n }\n return indexes;\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction transformerNotationMap(options = {}, name = \"@shikijs/transformers:notation-map\") {\n const {\n classMap = {},\n classActivePre = void 0,\n classActiveCode = void 0\n } = options;\n return createCommentNotationTransformer(\n name,\n new RegExp(`#?\\\\s*\\\\[!code (${Object.keys(classMap).map(escapeRegExp).join(\"|\")})(:\\\\d+)?\\\\]`, \"gi\"),\n function([_, match, range = \":1\"], _line, _comment, lines, index) {\n const lineNum = Number.parseInt(range.slice(1), 10);\n for (let i = index; i < Math.min(index + lineNum, lines.length); i++) {\n this.addClassToHast(lines[i], classMap[match]);\n }\n if (classActivePre)\n this.addClassToHast(this.pre, classActivePre);\n if (classActiveCode)\n this.addClassToHast(this.code, classActiveCode);\n return true;\n },\n options.matchAlgorithm\n );\n}\n\nfunction transformerNotationDiff(options = {}) {\n const {\n classLineAdd = \"diff add\",\n classLineRemove = \"diff remove\",\n classActivePre = \"has-diff\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap: {\n \"++\": classLineAdd,\n \"--\": classLineRemove\n },\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-diff\"\n );\n}\n\nfunction transformerNotationErrorLevel(options = {}) {\n const {\n classMap = {\n error: [\"highlighted\", \"error\"],\n warning: [\"highlighted\", \"warning\"]\n },\n classActivePre = \"has-highlighted\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap,\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-error-level\"\n );\n}\n\nfunction transformerNotationFocus(options = {}) {\n const {\n classActiveLine = \"focused\",\n classActivePre = \"has-focused\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap: {\n focus: classActiveLine\n },\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-focus\"\n );\n}\n\nfunction transformerNotationHighlight(options = {}) {\n const {\n classActiveLine = \"highlighted\",\n classActivePre = \"has-highlighted\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap: {\n highlight: classActiveLine,\n hl: classActiveLine\n },\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-highlight\"\n );\n}\n\nfunction highlightWordInLine(line, ignoredElement, word, className) {\n const content = getTextContent(line);\n let index = content.indexOf(word);\n while (index !== -1) {\n highlightRange.call(this, line.children, ignoredElement, index, word.length, className);\n index = content.indexOf(word, index + 1);\n }\n}\nfunction getTextContent(element) {\n if (element.type === \"text\")\n return element.value;\n if (element.type === \"element\" && element.tagName === \"span\")\n return element.children.map(getTextContent).join(\"\");\n return \"\";\n}\nfunction highlightRange(elements, ignoredElement, index, len, className) {\n let currentIdx = 0;\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.type !== \"element\" || element.tagName !== \"span\" || element === ignoredElement)\n continue;\n const textNode = element.children[0];\n if (textNode.type !== \"text\")\n continue;\n if (hasOverlap([currentIdx, currentIdx + textNode.value.length - 1], [index, index + len])) {\n const start = Math.max(0, index - currentIdx);\n const length = len - Math.max(0, currentIdx - index);\n if (length === 0)\n continue;\n const separated = separateToken(element, textNode, start, length);\n this.addClassToHast(separated[1], className);\n const output = separated.filter(Boolean);\n elements.splice(i, 1, ...output);\n i += output.length - 1;\n }\n currentIdx += textNode.value.length;\n }\n}\nfunction hasOverlap(range1, range2) {\n return range1[0] <= range2[1] && range1[1] >= range2[0];\n}\nfunction separateToken(span, textNode, index, len) {\n const text = textNode.value;\n const createNode = (value) => inheritElement(span, {\n children: [\n {\n type: \"text\",\n value\n }\n ]\n });\n return [\n index > 0 ? createNode(text.slice(0, index)) : void 0,\n createNode(text.slice(index, index + len)),\n index + len < text.length ? createNode(text.slice(index + len)) : void 0\n ];\n}\nfunction inheritElement(original, overrides) {\n return {\n ...original,\n properties: {\n ...original.properties\n },\n ...overrides\n };\n}\n\nfunction transformerNotationWordHighlight(options = {}) {\n const {\n classActiveWord = \"highlighted-word\",\n classActivePre = void 0\n } = options;\n return createCommentNotationTransformer(\n \"@shikijs/transformers:notation-highlight-word\",\n /\\s*\\[!code word:((?:\\\\.|[^:\\]])+)(:\\d+)?\\]/,\n function([_, word, range], _line, comment, lines, index) {\n const lineNum = range ? Number.parseInt(range.slice(1), 10) : lines.length;\n word = word.replace(/\\\\(.)/g, \"$1\");\n for (let i = index; i < Math.min(index + lineNum, lines.length); i++) {\n highlightWordInLine.call(this, lines[i], comment, word, classActiveWord);\n }\n if (classActivePre)\n this.addClassToHast(this.pre, classActivePre);\n return true;\n },\n options.matchAlgorithm\n );\n}\n\nfunction transformerRemoveComments(options = {}) {\n const { removeEmptyLines = true } = options;\n return {\n name: \"@shikijs/transformers:remove-comments\",\n preprocess(_code, options2) {\n if (options2.includeExplanation !== true && options2.includeExplanation !== \"scopeName\")\n throw new Error(\"`transformerRemoveComments` requires `includeExplanation` to be set to `true` or `'scopeName'`\");\n },\n tokens(tokens) {\n const result = [];\n for (const line of tokens) {\n const filteredLine = [];\n let hasComment = false;\n for (const token of line) {\n const isComment = token.explanation?.some(\n (exp) => exp.scopes.some((s) => s.scopeName.startsWith(\"comment\"))\n );\n if (isComment) {\n hasComment = true;\n } else {\n filteredLine.push(token);\n }\n }\n if (removeEmptyLines && hasComment) {\n const isAllWhitespace = filteredLine.every((token) => !token.content.trim());\n if (isAllWhitespace)\n continue;\n }\n result.push(filteredLine);\n }\n return result;\n }\n };\n}\n\nfunction transformerRemoveLineBreak() {\n return {\n name: \"@shikijs/transformers:remove-line-break\",\n code(code) {\n code.children = code.children.filter((line) => !(line.type === \"text\" && line.value === \"\\n\"));\n }\n };\n}\n\nfunction transformerRemoveNotationEscape() {\n return {\n name: \"@shikijs/transformers:remove-notation-escape\",\n code(hast) {\n function replace(node) {\n if (node.type === \"text\") {\n node.value = node.value.replace(\"[\\\\!code\", \"[!code\");\n } else if (\"children\" in node) {\n for (const child of node.children) {\n replace(child);\n }\n }\n }\n replace(hast);\n return hast;\n }\n };\n}\n\nfunction transformerRenderIndentGuides(options = {}) {\n return {\n name: \"@shikijs/transformers:render-indent-guides\",\n code(hast) {\n const indent = Number(\n this.options.meta?.indent ?? this.options.meta?.__raw?.match(/\\{indent:(\\d+|false)\\}/)?.[1] ?? options.indent ?? 2\n );\n if (Number.isNaN(indent) || indent <= 0) {\n return hast;\n }\n const indentRegex = new RegExp(` {${indent}}| {0,${indent - 1}}\t| {1,}$`, \"g\");\n const emptyLines = [];\n let level = 0;\n for (const line of hast.children) {\n if (line.type !== \"element\") {\n continue;\n }\n const first = line.children[0];\n if (first?.type !== \"element\" || first?.children[0]?.type !== \"text\") {\n emptyLines.push([line, level]);\n continue;\n }\n const text = first.children[0];\n const blanks = text.value.split(/[^ \\t]/, 1)[0];\n const ranges = [];\n for (const match of blanks.matchAll(indentRegex)) {\n const start = match.index;\n const end = start + match[0].length;\n ranges.push([start, end]);\n }\n for (const [line2, level2] of emptyLines) {\n line2.children.unshift(...Array.from({ length: Math.min(ranges.length, level2 + 1) }, (_, i) => ({\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"indent\",\n style: `--indent-offset: ${i * indent}ch;`\n },\n children: []\n })));\n }\n emptyLines.length = 0;\n level = ranges.length;\n if (ranges.length) {\n line.children.unshift(\n ...ranges.map(([start, end]) => ({\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"indent\"\n },\n children: [{\n type: \"text\",\n value: text.value.slice(start, end)\n }]\n }))\n );\n text.value = text.value.slice(ranges.at(-1)[1]);\n }\n }\n return hast;\n }\n };\n}\n\nfunction isTab(part) {\n return part === \"\t\";\n}\nfunction isSpace(part) {\n return part === \" \" || part === \"\t\";\n}\nfunction separateContinuousSpaces(inputs) {\n const result = [];\n let current = \"\";\n function bump() {\n if (current.length)\n result.push(current);\n current = \"\";\n }\n inputs.forEach((part, idx) => {\n if (isTab(part)) {\n bump();\n result.push(part);\n } else if (isSpace(part) && (isSpace(inputs[idx - 1]) || isSpace(inputs[idx + 1]))) {\n bump();\n result.push(part);\n } else {\n current += part;\n }\n });\n bump();\n return result;\n}\nfunction splitSpaces(parts, type, renderContinuousSpaces = true) {\n if (type === \"all\")\n return parts;\n let leftCount = 0;\n let rightCount = 0;\n if (type === \"boundary\") {\n for (let i = 0; i < parts.length; i++) {\n if (isSpace(parts[i]))\n leftCount++;\n else\n break;\n }\n }\n if (type === \"boundary\" || type === \"trailing\") {\n for (let i = parts.length - 1; i >= 0; i--) {\n if (isSpace(parts[i]))\n rightCount++;\n else\n break;\n }\n }\n const middle = parts.slice(leftCount, parts.length - rightCount);\n return [\n ...parts.slice(0, leftCount),\n ...renderContinuousSpaces ? separateContinuousSpaces(middle) : [middle.join(\"\")],\n ...parts.slice(parts.length - rightCount)\n ];\n}\n\nfunction transformerRenderWhitespace(options = {}) {\n const classMap = {\n \" \": options.classSpace ?? \"space\",\n \"\t\": options.classTab ?? \"tab\"\n };\n const position = options.position ?? \"all\";\n const keys = Object.keys(classMap);\n return {\n name: \"@shikijs/transformers:render-whitespace\",\n // We use `root` hook here to ensure it runs after all other transformers\n root(root) {\n const pre = root.children[0];\n const code = pre.tagName === \"pre\" ? pre.children[0] : { children: [root] };\n code.children.forEach(\n (line) => {\n if (line.type !== \"element\" && line.type !== \"root\")\n return;\n const elements = line.children.filter((token) => token.type === \"element\");\n const last = elements.length - 1;\n line.children = line.children.flatMap((token) => {\n if (token.type !== \"element\")\n return token;\n const index = elements.indexOf(token);\n if (position === \"boundary\" && index !== 0 && index !== last)\n return token;\n if (position === \"trailing\" && index !== last)\n return token;\n const node = token.children[0];\n if (node.type !== \"text\" || !node.value)\n return token;\n const parts = splitSpaces(\n node.value.split(/([ \\t])/).filter((i) => i.length),\n position === \"boundary\" && index === last && last !== 0 ? \"trailing\" : position,\n position !== \"trailing\"\n );\n if (parts.length <= 1)\n return token;\n return parts.map((part) => {\n const clone = {\n ...token,\n properties: { ...token.properties }\n };\n clone.children = [{ type: \"text\", value: part }];\n if (keys.includes(part)) {\n this.addClassToHast(clone, classMap[part]);\n delete clone.properties.style;\n }\n return clone;\n });\n });\n }\n );\n }\n };\n}\n\nfunction transformerStyleToClass(options = {}) {\n const {\n classPrefix = \"__shiki_\",\n classSuffix = \"\",\n classReplacer = (className) => className\n } = options;\n const classToStyle = /* @__PURE__ */ new Map();\n function stringifyStyle(style) {\n return Object.entries(style).map(([key, value]) => `${key}:${value}`).join(\";\");\n }\n function registerStyle(style) {\n const str = typeof style === \"string\" ? style : stringifyStyle(style);\n let className = classPrefix + cyrb53(str) + classSuffix;\n className = classReplacer(className);\n if (!classToStyle.has(className)) {\n classToStyle.set(\n className,\n typeof style === \"string\" ? style : { ...style }\n );\n }\n return className;\n }\n return {\n name: \"@shikijs/transformers:style-to-class\",\n pre(t) {\n if (!t.properties.style)\n return;\n const className = registerStyle(t.properties.style);\n delete t.properties.style;\n this.addClassToHast(t, className);\n },\n tokens(lines) {\n for (const line of lines) {\n for (const token of line) {\n if (!token.htmlStyle)\n continue;\n const className = registerStyle(token.htmlStyle);\n token.htmlStyle = {};\n token.htmlAttrs ||= {};\n if (!token.htmlAttrs.class)\n token.htmlAttrs.class = className;\n else\n token.htmlAttrs.class += ` ${className}`;\n }\n }\n },\n getClassRegistry() {\n return classToStyle;\n },\n getCSS() {\n let css = \"\";\n for (const [className, style] of classToStyle.entries()) {\n css += `.${className}{${typeof style === \"string\" ? style : stringifyStyle(style)}}`;\n }\n return css;\n },\n clearRegistry() {\n classToStyle.clear();\n }\n };\n}\nfunction cyrb53(str, seed = 0) {\n let h1 = 3735928559 ^ seed;\n let h2 = 1103547991 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);\n h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);\n h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);\n return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36).slice(0, 6);\n}\n\nexport { createCommentNotationTransformer, findAllSubstringIndexes, parseMetaHighlightString, parseMetaHighlightWords, transformerCompactLineOptions, transformerMetaHighlight, transformerMetaWordHighlight, transformerNotationDiff, transformerNotationErrorLevel, transformerNotationFocus, transformerNotationHighlight, transformerNotationMap, transformerNotationWordHighlight, transformerRemoveComments, transformerRemoveLineBreak, transformerRemoveNotationEscape, transformerRenderIndentGuides, transformerRenderWhitespace, transformerStyleToClass };\n","import type {\n ElementContent,\n Element as HASTElement,\n Properties,\n Root,\n RootContent,\n Text,\n} from 'hast';\n\nimport type { SVGSpriteNames } from '../sprite';\n\nexport function createTextNodeElement(value: string): Text {\n return { type: 'text', value };\n}\n\ninterface CreateHastElementProps {\n tagName:\n | 'span'\n | 'div'\n | 'code'\n | 'pre'\n | 'slot'\n | 'svg'\n | 'use'\n | 'style'\n | 'template';\n children?: ElementContent[];\n properties?: Properties;\n}\n\nexport function createHastElement({\n tagName,\n children = [],\n properties = {},\n}: CreateHastElementProps): HASTElement {\n return {\n type: 'element',\n tagName,\n properties,\n children,\n };\n}\n\ninterface CreateIconProps {\n name: SVGSpriteNames;\n width?: number;\n height?: number;\n properties?: Properties;\n}\n\nexport function createIconElement({\n name,\n width = 16,\n height = 16,\n properties,\n}: CreateIconProps): HASTElement {\n return createHastElement({\n tagName: 'svg',\n properties: { width, height, viewBox: '0 0 16 16', ...properties },\n children: [\n createHastElement({\n tagName: 'use',\n properties: { href: `#${name.replace(/^#/, '')}` },\n }),\n ],\n });\n}\n\nexport function findCodeElement(\n nodes: Root | HASTElement\n): HASTElement | undefined {\n let firstChild: RootContent | HASTElement | Root | null = nodes.children[0];\n while (firstChild != null) {\n if (firstChild.type === 'element' && firstChild.tagName === 'code') {\n return firstChild;\n }\n if ('children' in firstChild) {\n firstChild = firstChild.children[0];\n } else {\n firstChild = null;\n }\n }\n return undefined;\n}\n","import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport type { SharedRenderState } from '../types';\nimport { createHastElement, createTextNodeElement } from './hast_utils';\n\nexport function processLine(\n node: HASTElement,\n line: number,\n state: SharedRenderState\n): ElementContent {\n const lineInfo =\n typeof state.lineInfo === 'function'\n ? state.lineInfo(line)\n : state.lineInfo[line];\n if (lineInfo == null) {\n console.error({ node, line, state });\n throw new Error(`processLine: line ${line}, contains no state.lineInfo`);\n }\n // We need to convert the current line to a div but keep all the decorations\n // that may be applied\n node.tagName = 'span';\n node.properties['data-column-content'] = '';\n\n // NOTE(amadeus): We need to push newline characters into empty rows or else\n // copy/pasta will have issues\n if (node.children.length === 0) {\n node.children.push(createTextNodeElement('\\n'));\n }\n const children = [\n createHastElement({\n tagName: 'span',\n children: [\n createHastElement({\n tagName: 'span',\n children: [{ type: 'text', value: `${lineInfo.lineNumber}` }],\n properties: { 'data-line-number-content': '' },\n }),\n ],\n properties: { 'data-column-number': '' },\n }),\n node,\n ];\n return createHastElement({\n tagName: 'div',\n children,\n properties: {\n 'data-line': lineInfo.lineNumber,\n 'data-alt-line': lineInfo.altLineNumber,\n 'data-line-type': lineInfo.type,\n 'data-line-index': lineInfo.lineIndex,\n },\n });\n}\n","import {\n type ShikiTransformerStyleToClass,\n transformerStyleToClass,\n} from '@shikijs/transformers';\nimport type { ElementContent } from 'hast';\n\nimport type { SharedRenderState, ShikiTransformer } from '../types';\nimport { findCodeElement } from './hast_utils';\nimport { processLine } from './processLine';\n\ninterface CreateTransformerWithStateReturn {\n state: SharedRenderState;\n transformers: ShikiTransformer[];\n toClass: ShikiTransformerStyleToClass;\n}\n\nexport function createTransformerWithState(\n useCSSClasses = false\n): CreateTransformerWithStateReturn {\n const state: SharedRenderState = {\n lineInfo: {},\n };\n const transformers: ShikiTransformer[] = [\n {\n line(node) {\n // Remove the default class\n delete node.properties.class;\n return node;\n },\n pre(pre) {\n const code = findCodeElement(pre);\n const children: ElementContent[] = [];\n if (code != null) {\n let index = 1;\n for (const node of code.children) {\n if (node.type !== 'element') continue;\n children.push(processLine(node, index, state));\n index++;\n }\n code.children = children;\n }\n return pre;\n },\n },\n ];\n if (useCSSClasses) {\n transformers.push(tokenStyleNormalizer, toClass);\n }\n return { state, transformers, toClass };\n}\n\nconst toClass = transformerStyleToClass({ classPrefix: 'hl-' });\n\n// Create a transformer that converts token color/fontStyle to htmlStyle\n// This needs to run BEFORE transformerStyleToClass\nconst tokenStyleNormalizer: ShikiTransformer = {\n name: 'token-style-normalizer',\n tokens(lines) {\n for (const line of lines) {\n for (const token of line) {\n // Skip if htmlStyle is already set\n if (token.htmlStyle != null) continue;\n\n const style: Record<string, string> = {};\n\n if (token.color != null) {\n style.color = token.color;\n }\n if (token.bgColor != null) {\n style['background-color'] = token.bgColor;\n }\n if (token.fontStyle != null && token.fontStyle !== 0) {\n // FontStyle is a bitmask: 1 = italic, 2 = bold, 4 = underline\n if ((token.fontStyle & 1) !== 0) {\n style['font-style'] = 'italic';\n }\n if ((token.fontStyle & 2) !== 0) {\n style['font-weight'] = 'bold';\n }\n if ((token.fontStyle & 4) !== 0) {\n style['text-decoration'] = 'underline';\n }\n }\n\n // Only set htmlStyle if we have any styles\n if (Object.keys(style).length > 0) {\n token.htmlStyle = style;\n }\n }\n }\n },\n};\n","export function formatCSSVariablePrefix(prefix: string = 'diffs') {\n return `--${prefix}-`;\n}\n","import type { ExtensionFormatMap, SupportedLanguages } from '../types';\n\nexport const EXTENSION_TO_FILE_FORMAT: ExtensionFormatMap = {\n '1c': '1c',\n abap: 'abap',\n as: 'actionscript-3',\n ada: 'ada',\n adb: 'ada',\n ads: 'ada',\n adoc: 'asciidoc',\n asciidoc: 'asciidoc',\n 'component.html': 'angular-html',\n 'component.ts': 'angular-ts',\n conf: 'nginx',\n htaccess: 'apache',\n cls: 'tex',\n trigger: 'apex',\n apl: 'apl',\n applescript: 'applescript',\n scpt: 'applescript',\n ara: 'ara',\n asm: 'asm',\n s: 'riscv',\n astro: 'astro',\n awk: 'awk',\n bal: 'ballerina',\n sh: 'zsh',\n bash: 'zsh',\n bat: 'cmd',\n cmd: 'cmd',\n be: 'berry',\n beancount: 'beancount',\n bib: 'bibtex',\n bicep: 'bicep',\n 'blade.php': 'blade',\n bsl: 'bsl',\n c: 'c',\n h: 'objective-cpp',\n cs: 'csharp',\n cpp: 'cpp',\n hpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n hh: 'cpp',\n cdc: 'cdc',\n cairo: 'cairo',\n clar: 'clarity',\n clj: 'clojure',\n cljs: 'clojure',\n cljc: 'clojure',\n soy: 'soy',\n cmake: 'cmake',\n 'CMakeLists.txt': 'cmake',\n cob: 'cobol',\n cbl: 'cobol',\n cobol: 'cobol',\n CODEOWNERS: 'codeowners',\n ql: 'ql',\n coffee: 'coffeescript',\n lisp: 'lisp',\n cl: 'lisp',\n lsp: 'lisp',\n log: 'log',\n v: 'verilog',\n cql: 'cql',\n cr: 'crystal',\n css: 'css',\n csv: 'csv',\n cue: 'cue',\n cypher: 'cypher',\n cyp: 'cypher',\n d: 'd',\n dart: 'dart',\n dax: 'dax',\n desktop: 'desktop',\n diff: 'diff',\n patch: 'diff',\n Dockerfile: 'dockerfile',\n dockerfile: 'dockerfile',\n env: 'dotenv',\n dm: 'dream-maker',\n edge: 'edge',\n el: 'emacs-lisp',\n ex: 'elixir',\n exs: 'elixir',\n elm: 'elm',\n erb: 'erb',\n erl: 'erlang',\n hrl: 'erlang',\n f: 'fortran-fixed-form',\n for: 'fortran-fixed-form',\n fs: 'fsharp',\n fsi: 'fsharp',\n fsx: 'fsharp',\n f03: 'f03',\n f08: 'f08',\n f18: 'f18',\n f77: 'f77',\n f90: 'fortran-free-form',\n f95: 'fortran-free-form',\n fnl: 'fennel',\n fish: 'fish',\n ftl: 'ftl',\n tres: 'gdresource',\n res: 'gdresource',\n gd: 'gdscript',\n gdshader: 'gdshader',\n gs: 'genie',\n feature: 'gherkin',\n COMMIT_EDITMSG: 'git-commit',\n 'git-rebase-todo': 'git-rebase',\n gjs: 'glimmer-js',\n gleam: 'gleam',\n gts: 'glimmer-ts',\n glsl: 'glsl',\n vert: 'glsl',\n frag: 'glsl',\n shader: 'shaderlab',\n gp: 'gnuplot',\n plt: 'gnuplot',\n gnuplot: 'gnuplot',\n go: 'go',\n graphql: 'graphql',\n gql: 'graphql',\n groovy: 'groovy',\n gvy: 'groovy',\n hack: 'hack',\n haml: 'haml',\n hbs: 'handlebars',\n handlebars: 'handlebars',\n hs: 'haskell',\n lhs: 'haskell',\n hx: 'haxe',\n hcl: 'hcl',\n hjson: 'hjson',\n hlsl: 'hlsl',\n fx: 'hlsl',\n html: 'html',\n htm: 'html',\n http: 'http',\n rest: 'http',\n hxml: 'hxml',\n hy: 'hy',\n imba: 'imba',\n ini: 'ini',\n cfg: 'ini',\n jade: 'pug',\n pug: 'pug',\n java: 'java',\n js: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n jinja: 'jinja',\n jinja2: 'jinja',\n j2: 'jinja',\n jison: 'jison',\n jl: 'julia',\n json: 'json',\n json5: 'json5',\n jsonc: 'jsonc',\n jsonl: 'jsonl',\n jsonnet: 'jsonnet',\n libsonnet: 'jsonnet',\n jssm: 'jssm',\n jsx: 'jsx',\n kt: 'kotlin',\n kts: 'kts',\n kql: 'kusto',\n tex: 'tex',\n ltx: 'tex',\n lean: 'lean4',\n less: 'less',\n liquid: 'liquid',\n lit: 'lit',\n ll: 'llvm',\n logo: 'logo',\n lua: 'lua',\n luau: 'luau',\n Makefile: 'makefile',\n mk: 'makefile',\n makefile: 'makefile',\n md: 'markdown',\n markdown: 'markdown',\n marko: 'marko',\n m: 'wolfram',\n mat: 'matlab',\n mdc: 'mdc',\n mdx: 'mdx',\n wiki: 'wikitext',\n mediawiki: 'wikitext',\n mmd: 'mermaid',\n mermaid: 'mermaid',\n mips: 'mipsasm',\n mojo: 'mojo',\n '🔥': 'mojo',\n move: 'move',\n nar: 'narrat',\n nf: 'nextflow',\n nim: 'nim',\n nims: 'nim',\n nimble: 'nim',\n nix: 'nix',\n nu: 'nushell',\n mm: 'objective-cpp',\n ml: 'ocaml',\n mli: 'ocaml',\n mll: 'ocaml',\n mly: 'ocaml',\n pas: 'pascal',\n p: 'pascal',\n pl: 'prolog',\n pm: 'perl',\n t: 'perl',\n raku: 'raku',\n p6: 'raku',\n pl6: 'raku',\n php: 'php',\n phtml: 'php',\n pls: 'plsql',\n sql: 'sql',\n po: 'po',\n polar: 'polar',\n pcss: 'postcss',\n pot: 'pot',\n potx: 'potx',\n pq: 'powerquery',\n pqm: 'powerquery',\n ps1: 'powershell',\n psm1: 'powershell',\n psd1: 'powershell',\n prisma: 'prisma',\n pro: 'prolog',\n P: 'prolog',\n properties: 'properties',\n proto: 'protobuf',\n pp: 'puppet',\n purs: 'purescript',\n py: 'python',\n pyw: 'python',\n pyi: 'python',\n qml: 'qml',\n qmldir: 'qmldir',\n qss: 'qss',\n r: 'r',\n R: 'r',\n rkt: 'racket',\n rktl: 'racket',\n razor: 'razor',\n cshtml: 'razor',\n rb: 'ruby',\n rbw: 'ruby',\n reg: 'reg',\n regex: 'regexp',\n rel: 'rel',\n rs: 'rust',\n rst: 'rst',\n rake: 'ruby',\n gemspec: 'ruby',\n sas: 'sas',\n sass: 'sass',\n scala: 'scala',\n sc: 'scala',\n scm: 'scheme',\n ss: 'scheme',\n sld: 'scheme',\n scss: 'scss',\n sdbl: 'sdbl',\n shadergraph: 'shader',\n st: 'smalltalk',\n sol: 'solidity',\n sparql: 'sparql',\n rq: 'sparql',\n spl: 'splunk',\n config: 'ssh-config',\n do: 'stata',\n ado: 'stata',\n dta: 'stata',\n styl: 'stylus',\n stylus: 'stylus',\n svelte: 'svelte',\n swift: 'swift',\n sv: 'system-verilog',\n svh: 'system-verilog',\n service: 'systemd',\n socket: 'systemd',\n device: 'systemd',\n timer: 'systemd',\n talon: 'talonscript',\n tasl: 'tasl',\n tcl: 'tcl',\n templ: 'templ',\n tf: 'tf',\n tfvars: 'tfvars',\n toml: 'toml',\n ts: 'typescript',\n tsp: 'typespec',\n tsv: 'tsv',\n tsx: 'tsx',\n ttl: 'turtle',\n twig: 'twig',\n typ: 'typst',\n vv: 'v',\n vala: 'vala',\n vapi: 'vala',\n vb: 'vb',\n vbs: 'vb',\n bas: 'vb',\n vh: 'verilog',\n vhd: 'vhdl',\n vhdl: 'vhdl',\n vim: 'vimscript',\n vue: 'vue',\n 'vine.ts': 'vue-vine',\n vy: 'vyper',\n wasm: 'wasm',\n wat: 'wasm',\n wy: '文言',\n wgsl: 'wgsl',\n wit: 'wit',\n wl: 'wolfram',\n nb: 'wolfram',\n xml: 'xml',\n xsl: 'xsl',\n xslt: 'xsl',\n yaml: 'yaml',\n yml: 'yml',\n zs: 'zenscript',\n zig: 'zig',\n zsh: 'zsh',\n sty: 'tex',\n};\n\nexport function getFiletypeFromFileName(fileName: string): SupportedLanguages {\n // Handle special files without extensions first\n if (EXTENSION_TO_FILE_FORMAT[fileName] != null) {\n return EXTENSION_TO_FILE_FORMAT[fileName];\n }\n\n // Try compound extensions first (e.g., .blade.php, .component.ts)\n const compoundMatch = fileName.match(/\\.([^/\\\\]+\\.[^/\\\\]+)$/);\n if (\n compoundMatch != null &&\n EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null\n ) {\n return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? 'text';\n }\n\n // Fall back to simple extension\n const simpleMatch = fileName.match(/\\.([^.]+)$/);\n return EXTENSION_TO_FILE_FORMAT[simpleMatch?.[1] ?? ''] ?? 'text';\n}\n\nexport function extendFileFormatMap(map: ExtensionFormatMap): void {\n for (const key in map) {\n EXTENSION_TO_FILE_FORMAT[key] = map[key];\n }\n}\n","import { DEFAULT_THEMES } from '../constants';\nimport type {\n DiffsHighlighter,\n DiffsThemeNames,\n ThemeRegistrationResolved,\n ThemesType,\n} from '../types';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\n\ninterface GetHighlighterThemeStylesProps {\n theme?: DiffsThemeNames | ThemesType;\n highlighter: DiffsHighlighter;\n prefix?: string;\n}\n\n// FIXME(amadeus): We'll probably need to\n// re-think this when it comes to removing inline\n// styles\nexport function getHighlighterThemeStyles({\n theme = DEFAULT_THEMES,\n highlighter,\n prefix,\n}: GetHighlighterThemeStylesProps): string {\n let styles = '';\n if (typeof theme === 'string') {\n const themeData = highlighter.getTheme(theme);\n styles += `color:${themeData.fg};`;\n styles += `background-color:${themeData.bg};`;\n styles += `${formatCSSVariablePrefix(prefix)}fg:${themeData.fg};`;\n styles += `${formatCSSVariablePrefix(prefix)}bg:${themeData.bg};`;\n styles += getThemeVariables(themeData, prefix);\n } else {\n let themeData = highlighter.getTheme(theme.dark);\n styles += `${formatCSSVariablePrefix(prefix)}dark:${themeData.fg};`;\n styles += `${formatCSSVariablePrefix(prefix)}dark-bg:${themeData.bg};`;\n styles += getThemeVariables(themeData, prefix, 'dark');\n\n themeData = highlighter.getTheme(theme.light);\n styles += `${formatCSSVariablePrefix(prefix)}light:${themeData.fg};`;\n styles += `${formatCSSVariablePrefix(prefix)}light-bg:${themeData.bg};`;\n styles += getThemeVariables(themeData, prefix, 'light');\n }\n return styles;\n}\n\nfunction getThemeVariables(\n themeData: ThemeRegistrationResolved,\n prefix?: string,\n modePrefix?: string\n) {\n modePrefix = modePrefix != null ? `${modePrefix}-` : '';\n let styles = '';\n const additionGreen =\n themeData.colors?.['gitDecoration.addedResourceForeground'] ??\n themeData.colors?.['terminal.ansiGreen'];\n if (additionGreen != null) {\n styles += `${formatCSSVariablePrefix(prefix)}${modePrefix}addition-color:${additionGreen};`;\n }\n const deletionRed =\n themeData.colors?.['gitDecoration.deletedResourceForeground'] ??\n themeData.colors?.['terminal.ansiRed'];\n if (deletionRed != null) {\n styles += `${formatCSSVariablePrefix(prefix)}${modePrefix}deletion-color:${deletionRed};`;\n }\n const modifiedBlue =\n themeData.colors?.['gitDecoration.modifiedResourceForeground'] ??\n themeData.colors?.['terminal.ansiBlue'];\n if (modifiedBlue != null) {\n styles += `${formatCSSVariablePrefix(prefix)}${modePrefix}modified-color:${modifiedBlue};`;\n }\n return styles;\n}\n","import type { ElementContent, Root, RootContent } from 'hast';\n\nexport function getLineNodes(nodes: Root): ElementContent[] {\n let firstChild: RootContent | Element | Root | null = nodes.children[0];\n while (firstChild != null) {\n if (firstChild.type === 'element' && firstChild.tagName === 'code') {\n return firstChild.children;\n }\n if ('children' in firstChild) {\n firstChild = firstChild.children[0];\n } else {\n firstChild = null;\n }\n }\n console.error(nodes);\n throw new Error('getLineNodes: Unable to find children');\n}\n","import { type ChangeObject } from 'diff';\n\nimport type { DecorationItem } from '../types';\n\ninterface CreateDiffSpanDecorationProps {\n line: number;\n spanStart: number;\n spanLength: number;\n}\n\nexport function createDiffSpanDecoration({\n line,\n spanStart,\n spanLength,\n}: CreateDiffSpanDecorationProps): DecorationItem {\n return {\n start: { line, character: spanStart },\n end: { line, character: spanStart + spanLength },\n properties: { 'data-diff-span': '' },\n alwaysWrap: true,\n };\n}\n\ninterface PushOrJoinSpanProps {\n item: ChangeObject<string>;\n arr: [0 | 1, string][];\n enableJoin: boolean;\n isNeutral?: boolean;\n isLastItem?: boolean;\n}\n\n// For diff decoration spans, we want to be sure that if there is a single\n// white-space gap between diffs that we join them together into a longer diff span.\n// Spans are basically just a tuple - 1 means the content should be\n// highlighted, 0 means it should not, we still need to the span data to figure\n// out span positions\nexport function pushOrJoinSpan({\n item,\n arr,\n enableJoin,\n isNeutral = false,\n isLastItem = false,\n}: PushOrJoinSpanProps): void {\n const lastItem = arr[arr.length - 1];\n if (lastItem == null || isLastItem || !enableJoin) {\n arr.push([isNeutral ? 0 : 1, item.value]);\n return;\n }\n const isLastItemNeutral = lastItem[0] === 0;\n if (\n isNeutral === isLastItemNeutral ||\n // If we have a single space neutral item, lets join it to a previous\n // space non-neutral item to avoid single space gaps\n (isNeutral && item.value.length === 1 && !isLastItemNeutral)\n ) {\n lastItem[1] += item.value;\n return;\n }\n arr.push([isNeutral ? 0 : 1, item.value]);\n}\n","import { diffChars, diffWordsWithSpace } from 'diff';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DecorationItem,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n FileDiffMetadata,\n Hunk,\n LineDiffTypes,\n LineInfo,\n RenderDiffFilesResult,\n RenderDiffOptions,\n SupportedLanguages,\n ThemedDiffResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport {\n createDiffSpanDecoration,\n pushOrJoinSpan,\n} from './parseDiffDecorations';\n\nexport function renderDiffWithHighlighter(\n diff: FileDiffMetadata,\n highlighter: DiffsHighlighter,\n options: RenderDiffOptions,\n forcePlainText = false\n): ThemedDiffResult {\n const baseThemeType = (() => {\n const theme = options.theme ?? DEFAULT_THEMES;\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme: options.theme,\n highlighter,\n });\n // If we've received a diff with both files\n if (diff.newLines != null && diff.oldLines != null) {\n const {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n } = processLines({\n hunks: diff.hunks,\n oldLines: diff.oldLines,\n newLines: diff.newLines,\n lineDiffType: options.lineDiffType,\n });\n const oldFile = {\n name: diff.prevName ?? diff.name,\n contents: oldContent,\n };\n const newFile = {\n name: diff.name,\n contents: newContent,\n };\n const code = renderTwoFiles({\n oldFile,\n oldInfo,\n oldDecorations,\n\n newFile,\n newInfo,\n newDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n });\n return { code, themeStyles, baseThemeType };\n }\n const hunks: RenderDiffFilesResult[] = [];\n let splitLineIndex = 0;\n let unifiedLineIndex = 0;\n for (const hunk of diff.hunks) {\n const {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n splitLineIndex: newSplitLineIndex,\n unifiedLineIndex: newUnifiedLineIndex,\n } = processLines({\n hunks: [hunk],\n splitLineIndex,\n unifiedLineIndex,\n lineDiffType: options.lineDiffType,\n });\n const oldFile = {\n name: diff.prevName ?? diff.name,\n contents: oldContent,\n };\n const newFile = {\n name: diff.name,\n contents: newContent,\n };\n hunks.push(\n renderTwoFiles({\n oldFile,\n oldInfo,\n oldDecorations,\n\n newFile,\n newInfo,\n newDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n })\n );\n splitLineIndex = newSplitLineIndex;\n unifiedLineIndex = newUnifiedLineIndex;\n }\n\n const code = (() => {\n if (hunks.length <= 1) {\n const hunk = hunks[0] ?? { oldLines: [], newLines: [] };\n if (hunk.newLines.length === 0 || hunk.oldLines.length === 0) {\n return hunk;\n }\n }\n return { hunks };\n })();\n\n return { code, themeStyles, baseThemeType };\n}\n\ninterface ProcessLineDiffProps {\n oldLine: string | undefined;\n newLine: string | undefined;\n oldLineIndex: number;\n newLineIndex: number;\n oldDecorations: DecorationItem[];\n newDecorations: DecorationItem[];\n lineDiffType: LineDiffTypes;\n}\n\nfunction computeLineDiffDecorations({\n oldLine,\n newLine,\n oldLineIndex,\n newLineIndex,\n oldDecorations,\n newDecorations,\n lineDiffType,\n}: ProcessLineDiffProps) {\n if (oldLine == null || newLine == null || lineDiffType === 'none') {\n return;\n }\n oldLine = cleanLastNewline(oldLine);\n newLine = cleanLastNewline(newLine);\n // NOTE(amadeus): Because we visually trim trailing newlines when rendering,\n // we also gotta make sure the diff parsing doesn't include the newline\n // character that could be there...\n const lineDiff =\n lineDiffType === 'char'\n ? diffChars(oldLine, newLine)\n : diffWordsWithSpace(oldLine, newLine);\n const deletionSpans: [0 | 1, string][] = [];\n const additionSpans: [0 | 1, string][] = [];\n const enableJoin = lineDiffType === 'word-alt';\n for (const item of lineDiff) {\n const isLastItem = item === lineDiff[lineDiff.length - 1];\n if (!item.added && !item.removed) {\n pushOrJoinSpan({\n item,\n arr: deletionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n pushOrJoinSpan({\n item,\n arr: additionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n } else if (item.removed) {\n pushOrJoinSpan({ item, arr: deletionSpans, enableJoin, isLastItem });\n } else {\n pushOrJoinSpan({ item, arr: additionSpans, enableJoin, isLastItem });\n }\n }\n let spanIndex = 0;\n for (const span of deletionSpans) {\n if (span[0] === 1) {\n oldDecorations.push(\n createDiffSpanDecoration({\n // Decoration indexes start at 0\n line: oldLineIndex - 1,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n spanIndex = 0;\n for (const span of additionSpans) {\n if (span[0] === 1) {\n newDecorations.push(\n createDiffSpanDecoration({\n // Decoration indexes start at 0\n line: newLineIndex - 1,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n}\n\ninterface ProcessLinesProps {\n hunks: Hunk[];\n oldLines?: string[];\n newLines?: string[];\n splitLineIndex?: number;\n unifiedLineIndex?: number;\n newLineIndex?: number;\n oldLineIndex?: number;\n lineDiffType: LineDiffTypes;\n}\n\nfunction processLines({\n hunks,\n oldLines,\n newLines,\n splitLineIndex = 0,\n unifiedLineIndex = 0,\n lineDiffType,\n}: ProcessLinesProps) {\n const oldInfo: Record<number, LineInfo | undefined> = {};\n const newInfo: Record<number, LineInfo | undefined> = {};\n const oldDecorations: DecorationItem[] = [];\n const newDecorations: DecorationItem[] = [];\n let newLineIndex = 1;\n let oldLineIndex = 1;\n let newLineNumber = 1;\n let oldLineNumber = 1;\n let oldContent = '';\n let newContent = '';\n for (const hunk of hunks) {\n // If there's content prior to the hunk, lets fill it up\n while (\n oldLines != null &&\n newLines != null &&\n newLineIndex < hunk.additionStart &&\n oldLineIndex < hunk.deletionStart\n ) {\n oldInfo[oldLineIndex] = {\n type: 'context-expanded',\n lineNumber: oldLineNumber,\n altLineNumber: newLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n newInfo[newLineIndex] = {\n type: 'context-expanded',\n lineNumber: newLineNumber,\n altLineNumber: oldLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += oldLines[oldLineIndex - 1];\n newContent += newLines[newLineIndex - 1];\n oldLineIndex++;\n newLineIndex++;\n oldLineNumber++;\n newLineNumber++;\n splitLineIndex++;\n unifiedLineIndex++;\n }\n oldLineNumber = hunk.deletionStart;\n newLineNumber = hunk.additionStart;\n\n // Lets process the actual hunk content\n for (const hunkContent of hunk.hunkContent) {\n if (hunkContent.type === 'context') {\n for (const line of hunkContent.lines) {\n oldInfo[oldLineIndex] = {\n type: 'context',\n lineNumber: oldLineNumber,\n altLineNumber: newLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n newInfo[newLineIndex] = {\n type: 'context',\n lineNumber: newLineNumber,\n altLineNumber: oldLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += line;\n newContent += line;\n oldLineIndex++;\n newLineIndex++;\n newLineNumber++;\n oldLineNumber++;\n splitLineIndex++;\n unifiedLineIndex++;\n }\n } else {\n const len = Math.max(\n hunkContent.additions.length,\n hunkContent.deletions.length\n );\n let i = 0;\n // NOTE(amadeus): Since we iterate through deletions and additions\n // simultaneously, we have to create a secondary iterator for\n // unifiedLineIndex, and then when we're done, add the combined lengths\n // of additions/deletions to the main variable\n let _unifiedLineIndex = unifiedLineIndex;\n while (i < len) {\n const oldLine = hunkContent.deletions[i];\n const newLine = hunkContent.additions[i];\n computeLineDiffDecorations({\n newLine,\n oldLine,\n oldLineIndex,\n newLineIndex,\n oldDecorations,\n newDecorations,\n lineDiffType,\n });\n if (oldLine != null) {\n oldInfo[oldLineIndex] = {\n type: 'change-deletion',\n lineNumber: oldLineNumber,\n lineIndex: `${_unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += oldLine;\n oldLineIndex++;\n oldLineNumber++;\n }\n if (newLine != null) {\n newInfo[newLineIndex] = {\n type: 'change-addition',\n lineNumber: newLineNumber,\n lineIndex: `${_unifiedLineIndex + hunkContent.deletions.length},${splitLineIndex}`,\n };\n newContent += newLine;\n newLineIndex++;\n newLineNumber++;\n }\n splitLineIndex++;\n _unifiedLineIndex++;\n i++;\n }\n unifiedLineIndex +=\n hunkContent.additions.length + hunkContent.deletions.length;\n }\n }\n\n if (\n oldLines == null ||\n newLines == null ||\n hunk !== hunks[hunks.length - 1]\n )\n continue;\n // If we are on the last hunk, we should fully iterate through the rest\n // of the lines\n while (oldLineIndex <= oldLines.length || newLineIndex <= oldLines.length) {\n const oldLine = oldLines[oldLineIndex - 1];\n const newLine = newLines[newLineIndex - 1];\n if (oldLine == null && newLine == null) {\n break;\n }\n if (oldLine != null) {\n oldInfo[oldLineIndex] = {\n type: 'context-expanded',\n lineNumber: oldLineNumber,\n altLineNumber: newLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += oldLine;\n oldLineIndex++;\n oldLineNumber++;\n }\n if (newLine != null) {\n newInfo[newLineIndex] = {\n type: 'context-expanded',\n lineNumber: newLineNumber,\n altLineNumber: oldLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n newContent += newLine;\n newLineIndex++;\n newLineNumber++;\n }\n splitLineIndex++;\n unifiedLineIndex++;\n }\n }\n return {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n splitLineIndex,\n unifiedLineIndex,\n };\n}\n\ninterface RenderTwoFilesProps {\n oldFile: FileContents;\n newFile: FileContents;\n oldInfo: Record<number, LineInfo | undefined>;\n newInfo: Record<number, LineInfo | undefined>;\n oldDecorations: DecorationItem[];\n newDecorations: DecorationItem[];\n options: RenderDiffOptions;\n highlighter: DiffsHighlighter;\n languageOverride: SupportedLanguages | undefined;\n}\n\nfunction renderTwoFiles({\n oldFile,\n newFile,\n oldInfo,\n newInfo,\n highlighter,\n oldDecorations,\n newDecorations,\n languageOverride,\n options: { theme: themeOrThemes = DEFAULT_THEMES, ...options },\n}: RenderTwoFilesProps) {\n const oldLang = languageOverride ?? getFiletypeFromFileName(oldFile.name);\n const newLang = languageOverride ?? getFiletypeFromFileName(newFile.name);\n const { state, transformers } = createTransformerWithState();\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n return typeof themeOrThemes === 'string'\n ? {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n theme: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n }\n : {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n themes: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n };\n })();\n\n const oldLines = (() => {\n if (oldFile.contents === '') {\n return [];\n }\n hastConfig.lang = oldLang;\n state.lineInfo = oldInfo;\n hastConfig.decorations = oldDecorations;\n return getLineNodes(\n highlighter.codeToHast(cleanLastNewline(oldFile.contents), hastConfig)\n );\n })();\n const newLines = (() => {\n if (newFile.contents === '') {\n return [];\n }\n hastConfig.lang = newLang;\n hastConfig.decorations = newDecorations;\n state.lineInfo = newInfo;\n return getLineNodes(\n highlighter.codeToHast(cleanLastNewline(newFile.contents), hastConfig)\n );\n })();\n\n return { oldLines, newLines };\n}\n","import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: RenderFileOptions,\n forcePlainText = false\n): ThemedFileResult {\n const { state, transformers } = createTransformerWithState();\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType = (() => {\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1,\n lineNumber: shikiLineNumber,\n });\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n if (typeof theme === 'string') {\n return {\n lang,\n theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n tokenizeMaxLineLength,\n };\n }\n return {\n lang,\n themes: theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n tokenizeMaxLineLength,\n };\n })();\n return {\n code: getLineNodes(\n highlighter.codeToHast(cleanLastNewline(file.contents), hastConfig)\n ),\n themeStyles,\n baseThemeType: baseThemeType,\n };\n}\n","import { createJavaScriptRegexEngine } from '@shikijs/engine-javascript';\nimport { createHighlighterCoreSync } from 'shiki/core';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport { attachResolvedLanguages } from '../highlighter/languages/attachResolvedLanguages';\nimport { attachResolvedThemes } from '../highlighter/themes/attachResolvedThemes';\nimport type {\n DiffsHighlighter,\n RenderDiffOptions,\n RenderFileOptions,\n ThemedDiffResult,\n ThemedFileResult,\n} from '../types';\nimport { renderDiffWithHighlighter } from '../utils/renderDiffWithHighlighter';\nimport { renderFileWithHighlighter } from '../utils/renderFileWithHighlighter';\nimport type {\n InitializeSuccessResponse,\n InitializeWorkerRequest,\n RenderDiffRequest,\n RenderDiffSuccessResponse,\n RenderErrorResponse,\n RenderFileRequest,\n RenderFileSuccessResponse,\n SetRenderOptionsWorkerRequest,\n WorkerRenderingOptions,\n WorkerRequest,\n WorkerRequestId,\n} from './types';\n\nlet highlighter: DiffsHighlighter | undefined;\nlet renderOptions: WorkerRenderingOptions = {\n theme: DEFAULT_THEMES,\n tokenizeMaxLineLength: 1000,\n lineDiffType: 'word-alt',\n};\n\nself.addEventListener('error', (event) => {\n console.error('[Shiki Worker] Unhandled error:', event.error);\n});\n\n// Handle incoming messages from the main thread\nself.addEventListener('message', (event: MessageEvent<WorkerRequest>) => {\n const request = event.data;\n\n try {\n switch (request.type) {\n case 'initialize':\n handleInitialize(request);\n break;\n case 'set-render-options':\n handleSetRenderOptions(request);\n break;\n case 'file':\n handleRenderFile(request);\n break;\n case 'diff':\n handleRenderDiff(request);\n break;\n default:\n throw new Error(\n `Unknown request type: ${(request as WorkerRequest).type}`\n );\n }\n } catch (error) {\n console.error('Worker error:', error);\n sendError(request.id, error);\n }\n});\n\nfunction handleInitialize({\n id,\n renderOptions: options,\n resolvedThemes,\n resolvedLanguages,\n}: InitializeWorkerRequest) {\n const highlighter = getHighlighter();\n attachResolvedThemes(resolvedThemes, highlighter);\n if (resolvedLanguages != null) {\n attachResolvedLanguages(resolvedLanguages, highlighter);\n }\n renderOptions = options;\n postMessage({\n type: 'success',\n id,\n requestType: 'initialize',\n sentAt: Date.now(),\n } satisfies InitializeSuccessResponse);\n}\n\nfunction handleSetRenderOptions({\n id,\n renderOptions: options,\n resolvedThemes,\n}: SetRenderOptionsWorkerRequest) {\n const highlighter = getHighlighter();\n attachResolvedThemes(resolvedThemes, highlighter);\n renderOptions = options;\n postMessage({\n type: 'success',\n id,\n requestType: 'set-render-options',\n sentAt: Date.now(),\n });\n}\n\nfunction handleRenderFile({ id, file, resolvedLanguages }: RenderFileRequest) {\n const highlighter = getHighlighter();\n // Load resolved languages if provided\n if (resolvedLanguages != null) {\n attachResolvedLanguages(resolvedLanguages, highlighter);\n }\n const fileOptions = {\n theme: renderOptions.theme,\n tokenizeMaxLineLength: renderOptions.tokenizeMaxLineLength,\n };\n sendFileSuccess(\n id,\n renderFileWithHighlighter(file, highlighter, fileOptions),\n fileOptions\n );\n}\n\nfunction handleRenderDiff({ id, diff, resolvedLanguages }: RenderDiffRequest) {\n const highlighter = getHighlighter();\n // Load resolved languages if provided\n if (resolvedLanguages != null) {\n attachResolvedLanguages(resolvedLanguages, highlighter);\n }\n const result = renderDiffWithHighlighter(diff, highlighter, renderOptions);\n sendDiffSuccess(id, result, renderOptions);\n}\n\nfunction getHighlighter(): DiffsHighlighter {\n highlighter ??= createHighlighterCoreSync({\n themes: [],\n langs: [],\n engine: createJavaScriptRegexEngine(),\n }) as DiffsHighlighter;\n return highlighter;\n}\n\nfunction sendFileSuccess(\n id: WorkerRequestId,\n result: ThemedFileResult,\n options: RenderFileOptions\n) {\n postMessage({\n type: 'success',\n requestType: 'file',\n id,\n result,\n options,\n sentAt: Date.now(),\n } satisfies RenderFileSuccessResponse);\n}\n\nfunction sendDiffSuccess(\n id: WorkerRequestId,\n result: ThemedDiffResult,\n options: RenderDiffOptions\n) {\n postMessage({\n type: 'success',\n requestType: 'diff',\n id,\n result,\n options,\n sentAt: Date.now(),\n } satisfies RenderDiffSuccessResponse);\n}\n\nfunction sendError(id: WorkerRequestId, error: unknown) {\n const response: RenderErrorResponse = {\n type: 'error',\n id,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n };\n postMessage(response);\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,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87],"mappings":"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B,SAAgB,cAAc,MAAM,MAAM,MAAM;CAC9C,MAAM,QAAQ,QAAQ,KAAK,SAAS,GAAG,CAAC,aAAa;AACrD,QAAO,QAAQ,QAAQ,CAAC,iBAAiB,KAAK,OAAO,aAAa,KAAK,CAAC,GACpE,QACA,QAAQ;;;;;ACdd,MAAM,eAAe;;;;;;;;;AAUrB,SAAgB,UAAU,MAAM,MAAM,MAAM;CAC1C,MAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,QAAO,QAAQ,QAAQ,CAAC,aAAa,KAAK,OAAO,aAAa,KAAK,CAAC,GAChE,QACA,QAAQ;;;;;;;;;;ACTd,MAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;AC3GD,MAAa,yBAAyB;CACpC,MAAM;CACN,OAAO;CACP,MAAM;CACN,OAAO;CACP,QAAQ;CACR,KAAK;CACL,QAAQ;CACR,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,OAAO;CACP,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,QAAQ;CACR,QAAQ;C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WAAW;KACX,YAAY,SAAS,aAAa;KACnC;IACF;GACD;IACE,OAAO;KAAC;KAAU;KAAsB;KAAgB;IACxD,UAAU,EACR,YAAY,SAAS,eAAe,EACrC;IACF;GACD;IACE,OAAO,CAAC,WAAW,gCAAgC;IACnD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,iBAAiB,EACvC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IACE,OAAO;IACP,UAAU,EACR,YAAY,SAAS,kBAAkB,EACxC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,iBAAiB,EACvC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,0BAA0B,EAChD;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,oBAAoB,EAC1C;IACF;GACD;IAEE,OAAO,CACL,yBACA,2CACD;IACD,UAAU,EACR,YAAY,SAAS,aAAa,EACnC;IACF;GACD;IAEE,OAAO,CAAC,iDAAiD;IACzD,UAAU,EACR,YAAY,SAAS,eAAe,EACrC;IACF;GACD;IAEE,OAAO;KACL;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IAEE,OAAO;KACL;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,iBAAiB,EACvC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IACE,OAAO,CACL,kBACA,iCACD;IACD,UAAU,EACR,YAAY,SAA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"}
|
|
1
|
+
{"version":3,"file":"worker-portable.js","names":["r","l","o","m","b","y","C","T","o","s","a","u","r","i","F","l","S","ee","K","w","R","A","I","k","L","f","Q","P","te","h","E","z","X","G","U","V","J","$","W","N","D","_","B","O","r","i","r","q","s","u","o","p","re","i","d","a","l","f","g","H","x","Z","v","M","S","u","r","s","i","d","a","o","b","y","x","m","h","v","p","R","P","incrementIfAtLeast","i","re","m","token","m","f","createCaptureMap","i","r","m","i","f","key","slug","p","i","createGroup","createLookaroundAssertion","createUnicodeProperty","createQuantifier","createAlternative","createAssertion","createCharacter","b","B","createCharacterClass","createCharacterSet","slug2","root","hasOnlyChild","f","createBackreference","createCapturingGroup","a","createSubroutine","body","parse","number","createCharacter2","createGroup2","createAlternative2","#pattern","re","#captureMap","#nameMap","#strategy","#compiled","#execCore","m","d","parse2","p","i","m","s","s","r","i","key","a","b","v","j","root","head","token","matchers","q","m","self","types","key","html","svg","htmlBase","svgBase","own","one","key","all","own","parse","token","stringify","stringify","emptyChildren","siblings","increment","html","body","tbody","html","head","child","key","x","y","commas","spaces","key","x","p","r","splitLines","i","highlighter","l","token","a","b","ShikiError$1","decorations","d","text","transform","j","_","s","root","clone","ShikiError","Registry","Registry$1","core","COMMIT_METADATA_SPLIT: RegExp","GIT_DIFF_FILE_BREAK_REGEX: RegExp","UNIFIED_DIFF_FILE_BREAK_REGEX: RegExp","FILE_CONTEXT_BLOB: RegExp","HUNK_HEADER: RegExp","SPLIT_WITH_NEWLINES: RegExp","FILENAME_HEADER_REGEX: RegExp","FILENAME_HEADER_REGEX_GIT: RegExp","ALTERNATE_FILE_NAMES_GIT: RegExp","FILE_MODE_FROM_INDEX: RegExp","DEFAULT_THEMES: ThemesType","ResolvedLanguages: Map<SupportedLanguages, ResolvedLanguage>","ResolvingLanguages: Map<\n SupportedLanguages,\n Promise<ResolvedLanguage>\n>","AttachedLanguages: Set<string>","ResolvedThemes: Map<DiffsThemeNames, ThemeRegistrationResolved>","ResolvingThemes: Map<\n DiffsThemeNames,\n Promise<ThemeRegistrationResolved>\n>","RegisteredCustomThemes: Map<\n string,\n () => Promise<ThemeRegistrationResolved | ThemeRegistration>\n>","AttachedThemes: Set<string>","resolvedTheme: ThemeRegistrationResolved | undefined","i","value","i","a","b","k","j","i","token","i","i","v","key","i","p","i","i","i","distanceIterator","err","structuredPatch","l","i","text","i","i","s","element","token","i","head","text","comment","j","o","range","v","_","s","root","clone","key","firstChild: RootContent | HASTElement | Root | null","state: SharedRenderState","transformers: ShikiTransformer[]","children: ElementContent[]","tokenStyleNormalizer: ShikiTransformer","token","style: Record<string, string>","EXTENSION_TO_FILE_FORMAT: ExtensionFormatMap","key","highlighter","firstChild: RootContent | Element | Root | null","highlighter","code","hunks: RenderDiffFilesResult[]","lineDiff","deletionSpans: [0 | 1, string][]","additionSpans: [0 | 1, string][]","oldInfo: Record<number, LineInfo | undefined>","newInfo: Record<number, LineInfo | undefined>","oldDecorations: DecorationItem[]","newDecorations: DecorationItem[]","i","hastConfig: CodeToHastOptions<DiffsThemeNames>","highlighter","hastConfig: CodeToHastOptions<DiffsThemeNames>","highlighter: DiffsHighlighter | undefined","renderOptions: WorkerRenderingOptions","highlighter","response: RenderErrorResponse"],"sources":["../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/utils.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/tokenizer/tokenize.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/parser/node-utils.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/parser/parse.js","../../../../node_modules/.bun/oniguruma-parser@0.12.1/node_modules/oniguruma-parser/dist/traverser/traverse.js","../../../../node_modules/.bun/regex@6.0.1/node_modules/regex/src/utils-internals.js","../../../../node_modules/.bun/regex-utilities@2.3.0/node_modules/regex-utilities/src/index.js","../../../../node_modules/.bun/regex@6.0.1/node_modules/regex/src/atomic.js","../../../../node_modules/.bun/regex@6.0.1/node_modules/regex/src/subclass.js","../../../../node_modules/.bun/regex-recursion@6.0.2/node_modules/regex-recursion/src/index.js","../../../../node_modules/.bun/oniguruma-to-es@4.3.4/node_modules/oniguruma-to-es/dist/esm/index.js","../../../../node_modules/.bun/@shikijs+engine-javascript@3.20.0/node_modules/@shikijs/engine-javascript/dist/shared/engine-javascript.hzpS1_41.mjs","../../../../node_modules/.bun/@shikijs+engine-javascript@3.20.0/node_modules/@shikijs/engine-javascript/dist/engine-compile.mjs","../../../../node_modules/.bun/@shikijs+engine-javascript@3.20.0/node_modules/@shikijs/engine-javascript/dist/engine-raw.mjs","../../../../node_modules/.bun/@shikijs+types@3.20.0/node_modules/@shikijs/types/dist/index.mjs","../../../../node_modules/.bun/@shikijs+vscode-textmate@10.0.2/node_modules/@shikijs/vscode-textmate/dist/index.js","../../../../node_modules/.bun/html-void-elements@3.0.0/node_modules/html-void-elements/index.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/schema.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/merge.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/normalize.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/info.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/types.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/defined-info.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/create.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/aria.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/html.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/svg.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/xlink.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/xmlns.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/xml.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/hast-to-react.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/lib/find.js","../../../../node_modules/.bun/property-information@7.1.0/node_modules/property-information/index.js","../../../../node_modules/.bun/zwitch@2.0.4/node_modules/zwitch/index.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-decimal.js","../../../../node_modules/.bun/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../../../../node_modules/.bun/character-entities-html4@2.1.0/node_modules/character-entities-html4/index.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/constant/dangerous.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-named.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-smart.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-basic.js","../../../../node_modules/.bun/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/comment.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/doctype.js","../../../../node_modules/.bun/ccount@2.0.1/node_modules/ccount/index.js","../../../../node_modules/.bun/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../../node_modules/.bun/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../../node_modules/.bun/hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/omission.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/closing.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/opening.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/element.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/text.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/raw.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/root.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/index.js","../../../../node_modules/.bun/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/index.js","../../../../node_modules/.bun/@shikijs+core@3.20.0/node_modules/@shikijs/core/dist/index.mjs","../../src/constants.ts","../../src/highlighter/languages/constants.ts","../../src/highlighter/languages/attachResolvedLanguages.ts","../../src/highlighter/themes/constants.ts","../../src/highlighter/themes/attachResolvedThemes.ts","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/base.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/character.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/string.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/word.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/params.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/line.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/sentence.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/css.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/json.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/diff/array.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/line-endings.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/parse.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/util/distance-iterator.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/apply.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/reverse.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/patch/create.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/dmp.js","../../../../node_modules/.bun/diff@8.0.2/node_modules/diff/libesm/convert/xml.js","../../src/utils/cleanLastNewline.ts","../../../../node_modules/.bun/@shikijs+transformers@3.20.0/node_modules/@shikijs/transformers/dist/index.mjs","../../src/utils/hast_utils.ts","../../src/utils/processLine.ts","../../src/utils/createTransformerWithState.ts","../../src/utils/formatCSSVariablePrefix.ts","../../src/utils/getFiletypeFromFileName.ts","../../src/utils/getHighlighterThemeStyles.ts","../../src/utils/getLineNodes.ts","../../src/utils/parseDiffDecorations.ts","../../src/utils/renderDiffWithHighlighter.ts","../../src/utils/renderFileWithHighlighter.ts","../../src/worker/worker.ts"],"sourcesContent":["\"use strict\";function r(e){if([...e].length!==1)throw new Error(`Expected \"${e}\" to be a single code point`);return e.codePointAt(0)}function l(e,t,n){return e.has(t)||e.set(t,n),e.get(t)}const i=new Set([\"alnum\",\"alpha\",\"ascii\",\"blank\",\"cntrl\",\"digit\",\"graph\",\"lower\",\"print\",\"punct\",\"space\",\"upper\",\"word\",\"xdigit\"]),o=String.raw;function u(e,t){if(e==null)throw new Error(t??\"Value expected\");return e}export{r as cpOf,l as getOrInsert,i as PosixClassNames,o as r,u as throwIfNullish};\n//# sourceMappingURL=utils.js.map\n","\"use strict\";import{cpOf as h,PosixClassNames as G,r as p,throwIfNullish as N}from\"../utils.js\";const m=p`\\[\\^?`,b=`c.? | C(?:-.?)?|${p`[pP]\\{(?:\\^?[-\\x20_]*[A-Za-z][-\\x20\\w]*\\})?`}|${p`x[89A-Fa-f]\\p{AHex}(?:\\\\x[89A-Fa-f]\\p{AHex})*`}|${p`u(?:\\p{AHex}{4})? | x\\{[^\\}]*\\}? | x\\p{AHex}{0,2}`}|${p`o\\{[^\\}]*\\}?`}|${p`\\d{1,3}`}`,y=/[?*+][?+]?|\\{(?:\\d+(?:,\\d*)?|,\\d+)\\}\\??/,C=new RegExp(p`\n \\\\ (?:\n ${b}\n | [gk]<[^>]*>?\n | [gk]'[^']*'?\n | .\n )\n | \\( (?:\n \\? (?:\n [:=!>({]\n | <[=!]\n | <[^>]*>\n | '[^']*'\n | ~\\|?\n | #(?:[^)\\\\]|\\\\.?)*\n | [^:)]*[:)]\n )?\n | \\*[^\\)]*\\)?\n )?\n | (?:${y.source})+\n | ${m}\n | .\n`.replace(/\\s+/g,\"\"),\"gsu\"),T=new RegExp(p`\n \\\\ (?:\n ${b}\n | .\n )\n | \\[:(?:\\^?\\p{Alpha}+|\\^):\\]\n | ${m}\n | &&\n | .\n`.replace(/\\s+/g,\"\"),\"gsu\");function M(e,n={}){const t={flags:\"\",...n,rules:{captureGroup:!1,singleline:!1,...n.rules}};if(typeof e!=\"string\")throw new Error(\"String expected as pattern\");const o=Y(t.flags),s=[o.extended],a={captureGroup:t.rules.captureGroup,getCurrentModX(){return s.at(-1)},numOpenGroups:0,popModX(){s.pop()},pushModX(u){s.push(u)},replaceCurrentModX(u){s[s.length-1]=u},singleline:t.rules.singleline};let r=[],i;for(C.lastIndex=0;i=C.exec(e);){const u=F(a,e,i[0],C.lastIndex);u.tokens?r.push(...u.tokens):u.token&&r.push(u.token),u.lastIndex!==void 0&&(C.lastIndex=u.lastIndex)}const l=[];let c=0;r.filter(u=>u.type===\"GroupOpen\").forEach(u=>{u.kind===\"capturing\"?u.number=++c:u.raw===\"(\"&&l.push(u)}),c||l.forEach((u,S)=>{u.kind=\"capturing\",u.number=S+1});const g=c||l.length;return{tokens:r.map(u=>u.type===\"EscapedNumber\"?ee(u,g):u).flat(),flags:o}}function F(e,n,t,o){const[s,a]=t;if(t===\"[\"||t===\"[^\"){const r=K(n,t,o);return{tokens:r.tokens,lastIndex:r.lastIndex}}if(s===\"\\\\\"){if(\"AbBGyYzZ\".includes(a))return{token:w(t,t)};if(/^\\\\g[<']/.test(t)){if(!/^\\\\g(?:<[^>]+>|'[^']+')$/.test(t))throw new Error(`Invalid group name \"${t}\"`);return{token:R(t)}}if(/^\\\\k[<']/.test(t)){if(!/^\\\\k(?:<[^>]+>|'[^']+')$/.test(t))throw new Error(`Invalid group name \"${t}\"`);return{token:A(t)}}if(a===\"K\")return{token:I(\"keep\",t)};if(a===\"N\"||a===\"R\")return{token:k(\"newline\",t,{negate:a===\"N\"})};if(a===\"O\")return{token:k(\"any\",t)};if(a===\"X\")return{token:k(\"text_segment\",t)};const r=x(t,{inCharClass:!1});return Array.isArray(r)?{tokens:r}:{token:r}}if(s===\"(\"){if(a===\"*\")return{token:j(t)};if(t===\"(?{\")throw new Error(`Unsupported callout \"${t}\"`);if(t.startsWith(\"(?#\")){if(n[o]!==\")\")throw new Error('Unclosed comment group \"(?#\"');return{lastIndex:o+1}}if(/^\\(\\?[-imx]+[:)]$/.test(t))return{token:L(t,e)};if(e.pushModX(e.getCurrentModX()),e.numOpenGroups++,t===\"(\"&&!e.captureGroup||t===\"(?:\")return{token:f(\"group\",t)};if(t===\"(?>\")return{token:f(\"atomic\",t)};if(t===\"(?=\"||t===\"(?!\"||t===\"(?<=\"||t===\"(?<!\")return{token:f(t[2]===\"<\"?\"lookbehind\":\"lookahead\",t,{negate:t.endsWith(\"!\")})};if(t===\"(\"&&e.captureGroup||t.startsWith(\"(?<\")&&t.endsWith(\">\")||t.startsWith(\"(?'\")&&t.endsWith(\"'\"))return{token:f(\"capturing\",t,{...t!==\"(\"&&{name:t.slice(3,-1)}})};if(t.startsWith(\"(?~\")){if(t===\"(?~|\")throw new Error(`Unsupported absence function kind \"${t}\"`);return{token:f(\"absence_repeater\",t)}}throw t===\"(?(\"?new Error(`Unsupported conditional \"${t}\"`):new Error(`Invalid or unsupported group option \"${t}\"`)}if(t===\")\"){if(e.popModX(),e.numOpenGroups--,e.numOpenGroups<0)throw new Error('Unmatched \")\"');return{token:Q(t)}}if(e.getCurrentModX()){if(t===\"#\"){const r=n.indexOf(`\n`,o);return{lastIndex:r===-1?n.length:r}}if(/^\\s$/.test(t)){const r=/\\s+/y;return r.lastIndex=o,{lastIndex:r.exec(n)?r.lastIndex:o}}}if(t===\".\")return{token:k(\"dot\",t)};if(t===\"^\"||t===\"$\"){const r=e.singleline?{\"^\":p`\\A`,$:p`\\Z`}[t]:t;return{token:w(r,t)}}return t===\"|\"?{token:P(t)}:y.test(t)?{tokens:te(t)}:{token:d(h(t),t)}}function K(e,n,t){const o=[E(n[1]===\"^\",n)];let s=1,a;for(T.lastIndex=t;a=T.exec(e);){const r=a[0];if(r[0]===\"[\"&&r[1]!==\":\")s++,o.push(E(r[1]===\"^\",r));else if(r===\"]\"){if(o.at(-1).type===\"CharacterClassOpen\")o.push(d(93,r));else if(s--,o.push(z(r)),!s)break}else{const i=X(r);Array.isArray(i)?o.push(...i):o.push(i)}}return{tokens:o,lastIndex:T.lastIndex||e.length}}function X(e){if(e[0]===\"\\\\\")return x(e,{inCharClass:!0});if(e[0]===\"[\"){const n=/\\[:(?<negate>\\^?)(?<name>[a-z]+):\\]/.exec(e);if(!n||!G.has(n.groups.name))throw new Error(`Invalid POSIX class \"${e}\"`);return k(\"posix\",e,{value:n.groups.name,negate:!!n.groups.negate})}return e===\"-\"?U(e):e===\"&&\"?H(e):d(h(e),e)}function x(e,{inCharClass:n}){const t=e[1];if(t===\"c\"||t===\"C\")return Z(e);if(\"dDhHsSwW\".includes(t))return q(e);if(e.startsWith(p`\\o{`))throw new Error(`Incomplete, invalid, or unsupported octal code point \"${e}\"`);if(/^\\\\[pP]\\{/.test(e)){if(e.length===3)throw new Error(`Incomplete or invalid Unicode property \"${e}\"`);return V(e)}if(/^\\\\x[89A-Fa-f]\\p{AHex}/u.test(e))try{const o=e.split(/\\\\x/).slice(1).map(i=>parseInt(i,16)),s=new TextDecoder(\"utf-8\",{ignoreBOM:!0,fatal:!0}).decode(new Uint8Array(o)),a=new TextEncoder;return[...s].map(i=>{const l=[...a.encode(i)].map(c=>`\\\\x${c.toString(16)}`).join(\"\");return d(h(i),l)})}catch{throw new Error(`Multibyte code \"${e}\" incomplete or invalid in Oniguruma`)}if(t===\"u\"||t===\"x\")return d(J(e),e);if($.has(t))return d($.get(t),e);if(/\\d/.test(t))return W(n,e);if(e===\"\\\\\")throw new Error(p`Incomplete escape \"\\\"`);if(t===\"M\")throw new Error(`Unsupported meta \"${e}\"`);if([...e].length===2)return d(e.codePointAt(1),e);throw new Error(`Unexpected escape \"${e}\"`)}function P(e){return{type:\"Alternator\",raw:e}}function w(e,n){return{type:\"Assertion\",kind:e,raw:n}}function A(e){return{type:\"Backreference\",raw:e}}function d(e,n){return{type:\"Character\",value:e,raw:n}}function z(e){return{type:\"CharacterClassClose\",raw:e}}function U(e){return{type:\"CharacterClassHyphen\",raw:e}}function H(e){return{type:\"CharacterClassIntersector\",raw:e}}function E(e,n){return{type:\"CharacterClassOpen\",negate:e,raw:n}}function k(e,n,t={}){return{type:\"CharacterSet\",kind:e,...t,raw:n}}function I(e,n,t={}){return e===\"keep\"?{type:\"Directive\",kind:e,raw:n}:{type:\"Directive\",kind:e,flags:N(t.flags),raw:n}}function W(e,n){return{type:\"EscapedNumber\",inCharClass:e,raw:n}}function Q(e){return{type:\"GroupClose\",raw:e}}function f(e,n,t={}){return{type:\"GroupOpen\",kind:e,...t,raw:n}}function D(e,n,t,o){return{type:\"NamedCallout\",kind:e,tag:n,arguments:t,raw:o}}function _(e,n,t,o){return{type:\"Quantifier\",kind:e,min:n,max:t,raw:o}}function R(e){return{type:\"Subroutine\",raw:e}}const B=new Set([\"COUNT\",\"CMP\",\"ERROR\",\"FAIL\",\"MAX\",\"MISMATCH\",\"SKIP\",\"TOTAL_COUNT\"]),$=new Map([[\"a\",7],[\"b\",8],[\"e\",27],[\"f\",12],[\"n\",10],[\"r\",13],[\"t\",9],[\"v\",11]]);function Z(e){const n=e[1]===\"c\"?e[2]:e[3];if(!n||!/[A-Za-z]/.test(n))throw new Error(`Unsupported control character \"${e}\"`);return d(h(n.toUpperCase())-64,e)}function L(e,n){let{on:t,off:o}=/^\\(\\?(?<on>[imx]*)(?:-(?<off>[-imx]*))?/.exec(e).groups;o??=\"\";const s=(n.getCurrentModX()||t.includes(\"x\"))&&!o.includes(\"x\"),a=v(t),r=v(o),i={};if(a&&(i.enable=a),r&&(i.disable=r),e.endsWith(\")\"))return n.replaceCurrentModX(s),I(\"flags\",e,{flags:i});if(e.endsWith(\":\"))return n.pushModX(s),n.numOpenGroups++,f(\"group\",e,{...(a||r)&&{flags:i}});throw new Error(`Unexpected flag modifier \"${e}\"`)}function j(e){const n=/\\(\\*(?<name>[A-Za-z_]\\w*)?(?:\\[(?<tag>(?:[A-Za-z_]\\w*)?)\\])?(?:\\{(?<args>[^}]*)\\})?\\)/.exec(e);if(!n)throw new Error(`Incomplete or invalid named callout \"${e}\"`);const{name:t,tag:o,args:s}=n.groups;if(!t)throw new Error(`Invalid named callout \"${e}\"`);if(o===\"\")throw new Error(`Named callout tag with empty value not allowed \"${e}\"`);const a=s?s.split(\",\").filter(g=>g!==\"\").map(g=>/^[+-]?\\d+$/.test(g)?+g:g):[],[r,i,l]=a,c=B.has(t)?t.toLowerCase():\"custom\";switch(c){case\"fail\":case\"mismatch\":case\"skip\":if(a.length>0)throw new Error(`Named callout arguments not allowed \"${a}\"`);break;case\"error\":if(a.length>1)throw new Error(`Named callout allows only one argument \"${a}\"`);if(typeof r==\"string\")throw new Error(`Named callout argument must be a number \"${r}\"`);break;case\"max\":if(!a.length||a.length>2)throw new Error(`Named callout must have one or two arguments \"${a}\"`);if(typeof r==\"string\"&&!/^[A-Za-z_]\\w*$/.test(r))throw new Error(`Named callout argument one must be a tag or number \"${r}\"`);if(a.length===2&&(typeof i==\"number\"||!/^[<>X]$/.test(i)))throw new Error(`Named callout optional argument two must be '<', '>', or 'X' \"${i}\"`);break;case\"count\":case\"total_count\":if(a.length>1)throw new Error(`Named callout allows only one argument \"${a}\"`);if(a.length===1&&(typeof r==\"number\"||!/^[<>X]$/.test(r)))throw new Error(`Named callout optional argument must be '<', '>', or 'X' \"${r}\"`);break;case\"cmp\":if(a.length!==3)throw new Error(`Named callout must have three arguments \"${a}\"`);if(typeof r==\"string\"&&!/^[A-Za-z_]\\w*$/.test(r))throw new Error(`Named callout argument one must be a tag or number \"${r}\"`);if(typeof i==\"number\"||!/^(?:[<>!=]=|[<>])$/.test(i))throw new Error(`Named callout argument two must be '==', '!=', '>', '<', '>=', or '<=' \"${i}\"`);if(typeof l==\"string\"&&!/^[A-Za-z_]\\w*$/.test(l))throw new Error(`Named callout argument three must be a tag or number \"${l}\"`);break;case\"custom\":throw new Error(`Undefined callout name \"${t}\"`);default:throw new Error(`Unexpected named callout kind \"${c}\"`)}return D(c,o??null,s?.split(\",\")??null,e)}function O(e){let n=null,t,o;if(e[0]===\"{\"){const{minStr:s,maxStr:a}=/^\\{(?<minStr>\\d*)(?:,(?<maxStr>\\d*))?/.exec(e).groups,r=1e5;if(+s>r||a&&+a>r)throw new Error(\"Quantifier value unsupported in Oniguruma\");if(t=+s,o=a===void 0?+s:a===\"\"?1/0:+a,t>o&&(n=\"possessive\",[t,o]=[o,t]),e.endsWith(\"?\")){if(n===\"possessive\")throw new Error('Unsupported possessive interval quantifier chain with \"?\"');n=\"lazy\"}else n||(n=\"greedy\")}else t=e[0]===\"+\"?1:0,o=e[0]===\"?\"?1:1/0,n=e[1]===\"+\"?\"possessive\":e[1]===\"?\"?\"lazy\":\"greedy\";return _(n,t,o,e)}function q(e){const n=e[1].toLowerCase();return k({d:\"digit\",h:\"hex\",s:\"space\",w:\"word\"}[n],e,{negate:e[1]!==n})}function V(e){const{p:n,neg:t,value:o}=/^\\\\(?<p>[pP])\\{(?<neg>\\^?)(?<value>[^}]+)/.exec(e).groups;return k(\"property\",e,{value:o,negate:n===\"P\"&&!t||n===\"p\"&&!!t})}function v(e){const n={};return e.includes(\"i\")&&(n.ignoreCase=!0),e.includes(\"m\")&&(n.dotAll=!0),e.includes(\"x\")&&(n.extended=!0),Object.keys(n).length?n:null}function Y(e){const n={ignoreCase:!1,dotAll:!1,extended:!1,digitIsAscii:!1,posixIsAscii:!1,spaceIsAscii:!1,wordIsAscii:!1,textSegmentMode:null};for(let t=0;t<e.length;t++){const o=e[t];if(!\"imxDPSWy\".includes(o))throw new Error(`Invalid flag \"${o}\"`);if(o===\"y\"){if(!/^y{[gw]}/.test(e.slice(t)))throw new Error('Invalid or unspecified flag \"y\" mode');n.textSegmentMode=e[t+2]===\"g\"?\"grapheme\":\"word\",t+=3;continue}n[{i:\"ignoreCase\",m:\"dotAll\",x:\"extended\",D:\"digitIsAscii\",P:\"posixIsAscii\",S:\"spaceIsAscii\",W:\"wordIsAscii\"}[o]]=!0}return n}function J(e){if(/^(?:\\\\u(?!\\p{AHex}{4})|\\\\x(?!\\p{AHex}{1,2}|\\{\\p{AHex}{1,8}\\}))/u.test(e))throw new Error(`Incomplete or invalid escape \"${e}\"`);const n=e[2]===\"{\"?/^\\\\x\\{\\s*(?<hex>\\p{AHex}+)/u.exec(e).groups.hex:e.slice(2);return parseInt(n,16)}function ee(e,n){const{raw:t,inCharClass:o}=e,s=t.slice(1);if(!o&&(s!==\"0\"&&s.length===1||s[0]!==\"0\"&&+s<=n))return[A(t)];const a=[],r=s.match(/^[0-7]+|\\d/g);for(let i=0;i<r.length;i++){const l=r[i];let c;if(i===0&&l!==\"8\"&&l!==\"9\"){if(c=parseInt(l,8),c>127)throw new Error(p`Octal encoded byte above 177 unsupported \"${t}\"`)}else c=h(l);a.push(d(c,(i===0?\"\\\\\":\"\")+l))}return a}function te(e){const n=[],t=new RegExp(y,\"gy\");let o;for(;o=t.exec(e);){const s=o[0];if(s[0]===\"{\"){const a=/^\\{(?<min>\\d+),(?<max>\\d+)\\}\\??$/.exec(s);if(a){const{min:r,max:i}=a.groups;if(+r>+i&&s.endsWith(\"?\")){t.lastIndex--,n.push(O(s.slice(0,-1)));continue}}}n.push(O(s))}return n}export{M as tokenize};\n//# sourceMappingURL=tokenize.js.map\n","\"use strict\";function o(e,t){if(!Array.isArray(e.body))throw new Error(\"Expected node with body array\");if(e.body.length!==1)return!1;const r=e.body[0];return!t||Object.keys(t).every(n=>t[n]===r[n])}function a(e){return!(!i.has(e.type)||e.type===\"AbsenceFunction\"&&e.kind!==\"repeater\")}const i=new Set([\"AbsenceFunction\",\"CapturingGroup\",\"Group\",\"LookaroundAssertion\",\"Regex\"]);function s(e){return y.has(e.type)}const y=new Set([\"AbsenceFunction\",\"Backreference\",\"CapturingGroup\",\"Character\",\"CharacterClass\",\"CharacterSet\",\"Group\",\"Quantifier\",\"Subroutine\"]);export{o as hasOnlyChild,a as isAlternativeContainer,s as isQuantifiable};\n//# sourceMappingURL=node-utils.js.map\n","\"use strict\";import{tokenize as q}from\"../tokenizer/tokenize.js\";import{cpOf as H,getOrInsert as Z,PosixClassNames as x,r as y,throwIfNullish as g}from\"../utils.js\";import{hasOnlyChild as Y,isAlternativeContainer as j,isQuantifiable as S}from\"./node-utils.js\";function J(e,r={}){const n={flags:\"\",normalizeUnknownPropertyNames:!1,skipBackrefValidation:!1,skipLookbehindValidation:!1,skipPropertyNameValidation:!1,unicodePropertyMap:null,...r,rules:{captureGroup:!1,singleline:!1,...r.rules}},t=q(e,{flags:n.flags,rules:{captureGroup:n.rules.captureGroup,singleline:n.rules.singleline}}),s=(p,N)=>{const u=t.tokens[o.nextIndex];switch(o.parent=p,o.nextIndex++,u.type){case\"Alternator\":return b();case\"Assertion\":return W(u);case\"Backreference\":return X(u,o);case\"Character\":return m(u.value,{useLastValid:!!N.isCheckingRangeEnd});case\"CharacterClassHyphen\":return ee(u,o,N);case\"CharacterClassOpen\":return re(u,o,N);case\"CharacterSet\":return ne(u,o);case\"Directive\":return I(u.kind,{flags:u.flags});case\"GroupOpen\":return te(u,o,N);case\"NamedCallout\":return U(u.kind,u.tag,u.arguments);case\"Quantifier\":return oe(u,o);case\"Subroutine\":return ae(u,o);default:throw new Error(`Unexpected token type \"${u.type}\"`)}},o={capturingGroups:[],hasNumberedRef:!1,namedGroupsByName:new Map,nextIndex:0,normalizeUnknownPropertyNames:n.normalizeUnknownPropertyNames,parent:null,skipBackrefValidation:n.skipBackrefValidation,skipLookbehindValidation:n.skipLookbehindValidation,skipPropertyNameValidation:n.skipPropertyNameValidation,subroutines:[],tokens:t.tokens,unicodePropertyMap:n.unicodePropertyMap,walk:s},i=B(T(t.flags));let d=i.body[0];for(;o.nextIndex<t.tokens.length;){const p=s(d,{});p.type===\"Alternative\"?(i.body.push(p),d=p):d.body.push(p)}const{capturingGroups:a,hasNumberedRef:l,namedGroupsByName:c,subroutines:f}=o;if(l&&c.size&&!n.rules.captureGroup)throw new Error(\"Numbered backref/subroutine not allowed when using named capture\");for(const{ref:p}of f)if(typeof p==\"number\"){if(p>a.length)throw new Error(\"Subroutine uses a group number that's not defined\");p&&(a[p-1].isSubroutined=!0)}else if(c.has(p)){if(c.get(p).length>1)throw new Error(y`Subroutine uses a duplicate group name \"\\g<${p}>\"`);c.get(p)[0].isSubroutined=!0}else throw new Error(y`Subroutine uses a group name that's not defined \"\\g<${p}>\"`);return i}function W({kind:e}){return F(g({\"^\":\"line_start\",$:\"line_end\",\"\\\\A\":\"string_start\",\"\\\\b\":\"word_boundary\",\"\\\\B\":\"word_boundary\",\"\\\\G\":\"search_start\",\"\\\\y\":\"text_segment_boundary\",\"\\\\Y\":\"text_segment_boundary\",\"\\\\z\":\"string_end\",\"\\\\Z\":\"string_end_newline\"}[e],`Unexpected assertion kind \"${e}\"`),{negate:e===y`\\B`||e===y`\\Y`})}function X({raw:e},r){const n=/^\\\\k[<']/.test(e),t=n?e.slice(3,-1):e.slice(1),s=(o,i=!1)=>{const d=r.capturingGroups.length;let a=!1;if(o>d)if(r.skipBackrefValidation)a=!0;else throw new Error(`Not enough capturing groups defined to the left \"${e}\"`);return r.hasNumberedRef=!0,k(i?d+1-o:o,{orphan:a})};if(n){const o=/^(?<sign>-?)0*(?<num>[1-9]\\d*)$/.exec(t);if(o)return s(+o.groups.num,!!o.groups.sign);if(/[-+]/.test(t))throw new Error(`Invalid backref name \"${e}\"`);if(!r.namedGroupsByName.has(t))throw new Error(`Group name not defined to the left \"${e}\"`);return k(t)}return s(+t)}function ee(e,r,n){const{tokens:t,walk:s}=r,o=r.parent,i=o.body.at(-1),d=t[r.nextIndex];if(!n.isCheckingRangeEnd&&i&&i.type!==\"CharacterClass\"&&i.type!==\"CharacterClassRange\"&&d&&d.type!==\"CharacterClassOpen\"&&d.type!==\"CharacterClassClose\"&&d.type!==\"CharacterClassIntersector\"){const a=s(o,{...n,isCheckingRangeEnd:!0});if(i.type===\"Character\"&&a.type===\"Character\")return o.body.pop(),L(i,a);throw new Error(\"Invalid character class range\")}return m(H(\"-\"))}function re({negate:e},r,n){const{tokens:t,walk:s}=r,o=t[r.nextIndex],i=[C()];let d=z(o);for(;d.type!==\"CharacterClassClose\";){if(d.type===\"CharacterClassIntersector\")i.push(C()),r.nextIndex++;else{const l=i.at(-1);l.body.push(s(l,n))}d=z(t[r.nextIndex],o)}const a=C({negate:e});return i.length===1?a.body=i[0].body:(a.kind=\"intersection\",a.body=i.map(l=>l.body.length===1?l.body[0]:l)),r.nextIndex++,a}function ne({kind:e,negate:r,value:n},t){const{normalizeUnknownPropertyNames:s,skipPropertyNameValidation:o,unicodePropertyMap:i}=t;if(e===\"property\"){const d=w(n);if(x.has(d)&&!i?.has(d))e=\"posix\",n=d;else return Q(n,{negate:r,normalizeUnknownPropertyNames:s,skipPropertyNameValidation:o,unicodePropertyMap:i})}return e===\"posix\"?R(n,{negate:r}):E(e,{negate:r})}function te(e,r,n){const{tokens:t,capturingGroups:s,namedGroupsByName:o,skipLookbehindValidation:i,walk:d}=r,a=ie(e),l=a.type===\"AbsenceFunction\",c=$(a),f=c&&a.negate;if(a.type===\"CapturingGroup\"&&(s.push(a),a.name&&Z(o,a.name,[]).push(a)),l&&n.isInAbsenceFunction)throw new Error(\"Nested absence function not supported by Oniguruma\");let p=D(t[r.nextIndex]);for(;p.type!==\"GroupClose\";){if(p.type===\"Alternator\")a.body.push(b()),r.nextIndex++;else{const N=a.body.at(-1),u=d(N,{...n,isInAbsenceFunction:n.isInAbsenceFunction||l,isInLookbehind:n.isInLookbehind||c,isInNegLookbehind:n.isInNegLookbehind||f});if(N.body.push(u),(c||n.isInLookbehind)&&!i){const v=\"Lookbehind includes a pattern not allowed by Oniguruma\";if(f||n.isInNegLookbehind){if(M(u)||u.type===\"CapturingGroup\")throw new Error(v)}else if(M(u)||$(u)&&u.negate)throw new Error(v)}}p=D(t[r.nextIndex])}return r.nextIndex++,a}function oe({kind:e,min:r,max:n},t){const s=t.parent,o=s.body.at(-1);if(!o||!S(o))throw new Error(\"Quantifier requires a repeatable token\");const i=_(e,r,n,o);return s.body.pop(),i}function ae({raw:e},r){const{capturingGroups:n,subroutines:t}=r;let s=e.slice(3,-1);const o=/^(?<sign>[-+]?)0*(?<num>[1-9]\\d*)$/.exec(s);if(o){const d=+o.groups.num,a=n.length;if(r.hasNumberedRef=!0,s={\"\":d,\"+\":a+d,\"-\":a+1-d}[o.groups.sign],s<1)throw new Error(\"Invalid subroutine number\")}else s===\"0\"&&(s=0);const i=O(s);return t.push(i),i}function G(e,r){if(e!==\"repeater\")throw new Error(`Unexpected absence function kind \"${e}\"`);return{type:\"AbsenceFunction\",kind:e,body:h(r?.body)}}function b(e){return{type:\"Alternative\",body:V(e?.body)}}function F(e,r){const n={type:\"Assertion\",kind:e};return(e===\"word_boundary\"||e===\"text_segment_boundary\")&&(n.negate=!!r?.negate),n}function k(e,r){const n=!!r?.orphan;return{type:\"Backreference\",ref:e,...n&&{orphan:n}}}function P(e,r){const n={name:void 0,isSubroutined:!1,...r};if(n.name!==void 0&&!se(n.name))throw new Error(`Group name \"${n.name}\" invalid in Oniguruma`);return{type:\"CapturingGroup\",number:e,...n.name&&{name:n.name},...n.isSubroutined&&{isSubroutined:n.isSubroutined},body:h(r?.body)}}function m(e,r){const n={useLastValid:!1,...r};if(e>1114111){const t=e.toString(16);if(n.useLastValid)e=1114111;else throw e>1310719?new Error(`Invalid code point out of range \"\\\\x{${t}}\"`):new Error(`Invalid code point out of range in JS \"\\\\x{${t}}\"`)}return{type:\"Character\",value:e}}function C(e){const r={kind:\"union\",negate:!1,...e};return{type:\"CharacterClass\",kind:r.kind,negate:r.negate,body:V(e?.body)}}function L(e,r){if(r.value<e.value)throw new Error(\"Character class range out of order\");return{type:\"CharacterClassRange\",min:e,max:r}}function E(e,r){const n=!!r?.negate,t={type:\"CharacterSet\",kind:e};return(e===\"digit\"||e===\"hex\"||e===\"newline\"||e===\"space\"||e===\"word\")&&(t.negate=n),(e===\"text_segment\"||e===\"newline\"&&!n)&&(t.variableLength=!0),t}function I(e,r={}){if(e===\"keep\")return{type:\"Directive\",kind:e};if(e===\"flags\")return{type:\"Directive\",kind:e,flags:g(r.flags)};throw new Error(`Unexpected directive kind \"${e}\"`)}function T(e){return{type:\"Flags\",...e}}function A(e){const r=e?.atomic,n=e?.flags;if(r&&n)throw new Error(\"Atomic group cannot have flags\");return{type:\"Group\",...r&&{atomic:r},...n&&{flags:n},body:h(e?.body)}}function K(e){const r={behind:!1,negate:!1,...e};return{type:\"LookaroundAssertion\",kind:r.behind?\"lookbehind\":\"lookahead\",negate:r.negate,body:h(e?.body)}}function U(e,r,n){return{type:\"NamedCallout\",kind:e,tag:r,arguments:n}}function R(e,r){const n=!!r?.negate;if(!x.has(e))throw new Error(`Invalid POSIX class \"${e}\"`);return{type:\"CharacterSet\",kind:\"posix\",value:e,negate:n}}function _(e,r,n,t){if(r>n)throw new Error(\"Invalid reversed quantifier range\");return{type:\"Quantifier\",kind:e,min:r,max:n,body:t}}function B(e,r){return{type:\"Regex\",body:h(r?.body),flags:e}}function O(e){return{type:\"Subroutine\",ref:e}}function Q(e,r){const n={negate:!1,normalizeUnknownPropertyNames:!1,skipPropertyNameValidation:!1,unicodePropertyMap:null,...r};let t=n.unicodePropertyMap?.get(w(e));if(!t){if(n.normalizeUnknownPropertyNames)t=de(e);else if(n.unicodePropertyMap&&!n.skipPropertyNameValidation)throw new Error(y`Invalid Unicode property \"\\p{${e}}\"`)}return{type:\"CharacterSet\",kind:\"property\",value:t??e,negate:n.negate}}function ie({flags:e,kind:r,name:n,negate:t,number:s}){switch(r){case\"absence_repeater\":return G(\"repeater\");case\"atomic\":return A({atomic:!0});case\"capturing\":return P(s,{name:n});case\"group\":return A({flags:e});case\"lookahead\":case\"lookbehind\":return K({behind:r===\"lookbehind\",negate:t});default:throw new Error(`Unexpected group kind \"${r}\"`)}}function h(e){if(e===void 0)e=[b()];else if(!Array.isArray(e)||!e.length||!e.every(r=>r.type===\"Alternative\"))throw new Error(\"Invalid body; expected array of one or more Alternative nodes\");return e}function V(e){if(e===void 0)e=[];else if(!Array.isArray(e)||!e.every(r=>!!r.type))throw new Error(\"Invalid body; expected array of nodes\");return e}function M(e){return e.type===\"LookaroundAssertion\"&&e.kind===\"lookahead\"}function $(e){return e.type===\"LookaroundAssertion\"&&e.kind===\"lookbehind\"}function se(e){return/^[\\p{Alpha}\\p{Pc}][^)]*$/u.test(e)}function de(e){return e.trim().replace(/[- _]+/g,\"_\").replace(/[A-Z][a-z]+(?=[A-Z])/g,\"$&_\").replace(/[A-Za-z]+/g,r=>r[0].toUpperCase()+r.slice(1).toLowerCase())}function w(e){return e.replace(/[- _]+/g,\"\").toLowerCase()}function z(e,r){return g(e,`${r?.type===\"Character\"&&r.value===93?\"Empty\":\"Unclosed\"} character class`)}function D(e){return g(e,\"Unclosed group\")}export{G as createAbsenceFunction,b as createAlternative,F as createAssertion,k as createBackreference,P as createCapturingGroup,m as createCharacter,C as createCharacterClass,L as createCharacterClassRange,E as createCharacterSet,I as createDirective,T as createFlags,A as createGroup,K as createLookaroundAssertion,U as createNamedCallout,R as createPosixClass,_ as createQuantifier,B as createRegex,O as createSubroutine,Q as createUnicodeProperty,Y as hasOnlyChild,j as isAlternativeContainer,S as isQuantifiable,J as parse,w as slug};\n//# sourceMappingURL=parse.js.map\n","\"use strict\";import{throwIfNullish as A}from\"../utils.js\";function S(a,v,N=null){function u(e,s){for(let t=0;t<e.length;t++){const r=n(e[t],s,t,e);t=Math.max(-1,t+r)}}function n(e,s=null,t=null,r=null){let i=0,c=!1;const d={node:e,parent:s,key:t,container:r,root:a,remove(){f(r).splice(Math.max(0,l(t)+i),1),i--,c=!0},removeAllNextSiblings(){return f(r).splice(l(t)+1)},removeAllPrevSiblings(){const o=l(t)+i;return i-=o,f(r).splice(0,Math.max(0,o))},replaceWith(o,y={}){const b=!!y.traverse;r?r[Math.max(0,l(t)+i)]=o:A(s,\"Can't replace root node\")[t]=o,b&&n(o,s,t,r),c=!0},replaceWithMultiple(o,y={}){const b=!!y.traverse;if(f(r).splice(Math.max(0,l(t)+i),1,...o),i+=o.length-1,b){let g=0;for(let x=0;x<o.length;x++)g+=n(o[x],s,l(t)+x+g,r)}c=!0},skip(){c=!0}},{type:m}=e,h=v[\"*\"],p=v[m],R=typeof h==\"function\"?h:h?.enter,P=typeof p==\"function\"?p:p?.enter;if(R?.(d,N),P?.(d,N),!c)switch(m){case\"AbsenceFunction\":case\"CapturingGroup\":case\"Group\":u(e.body,e);break;case\"Alternative\":case\"CharacterClass\":u(e.body,e);break;case\"Assertion\":case\"Backreference\":case\"Character\":case\"CharacterSet\":case\"Directive\":case\"Flags\":case\"NamedCallout\":case\"Subroutine\":break;case\"CharacterClassRange\":n(e.min,e,\"min\"),n(e.max,e,\"max\");break;case\"LookaroundAssertion\":u(e.body,e);break;case\"Quantifier\":n(e.body,e,\"body\");break;case\"Regex\":u(e.body,e),n(e.flags,e,\"flags\");break;default:throw new Error(`Unexpected node type \"${m}\"`)}return p?.exit?.(d,N),h?.exit?.(d,N),i}return n(a),a}function f(a){if(!Array.isArray(a))throw new Error(\"Container expected\");return a}function l(a){if(typeof a!=\"number\")throw new Error(\"Numeric key expected\");return a}export{S as traverse};\n//# sourceMappingURL=traverse.js.map\n","// Separating some utils for improved tree shaking of the `./internals` export\n\nconst noncapturingDelim = String.raw`\\(\\?(?:[:=!>A-Za-z\\-]|<[=!]|\\(DEFINE\\))`;\n\n/**\nUpdates the array in place by incrementing each value greater than or equal to the threshold.\n@param {Array<number>} arr\n@param {number} threshold\n*/\nfunction incrementIfAtLeast(arr, threshold) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] >= threshold) {\n arr[i]++;\n }\n }\n}\n\n/**\n@param {string} str\n@param {number} pos\n@param {string} oldValue\n@param {string} newValue\n@returns {string}\n*/\nfunction spliceStr(str, pos, oldValue, newValue) {\n return str.slice(0, pos) + newValue + str.slice(pos + oldValue.length);\n}\n\nexport {\n incrementIfAtLeast,\n noncapturingDelim,\n spliceStr,\n};\n","// Constant properties for tracking regex syntax context\nexport const Context = Object.freeze({\n DEFAULT: 'DEFAULT',\n CHAR_CLASS: 'CHAR_CLASS',\n});\n\n/**\nReplaces all unescaped instances of a regex pattern in the given context, using a replacement\nstring or callback.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {string | (match: RegExpExecArray, details: {\n context: 'DEFAULT' | 'CHAR_CLASS';\n negated: boolean;\n}) => string} replacement\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n@returns {string} Updated expression\n@example\nconst str = '.\\\\.\\\\\\\\.[[\\\\.].].';\nreplaceUnescaped(str, '\\\\.', '@');\n// → '@\\\\.\\\\\\\\@[[\\\\.]@]@'\nreplaceUnescaped(str, '\\\\.', '@', Context.DEFAULT);\n// → '@\\\\.\\\\\\\\@[[\\\\.].]@'\nreplaceUnescaped(str, '\\\\.', '@', Context.CHAR_CLASS);\n// → '.\\\\.\\\\\\\\.[[\\\\.]@].'\n*/\nexport function replaceUnescaped(expression, needle, replacement, context) {\n const re = new RegExp(String.raw`${needle}|(?<$skip>\\[\\^?|\\\\?.)`, 'gsu');\n const negated = [false];\n let numCharClassesOpen = 0;\n let result = '';\n for (const match of expression.matchAll(re)) {\n const {0: m, groups: {$skip}} = match;\n if (!$skip && (!context || (context === Context.DEFAULT) === !numCharClassesOpen)) {\n if (replacement instanceof Function) {\n result += replacement(match, {\n context: numCharClassesOpen ? Context.CHAR_CLASS : Context.DEFAULT,\n negated: negated[negated.length - 1],\n });\n } else {\n result += replacement;\n }\n continue;\n }\n if (m[0] === '[') {\n numCharClassesOpen++;\n negated.push(m[1] === '^');\n } else if (m === ']' && numCharClassesOpen) {\n numCharClassesOpen--;\n negated.pop();\n }\n result += m;\n }\n return result;\n}\n\n/**\nRuns a callback for each unescaped instance of a regex pattern in the given context.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {(match: RegExpExecArray, details: {\n context: 'DEFAULT' | 'CHAR_CLASS';\n negated: boolean;\n}) => void} callback\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n*/\nexport function forEachUnescaped(expression, needle, callback, context) {\n // Do this the easy way\n replaceUnescaped(expression, needle, callback, context);\n}\n\n/**\nReturns a match object for the first unescaped instance of a regex pattern in the given context, or\n`null`.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {number} [pos] Offset to start the search\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n@returns {RegExpExecArray | null}\n*/\nexport function execUnescaped(expression, needle, pos = 0, context) {\n // Quick partial test; avoid the loop if not needed\n if (!(new RegExp(needle, 'su').test(expression))) {\n return null;\n }\n const re = new RegExp(`${needle}|(?<$skip>\\\\\\\\?.)`, 'gsu');\n re.lastIndex = pos;\n let numCharClassesOpen = 0;\n let match;\n while (match = re.exec(expression)) {\n const {0: m, groups: {$skip}} = match;\n if (!$skip && (!context || (context === Context.DEFAULT) === !numCharClassesOpen)) {\n return match;\n }\n if (m === '[') {\n numCharClassesOpen++;\n } else if (m === ']' && numCharClassesOpen) {\n numCharClassesOpen--;\n }\n // Avoid an infinite loop on zero-length matches\n if (re.lastIndex == match.index) {\n re.lastIndex++;\n }\n }\n return null;\n}\n\n/**\nChecks whether an unescaped instance of a regex pattern appears in the given context.\n\nDoesn't skip over complete multicharacter tokens (only `\\` plus its folowing char) so must be used\nwith knowledge of what's safe to do given regex syntax. Assumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {string} needle Search as a regex pattern, with flags `su` applied\n@param {'DEFAULT' | 'CHAR_CLASS'} [context] All contexts if not specified\n@returns {boolean} Whether the pattern was found\n*/\nexport function hasUnescaped(expression, needle, context) {\n // Do this the easy way\n return !!execUnescaped(expression, needle, 0, context);\n}\n\n/**\nExtracts the full contents of a group (subpattern) from the given expression, accounting for\nescaped characters, nested groups, and character classes. The group is identified by the position\nwhere its contents start (the string index just after the group's opening delimiter). Returns the\nrest of the string if the group is unclosed.\n\nAssumes UnicodeSets-mode syntax.\n@param {string} expression Search target\n@param {number} contentsStartPos\n@returns {string}\n*/\nexport function getGroupContents(expression, contentsStartPos) {\n const token = /\\\\?./gsu;\n token.lastIndex = contentsStartPos;\n let contentsEndPos = expression.length;\n let numCharClassesOpen = 0;\n // Starting search within an open group, after the group's opening\n let numGroupsOpen = 1;\n let match;\n while (match = token.exec(expression)) {\n const [m] = match;\n if (m === '[') {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n if (m === '(') {\n numGroupsOpen++;\n } else if (m === ')') {\n numGroupsOpen--;\n if (!numGroupsOpen) {\n contentsEndPos = match.index;\n break;\n }\n }\n } else if (m === ']') {\n numCharClassesOpen--;\n }\n }\n return expression.slice(contentsStartPos, contentsEndPos);\n}\n","import {incrementIfAtLeast, noncapturingDelim, spliceStr} from './utils-internals.js';\nimport {Context, replaceUnescaped} from 'regex-utilities';\n\nconst atomicPluginToken = new RegExp(String.raw`(?<noncapturingStart>${noncapturingDelim})|(?<capturingStart>\\((?:\\?<[^>]+>)?)|\\\\?.`, 'gsu');\n\n/**\nApply transformations for atomic groups: `(?>…)`.\n@param {string} expression\n@param {import('./regex.js').PluginData} [data]\n@returns {Required<import('./regex.js').PluginResult>}\n*/\nfunction atomic(expression, data) {\n const hiddenCaptures = data?.hiddenCaptures ?? [];\n // Capture transfer is used by <github.com/slevithan/oniguruma-to-es>\n let captureTransfers = data?.captureTransfers ?? new Map();\n if (!/\\(\\?>/.test(expression)) {\n return {\n pattern: expression,\n captureTransfers,\n hiddenCaptures,\n };\n }\n\n const aGDelim = '(?>';\n const emulatedAGDelim = '(?:(?=(';\n const captureNumMap = [0];\n const addedHiddenCaptures = [];\n let numCapturesBeforeAG = 0;\n let numAGs = 0;\n let aGPos = NaN;\n let hasProcessedAG;\n do {\n hasProcessedAG = false;\n let numCharClassesOpen = 0;\n let numGroupsOpenInAG = 0;\n let inAG = false;\n let match;\n atomicPluginToken.lastIndex = Number.isNaN(aGPos) ? 0 : aGPos + emulatedAGDelim.length;\n while (match = atomicPluginToken.exec(expression)) {\n const {0: m, index, groups: {capturingStart, noncapturingStart}} = match;\n if (m === '[') {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n\n if (m === aGDelim && !inAG) {\n aGPos = index;\n inAG = true;\n } else if (inAG && noncapturingStart) {\n numGroupsOpenInAG++;\n } else if (capturingStart) {\n if (inAG) {\n numGroupsOpenInAG++;\n } else {\n numCapturesBeforeAG++;\n captureNumMap.push(numCapturesBeforeAG + numAGs);\n }\n } else if (m === ')' && inAG) {\n if (!numGroupsOpenInAG) {\n numAGs++;\n const addedCaptureNum = numCapturesBeforeAG + numAGs;\n // Replace `expression` and use `<$$N>` as a temporary wrapper for the backref so it\n // can avoid backref renumbering afterward. Wrap the whole substitution (including the\n // lookahead and following backref) in a noncapturing group to handle following\n // quantifiers and literal digits\n expression = `${expression.slice(0, aGPos)}${emulatedAGDelim}${\n expression.slice(aGPos + aGDelim.length, index)\n }))<$$${addedCaptureNum}>)${expression.slice(index + 1)}`;\n hasProcessedAG = true;\n addedHiddenCaptures.push(addedCaptureNum);\n incrementIfAtLeast(hiddenCaptures, addedCaptureNum);\n if (captureTransfers.size) {\n const newCaptureTransfers = new Map();\n captureTransfers.forEach((from, to) => {\n newCaptureTransfers.set(\n to >= addedCaptureNum ? to + 1 : to,\n from.map(f => f >= addedCaptureNum ? f + 1 : f)\n );\n });\n captureTransfers = newCaptureTransfers;\n }\n break;\n }\n numGroupsOpenInAG--;\n }\n\n } else if (m === ']') {\n numCharClassesOpen--;\n }\n }\n // Start over from the beginning of the atomic group's contents, in case the processed group\n // contains additional atomic groups\n } while (hasProcessedAG);\n\n hiddenCaptures.push(...addedHiddenCaptures);\n\n // Second pass to adjust numbered backrefs\n expression = replaceUnescaped(\n expression,\n String.raw`\\\\(?<backrefNum>[1-9]\\d*)|<\\$\\$(?<wrappedBackrefNum>\\d+)>`,\n ({0: m, groups: {backrefNum, wrappedBackrefNum}}) => {\n if (backrefNum) {\n const bNum = +backrefNum;\n if (bNum > captureNumMap.length - 1) {\n throw new Error(`Backref \"${m}\" greater than number of captures`);\n }\n return `\\\\${captureNumMap[bNum]}`;\n }\n return `\\\\${wrappedBackrefNum}`;\n },\n Context.DEFAULT\n );\n\n return {\n pattern: expression,\n captureTransfers,\n hiddenCaptures,\n };\n}\n\nconst baseQuantifier = String.raw`(?:[?*+]|\\{\\d+(?:,\\d*)?\\})`;\n// Complete tokenizer for base syntax; doesn't (need to) know about character-class-only syntax\nconst possessivePluginToken = new RegExp(String.raw`\n\\\\(?: \\d+\n | c[A-Za-z]\n | [gk]<[^>]+>\n | [pPu]\\{[^\\}]+\\}\n | u[A-Fa-f\\d]{4}\n | x[A-Fa-f\\d]{2}\n )\n| \\((?: \\? (?: [:=!>]\n | <(?:[=!]|[^>]+>)\n | [A-Za-z\\-]+:\n | \\(DEFINE\\)\n ))?\n| (?<qBase>${baseQuantifier})(?<qMod>[?+]?)(?<invalidQ>[?*+\\{]?)\n| \\\\?.\n`.replace(/\\s+/g, ''), 'gsu');\n\n/**\nTransform posessive quantifiers into atomic groups. The posessessive quantifiers are:\n`?+`, `*+`, `++`, `{N}+`, `{N,}+`, `{N,N}+`.\nThis follows Java, PCRE, Perl, and Python.\nPossessive quantifiers in Oniguruma and Onigmo are only: `?+`, `*+`, `++`.\n@param {string} expression\n@returns {import('./regex.js').PluginResult}\n*/\nfunction possessive(expression) {\n if (!(new RegExp(`${baseQuantifier}\\\\+`).test(expression))) {\n return {\n pattern: expression,\n };\n }\n\n const openGroupIndices = [];\n let lastGroupIndex = null;\n let lastCharClassIndex = null;\n let lastToken = '';\n let numCharClassesOpen = 0;\n let match;\n possessivePluginToken.lastIndex = 0;\n while (match = possessivePluginToken.exec(expression)) {\n const {0: m, index, groups: {qBase, qMod, invalidQ}} = match;\n if (m === '[') {\n if (!numCharClassesOpen) {\n lastCharClassIndex = index;\n }\n numCharClassesOpen++;\n } else if (m === ']') {\n if (numCharClassesOpen) {\n numCharClassesOpen--;\n // Unmatched `]`\n } else {\n lastCharClassIndex = null;\n }\n } else if (!numCharClassesOpen) {\n\n if (qMod === '+' && lastToken && !lastToken.startsWith('(')) {\n // Invalid following quantifier would become valid via the wrapping group\n if (invalidQ) {\n throw new Error(`Invalid quantifier \"${m}\"`);\n }\n let charsAdded = -1; // -1 for removed trailing `+`\n // Possessivizing fixed repetition quantifiers like `{2}` does't change their behavior, so\n // avoid doing so (convert them to greedy)\n if (/^\\{\\d+\\}$/.test(qBase)) {\n expression = spliceStr(expression, index + qBase.length, qMod, '');\n } else {\n if (lastToken === ')' || lastToken === ']') {\n const nodeIndex = lastToken === ')' ? lastGroupIndex : lastCharClassIndex;\n // Unmatched `)` would break out of the wrapping group and mess with handling.\n // Unmatched `]` wouldn't be a problem, but it's unnecessary to have dedicated support\n // for unescaped `]++` since this won't work with flag u or v anyway\n if (nodeIndex === null) {\n throw new Error(`Invalid unmatched \"${lastToken}\"`);\n }\n expression = `${expression.slice(0, nodeIndex)}(?>${expression.slice(nodeIndex, index)}${qBase})${expression.slice(index + m.length)}`;\n } else {\n expression = `${expression.slice(0, index - lastToken.length)}(?>${lastToken}${qBase})${expression.slice(index + m.length)}`;\n }\n charsAdded += 4; // `(?>)`\n }\n possessivePluginToken.lastIndex += charsAdded;\n } else if (m[0] === '(') {\n openGroupIndices.push(index);\n } else if (m === ')') {\n lastGroupIndex = openGroupIndices.length ? openGroupIndices.pop() : null;\n }\n\n }\n lastToken = m;\n }\n\n return {\n pattern: expression,\n };\n}\n\nexport {\n atomic,\n possessive,\n};\n","/**\nWorks the same as JavaScript's native `RegExp` constructor in all contexts, but automatically\nadjusts subpattern matches and indices (with flag `d`) to account for captures added as part of\nemulating extended syntax.\n*/\nclass RegExpSubclass extends RegExp {\n // Avoid `#private` to allow for subclassing\n /**\n @private\n @type {Map<number, {\n hidden: true;\n }>}\n */\n _captureMap;\n /**\n @overload\n @param {string} expression\n @param {string} [flags]\n @param {{\n hiddenCaptures?: Array<number>;\n }} [options]\n */\n /**\n @overload\n @param {RegExpSubclass} expression\n @param {string} [flags]\n */\n constructor(expression, flags, options) {\n // Argument `options` isn't provided when regexes are copied via `new RegExpSubclass(regexp)`,\n // including as part of the internal handling of string methods `matchAll` and `split`\n if (expression instanceof RegExp) {\n if (options) {\n throw new Error('Cannot provide options when copying a regexp');\n }\n super(expression, flags);\n if (expression instanceof RegExpSubclass) {\n this._captureMap = expression._captureMap;\n } else {\n this._captureMap = new Map();\n }\n } else {\n super(expression, flags);\n const hiddenCaptures = options?.hiddenCaptures ?? [];\n this._captureMap = createCaptureMap(hiddenCaptures);\n }\n }\n /**\n Called internally by all String/RegExp methods that use regexes.\n @override\n @param {string} str\n @returns {RegExpExecArray | null}\n */\n exec(str) {\n const match = super.exec(str);\n if (!match || !this._captureMap.size) {\n return match;\n }\n const matchCopy = [...match];\n // Empty all but the first value of the array while preserving its other properties\n match.length = 1;\n let indicesCopy;\n if (this.hasIndices) {\n indicesCopy = [...match.indices];\n match.indices.length = 1;\n }\n for (let i = 1; i < matchCopy.length; i++) {\n if (!this._captureMap.get(i)?.hidden) {\n match.push(matchCopy[i]);\n if (this.hasIndices) {\n match.indices.push(indicesCopy[i]);\n }\n }\n }\n return match;\n }\n}\n\n/**\nBuild the capturing group map, with hidden captures marked to indicate their submatches shouldn't\nappear in match results.\n@param {Array<number>} hiddenCaptures\n@returns {Map<number, {\n hidden: true;\n}>}\n*/\nfunction createCaptureMap(hiddenCaptures) {\n const captureMap = new Map();\n for (const num of hiddenCaptures) {\n captureMap.set(num, {\n hidden: true,\n });\n }\n return captureMap;\n}\n\nexport {\n RegExpSubclass,\n};\n","import {Context, forEachUnescaped, getGroupContents, hasUnescaped, replaceUnescaped} from 'regex-utilities';\n\nconst r = String.raw;\nconst gRToken = r`\\\\g<(?<gRNameOrNum>[^>&]+)&R=(?<gRDepth>[^>]+)>`;\nconst recursiveToken = r`\\(\\?R=(?<rDepth>[^\\)]+)\\)|${gRToken}`;\nconst namedCaptureDelim = r`\\(\\?<(?![=!])(?<captureName>[^>]+)>`;\nconst captureDelim = r`${namedCaptureDelim}|(?<unnamed>\\()(?!\\?)`;\nconst token = new RegExp(r`${namedCaptureDelim}|${recursiveToken}|\\(\\?|\\\\?.`, 'gsu');\nconst overlappingRecursionMsg = 'Cannot use multiple overlapping recursions';\n\n/**\n@param {string} pattern\n@param {{\n flags?: string;\n captureTransfers?: Map<number, Array<number>>;\n hiddenCaptures?: Array<number>;\n mode?: 'plugin' | 'external';\n}} [data]\n@returns {{\n pattern: string;\n captureTransfers: Map<number, Array<number>>;\n hiddenCaptures: Array<number>;\n}}\n*/\nfunction recursion(pattern, data) {\n const {hiddenCaptures, mode} = {\n hiddenCaptures: [],\n mode: 'plugin',\n ...data,\n };\n // Capture transfer is used by <github.com/slevithan/oniguruma-to-es>\n let captureTransfers = data?.captureTransfers ?? new Map();\n // Keep the initial fail-check (which avoids unneeded processing) as fast as possible by testing\n // without the accuracy improvement of using `hasUnescaped` with `Context.DEFAULT`\n if (!(new RegExp(recursiveToken, 'su').test(pattern))) {\n return {\n pattern,\n captureTransfers,\n hiddenCaptures,\n };\n }\n if (mode === 'plugin' && hasUnescaped(pattern, r`\\(\\?\\(DEFINE\\)`, Context.DEFAULT)) {\n throw new Error('DEFINE groups cannot be used with recursion');\n }\n\n const addedHiddenCaptures = [];\n const hasNumberedBackref = hasUnescaped(pattern, r`\\\\[1-9]`, Context.DEFAULT);\n const groupContentsStartPos = new Map();\n const openGroups = [];\n let hasRecursed = false;\n let numCharClassesOpen = 0;\n let numCapturesPassed = 0;\n let match;\n token.lastIndex = 0;\n while ((match = token.exec(pattern))) {\n const {0: m, groups: {captureName, rDepth, gRNameOrNum, gRDepth}} = match;\n if (m === '[') {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n\n // `(?R=N)`\n if (rDepth) {\n assertMaxInBounds(rDepth);\n if (hasRecursed) {\n throw new Error(overlappingRecursionMsg);\n }\n if (hasNumberedBackref) {\n // Could add support for numbered backrefs with extra effort, but it's probably not worth\n // it. To trigger this error, the regex must include recursion and one of the following:\n // - An interpolated regex that contains a numbered backref (since other numbered\n // backrefs are prevented by implicit flag n).\n // - A numbered backref, when flag n is explicitly disabled.\n // Note that Regex+'s extended syntax (atomic groups and sometimes subroutines) can also\n // add numbered backrefs, but those work fine because external plugins like this one run\n // *before* the transformation of built-in syntax extensions\n throw new Error(\n // When used in `external` mode by transpilers other than Regex+, backrefs might have\n // gone through conversion from named to numbered, so avoid a misleading error\n `${mode === 'external' ? 'Backrefs' : 'Numbered backrefs'} cannot be used with global recursion`\n );\n }\n const left = pattern.slice(0, match.index);\n const right = pattern.slice(token.lastIndex);\n if (hasUnescaped(right, recursiveToken, Context.DEFAULT)) {\n throw new Error(overlappingRecursionMsg);\n }\n const reps = +rDepth - 1;\n pattern = makeRecursive(\n left,\n right,\n reps,\n false,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n );\n captureTransfers = mapCaptureTransfers(\n captureTransfers,\n left,\n reps,\n addedHiddenCaptures.length,\n 0,\n numCapturesPassed\n );\n // No need to parse further\n break;\n // `\\g<name&R=N>`, `\\g<number&R=N>`\n } else if (gRNameOrNum) {\n assertMaxInBounds(gRDepth);\n let isWithinReffedGroup = false;\n for (const g of openGroups) {\n if (g.name === gRNameOrNum || g.num === +gRNameOrNum) {\n isWithinReffedGroup = true;\n if (g.hasRecursedWithin) {\n throw new Error(overlappingRecursionMsg);\n }\n break;\n }\n }\n if (!isWithinReffedGroup) {\n throw new Error(r`Recursive \\g cannot be used outside the referenced group \"${\n mode === 'external' ? gRNameOrNum : r`\\g<${gRNameOrNum}&R=${gRDepth}>`\n }\"`);\n }\n const startPos = groupContentsStartPos.get(gRNameOrNum);\n const groupContents = getGroupContents(pattern, startPos);\n if (\n hasNumberedBackref &&\n hasUnescaped(groupContents, r`${namedCaptureDelim}|\\((?!\\?)`, Context.DEFAULT)\n ) {\n throw new Error(\n // When used in `external` mode by transpilers other than Regex+, backrefs might have\n // gone through conversion from named to numbered, so avoid a misleading error\n `${mode === 'external' ? 'Backrefs' : 'Numbered backrefs'} cannot be used with recursion of capturing groups`\n );\n }\n const groupContentsLeft = pattern.slice(startPos, match.index);\n const groupContentsRight = groupContents.slice(groupContentsLeft.length + m.length);\n const numAddedHiddenCapturesPreExpansion = addedHiddenCaptures.length;\n const reps = +gRDepth - 1;\n const expansion = makeRecursive(\n groupContentsLeft,\n groupContentsRight,\n reps,\n true,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n );\n captureTransfers = mapCaptureTransfers(\n captureTransfers,\n groupContentsLeft,\n reps,\n addedHiddenCaptures.length - numAddedHiddenCapturesPreExpansion,\n numAddedHiddenCapturesPreExpansion,\n numCapturesPassed\n );\n const pre = pattern.slice(0, startPos);\n const post = pattern.slice(startPos + groupContents.length);\n // Modify the string we're looping over\n pattern = `${pre}${expansion}${post}`;\n // Step forward for the next loop iteration\n token.lastIndex += expansion.length - m.length - groupContentsLeft.length - groupContentsRight.length;\n openGroups.forEach(g => g.hasRecursedWithin = true);\n hasRecursed = true;\n } else if (captureName) {\n numCapturesPassed++;\n groupContentsStartPos.set(String(numCapturesPassed), token.lastIndex);\n groupContentsStartPos.set(captureName, token.lastIndex);\n openGroups.push({\n num: numCapturesPassed,\n name: captureName,\n });\n } else if (m[0] === '(') {\n const isUnnamedCapture = m === '(';\n if (isUnnamedCapture) {\n numCapturesPassed++;\n groupContentsStartPos.set(String(numCapturesPassed), token.lastIndex);\n }\n openGroups.push(isUnnamedCapture ? {num: numCapturesPassed} : {});\n } else if (m === ')') {\n openGroups.pop();\n }\n\n } else if (m === ']') {\n numCharClassesOpen--;\n }\n }\n\n hiddenCaptures.push(...addedHiddenCaptures);\n\n return {\n pattern,\n captureTransfers,\n hiddenCaptures,\n };\n}\n\n/**\n@param {string} max\n*/\nfunction assertMaxInBounds(max) {\n const errMsg = `Max depth must be integer between 2 and 100; used ${max}`;\n if (!/^[1-9]\\d*$/.test(max)) {\n throw new Error(errMsg);\n }\n max = +max;\n if (max < 2 || max > 100) {\n throw new Error(errMsg);\n }\n}\n\n/**\n@param {string} left\n@param {string} right\n@param {number} reps\n@param {boolean} isSubpattern\n@param {Array<number>} hiddenCaptures\n@param {Array<number>} addedHiddenCaptures\n@param {number} numCapturesPassed\n@returns {string}\n*/\nfunction makeRecursive(\n left,\n right,\n reps,\n isSubpattern,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n) {\n const namesInRecursed = new Set();\n // Can skip this work if not needed\n if (isSubpattern) {\n forEachUnescaped(left + right, namedCaptureDelim, ({groups: {captureName}}) => {\n namesInRecursed.add(captureName);\n }, Context.DEFAULT);\n }\n const rest = [\n reps,\n isSubpattern ? namesInRecursed : null,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed,\n ];\n // Depth 2: 'left(?:left(?:)right)right'\n // Depth 3: 'left(?:left(?:left(?:)right)right)right'\n // Empty group in the middle separates tokens and absorbs a following quantifier if present\n return `${left}${\n repeatWithDepth(`(?:${left}`, 'forward', ...rest)\n }(?:)${\n repeatWithDepth(`${right})`, 'backward', ...rest)\n }${right}`;\n}\n\n/**\n@param {string} pattern\n@param {'forward' | 'backward'} direction\n@param {number} reps\n@param {Set<string> | null} namesInRecursed\n@param {Array<number>} hiddenCaptures\n@param {Array<number>} addedHiddenCaptures\n@param {number} numCapturesPassed\n@returns {string}\n*/\nfunction repeatWithDepth(\n pattern,\n direction,\n reps,\n namesInRecursed,\n hiddenCaptures,\n addedHiddenCaptures,\n numCapturesPassed\n) {\n const startNum = 2;\n const getDepthNum = i => direction === 'forward' ? (i + startNum) : (reps - i + startNum - 1);\n let result = '';\n for (let i = 0; i < reps; i++) {\n const depthNum = getDepthNum(i);\n result += replaceUnescaped(\n pattern,\n r`${captureDelim}|\\\\k<(?<backref>[^>]+)>`,\n ({0: m, groups: {captureName, unnamed, backref}}) => {\n if (backref && namesInRecursed && !namesInRecursed.has(backref)) {\n // Don't alter backrefs to groups outside the recursed subpattern\n return m;\n }\n const suffix = `_$${depthNum}`;\n if (unnamed || captureName) {\n const addedCaptureNum = numCapturesPassed + addedHiddenCaptures.length + 1;\n addedHiddenCaptures.push(addedCaptureNum);\n incrementIfAtLeast(hiddenCaptures, addedCaptureNum);\n return unnamed ? m : `(?<${captureName}${suffix}>`;\n }\n return r`\\k<${backref}${suffix}>`;\n },\n Context.DEFAULT\n );\n }\n return result;\n}\n\n/**\nUpdates the array in place by incrementing each value greater than or equal to the threshold.\n@param {Array<number>} arr\n@param {number} threshold\n*/\nfunction incrementIfAtLeast(arr, threshold) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] >= threshold) {\n arr[i]++;\n }\n }\n}\n\n/**\n@param {Map<number, Array<number>>} captureTransfers\n@param {string} left\n@param {number} reps\n@param {number} numCapturesAddedInExpansion\n@param {number} numAddedHiddenCapturesPreExpansion\n@param {number} numCapturesPassed\n@returns {Map<number, Array<number>>}\n*/\nfunction mapCaptureTransfers(captureTransfers, left, reps, numCapturesAddedInExpansion, numAddedHiddenCapturesPreExpansion, numCapturesPassed) {\n if (captureTransfers.size && numCapturesAddedInExpansion) {\n let numCapturesInLeft = 0;\n forEachUnescaped(left, captureDelim, () => numCapturesInLeft++, Context.DEFAULT);\n // Is 0 for global recursion\n const recursionDelimCaptureNum = numCapturesPassed - numCapturesInLeft + numAddedHiddenCapturesPreExpansion;\n const newCaptureTransfers = new Map();\n captureTransfers.forEach((from, to) => {\n const numCapturesInRight = (numCapturesAddedInExpansion - (numCapturesInLeft * reps)) / reps;\n const numCapturesAddedInLeft = numCapturesInLeft * reps;\n const newTo = to > (recursionDelimCaptureNum + numCapturesInLeft) ? to + numCapturesAddedInExpansion : to;\n const newFrom = [];\n for (const f of from) {\n // Before the recursed subpattern\n if (f <= recursionDelimCaptureNum) {\n newFrom.push(f);\n // After the recursed subpattern\n } else if (f > (recursionDelimCaptureNum + numCapturesInLeft + numCapturesInRight)) {\n newFrom.push(f + numCapturesAddedInExpansion);\n // Within the recursed subpattern, on the left of the recursion token\n } else if (f <= (recursionDelimCaptureNum + numCapturesInLeft)) {\n for (let i = 0; i <= reps; i++) {\n newFrom.push(f + (numCapturesInLeft * i));\n }\n // Within the recursed subpattern, on the right of the recursion token\n } else {\n for (let i = 0; i <= reps; i++) {\n newFrom.push(f + numCapturesAddedInLeft + (numCapturesInRight * i));\n }\n }\n }\n newCaptureTransfers.set(newTo, newFrom);\n });\n return newCaptureTransfers;\n }\n return captureTransfers;\n}\n\nexport {\n recursion,\n};\n","// src/utils.js\nvar cp = String.fromCodePoint;\nvar r = String.raw;\nvar envFlags = {\n flagGroups: (() => {\n try {\n new RegExp(\"(?i:)\");\n } catch {\n return false;\n }\n return true;\n })(),\n unicodeSets: (() => {\n try {\n new RegExp(\"[[]]\", \"v\");\n } catch {\n return false;\n }\n return true;\n })()\n};\nenvFlags.bugFlagVLiteralHyphenIsRange = envFlags.unicodeSets ? (() => {\n try {\n new RegExp(r`[\\d\\-a]`, \"v\");\n } catch {\n return true;\n }\n return false;\n})() : false;\nenvFlags.bugNestedClassIgnoresNegation = envFlags.unicodeSets && new RegExp(\"[[^a]]\", \"v\").test(\"a\");\nfunction getNewCurrentFlags(current, { enable, disable }) {\n return {\n dotAll: !disable?.dotAll && !!(enable?.dotAll || current.dotAll),\n ignoreCase: !disable?.ignoreCase && !!(enable?.ignoreCase || current.ignoreCase)\n };\n}\nfunction getOrInsert(map, key, defaultValue) {\n if (!map.has(key)) {\n map.set(key, defaultValue);\n }\n return map.get(key);\n}\nfunction isMinTarget(target, min) {\n return EsVersion[target] >= EsVersion[min];\n}\nfunction throwIfNullish(value, msg) {\n if (value == null) {\n throw new Error(msg ?? \"Value expected\");\n }\n return value;\n}\n\n// src/options.js\nvar EsVersion = {\n ES2025: 2025,\n ES2024: 2024,\n ES2018: 2018\n};\nvar Target = (\n /** @type {const} */\n {\n auto: \"auto\",\n ES2025: \"ES2025\",\n ES2024: \"ES2024\",\n ES2018: \"ES2018\"\n }\n);\nfunction getOptions(options = {}) {\n if ({}.toString.call(options) !== \"[object Object]\") {\n throw new Error(\"Unexpected options\");\n }\n if (options.target !== void 0 && !Target[options.target]) {\n throw new Error(`Unexpected target \"${options.target}\"`);\n }\n const opts = {\n // Sets the level of emulation rigor/strictness.\n accuracy: \"default\",\n // Disables advanced emulation that relies on returning a `RegExp` subclass, resulting in\n // certain patterns not being emulatable.\n avoidSubclass: false,\n // Oniguruma flags; a string with `i`, `m`, `x`, `D`, `S`, `W`, `y{g}` in any order (all\n // optional). Oniguruma's `m` is equivalent to JavaScript's `s` (`dotAll`).\n flags: \"\",\n // Include JavaScript flag `g` (`global`) in the result.\n global: false,\n // Include JavaScript flag `d` (`hasIndices`) in the result.\n hasIndices: false,\n // Delay regex construction until first use if the transpiled pattern is at least this length.\n lazyCompileLength: Infinity,\n // JavaScript version used for generated regexes. Using `auto` detects the best value based on\n // your environment. Later targets allow faster processing, simpler generated source, and\n // support for additional features.\n target: \"auto\",\n // Disables minifications that simplify the pattern without changing the meaning.\n verbose: false,\n ...options,\n // Advanced options that override standard behavior, error checking, and flags when enabled.\n rules: {\n // Useful with TextMate grammars that merge backreferences across patterns.\n allowOrphanBackrefs: false,\n // Use ASCII `\\b` and `\\B`, which increases search performance of generated regexes.\n asciiWordBoundaries: false,\n // Allow unnamed captures and numbered calls (backreferences and subroutines) when using\n // named capture. This is Oniguruma option `ONIG_OPTION_CAPTURE_GROUP`; on by default in\n // `vscode-oniguruma`.\n captureGroup: false,\n // Change the recursion depth limit from Oniguruma's `20` to an integer `2`–`20`.\n recursionLimit: 20,\n // `^` as `\\A`; `$` as`\\Z`. Improves search performance of generated regexes without changing\n // the meaning if searching line by line. This is Oniguruma option `ONIG_OPTION_SINGLELINE`.\n singleline: false,\n ...options.rules\n }\n };\n if (opts.target === \"auto\") {\n opts.target = envFlags.flagGroups ? \"ES2025\" : envFlags.unicodeSets ? \"ES2024\" : \"ES2018\";\n }\n return opts;\n}\n\n// src/unicode.js\nimport { slug } from \"oniguruma-parser/parser\";\nvar asciiSpaceChar = \"[\t-\\r ]\";\nvar CharsWithoutIgnoreCaseExpansion = /* @__PURE__ */ new Set([\n cp(304),\n // İ\n cp(305)\n // ı\n]);\nvar defaultWordChar = r`[\\p{L}\\p{M}\\p{N}\\p{Pc}]`;\nfunction getIgnoreCaseMatchChars(char) {\n if (CharsWithoutIgnoreCaseExpansion.has(char)) {\n return [char];\n }\n const set = /* @__PURE__ */ new Set();\n const lower = char.toLowerCase();\n const upper = lower.toUpperCase();\n const title = LowerToTitleCaseMap.get(lower);\n const altLower = LowerToAlternativeLowerCaseMap.get(lower);\n const altUpper = LowerToAlternativeUpperCaseMap.get(lower);\n if ([...upper].length === 1) {\n set.add(upper);\n }\n altUpper && set.add(altUpper);\n title && set.add(title);\n set.add(lower);\n altLower && set.add(altLower);\n return [...set];\n}\nvar JsUnicodePropertyMap = /* @__PURE__ */ new Map(\n `C Other\nCc Control cntrl\nCf Format\nCn Unassigned\nCo Private_Use\nCs Surrogate\nL Letter\nLC Cased_Letter\nLl Lowercase_Letter\nLm Modifier_Letter\nLo Other_Letter\nLt Titlecase_Letter\nLu Uppercase_Letter\nM Mark Combining_Mark\nMc Spacing_Mark\nMe Enclosing_Mark\nMn Nonspacing_Mark\nN Number\nNd Decimal_Number digit\nNl Letter_Number\nNo Other_Number\nP Punctuation punct\nPc Connector_Punctuation\nPd Dash_Punctuation\nPe Close_Punctuation\nPf Final_Punctuation\nPi Initial_Punctuation\nPo Other_Punctuation\nPs Open_Punctuation\nS Symbol\nSc Currency_Symbol\nSk Modifier_Symbol\nSm Math_Symbol\nSo Other_Symbol\nZ Separator\nZl Line_Separator\nZp Paragraph_Separator\nZs Space_Separator\nASCII\nASCII_Hex_Digit AHex\nAlphabetic Alpha\nAny\nAssigned\nBidi_Control Bidi_C\nBidi_Mirrored Bidi_M\nCase_Ignorable CI\nCased\nChanges_When_Casefolded CWCF\nChanges_When_Casemapped CWCM\nChanges_When_Lowercased CWL\nChanges_When_NFKC_Casefolded CWKCF\nChanges_When_Titlecased CWT\nChanges_When_Uppercased CWU\nDash\nDefault_Ignorable_Code_Point DI\nDeprecated Dep\nDiacritic Dia\nEmoji\nEmoji_Component EComp\nEmoji_Modifier EMod\nEmoji_Modifier_Base EBase\nEmoji_Presentation EPres\nExtended_Pictographic ExtPict\nExtender Ext\nGrapheme_Base Gr_Base\nGrapheme_Extend Gr_Ext\nHex_Digit Hex\nIDS_Binary_Operator IDSB\nIDS_Trinary_Operator IDST\nID_Continue IDC\nID_Start IDS\nIdeographic Ideo\nJoin_Control Join_C\nLogical_Order_Exception LOE\nLowercase Lower\nMath\nNoncharacter_Code_Point NChar\nPattern_Syntax Pat_Syn\nPattern_White_Space Pat_WS\nQuotation_Mark QMark\nRadical\nRegional_Indicator RI\nSentence_Terminal STerm\nSoft_Dotted SD\nTerminal_Punctuation Term\nUnified_Ideograph UIdeo\nUppercase Upper\nVariation_Selector VS\nWhite_Space space\nXID_Continue XIDC\nXID_Start XIDS`.split(/\\s/).map((p) => [slug(p), p])\n);\nvar LowerToAlternativeLowerCaseMap = /* @__PURE__ */ new Map([\n [\"s\", cp(383)],\n // s, ſ\n [cp(383), \"s\"]\n // ſ, s\n]);\nvar LowerToAlternativeUpperCaseMap = /* @__PURE__ */ new Map([\n [cp(223), cp(7838)],\n // ß, ẞ\n [cp(107), cp(8490)],\n // k, K (Kelvin)\n [cp(229), cp(8491)],\n // å, Å (Angstrom)\n [cp(969), cp(8486)]\n // ω, Ω (Ohm)\n]);\nvar LowerToTitleCaseMap = new Map([\n titleEntry(453),\n titleEntry(456),\n titleEntry(459),\n titleEntry(498),\n ...titleRange(8072, 8079),\n ...titleRange(8088, 8095),\n ...titleRange(8104, 8111),\n titleEntry(8124),\n titleEntry(8140),\n titleEntry(8188)\n]);\nvar PosixClassMap = /* @__PURE__ */ new Map([\n [\"alnum\", r`[\\p{Alpha}\\p{Nd}]`],\n [\"alpha\", r`\\p{Alpha}`],\n [\"ascii\", r`\\p{ASCII}`],\n [\"blank\", r`[\\p{Zs}\\t]`],\n [\"cntrl\", r`\\p{Cc}`],\n [\"digit\", r`\\p{Nd}`],\n [\"graph\", r`[\\P{space}&&\\P{Cc}&&\\P{Cn}&&\\P{Cs}]`],\n [\"lower\", r`\\p{Lower}`],\n [\"print\", r`[[\\P{space}&&\\P{Cc}&&\\P{Cn}&&\\P{Cs}]\\p{Zs}]`],\n [\"punct\", r`[\\p{P}\\p{S}]`],\n // Updated value from Onig 6.9.9; changed from Unicode `\\p{punct}`\n [\"space\", r`\\p{space}`],\n [\"upper\", r`\\p{Upper}`],\n [\"word\", r`[\\p{Alpha}\\p{M}\\p{Nd}\\p{Pc}]`],\n [\"xdigit\", r`\\p{AHex}`]\n]);\nfunction range(start, end) {\n const range2 = [];\n for (let i = start; i <= end; i++) {\n range2.push(i);\n }\n return range2;\n}\nfunction titleEntry(codePoint) {\n const char = cp(codePoint);\n return [char.toLowerCase(), char];\n}\nfunction titleRange(start, end) {\n return range(start, end).map((codePoint) => titleEntry(codePoint));\n}\nvar UnicodePropertiesWithSpecificCase = /* @__PURE__ */ new Set([\n \"Lower\",\n \"Lowercase\",\n \"Upper\",\n \"Uppercase\",\n \"Ll\",\n \"Lowercase_Letter\",\n \"Lt\",\n \"Titlecase_Letter\",\n \"Lu\",\n \"Uppercase_Letter\"\n // The `Changes_When_*` properties (and their aliases) could be included, but they're very rare.\n // Some other properties include a handful of chars with specific cases only, but these chars are\n // generally extreme edge cases and using such properties case insensitively generally produces\n // undesired behavior anyway\n]);\n\n// src/transform.js\nimport { createAlternative, createAssertion, createBackreference, createCapturingGroup, createCharacter, createCharacterClass, createCharacterSet, createGroup, createLookaroundAssertion, createQuantifier, createSubroutine, createUnicodeProperty, hasOnlyChild, parse, slug as slug2 } from \"oniguruma-parser/parser\";\nimport { traverse } from \"oniguruma-parser/traverser\";\nfunction transform(ast, options) {\n const opts = {\n // A couple edge cases exist where options `accuracy` and `bestEffortTarget` are used:\n // - `CharacterSet` kind `text_segment` (`\\X`): An exact representation would require heavy\n // Unicode data; a best-effort approximation requires knowing the target.\n // - `CharacterSet` kind `posix` with values `graph` and `print`: Their complex Unicode\n // representations would be hard to change to ASCII versions after the fact in the generator\n // based on `target`/`accuracy`, so produce the appropriate structure here.\n accuracy: \"default\",\n asciiWordBoundaries: false,\n avoidSubclass: false,\n bestEffortTarget: \"ES2025\",\n ...options\n };\n addParentProperties(ast);\n const firstPassState = {\n accuracy: opts.accuracy,\n asciiWordBoundaries: opts.asciiWordBoundaries,\n avoidSubclass: opts.avoidSubclass,\n flagDirectivesByAlt: /* @__PURE__ */ new Map(),\n jsGroupNameMap: /* @__PURE__ */ new Map(),\n minTargetEs2024: isMinTarget(opts.bestEffortTarget, \"ES2024\"),\n passedLookbehind: false,\n strategy: null,\n // Subroutines can appear before the groups they ref, so collect reffed nodes for a second pass \n subroutineRefMap: /* @__PURE__ */ new Map(),\n supportedGNodes: /* @__PURE__ */ new Set(),\n digitIsAscii: ast.flags.digitIsAscii,\n spaceIsAscii: ast.flags.spaceIsAscii,\n wordIsAscii: ast.flags.wordIsAscii\n };\n traverse(ast, FirstPassVisitor, firstPassState);\n const globalFlags = {\n dotAll: ast.flags.dotAll,\n ignoreCase: ast.flags.ignoreCase\n };\n const secondPassState = {\n currentFlags: globalFlags,\n prevFlags: null,\n globalFlags,\n groupOriginByCopy: /* @__PURE__ */ new Map(),\n groupsByName: /* @__PURE__ */ new Map(),\n multiplexCapturesToLeftByRef: /* @__PURE__ */ new Map(),\n openRefs: /* @__PURE__ */ new Map(),\n reffedNodesByReferencer: /* @__PURE__ */ new Map(),\n subroutineRefMap: firstPassState.subroutineRefMap\n };\n traverse(ast, SecondPassVisitor, secondPassState);\n const thirdPassState = {\n groupsByName: secondPassState.groupsByName,\n highestOrphanBackref: 0,\n numCapturesToLeft: 0,\n reffedNodesByReferencer: secondPassState.reffedNodesByReferencer\n };\n traverse(ast, ThirdPassVisitor, thirdPassState);\n ast._originMap = secondPassState.groupOriginByCopy;\n ast._strategy = firstPassState.strategy;\n return ast;\n}\nvar FirstPassVisitor = {\n AbsenceFunction({ node, parent, replaceWith }) {\n const { body, kind } = node;\n if (kind === \"repeater\") {\n const innerGroup = createGroup();\n innerGroup.body[0].body.push(\n // Insert own alts as `body`\n createLookaroundAssertion({ negate: true, body }),\n createUnicodeProperty(\"Any\")\n );\n const outerGroup = createGroup();\n outerGroup.body[0].body.push(\n createQuantifier(\"greedy\", 0, Infinity, innerGroup)\n );\n replaceWith(setParentDeep(outerGroup, parent), { traverse: true });\n } else {\n throw new Error(`Unsupported absence function \"(?~|\"`);\n }\n },\n Alternative: {\n enter({ node, parent, key }, { flagDirectivesByAlt }) {\n const flagDirectives = node.body.filter((el) => el.kind === \"flags\");\n for (let i = key + 1; i < parent.body.length; i++) {\n const forwardSiblingAlt = parent.body[i];\n getOrInsert(flagDirectivesByAlt, forwardSiblingAlt, []).push(...flagDirectives);\n }\n },\n exit({ node }, { flagDirectivesByAlt }) {\n if (flagDirectivesByAlt.get(node)?.length) {\n const flags = getCombinedFlagModsFromFlagNodes(flagDirectivesByAlt.get(node));\n if (flags) {\n const flagGroup = createGroup({ flags });\n flagGroup.body[0].body = node.body;\n node.body = [setParentDeep(flagGroup, node)];\n }\n }\n }\n },\n Assertion({ node, parent, key, container, root, remove, replaceWith }, state) {\n const { kind, negate } = node;\n const { asciiWordBoundaries, avoidSubclass, supportedGNodes, wordIsAscii } = state;\n if (kind === \"text_segment_boundary\") {\n throw new Error(`Unsupported text segment boundary \"\\\\${negate ? \"Y\" : \"y\"}\"`);\n } else if (kind === \"line_end\") {\n replaceWith(setParentDeep(createLookaroundAssertion({ body: [\n createAlternative({ body: [createAssertion(\"string_end\")] }),\n createAlternative({ body: [createCharacter(10)] })\n // `\\n`\n ] }), parent));\n } else if (kind === \"line_start\") {\n replaceWith(setParentDeep(parseFragment(r`(?<=\\A|\\n(?!\\z))`, { skipLookbehindValidation: true }), parent));\n } else if (kind === \"search_start\") {\n if (supportedGNodes.has(node)) {\n root.flags.sticky = true;\n remove();\n } else {\n const prev = container[key - 1];\n if (prev && isAlwaysNonZeroLength(prev)) {\n replaceWith(setParentDeep(createLookaroundAssertion({ negate: true }), parent));\n } else if (avoidSubclass) {\n throw new Error(r`Uses \"\\G\" in a way that requires a subclass`);\n } else {\n replaceWith(setParent(createAssertion(\"string_start\"), parent));\n state.strategy = \"clip_search\";\n }\n }\n } else if (kind === \"string_end\" || kind === \"string_start\") {\n } else if (kind === \"string_end_newline\") {\n replaceWith(setParentDeep(parseFragment(r`(?=\\n?\\z)`), parent));\n } else if (kind === \"word_boundary\") {\n if (!wordIsAscii && !asciiWordBoundaries) {\n const b = `(?:(?<=${defaultWordChar})(?!${defaultWordChar})|(?<!${defaultWordChar})(?=${defaultWordChar}))`;\n const B = `(?:(?<=${defaultWordChar})(?=${defaultWordChar})|(?<!${defaultWordChar})(?!${defaultWordChar}))`;\n replaceWith(setParentDeep(parseFragment(negate ? B : b), parent));\n }\n } else {\n throw new Error(`Unexpected assertion kind \"${kind}\"`);\n }\n },\n Backreference({ node }, { jsGroupNameMap }) {\n let { ref } = node;\n if (typeof ref === \"string\" && !isValidJsGroupName(ref)) {\n ref = getAndStoreJsGroupName(ref, jsGroupNameMap);\n node.ref = ref;\n }\n },\n CapturingGroup({ node }, { jsGroupNameMap, subroutineRefMap }) {\n let { name } = node;\n if (name && !isValidJsGroupName(name)) {\n name = getAndStoreJsGroupName(name, jsGroupNameMap);\n node.name = name;\n }\n subroutineRefMap.set(node.number, node);\n if (name) {\n subroutineRefMap.set(name, node);\n }\n },\n CharacterClassRange({ node, parent, replaceWith }) {\n if (parent.kind === \"intersection\") {\n const cc = createCharacterClass({ body: [node] });\n replaceWith(setParentDeep(cc, parent), { traverse: true });\n }\n },\n CharacterSet({ node, parent, replaceWith }, { accuracy, minTargetEs2024, digitIsAscii, spaceIsAscii, wordIsAscii }) {\n const { kind, negate, value } = node;\n if (digitIsAscii && (kind === \"digit\" || value === \"digit\")) {\n replaceWith(setParent(createCharacterSet(\"digit\", { negate }), parent));\n return;\n }\n if (spaceIsAscii && (kind === \"space\" || value === \"space\")) {\n replaceWith(setParentDeep(setNegate(parseFragment(asciiSpaceChar), negate), parent));\n return;\n }\n if (wordIsAscii && (kind === \"word\" || value === \"word\")) {\n replaceWith(setParent(createCharacterSet(\"word\", { negate }), parent));\n return;\n }\n if (kind === \"any\") {\n replaceWith(setParent(createUnicodeProperty(\"Any\"), parent));\n } else if (kind === \"digit\") {\n replaceWith(setParent(createUnicodeProperty(\"Nd\", { negate }), parent));\n } else if (kind === \"dot\") {\n } else if (kind === \"text_segment\") {\n if (accuracy === \"strict\") {\n throw new Error(r`Use of \"\\X\" requires non-strict accuracy`);\n }\n const eBase = \"\\\\p{Emoji}(?:\\\\p{EMod}|\\\\uFE0F\\\\u20E3?|[\\\\x{E0020}-\\\\x{E007E}]+\\\\x{E007F})?\";\n const emoji = r`\\p{RI}{2}|${eBase}(?:\\u200D${eBase})*`;\n replaceWith(setParentDeep(parseFragment(\n // Close approximation of an extended grapheme cluster; see <unicode.org/reports/tr29/>\n r`(?>\\r\\n|${minTargetEs2024 ? r`\\p{RGI_Emoji}` : emoji}|\\P{M}\\p{M}*)`,\n // Allow JS property `RGI_Emoji` through\n { skipPropertyNameValidation: true }\n ), parent));\n } else if (kind === \"hex\") {\n replaceWith(setParent(createUnicodeProperty(\"AHex\", { negate }), parent));\n } else if (kind === \"newline\") {\n replaceWith(setParentDeep(parseFragment(negate ? \"[^\\n]\" : \"(?>\\r\\n?|[\\n\\v\\f\\x85\\u2028\\u2029])\"), parent));\n } else if (kind === \"posix\") {\n if (!minTargetEs2024 && (value === \"graph\" || value === \"print\")) {\n if (accuracy === \"strict\") {\n throw new Error(`POSIX class \"${value}\" requires min target ES2024 or non-strict accuracy`);\n }\n let ascii = {\n graph: \"!-~\",\n print: \" -~\"\n }[value];\n if (negate) {\n ascii = `\\0-${cp(ascii.codePointAt(0) - 1)}${cp(ascii.codePointAt(2) + 1)}-\\u{10FFFF}`;\n }\n replaceWith(setParentDeep(parseFragment(`[${ascii}]`), parent));\n } else {\n replaceWith(setParentDeep(setNegate(parseFragment(PosixClassMap.get(value)), negate), parent));\n }\n } else if (kind === \"property\") {\n if (!JsUnicodePropertyMap.has(slug2(value))) {\n node.key = \"sc\";\n }\n } else if (kind === \"space\") {\n replaceWith(setParent(createUnicodeProperty(\"space\", { negate }), parent));\n } else if (kind === \"word\") {\n replaceWith(setParentDeep(setNegate(parseFragment(defaultWordChar), negate), parent));\n } else {\n throw new Error(`Unexpected character set kind \"${kind}\"`);\n }\n },\n Directive({ node, parent, root, remove, replaceWith, removeAllPrevSiblings, removeAllNextSiblings }) {\n const { kind, flags } = node;\n if (kind === \"flags\") {\n if (!flags.enable && !flags.disable) {\n remove();\n } else {\n const flagGroup = createGroup({ flags });\n flagGroup.body[0].body = removeAllNextSiblings();\n replaceWith(setParentDeep(flagGroup, parent), { traverse: true });\n }\n } else if (kind === \"keep\") {\n const firstAlt = root.body[0];\n const hasWrapperGroup = root.body.length === 1 && // Not emulatable if within a `CapturingGroup`\n hasOnlyChild(firstAlt, { type: \"Group\" }) && firstAlt.body[0].body.length === 1;\n const topLevel = hasWrapperGroup ? firstAlt.body[0] : root;\n if (parent.parent !== topLevel || topLevel.body.length > 1) {\n throw new Error(r`Uses \"\\K\" in a way that's unsupported`);\n }\n const lookbehind = createLookaroundAssertion({ behind: true });\n lookbehind.body[0].body = removeAllPrevSiblings();\n replaceWith(setParentDeep(lookbehind, parent));\n } else {\n throw new Error(`Unexpected directive kind \"${kind}\"`);\n }\n },\n Flags({ node, parent }) {\n if (node.posixIsAscii) {\n throw new Error('Unsupported flag \"P\"');\n }\n if (node.textSegmentMode === \"word\") {\n throw new Error('Unsupported flag \"y{w}\"');\n }\n [\n \"digitIsAscii\",\n // Flag D\n \"extended\",\n // Flag x\n \"posixIsAscii\",\n // Flag P\n \"spaceIsAscii\",\n // Flag S\n \"wordIsAscii\",\n // Flag W\n \"textSegmentMode\"\n // Flag y{g} or y{w}\n ].forEach((f) => delete node[f]);\n Object.assign(node, {\n // JS flag g; no Onig equiv\n global: false,\n // JS flag d; no Onig equiv\n hasIndices: false,\n // JS flag m; no Onig equiv but its behavior is always on in Onig. Onig's only line break\n // char is line feed, unlike JS, so this flag isn't used since it would produce inaccurate\n // results (also allows `^` and `$` to be used in the generator for string start and end)\n multiline: false,\n // JS flag y; no Onig equiv, but used for `\\G` emulation\n sticky: node.sticky ?? false\n // Note: Regex+ doesn't allow explicitly adding flags it handles implicitly, so leave out\n // properties `unicode` (JS flag u) and `unicodeSets` (JS flag v). Keep the existing values\n // for `ignoreCase` (flag i) and `dotAll` (JS flag s, but Onig flag m)\n });\n parent.options = {\n disable: {\n // Onig uses different rules for flag x than Regex+, so disable the implicit flag\n x: true,\n // Onig has no flag to control \"named capture only\" mode but contextually applies its\n // behavior when named capturing is used, so disable Regex+'s implicit flag for it\n n: true\n },\n force: {\n // Always add flag v because we're generating an AST that relies on it (it enables JS\n // support for Onig features nested classes, intersection, Unicode properties, etc.).\n // However, the generator might disable flag v based on its `target` option\n v: true\n }\n };\n },\n Group({ node }) {\n if (!node.flags) {\n return;\n }\n const { enable, disable } = node.flags;\n enable?.extended && delete enable.extended;\n disable?.extended && delete disable.extended;\n enable?.dotAll && disable?.dotAll && delete enable.dotAll;\n enable?.ignoreCase && disable?.ignoreCase && delete enable.ignoreCase;\n enable && !Object.keys(enable).length && delete node.flags.enable;\n disable && !Object.keys(disable).length && delete node.flags.disable;\n !node.flags.enable && !node.flags.disable && delete node.flags;\n },\n LookaroundAssertion({ node }, state) {\n const { kind } = node;\n if (kind === \"lookbehind\") {\n state.passedLookbehind = true;\n }\n },\n NamedCallout({ node, parent, replaceWith }) {\n const { kind } = node;\n if (kind === \"fail\") {\n replaceWith(setParentDeep(createLookaroundAssertion({ negate: true }), parent));\n } else {\n throw new Error(`Unsupported named callout \"(*${kind.toUpperCase()}\"`);\n }\n },\n Quantifier({ node }) {\n if (node.body.type === \"Quantifier\") {\n const group = createGroup();\n group.body[0].body.push(node.body);\n node.body = setParentDeep(group, node);\n }\n },\n Regex: {\n enter({ node }, { supportedGNodes }) {\n const leadingGs = [];\n let hasAltWithLeadG = false;\n let hasAltWithoutLeadG = false;\n for (const alt of node.body) {\n if (alt.body.length === 1 && alt.body[0].kind === \"search_start\") {\n alt.body.pop();\n } else {\n const leadingG = getLeadingG(alt.body);\n if (leadingG) {\n hasAltWithLeadG = true;\n Array.isArray(leadingG) ? leadingGs.push(...leadingG) : leadingGs.push(leadingG);\n } else {\n hasAltWithoutLeadG = true;\n }\n }\n }\n if (hasAltWithLeadG && !hasAltWithoutLeadG) {\n leadingGs.forEach((g) => supportedGNodes.add(g));\n }\n },\n exit(_, { accuracy, passedLookbehind, strategy }) {\n if (accuracy === \"strict\" && passedLookbehind && strategy) {\n throw new Error(r`Uses \"\\G\" in a way that requires non-strict accuracy`);\n }\n }\n },\n Subroutine({ node }, { jsGroupNameMap }) {\n let { ref } = node;\n if (typeof ref === \"string\" && !isValidJsGroupName(ref)) {\n ref = getAndStoreJsGroupName(ref, jsGroupNameMap);\n node.ref = ref;\n }\n }\n};\nvar SecondPassVisitor = {\n Backreference({ node }, { multiplexCapturesToLeftByRef, reffedNodesByReferencer }) {\n const { orphan, ref } = node;\n if (!orphan) {\n reffedNodesByReferencer.set(node, [...multiplexCapturesToLeftByRef.get(ref).map(({ node: node2 }) => node2)]);\n }\n },\n CapturingGroup: {\n enter({\n node,\n parent,\n replaceWith,\n skip\n }, {\n groupOriginByCopy,\n groupsByName,\n multiplexCapturesToLeftByRef,\n openRefs,\n reffedNodesByReferencer\n }) {\n const origin = groupOriginByCopy.get(node);\n if (origin && openRefs.has(node.number)) {\n const recursion2 = setParent(createRecursion(node.number), parent);\n reffedNodesByReferencer.set(recursion2, openRefs.get(node.number));\n replaceWith(recursion2);\n return;\n }\n openRefs.set(node.number, node);\n multiplexCapturesToLeftByRef.set(node.number, []);\n if (node.name) {\n getOrInsert(multiplexCapturesToLeftByRef, node.name, []);\n }\n const multiplexNodes = multiplexCapturesToLeftByRef.get(node.name ?? node.number);\n for (let i = 0; i < multiplexNodes.length; i++) {\n const multiplex = multiplexNodes[i];\n if (\n // This group is from subroutine expansion, and there's a multiplex value from either the\n // origin node or a prior subroutine expansion group with the same origin\n origin === multiplex.node || origin && origin === multiplex.origin || // This group is not from subroutine expansion, and it comes after a subroutine expansion\n // group that refers to this group\n node === multiplex.origin\n ) {\n multiplexNodes.splice(i, 1);\n break;\n }\n }\n multiplexCapturesToLeftByRef.get(node.number).push({ node, origin });\n if (node.name) {\n multiplexCapturesToLeftByRef.get(node.name).push({ node, origin });\n }\n if (node.name) {\n const groupsWithSameName = getOrInsert(groupsByName, node.name, /* @__PURE__ */ new Map());\n let hasDuplicateNameToRemove = false;\n if (origin) {\n hasDuplicateNameToRemove = true;\n } else {\n for (const groupInfo of groupsWithSameName.values()) {\n if (!groupInfo.hasDuplicateNameToRemove) {\n hasDuplicateNameToRemove = true;\n break;\n }\n }\n }\n groupsByName.get(node.name).set(node, { node, hasDuplicateNameToRemove });\n }\n },\n exit({ node }, { openRefs }) {\n openRefs.delete(node.number);\n }\n },\n Group: {\n enter({ node }, state) {\n state.prevFlags = state.currentFlags;\n if (node.flags) {\n state.currentFlags = getNewCurrentFlags(state.currentFlags, node.flags);\n }\n },\n exit(_, state) {\n state.currentFlags = state.prevFlags;\n }\n },\n Subroutine({ node, parent, replaceWith }, state) {\n const { isRecursive, ref } = node;\n if (isRecursive) {\n let reffed = parent;\n while (reffed = reffed.parent) {\n if (reffed.type === \"CapturingGroup\" && (reffed.name === ref || reffed.number === ref)) {\n break;\n }\n }\n state.reffedNodesByReferencer.set(node, reffed);\n return;\n }\n const reffedGroupNode = state.subroutineRefMap.get(ref);\n const isGlobalRecursion = ref === 0;\n const expandedSubroutine = isGlobalRecursion ? createRecursion(0) : (\n // The reffed group might itself contain subroutines, which are expanded during sub-traversal\n cloneCapturingGroup(reffedGroupNode, state.groupOriginByCopy, null)\n );\n let replacement = expandedSubroutine;\n if (!isGlobalRecursion) {\n const reffedGroupFlagMods = getCombinedFlagModsFromFlagNodes(getAllParents(\n reffedGroupNode,\n (p) => p.type === \"Group\" && !!p.flags\n ));\n const reffedGroupFlags = reffedGroupFlagMods ? getNewCurrentFlags(state.globalFlags, reffedGroupFlagMods) : state.globalFlags;\n if (!areFlagsEqual(reffedGroupFlags, state.currentFlags)) {\n replacement = createGroup({\n flags: getFlagModsFromFlags(reffedGroupFlags)\n });\n replacement.body[0].body.push(expandedSubroutine);\n }\n }\n replaceWith(setParentDeep(replacement, parent), { traverse: !isGlobalRecursion });\n }\n};\nvar ThirdPassVisitor = {\n Backreference({ node, parent, replaceWith }, state) {\n if (node.orphan) {\n state.highestOrphanBackref = Math.max(state.highestOrphanBackref, node.ref);\n return;\n }\n const reffedNodes = state.reffedNodesByReferencer.get(node);\n const participants = reffedNodes.filter((reffed) => canParticipateWithNode(reffed, node));\n if (!participants.length) {\n replaceWith(setParentDeep(createLookaroundAssertion({ negate: true }), parent));\n } else if (participants.length > 1) {\n const group = createGroup({\n atomic: true,\n body: participants.reverse().map((reffed) => createAlternative({\n body: [createBackreference(reffed.number)]\n }))\n });\n replaceWith(setParentDeep(group, parent));\n } else {\n node.ref = participants[0].number;\n }\n },\n CapturingGroup({ node }, state) {\n node.number = ++state.numCapturesToLeft;\n if (node.name) {\n if (state.groupsByName.get(node.name).get(node).hasDuplicateNameToRemove) {\n delete node.name;\n }\n }\n },\n Regex: {\n exit({ node }, state) {\n const numCapsNeeded = Math.max(state.highestOrphanBackref - state.numCapturesToLeft, 0);\n for (let i = 0; i < numCapsNeeded; i++) {\n const emptyCapture = createCapturingGroup();\n node.body.at(-1).body.push(emptyCapture);\n }\n }\n },\n Subroutine({ node }, state) {\n if (!node.isRecursive || node.ref === 0) {\n return;\n }\n node.ref = state.reffedNodesByReferencer.get(node).number;\n }\n};\nfunction addParentProperties(root) {\n traverse(root, {\n \"*\"({ node, parent }) {\n node.parent = parent;\n }\n });\n}\nfunction areFlagsEqual(a, b) {\n return a.dotAll === b.dotAll && a.ignoreCase === b.ignoreCase;\n}\nfunction canParticipateWithNode(capture, node) {\n let rightmostPoint = node;\n do {\n if (rightmostPoint.type === \"Regex\") {\n return false;\n }\n if (rightmostPoint.type === \"Alternative\") {\n continue;\n }\n if (rightmostPoint === capture) {\n return false;\n }\n const kidsOfParent = getKids(rightmostPoint.parent);\n for (const kid of kidsOfParent) {\n if (kid === rightmostPoint) {\n break;\n }\n if (kid === capture || isAncestorOf(kid, capture)) {\n return true;\n }\n }\n } while (rightmostPoint = rightmostPoint.parent);\n throw new Error(\"Unexpected path\");\n}\nfunction cloneCapturingGroup(obj, originMap, up, up2) {\n const store = Array.isArray(obj) ? [] : {};\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"parent\") {\n store.parent = Array.isArray(up) ? up2 : up;\n } else if (value && typeof value === \"object\") {\n store[key] = cloneCapturingGroup(value, originMap, store, up);\n } else {\n if (key === \"type\" && value === \"CapturingGroup\") {\n originMap.set(store, originMap.get(obj) ?? obj);\n }\n store[key] = value;\n }\n }\n return store;\n}\nfunction createRecursion(ref) {\n const node = createSubroutine(ref);\n node.isRecursive = true;\n return node;\n}\nfunction getAllParents(node, filterFn) {\n const results = [];\n while (node = node.parent) {\n if (!filterFn || filterFn(node)) {\n results.push(node);\n }\n }\n return results;\n}\nfunction getAndStoreJsGroupName(name, map) {\n if (map.has(name)) {\n return map.get(name);\n }\n const jsName = `$${map.size}_${name.replace(/^[^$_\\p{IDS}]|[^$\\u200C\\u200D\\p{IDC}]/ug, \"_\")}`;\n map.set(name, jsName);\n return jsName;\n}\nfunction getCombinedFlagModsFromFlagNodes(flagNodes) {\n const flagProps = [\"dotAll\", \"ignoreCase\"];\n const combinedFlags = { enable: {}, disable: {} };\n flagNodes.forEach(({ flags }) => {\n flagProps.forEach((prop) => {\n if (flags.enable?.[prop]) {\n delete combinedFlags.disable[prop];\n combinedFlags.enable[prop] = true;\n }\n if (flags.disable?.[prop]) {\n combinedFlags.disable[prop] = true;\n }\n });\n });\n if (!Object.keys(combinedFlags.enable).length) {\n delete combinedFlags.enable;\n }\n if (!Object.keys(combinedFlags.disable).length) {\n delete combinedFlags.disable;\n }\n if (combinedFlags.enable || combinedFlags.disable) {\n return combinedFlags;\n }\n return null;\n}\nfunction getFlagModsFromFlags({ dotAll, ignoreCase }) {\n const mods = {};\n if (dotAll || ignoreCase) {\n mods.enable = {};\n dotAll && (mods.enable.dotAll = true);\n ignoreCase && (mods.enable.ignoreCase = true);\n }\n if (!dotAll || !ignoreCase) {\n mods.disable = {};\n !dotAll && (mods.disable.dotAll = true);\n !ignoreCase && (mods.disable.ignoreCase = true);\n }\n return mods;\n}\nfunction getKids(node) {\n if (!node) {\n throw new Error(\"Node expected\");\n }\n const { body } = node;\n return Array.isArray(body) ? body : body ? [body] : null;\n}\nfunction getLeadingG(els) {\n const firstToConsider = els.find((el) => el.kind === \"search_start\" || isLoneGLookaround(el, { negate: false }) || !isAlwaysZeroLength(el));\n if (!firstToConsider) {\n return null;\n }\n if (firstToConsider.kind === \"search_start\") {\n return firstToConsider;\n }\n if (firstToConsider.type === \"LookaroundAssertion\") {\n return firstToConsider.body[0].body[0];\n }\n if (firstToConsider.type === \"CapturingGroup\" || firstToConsider.type === \"Group\") {\n const gNodesForGroup = [];\n for (const alt of firstToConsider.body) {\n const leadingG = getLeadingG(alt.body);\n if (!leadingG) {\n return null;\n }\n Array.isArray(leadingG) ? gNodesForGroup.push(...leadingG) : gNodesForGroup.push(leadingG);\n }\n return gNodesForGroup;\n }\n return null;\n}\nfunction isAncestorOf(node, descendant) {\n const kids = getKids(node) ?? [];\n for (const kid of kids) {\n if (kid === descendant || isAncestorOf(kid, descendant)) {\n return true;\n }\n }\n return false;\n}\nfunction isAlwaysZeroLength({ type }) {\n return type === \"Assertion\" || type === \"Directive\" || type === \"LookaroundAssertion\";\n}\nfunction isAlwaysNonZeroLength(node) {\n const types = [\n \"Character\",\n \"CharacterClass\",\n \"CharacterSet\"\n ];\n return types.includes(node.type) || node.type === \"Quantifier\" && node.min && types.includes(node.body.type);\n}\nfunction isLoneGLookaround(node, options) {\n const opts = {\n negate: null,\n ...options\n };\n return node.type === \"LookaroundAssertion\" && (opts.negate === null || node.negate === opts.negate) && node.body.length === 1 && hasOnlyChild(node.body[0], {\n type: \"Assertion\",\n kind: \"search_start\"\n });\n}\nfunction isValidJsGroupName(name) {\n return /^[$_\\p{IDS}][$\\u200C\\u200D\\p{IDC}]*$/u.test(name);\n}\nfunction parseFragment(pattern, options) {\n const ast = parse(pattern, {\n ...options,\n // Providing a custom set of Unicode property names avoids converting some JS Unicode\n // properties (ex: `\\p{Alpha}`) to Onig POSIX classes\n unicodePropertyMap: JsUnicodePropertyMap\n });\n const alts = ast.body;\n if (alts.length > 1 || alts[0].body.length > 1) {\n return createGroup({ body: alts });\n }\n return alts[0].body[0];\n}\nfunction setNegate(node, negate) {\n node.negate = negate;\n return node;\n}\nfunction setParent(node, parent) {\n node.parent = parent;\n return node;\n}\nfunction setParentDeep(node, parent) {\n addParentProperties(node);\n node.parent = parent;\n return node;\n}\n\n// src/generate.js\nimport { createAlternative as createAlternative2, createCharacter as createCharacter2, createGroup as createGroup2 } from \"oniguruma-parser/parser\";\nimport { traverse as traverse2 } from \"oniguruma-parser/traverser\";\nfunction generate(ast, options) {\n const opts = getOptions(options);\n const minTargetEs2024 = isMinTarget(opts.target, \"ES2024\");\n const minTargetEs2025 = isMinTarget(opts.target, \"ES2025\");\n const recursionLimit = opts.rules.recursionLimit;\n if (!Number.isInteger(recursionLimit) || recursionLimit < 2 || recursionLimit > 20) {\n throw new Error(\"Invalid recursionLimit; use 2-20\");\n }\n let hasCaseInsensitiveNode = null;\n let hasCaseSensitiveNode = null;\n if (!minTargetEs2025) {\n const iStack = [ast.flags.ignoreCase];\n traverse2(ast, FlagModifierVisitor, {\n getCurrentModI: () => iStack.at(-1),\n popModI() {\n iStack.pop();\n },\n pushModI(isIOn) {\n iStack.push(isIOn);\n },\n setHasCasedChar() {\n if (iStack.at(-1)) {\n hasCaseInsensitiveNode = true;\n } else {\n hasCaseSensitiveNode = true;\n }\n }\n });\n }\n const appliedGlobalFlags = {\n dotAll: ast.flags.dotAll,\n // - Turn global flag i on if a case insensitive node was used and no case sensitive nodes were\n // used (to avoid unnecessary node expansion).\n // - Turn global flag i off if a case sensitive node was used (since case sensitivity can't be\n // forced without the use of ES2025 flag groups)\n ignoreCase: !!((ast.flags.ignoreCase || hasCaseInsensitiveNode) && !hasCaseSensitiveNode)\n };\n let lastNode = ast;\n const state = {\n accuracy: opts.accuracy,\n appliedGlobalFlags,\n captureMap: /* @__PURE__ */ new Map(),\n currentFlags: {\n dotAll: ast.flags.dotAll,\n ignoreCase: ast.flags.ignoreCase\n },\n inCharClass: false,\n lastNode,\n originMap: ast._originMap,\n recursionLimit,\n useAppliedIgnoreCase: !!(!minTargetEs2025 && hasCaseInsensitiveNode && hasCaseSensitiveNode),\n useFlagMods: minTargetEs2025,\n useFlagV: minTargetEs2024,\n verbose: opts.verbose\n };\n function gen(node) {\n state.lastNode = lastNode;\n lastNode = node;\n const fn = throwIfNullish(generator[node.type], `Unexpected node type \"${node.type}\"`);\n return fn(node, state, gen);\n }\n const result = {\n pattern: ast.body.map(gen).join(\"|\"),\n // Could reset `lastNode` at this point via `lastNode = ast`, but it isn't needed by flags\n flags: gen(ast.flags),\n options: { ...ast.options }\n };\n if (!minTargetEs2024) {\n delete result.options.force.v;\n result.options.disable.v = true;\n result.options.unicodeSetsPlugin = null;\n }\n result._captureTransfers = /* @__PURE__ */ new Map();\n result._hiddenCaptures = [];\n state.captureMap.forEach((value, key) => {\n if (value.hidden) {\n result._hiddenCaptures.push(key);\n }\n if (value.transferTo) {\n getOrInsert(result._captureTransfers, value.transferTo, []).push(key);\n }\n });\n return result;\n}\nvar FlagModifierVisitor = {\n \"*\": {\n enter({ node }, state) {\n if (isAnyGroup(node)) {\n const currentModI = state.getCurrentModI();\n state.pushModI(\n node.flags ? getNewCurrentFlags({ ignoreCase: currentModI }, node.flags).ignoreCase : currentModI\n );\n }\n },\n exit({ node }, state) {\n if (isAnyGroup(node)) {\n state.popModI();\n }\n }\n },\n Backreference(_, state) {\n state.setHasCasedChar();\n },\n Character({ node }, state) {\n if (charHasCase(cp(node.value))) {\n state.setHasCasedChar();\n }\n },\n CharacterClassRange({ node, skip }, state) {\n skip();\n if (getCasesOutsideCharClassRange(node, { firstOnly: true }).length) {\n state.setHasCasedChar();\n }\n },\n CharacterSet({ node }, state) {\n if (node.kind === \"property\" && UnicodePropertiesWithSpecificCase.has(node.value)) {\n state.setHasCasedChar();\n }\n }\n};\nvar generator = {\n /**\n @param {AlternativeNode} node\n */\n Alternative({ body }, _, gen) {\n return body.map(gen).join(\"\");\n },\n /**\n @param {AssertionNode} node\n */\n Assertion({ kind, negate }) {\n if (kind === \"string_end\") {\n return \"$\";\n }\n if (kind === \"string_start\") {\n return \"^\";\n }\n if (kind === \"word_boundary\") {\n return negate ? r`\\B` : r`\\b`;\n }\n throw new Error(`Unexpected assertion kind \"${kind}\"`);\n },\n /**\n @param {BackreferenceNode} node\n */\n Backreference({ ref }, state) {\n if (typeof ref !== \"number\") {\n throw new Error(\"Unexpected named backref in transformed AST\");\n }\n if (!state.useFlagMods && state.accuracy === \"strict\" && state.currentFlags.ignoreCase && !state.captureMap.get(ref).ignoreCase) {\n throw new Error(\"Use of case-insensitive backref to case-sensitive group requires target ES2025 or non-strict accuracy\");\n }\n return \"\\\\\" + ref;\n },\n /**\n @param {CapturingGroupNode} node\n */\n CapturingGroup(node, state, gen) {\n const { body, name, number } = node;\n const data = { ignoreCase: state.currentFlags.ignoreCase };\n const origin = state.originMap.get(node);\n if (origin) {\n data.hidden = true;\n if (number > origin.number) {\n data.transferTo = origin.number;\n }\n }\n state.captureMap.set(number, data);\n return `(${name ? `?<${name}>` : \"\"}${body.map(gen).join(\"|\")})`;\n },\n /**\n @param {CharacterNode} node\n */\n Character({ value }, state) {\n const char = cp(value);\n const escaped = getCharEscape(value, {\n escDigit: state.lastNode.type === \"Backreference\",\n inCharClass: state.inCharClass,\n useFlagV: state.useFlagV\n });\n if (escaped !== char) {\n return escaped;\n }\n if (state.useAppliedIgnoreCase && state.currentFlags.ignoreCase && charHasCase(char)) {\n const cases = getIgnoreCaseMatchChars(char);\n return state.inCharClass ? cases.join(\"\") : cases.length > 1 ? `[${cases.join(\"\")}]` : cases[0];\n }\n return char;\n },\n /**\n @param {CharacterClassNode} node\n */\n CharacterClass(node, state, gen) {\n const { kind, negate, parent } = node;\n let { body } = node;\n if (kind === \"intersection\" && !state.useFlagV) {\n throw new Error(\"Use of character class intersection requires min target ES2024\");\n }\n if (envFlags.bugFlagVLiteralHyphenIsRange && state.useFlagV && body.some(isLiteralHyphen)) {\n body = [createCharacter2(45), ...body.filter((kid) => !isLiteralHyphen(kid))];\n }\n const genClass = () => `[${negate ? \"^\" : \"\"}${body.map(gen).join(kind === \"intersection\" ? \"&&\" : \"\")}]`;\n if (!state.inCharClass) {\n if (\n // Already established `kind !== 'intersection'` if `!state.useFlagV`; don't check again\n (!state.useFlagV || envFlags.bugNestedClassIgnoresNegation) && !negate\n ) {\n const negatedChildClasses = body.filter(\n (kid) => kid.type === \"CharacterClass\" && kid.kind === \"union\" && kid.negate\n );\n if (negatedChildClasses.length) {\n const group = createGroup2();\n const groupFirstAlt = group.body[0];\n group.parent = parent;\n groupFirstAlt.parent = group;\n body = body.filter((kid) => !negatedChildClasses.includes(kid));\n node.body = body;\n if (body.length) {\n node.parent = groupFirstAlt;\n groupFirstAlt.body.push(node);\n } else {\n group.body.pop();\n }\n negatedChildClasses.forEach((cc) => {\n const newAlt = createAlternative2({ body: [cc] });\n cc.parent = newAlt;\n newAlt.parent = group;\n group.body.push(newAlt);\n });\n return gen(group);\n }\n }\n state.inCharClass = true;\n const result = genClass();\n state.inCharClass = false;\n return result;\n }\n const firstEl = body[0];\n if (\n // Already established that the parent is a char class via `inCharClass`; don't check again\n kind === \"union\" && !negate && firstEl && // Allows many nested classes to work with `target` ES2018 which doesn't support nesting\n ((!state.useFlagV || !state.verbose) && parent.kind === \"union\" && !(envFlags.bugFlagVLiteralHyphenIsRange && state.useFlagV) || !state.verbose && parent.kind === \"intersection\" && // JS doesn't allow intersection with union or ranges\n body.length === 1 && firstEl.type !== \"CharacterClassRange\")\n ) {\n return body.map(gen).join(\"\");\n }\n if (!state.useFlagV && parent.type === \"CharacterClass\") {\n throw new Error(\"Uses nested character class in a way that requires min target ES2024\");\n }\n return genClass();\n },\n /**\n @param {CharacterClassRangeNode} node\n */\n CharacterClassRange(node, state) {\n const min = node.min.value;\n const max = node.max.value;\n const escOpts = {\n escDigit: false,\n inCharClass: true,\n useFlagV: state.useFlagV\n };\n const minStr = getCharEscape(min, escOpts);\n const maxStr = getCharEscape(max, escOpts);\n const extraChars = /* @__PURE__ */ new Set();\n if (state.useAppliedIgnoreCase && state.currentFlags.ignoreCase) {\n const charsOutsideRange = getCasesOutsideCharClassRange(node);\n const ranges = getCodePointRangesFromChars(charsOutsideRange);\n ranges.forEach((value) => {\n extraChars.add(\n Array.isArray(value) ? `${getCharEscape(value[0], escOpts)}-${getCharEscape(value[1], escOpts)}` : getCharEscape(value, escOpts)\n );\n });\n }\n return `${minStr}-${maxStr}${[...extraChars].join(\"\")}`;\n },\n /**\n @param {CharacterSetNode} node\n */\n CharacterSet({ kind, negate, value, key }, state) {\n if (kind === \"dot\") {\n return state.currentFlags.dotAll ? state.appliedGlobalFlags.dotAll || state.useFlagMods ? \".\" : \"[^]\" : (\n // Onig's only line break char is line feed, unlike JS\n r`[^\\n]`\n );\n }\n if (kind === \"digit\") {\n return negate ? r`\\D` : r`\\d`;\n }\n if (kind === \"property\") {\n if (state.useAppliedIgnoreCase && state.currentFlags.ignoreCase && UnicodePropertiesWithSpecificCase.has(value)) {\n throw new Error(`Unicode property \"${value}\" can't be case-insensitive when other chars have specific case`);\n }\n return `${negate ? r`\\P` : r`\\p`}{${key ? `${key}=` : \"\"}${value}}`;\n }\n if (kind === \"word\") {\n return negate ? r`\\W` : r`\\w`;\n }\n throw new Error(`Unexpected character set kind \"${kind}\"`);\n },\n /**\n @param {FlagsNode} node\n */\n Flags(node, state) {\n return (\n // The transformer should never turn on the properties for flags d, g, m since Onig doesn't\n // have equivs. Flag m is never used since Onig uses different line break chars than JS\n // (node.hasIndices ? 'd' : '') +\n // (node.global ? 'g' : '') +\n // (node.multiline ? 'm' : '') +\n (state.appliedGlobalFlags.ignoreCase ? \"i\" : \"\") + (node.dotAll ? \"s\" : \"\") + (node.sticky ? \"y\" : \"\")\n );\n },\n /**\n @param {GroupNode} node\n */\n Group({ atomic: atomic2, body, flags, parent }, state, gen) {\n const currentFlags = state.currentFlags;\n if (flags) {\n state.currentFlags = getNewCurrentFlags(currentFlags, flags);\n }\n const contents = body.map(gen).join(\"|\");\n const result = !state.verbose && body.length === 1 && // Single alt\n parent.type !== \"Quantifier\" && !atomic2 && (!state.useFlagMods || !flags) ? contents : `(?${getGroupPrefix(atomic2, flags, state.useFlagMods)}${contents})`;\n state.currentFlags = currentFlags;\n return result;\n },\n /**\n @param {LookaroundAssertionNode} node\n */\n LookaroundAssertion({ body, kind, negate }, _, gen) {\n const prefix = `${kind === \"lookahead\" ? \"\" : \"<\"}${negate ? \"!\" : \"=\"}`;\n return `(?${prefix}${body.map(gen).join(\"|\")})`;\n },\n /**\n @param {QuantifierNode} node\n */\n Quantifier(node, _, gen) {\n return gen(node.body) + getQuantifierStr(node);\n },\n /**\n @param {SubroutineNode & {isRecursive: true}} node\n */\n Subroutine({ isRecursive, ref }, state) {\n if (!isRecursive) {\n throw new Error(\"Unexpected non-recursive subroutine in transformed AST\");\n }\n const limit = state.recursionLimit;\n return ref === 0 ? `(?R=${limit})` : r`\\g<${ref}&R=${limit}>`;\n }\n};\nvar BaseEscapeChars = /* @__PURE__ */ new Set([\n \"$\",\n \"(\",\n \")\",\n \"*\",\n \"+\",\n \".\",\n \"?\",\n \"[\",\n \"\\\\\",\n \"]\",\n \"^\",\n \"{\",\n \"|\",\n \"}\"\n]);\nvar CharClassEscapeChars = /* @__PURE__ */ new Set([\n \"-\",\n \"\\\\\",\n \"]\",\n \"^\",\n // Literal `[` doesn't require escaping with flag u, but this can help work around regex source\n // linters and regex syntax processors that expect unescaped `[` to create a nested class\n \"[\"\n]);\nvar CharClassEscapeCharsFlagV = /* @__PURE__ */ new Set([\n \"(\",\n \")\",\n \"-\",\n \"/\",\n \"[\",\n \"\\\\\",\n \"]\",\n \"^\",\n \"{\",\n \"|\",\n \"}\",\n // Double punctuators; also includes already-listed `-` and `^`\n \"!\",\n \"#\",\n \"$\",\n \"%\",\n \"&\",\n \"*\",\n \"+\",\n \",\",\n \".\",\n \":\",\n \";\",\n \"<\",\n \"=\",\n \">\",\n \"?\",\n \"@\",\n \"`\",\n \"~\"\n]);\nvar CharCodeEscapeMap = /* @__PURE__ */ new Map([\n [9, r`\\t`],\n // horizontal tab\n [10, r`\\n`],\n // line feed\n [11, r`\\v`],\n // vertical tab\n [12, r`\\f`],\n // form feed\n [13, r`\\r`],\n // carriage return\n [8232, r`\\u2028`],\n // line separator\n [8233, r`\\u2029`],\n // paragraph separator\n [65279, r`\\uFEFF`]\n // ZWNBSP/BOM\n]);\nvar casedRe = /^\\p{Cased}$/u;\nfunction charHasCase(char) {\n return casedRe.test(char);\n}\nfunction getCasesOutsideCharClassRange(node, options) {\n const firstOnly = !!options?.firstOnly;\n const min = node.min.value;\n const max = node.max.value;\n const found = [];\n if (min < 65 && (max === 65535 || max >= 131071) || min === 65536 && max >= 131071) {\n return found;\n }\n for (let i = min; i <= max; i++) {\n const char = cp(i);\n if (!charHasCase(char)) {\n continue;\n }\n const charsOutsideRange = getIgnoreCaseMatchChars(char).filter((caseOfChar) => {\n const num = caseOfChar.codePointAt(0);\n return num < min || num > max;\n });\n if (charsOutsideRange.length) {\n found.push(...charsOutsideRange);\n if (firstOnly) {\n break;\n }\n }\n }\n return found;\n}\nfunction getCharEscape(codePoint, { escDigit, inCharClass, useFlagV }) {\n if (CharCodeEscapeMap.has(codePoint)) {\n return CharCodeEscapeMap.get(codePoint);\n }\n if (\n // Control chars, etc.; condition modeled on the Chrome developer console's display for strings\n codePoint < 32 || codePoint > 126 && codePoint < 160 || // Unicode planes 4-16; unassigned, special purpose, and private use area\n codePoint > 262143 || // Avoid corrupting a preceding backref by immediately following it with a literal digit\n escDigit && isDigitCharCode(codePoint)\n ) {\n return codePoint > 255 ? `\\\\u{${codePoint.toString(16).toUpperCase()}}` : `\\\\x${codePoint.toString(16).toUpperCase().padStart(2, \"0\")}`;\n }\n const escapeChars = inCharClass ? useFlagV ? CharClassEscapeCharsFlagV : CharClassEscapeChars : BaseEscapeChars;\n const char = cp(codePoint);\n return (escapeChars.has(char) ? \"\\\\\" : \"\") + char;\n}\nfunction getCodePointRangesFromChars(chars) {\n const codePoints = chars.map((char) => char.codePointAt(0)).sort((a, b) => a - b);\n const values = [];\n let start = null;\n for (let i = 0; i < codePoints.length; i++) {\n if (codePoints[i + 1] === codePoints[i] + 1) {\n start ??= codePoints[i];\n } else if (start === null) {\n values.push(codePoints[i]);\n } else {\n values.push([start, codePoints[i]]);\n start = null;\n }\n }\n return values;\n}\nfunction getGroupPrefix(atomic2, flagMods, useFlagMods) {\n if (atomic2) {\n return \">\";\n }\n let mods = \"\";\n if (flagMods && useFlagMods) {\n const { enable, disable } = flagMods;\n mods = (enable?.ignoreCase ? \"i\" : \"\") + (enable?.dotAll ? \"s\" : \"\") + (disable ? \"-\" : \"\") + (disable?.ignoreCase ? \"i\" : \"\") + (disable?.dotAll ? \"s\" : \"\");\n }\n return `${mods}:`;\n}\nfunction getQuantifierStr({ kind, max, min }) {\n let base;\n if (!min && max === 1) {\n base = \"?\";\n } else if (!min && max === Infinity) {\n base = \"*\";\n } else if (min === 1 && max === Infinity) {\n base = \"+\";\n } else if (min === max) {\n base = `{${min}}`;\n } else {\n base = `{${min},${max === Infinity ? \"\" : max}}`;\n }\n return base + {\n greedy: \"\",\n lazy: \"?\",\n possessive: \"+\"\n }[kind];\n}\nfunction isAnyGroup({ type }) {\n return type === \"CapturingGroup\" || type === \"Group\" || type === \"LookaroundAssertion\";\n}\nfunction isDigitCharCode(value) {\n return value > 47 && value < 58;\n}\nfunction isLiteralHyphen({ type, value }) {\n return type === \"Character\" && value === 45;\n}\n\n// src/subclass.js\nvar EmulatedRegExp = class _EmulatedRegExp extends RegExp {\n /**\n @type {Map<number, {\n hidden?: true;\n transferTo?: number;\n }>}\n */\n #captureMap = /* @__PURE__ */ new Map();\n /**\n @type {RegExp | EmulatedRegExp | null}\n */\n #compiled = null;\n /**\n @type {string}\n */\n #pattern;\n /**\n @type {Map<number, string>?}\n */\n #nameMap = null;\n /**\n @type {string?}\n */\n #strategy = null;\n /**\n Can be used to serialize the instance.\n @type {EmulatedRegExpOptions}\n */\n rawOptions = {};\n // Override the getter with one that works with lazy-compiled regexes\n get source() {\n return this.#pattern || \"(?:)\";\n }\n /**\n @overload\n @param {string} pattern\n @param {string} [flags]\n @param {EmulatedRegExpOptions} [options]\n */\n /**\n @overload\n @param {EmulatedRegExp} pattern\n @param {string} [flags]\n */\n constructor(pattern, flags, options) {\n const lazyCompile = !!options?.lazyCompile;\n if (pattern instanceof RegExp) {\n if (options) {\n throw new Error(\"Cannot provide options when copying a regexp\");\n }\n const re = pattern;\n super(re, flags);\n this.#pattern = re.source;\n if (re instanceof _EmulatedRegExp) {\n this.#captureMap = re.#captureMap;\n this.#nameMap = re.#nameMap;\n this.#strategy = re.#strategy;\n this.rawOptions = re.rawOptions;\n }\n } else {\n const opts = {\n hiddenCaptures: [],\n strategy: null,\n transfers: [],\n ...options\n };\n super(lazyCompile ? \"\" : pattern, flags);\n this.#pattern = pattern;\n this.#captureMap = createCaptureMap(opts.hiddenCaptures, opts.transfers);\n this.#strategy = opts.strategy;\n this.rawOptions = options ?? {};\n }\n if (!lazyCompile) {\n this.#compiled = this;\n }\n }\n /**\n Called internally by all String/RegExp methods that use regexes.\n @override\n @param {string} str\n @returns {RegExpExecArray?}\n */\n exec(str) {\n if (!this.#compiled) {\n const { lazyCompile, ...rest } = this.rawOptions;\n this.#compiled = new _EmulatedRegExp(this.#pattern, this.flags, rest);\n }\n const useLastIndex = this.global || this.sticky;\n const pos = this.lastIndex;\n if (this.#strategy === \"clip_search\" && useLastIndex && pos) {\n this.lastIndex = 0;\n const match = this.#execCore(str.slice(pos));\n if (match) {\n adjustMatchDetailsForOffset(match, pos, str, this.hasIndices);\n this.lastIndex += pos;\n }\n return match;\n }\n return this.#execCore(str);\n }\n /**\n Adds support for hidden and transfer captures.\n @param {string} str\n @returns\n */\n #execCore(str) {\n this.#compiled.lastIndex = this.lastIndex;\n const match = super.exec.call(this.#compiled, str);\n this.lastIndex = this.#compiled.lastIndex;\n if (!match || !this.#captureMap.size) {\n return match;\n }\n const matchCopy = [...match];\n match.length = 1;\n let indicesCopy;\n if (this.hasIndices) {\n indicesCopy = [...match.indices];\n match.indices.length = 1;\n }\n const mappedNums = [0];\n for (let i = 1; i < matchCopy.length; i++) {\n const { hidden, transferTo } = this.#captureMap.get(i) ?? {};\n if (hidden) {\n mappedNums.push(null);\n } else {\n mappedNums.push(match.length);\n match.push(matchCopy[i]);\n if (this.hasIndices) {\n match.indices.push(indicesCopy[i]);\n }\n }\n if (transferTo && matchCopy[i] !== void 0) {\n const to = mappedNums[transferTo];\n if (!to) {\n throw new Error(`Invalid capture transfer to \"${to}\"`);\n }\n match[to] = matchCopy[i];\n if (this.hasIndices) {\n match.indices[to] = indicesCopy[i];\n }\n if (match.groups) {\n if (!this.#nameMap) {\n this.#nameMap = createNameMap(this.source);\n }\n const name = this.#nameMap.get(transferTo);\n if (name) {\n match.groups[name] = matchCopy[i];\n if (this.hasIndices) {\n match.indices.groups[name] = indicesCopy[i];\n }\n }\n }\n }\n }\n return match;\n }\n};\nfunction adjustMatchDetailsForOffset(match, offset, input, hasIndices) {\n match.index += offset;\n match.input = input;\n if (hasIndices) {\n const indices = match.indices;\n for (let i = 0; i < indices.length; i++) {\n const arr = indices[i];\n if (arr) {\n indices[i] = [arr[0] + offset, arr[1] + offset];\n }\n }\n const groupIndices = indices.groups;\n if (groupIndices) {\n Object.keys(groupIndices).forEach((key) => {\n const arr = groupIndices[key];\n if (arr) {\n groupIndices[key] = [arr[0] + offset, arr[1] + offset];\n }\n });\n }\n }\n}\nfunction createCaptureMap(hiddenCaptures, transfers) {\n const captureMap = /* @__PURE__ */ new Map();\n for (const num of hiddenCaptures) {\n captureMap.set(num, {\n hidden: true\n });\n }\n for (const [to, from] of transfers) {\n for (const num of from) {\n getOrInsert(captureMap, num, {}).transferTo = to;\n }\n }\n return captureMap;\n}\nfunction createNameMap(pattern) {\n const re = /(?<capture>\\((?:\\?<(?![=!])(?<name>[^>]+)>|(?!\\?)))|\\\\?./gsu;\n const map = /* @__PURE__ */ new Map();\n let numCharClassesOpen = 0;\n let numCaptures = 0;\n let match;\n while (match = re.exec(pattern)) {\n const { 0: m, groups: { capture, name } } = match;\n if (m === \"[\") {\n numCharClassesOpen++;\n } else if (!numCharClassesOpen) {\n if (capture) {\n numCaptures++;\n if (name) {\n map.set(numCaptures, name);\n }\n }\n } else if (m === \"]\") {\n numCharClassesOpen--;\n }\n }\n return map;\n}\n\n// src/index.js\nimport { parse as parse2 } from \"oniguruma-parser/parser\";\nimport { atomic, possessive } from \"regex/internals\";\nimport { recursion } from \"regex-recursion\";\nfunction toRegExp(pattern, options) {\n const d = toRegExpDetails(pattern, options);\n if (d.options) {\n return new EmulatedRegExp(d.pattern, d.flags, d.options);\n }\n return new RegExp(d.pattern, d.flags);\n}\nfunction toRegExpDetails(pattern, options) {\n const opts = getOptions(options);\n const onigurumaAst = parse2(pattern, {\n flags: opts.flags,\n normalizeUnknownPropertyNames: true,\n rules: {\n captureGroup: opts.rules.captureGroup,\n singleline: opts.rules.singleline\n },\n skipBackrefValidation: opts.rules.allowOrphanBackrefs,\n unicodePropertyMap: JsUnicodePropertyMap\n });\n const regexPlusAst = transform(onigurumaAst, {\n accuracy: opts.accuracy,\n asciiWordBoundaries: opts.rules.asciiWordBoundaries,\n avoidSubclass: opts.avoidSubclass,\n bestEffortTarget: opts.target\n });\n const generated = generate(regexPlusAst, opts);\n const recursionResult = recursion(generated.pattern, {\n captureTransfers: generated._captureTransfers,\n hiddenCaptures: generated._hiddenCaptures,\n mode: \"external\"\n });\n const possessiveResult = possessive(recursionResult.pattern);\n const atomicResult = atomic(possessiveResult.pattern, {\n captureTransfers: recursionResult.captureTransfers,\n hiddenCaptures: recursionResult.hiddenCaptures\n });\n const details = {\n pattern: atomicResult.pattern,\n flags: `${opts.hasIndices ? \"d\" : \"\"}${opts.global ? \"g\" : \"\"}${generated.flags}${generated.options.disable.v ? \"u\" : \"v\"}`\n };\n if (opts.avoidSubclass) {\n if (opts.lazyCompileLength !== Infinity) {\n throw new Error(\"Lazy compilation requires subclass\");\n }\n } else {\n const hiddenCaptures = atomicResult.hiddenCaptures.sort((a, b) => a - b);\n const transfers = Array.from(atomicResult.captureTransfers);\n const strategy = regexPlusAst._strategy;\n const lazyCompile = details.pattern.length >= opts.lazyCompileLength;\n if (hiddenCaptures.length || transfers.length || strategy || lazyCompile) {\n details.options = {\n ...hiddenCaptures.length && { hiddenCaptures },\n ...transfers.length && { transfers },\n ...strategy && { strategy },\n ...lazyCompile && { lazyCompile }\n };\n }\n }\n return details;\n}\nexport {\n EmulatedRegExp,\n toRegExp,\n toRegExpDetails\n};\n//# sourceMappingURL=index.js.map\n","const MAX = 4294967295;\nclass JavaScriptScanner {\n constructor(patterns, options = {}) {\n this.patterns = patterns;\n this.options = options;\n const {\n forgiving = false,\n cache,\n regexConstructor\n } = options;\n if (!regexConstructor) {\n throw new Error(\"Option `regexConstructor` is not provided\");\n }\n this.regexps = patterns.map((p) => {\n if (typeof p !== \"string\") {\n return p;\n }\n const cached = cache?.get(p);\n if (cached) {\n if (cached instanceof RegExp) {\n return cached;\n }\n if (forgiving)\n return null;\n throw cached;\n }\n try {\n const regex = regexConstructor(p);\n cache?.set(p, regex);\n return regex;\n } catch (e) {\n cache?.set(p, e);\n if (forgiving)\n return null;\n throw e;\n }\n });\n }\n regexps;\n findNextMatchSync(string, startPosition, _options) {\n const str = typeof string === \"string\" ? string : string.content;\n const pending = [];\n function toResult(index, match, offset = 0) {\n return {\n index,\n captureIndices: match.indices.map((indice) => {\n if (indice == null) {\n return {\n start: MAX,\n end: MAX,\n length: 0\n };\n }\n return {\n start: indice[0] + offset,\n end: indice[1] + offset,\n length: indice[1] - indice[0]\n };\n })\n };\n }\n for (let i = 0; i < this.regexps.length; i++) {\n const regexp = this.regexps[i];\n if (!regexp)\n continue;\n try {\n regexp.lastIndex = startPosition;\n const match = regexp.exec(str);\n if (!match)\n continue;\n if (match.index === startPosition) {\n return toResult(i, match, 0);\n }\n pending.push([i, match, 0]);\n } catch (e) {\n if (this.options.forgiving)\n continue;\n throw e;\n }\n }\n if (pending.length) {\n const minIndex = Math.min(...pending.map((m) => m[1].index));\n for (const [i, match, offset] of pending) {\n if (match.index === minIndex) {\n return toResult(i, match, offset);\n }\n }\n }\n return null;\n }\n}\n\nexport { JavaScriptScanner as J };\n","import { toRegExp } from 'oniguruma-to-es';\nimport { J as JavaScriptScanner } from './shared/engine-javascript.hzpS1_41.mjs';\n\nfunction defaultJavaScriptRegexConstructor(pattern, options) {\n return toRegExp(\n pattern,\n {\n global: true,\n hasIndices: true,\n // This has no benefit for the standard JS engine, but it avoids a perf penalty for\n // precompiled grammars when constructing extremely long patterns that aren't always used\n lazyCompileLength: 3e3,\n rules: {\n // Needed since TextMate grammars merge backrefs across patterns\n allowOrphanBackrefs: true,\n // Improves search performance for generated regexes\n asciiWordBoundaries: true,\n // Follow `vscode-oniguruma` which enables this Oniguruma option by default\n captureGroup: true,\n // Oniguruma uses depth limit `20`; lowered here to keep regexes shorter and maybe\n // sometimes faster, but can be increased if issues reported due to low limit\n recursionLimit: 5,\n // Oniguruma option for `^`->`\\A`, `$`->`\\Z`; improves search performance without any\n // change in meaning since TM grammars search line by line\n singleline: true\n },\n ...options\n }\n );\n}\nfunction createJavaScriptRegexEngine(options = {}) {\n const _options = Object.assign(\n {\n target: \"auto\",\n cache: /* @__PURE__ */ new Map()\n },\n options\n );\n _options.regexConstructor ||= (pattern) => defaultJavaScriptRegexConstructor(pattern, { target: _options.target });\n return {\n createScanner(patterns) {\n return new JavaScriptScanner(patterns, _options);\n },\n createString(s) {\n return {\n content: s\n };\n }\n };\n}\n\nexport { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor };\n","import { J as JavaScriptScanner } from './shared/engine-javascript.hzpS1_41.mjs';\n\nfunction createJavaScriptRawEngine() {\n const options = {\n cache: /* @__PURE__ */ new Map(),\n regexConstructor: () => {\n throw new Error(\"JavaScriptRawEngine: only support precompiled grammar\");\n }\n };\n return {\n createScanner(patterns) {\n return new JavaScriptScanner(patterns, options);\n },\n createString(s) {\n return {\n content: s\n };\n }\n };\n}\n\nexport { createJavaScriptRawEngine };\n","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nexport { ShikiError };\n","// src/utils.ts\nfunction clone(something) {\n return doClone(something);\n}\nfunction doClone(something) {\n if (Array.isArray(something)) {\n return cloneArray(something);\n }\n if (something instanceof RegExp) {\n return something;\n }\n if (typeof something === \"object\") {\n return cloneObj(something);\n }\n return something;\n}\nfunction cloneArray(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = doClone(arr[i]);\n }\n return r;\n}\nfunction cloneObj(obj) {\n let r = {};\n for (let key in obj) {\n r[key] = doClone(obj[key]);\n }\n return r;\n}\nfunction mergeObjects(target, ...sources) {\n sources.forEach((source) => {\n for (let key in source) {\n target[key] = source[key];\n }\n });\n return target;\n}\nfunction basename(path) {\n const idx = ~path.lastIndexOf(\"/\") || ~path.lastIndexOf(\"\\\\\");\n if (idx === 0) {\n return path;\n } else if (~idx === path.length - 1) {\n return basename(path.substring(0, path.length - 1));\n } else {\n return path.substr(~idx + 1);\n }\n}\nvar CAPTURING_REGEX_SOURCE = /\\$(\\d+)|\\${(\\d+):\\/(downcase|upcase)}/g;\nvar RegexSource = class {\n static hasCaptures(regexSource) {\n if (regexSource === null) {\n return false;\n }\n CAPTURING_REGEX_SOURCE.lastIndex = 0;\n return CAPTURING_REGEX_SOURCE.test(regexSource);\n }\n static replaceCaptures(regexSource, captureSource, captureIndices) {\n return regexSource.replace(CAPTURING_REGEX_SOURCE, (match, index, commandIndex, command) => {\n let capture = captureIndices[parseInt(index || commandIndex, 10)];\n if (capture) {\n let result = captureSource.substring(capture.start, capture.end);\n while (result[0] === \".\") {\n result = result.substring(1);\n }\n switch (command) {\n case \"downcase\":\n return result.toLowerCase();\n case \"upcase\":\n return result.toUpperCase();\n default:\n return result;\n }\n } else {\n return match;\n }\n });\n }\n};\nfunction strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\nfunction strArrCmp(a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (!a) {\n return -1;\n }\n if (!b) {\n return 1;\n }\n let len1 = a.length;\n let len2 = b.length;\n if (len1 === len2) {\n for (let i = 0; i < len1; i++) {\n let res = strcmp(a[i], b[i]);\n if (res !== 0) {\n return res;\n }\n }\n return 0;\n }\n return len1 - len2;\n}\nfunction isValidHexColor(hex) {\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{8}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{3}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{4}$/i.test(hex)) {\n return true;\n }\n return false;\n}\nfunction escapeRegExpCharacters(value) {\n return value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, \"\\\\$&\");\n}\nvar CachedFn = class {\n constructor(fn) {\n this.fn = fn;\n }\n cache = /* @__PURE__ */ new Map();\n get(key) {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n const value = this.fn(key);\n this.cache.set(key, value);\n return value;\n }\n};\n\n// src/theme.ts\nvar Theme = class {\n constructor(_colorMap, _defaults, _root) {\n this._colorMap = _colorMap;\n this._defaults = _defaults;\n this._root = _root;\n }\n static createFromRawTheme(source, colorMap) {\n return this.createFromParsedTheme(parseTheme(source), colorMap);\n }\n static createFromParsedTheme(source, colorMap) {\n return resolveParsedThemeRules(source, colorMap);\n }\n _cachedMatchRoot = new CachedFn(\n (scopeName) => this._root.match(scopeName)\n );\n getColorMap() {\n return this._colorMap.getColorMap();\n }\n getDefaults() {\n return this._defaults;\n }\n match(scopePath) {\n if (scopePath === null) {\n return this._defaults;\n }\n const scopeName = scopePath.scopeName;\n const matchingTrieElements = this._cachedMatchRoot.get(scopeName);\n const effectiveRule = matchingTrieElements.find(\n (v) => _scopePathMatchesParentScopes(scopePath.parent, v.parentScopes)\n );\n if (!effectiveRule) {\n return null;\n }\n return new StyleAttributes(\n effectiveRule.fontStyle,\n effectiveRule.foreground,\n effectiveRule.background\n );\n }\n};\nvar ScopeStack = class _ScopeStack {\n constructor(parent, scopeName) {\n this.parent = parent;\n this.scopeName = scopeName;\n }\n static push(path, scopeNames) {\n for (const name of scopeNames) {\n path = new _ScopeStack(path, name);\n }\n return path;\n }\n static from(...segments) {\n let result = null;\n for (let i = 0; i < segments.length; i++) {\n result = new _ScopeStack(result, segments[i]);\n }\n return result;\n }\n push(scopeName) {\n return new _ScopeStack(this, scopeName);\n }\n getSegments() {\n let item = this;\n const result = [];\n while (item) {\n result.push(item.scopeName);\n item = item.parent;\n }\n result.reverse();\n return result;\n }\n toString() {\n return this.getSegments().join(\" \");\n }\n extends(other) {\n if (this === other) {\n return true;\n }\n if (this.parent === null) {\n return false;\n }\n return this.parent.extends(other);\n }\n getExtensionIfDefined(base) {\n const result = [];\n let item = this;\n while (item && item !== base) {\n result.push(item.scopeName);\n item = item.parent;\n }\n return item === base ? result.reverse() : void 0;\n }\n};\nfunction _scopePathMatchesParentScopes(scopePath, parentScopes) {\n if (parentScopes.length === 0) {\n return true;\n }\n for (let index = 0; index < parentScopes.length; index++) {\n let scopePattern = parentScopes[index];\n let scopeMustMatch = false;\n if (scopePattern === \">\") {\n if (index === parentScopes.length - 1) {\n return false;\n }\n scopePattern = parentScopes[++index];\n scopeMustMatch = true;\n }\n while (scopePath) {\n if (_matchesScope(scopePath.scopeName, scopePattern)) {\n break;\n }\n if (scopeMustMatch) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n if (!scopePath) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n return true;\n}\nfunction _matchesScope(scopeName, scopePattern) {\n return scopePattern === scopeName || scopeName.startsWith(scopePattern) && scopeName[scopePattern.length] === \".\";\n}\nvar StyleAttributes = class {\n constructor(fontStyle, foregroundId, backgroundId) {\n this.fontStyle = fontStyle;\n this.foregroundId = foregroundId;\n this.backgroundId = backgroundId;\n }\n};\nfunction parseTheme(source) {\n if (!source) {\n return [];\n }\n if (!source.settings || !Array.isArray(source.settings)) {\n return [];\n }\n let settings = source.settings;\n let result = [], resultLen = 0;\n for (let i = 0, len = settings.length; i < len; i++) {\n let entry = settings[i];\n if (!entry.settings) {\n continue;\n }\n let scopes;\n if (typeof entry.scope === \"string\") {\n let _scope = entry.scope;\n _scope = _scope.replace(/^[,]+/, \"\");\n _scope = _scope.replace(/[,]+$/, \"\");\n scopes = _scope.split(\",\");\n } else if (Array.isArray(entry.scope)) {\n scopes = entry.scope;\n } else {\n scopes = [\"\"];\n }\n let fontStyle = -1 /* NotSet */;\n if (typeof entry.settings.fontStyle === \"string\") {\n fontStyle = 0 /* None */;\n let segments = entry.settings.fontStyle.split(\" \");\n for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n let segment = segments[j];\n switch (segment) {\n case \"italic\":\n fontStyle = fontStyle | 1 /* Italic */;\n break;\n case \"bold\":\n fontStyle = fontStyle | 2 /* Bold */;\n break;\n case \"underline\":\n fontStyle = fontStyle | 4 /* Underline */;\n break;\n case \"strikethrough\":\n fontStyle = fontStyle | 8 /* Strikethrough */;\n break;\n }\n }\n }\n let foreground = null;\n if (typeof entry.settings.foreground === \"string\" && isValidHexColor(entry.settings.foreground)) {\n foreground = entry.settings.foreground;\n }\n let background = null;\n if (typeof entry.settings.background === \"string\" && isValidHexColor(entry.settings.background)) {\n background = entry.settings.background;\n }\n for (let j = 0, lenJ = scopes.length; j < lenJ; j++) {\n let _scope = scopes[j].trim();\n let segments = _scope.split(\" \");\n let scope = segments[segments.length - 1];\n let parentScopes = null;\n if (segments.length > 1) {\n parentScopes = segments.slice(0, segments.length - 1);\n parentScopes.reverse();\n }\n result[resultLen++] = new ParsedThemeRule(\n scope,\n parentScopes,\n i,\n fontStyle,\n foreground,\n background\n );\n }\n }\n return result;\n}\nvar ParsedThemeRule = class {\n constructor(scope, parentScopes, index, fontStyle, foreground, background) {\n this.scope = scope;\n this.parentScopes = parentScopes;\n this.index = index;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n};\nvar FontStyle = /* @__PURE__ */ ((FontStyle2) => {\n FontStyle2[FontStyle2[\"NotSet\"] = -1] = \"NotSet\";\n FontStyle2[FontStyle2[\"None\"] = 0] = \"None\";\n FontStyle2[FontStyle2[\"Italic\"] = 1] = \"Italic\";\n FontStyle2[FontStyle2[\"Bold\"] = 2] = \"Bold\";\n FontStyle2[FontStyle2[\"Underline\"] = 4] = \"Underline\";\n FontStyle2[FontStyle2[\"Strikethrough\"] = 8] = \"Strikethrough\";\n return FontStyle2;\n})(FontStyle || {});\nfunction resolveParsedThemeRules(parsedThemeRules, _colorMap) {\n parsedThemeRules.sort((a, b) => {\n let r = strcmp(a.scope, b.scope);\n if (r !== 0) {\n return r;\n }\n r = strArrCmp(a.parentScopes, b.parentScopes);\n if (r !== 0) {\n return r;\n }\n return a.index - b.index;\n });\n let defaultFontStyle = 0 /* None */;\n let defaultForeground = \"#000000\";\n let defaultBackground = \"#ffffff\";\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === \"\") {\n let incomingDefaults = parsedThemeRules.shift();\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n defaultFontStyle = incomingDefaults.fontStyle;\n }\n if (incomingDefaults.foreground !== null) {\n defaultForeground = incomingDefaults.foreground;\n }\n if (incomingDefaults.background !== null) {\n defaultBackground = incomingDefaults.background;\n }\n }\n let colorMap = new ColorMap(_colorMap);\n let defaults = new StyleAttributes(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n let root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1 /* NotSet */, 0, 0), []);\n for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n let rule = parsedThemeRules[i];\n root.insert(0, rule.scope, rule.parentScopes, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n }\n return new Theme(colorMap, defaults, root);\n}\nvar ColorMap = class {\n _isFrozen;\n _lastColorId;\n _id2color;\n _color2id;\n constructor(_colorMap) {\n this._lastColorId = 0;\n this._id2color = [];\n this._color2id = /* @__PURE__ */ Object.create(null);\n if (Array.isArray(_colorMap)) {\n this._isFrozen = true;\n for (let i = 0, len = _colorMap.length; i < len; i++) {\n this._color2id[_colorMap[i]] = i;\n this._id2color[i] = _colorMap[i];\n }\n } else {\n this._isFrozen = false;\n }\n }\n getId(color) {\n if (color === null) {\n return 0;\n }\n color = color.toUpperCase();\n let value = this._color2id[color];\n if (value) {\n return value;\n }\n if (this._isFrozen) {\n throw new Error(`Missing color in color map - ${color}`);\n }\n value = ++this._lastColorId;\n this._color2id[color] = value;\n this._id2color[value] = color;\n return value;\n }\n getColorMap() {\n return this._id2color.slice(0);\n }\n};\nvar emptyParentScopes = Object.freeze([]);\nvar ThemeTrieElementRule = class _ThemeTrieElementRule {\n scopeDepth;\n parentScopes;\n fontStyle;\n foreground;\n background;\n constructor(scopeDepth, parentScopes, fontStyle, foreground, background) {\n this.scopeDepth = scopeDepth;\n this.parentScopes = parentScopes || emptyParentScopes;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n clone() {\n return new _ThemeTrieElementRule(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);\n }\n static cloneArr(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = arr[i].clone();\n }\n return r;\n }\n acceptOverwrite(scopeDepth, fontStyle, foreground, background) {\n if (this.scopeDepth > scopeDepth) {\n console.log(\"how did this happen?\");\n } else {\n this.scopeDepth = scopeDepth;\n }\n if (fontStyle !== -1 /* NotSet */) {\n this.fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n this.foreground = foreground;\n }\n if (background !== 0) {\n this.background = background;\n }\n }\n};\nvar ThemeTrieElement = class _ThemeTrieElement {\n constructor(_mainRule, rulesWithParentScopes = [], _children = {}) {\n this._mainRule = _mainRule;\n this._children = _children;\n this._rulesWithParentScopes = rulesWithParentScopes;\n }\n _rulesWithParentScopes;\n static _cmpBySpecificity(a, b) {\n if (a.scopeDepth !== b.scopeDepth) {\n return b.scopeDepth - a.scopeDepth;\n }\n let aParentIndex = 0;\n let bParentIndex = 0;\n while (true) {\n if (a.parentScopes[aParentIndex] === \">\") {\n aParentIndex++;\n }\n if (b.parentScopes[bParentIndex] === \">\") {\n bParentIndex++;\n }\n if (aParentIndex >= a.parentScopes.length || bParentIndex >= b.parentScopes.length) {\n break;\n }\n const parentScopeLengthDiff = b.parentScopes[bParentIndex].length - a.parentScopes[aParentIndex].length;\n if (parentScopeLengthDiff !== 0) {\n return parentScopeLengthDiff;\n }\n aParentIndex++;\n bParentIndex++;\n }\n return b.parentScopes.length - a.parentScopes.length;\n }\n match(scope) {\n if (scope !== \"\") {\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n if (this._children.hasOwnProperty(head)) {\n return this._children[head].match(tail);\n }\n }\n const rules = this._rulesWithParentScopes.concat(this._mainRule);\n rules.sort(_ThemeTrieElement._cmpBySpecificity);\n return rules;\n }\n insert(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {\n if (scope === \"\") {\n this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);\n return;\n }\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n let child;\n if (this._children.hasOwnProperty(head)) {\n child = this._children[head];\n } else {\n child = new _ThemeTrieElement(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));\n this._children[head] = child;\n }\n child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);\n }\n _doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background) {\n if (parentScopes === null) {\n this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n for (let i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {\n let rule = this._rulesWithParentScopes[i];\n if (strArrCmp(rule.parentScopes, parentScopes) === 0) {\n rule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n }\n if (fontStyle === -1 /* NotSet */) {\n fontStyle = this._mainRule.fontStyle;\n }\n if (foreground === 0) {\n foreground = this._mainRule.foreground;\n }\n if (background === 0) {\n background = this._mainRule.background;\n }\n this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));\n }\n};\n\n// src/encodedTokenAttributes.ts\nvar EncodedTokenMetadata = class _EncodedTokenMetadata {\n static toBinaryStr(encodedTokenAttributes) {\n return encodedTokenAttributes.toString(2).padStart(32, \"0\");\n }\n static print(encodedTokenAttributes) {\n const languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n const tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n const fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n const foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n const background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n console.log({\n languageId,\n tokenType,\n fontStyle,\n foreground,\n background\n });\n }\n static getLanguageId(encodedTokenAttributes) {\n return (encodedTokenAttributes & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(encodedTokenAttributes) {\n return (encodedTokenAttributes & 768 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static containsBalancedBrackets(encodedTokenAttributes) {\n return (encodedTokenAttributes & 1024 /* BALANCED_BRACKETS_MASK */) !== 0;\n }\n static getFontStyle(encodedTokenAttributes) {\n return (encodedTokenAttributes & 30720 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 16744448 /* FOREGROUND_MASK */) >>> 15 /* FOREGROUND_OFFSET */;\n }\n static getBackground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 4278190080 /* BACKGROUND_MASK */) >>> 24 /* BACKGROUND_OFFSET */;\n }\n /**\n * Updates the fields in `metadata`.\n * A value of `0`, `NotSet` or `null` indicates that the corresponding field should be left as is.\n */\n static set(encodedTokenAttributes, languageId, tokenType, containsBalancedBrackets, fontStyle, foreground, background) {\n let _languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n let _tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n let _containsBalancedBracketsBit = _EncodedTokenMetadata.containsBalancedBrackets(encodedTokenAttributes) ? 1 : 0;\n let _fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n let _foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n let _background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n if (languageId !== 0) {\n _languageId = languageId;\n }\n if (tokenType !== 8 /* NotSet */) {\n _tokenType = fromOptionalTokenType(tokenType);\n }\n if (containsBalancedBrackets !== null) {\n _containsBalancedBracketsBit = containsBalancedBrackets ? 1 : 0;\n }\n if (fontStyle !== -1 /* NotSet */) {\n _fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n _foreground = foreground;\n }\n if (background !== 0) {\n _background = background;\n }\n return (_languageId << 0 /* LANGUAGEID_OFFSET */ | _tokenType << 8 /* TOKEN_TYPE_OFFSET */ | _containsBalancedBracketsBit << 10 /* BALANCED_BRACKETS_OFFSET */ | _fontStyle << 11 /* FONT_STYLE_OFFSET */ | _foreground << 15 /* FOREGROUND_OFFSET */ | _background << 24 /* BACKGROUND_OFFSET */) >>> 0;\n }\n};\nfunction toOptionalTokenType(standardType) {\n return standardType;\n}\nfunction fromOptionalTokenType(standardType) {\n return standardType;\n}\n\n// src/matcher.ts\nfunction createMatchers(selector, matchesName) {\n const results = [];\n const tokenizer = newTokenizer(selector);\n let token = tokenizer.next();\n while (token !== null) {\n let priority = 0;\n if (token.length === 2 && token.charAt(1) === \":\") {\n switch (token.charAt(0)) {\n case \"R\":\n priority = 1;\n break;\n case \"L\":\n priority = -1;\n break;\n default:\n console.log(`Unknown priority ${token} in scope selector`);\n }\n token = tokenizer.next();\n }\n let matcher = parseConjunction();\n results.push({ matcher, priority });\n if (token !== \",\") {\n break;\n }\n token = tokenizer.next();\n }\n return results;\n function parseOperand() {\n if (token === \"-\") {\n token = tokenizer.next();\n const expressionToNegate = parseOperand();\n return (matcherInput) => !!expressionToNegate && !expressionToNegate(matcherInput);\n }\n if (token === \"(\") {\n token = tokenizer.next();\n const expressionInParents = parseInnerExpression();\n if (token === \")\") {\n token = tokenizer.next();\n }\n return expressionInParents;\n }\n if (isIdentifier(token)) {\n const identifiers = [];\n do {\n identifiers.push(token);\n token = tokenizer.next();\n } while (isIdentifier(token));\n return (matcherInput) => matchesName(identifiers, matcherInput);\n }\n return null;\n }\n function parseConjunction() {\n const matchers = [];\n let matcher = parseOperand();\n while (matcher) {\n matchers.push(matcher);\n matcher = parseOperand();\n }\n return (matcherInput) => matchers.every((matcher2) => matcher2(matcherInput));\n }\n function parseInnerExpression() {\n const matchers = [];\n let matcher = parseConjunction();\n while (matcher) {\n matchers.push(matcher);\n if (token === \"|\" || token === \",\") {\n do {\n token = tokenizer.next();\n } while (token === \"|\" || token === \",\");\n } else {\n break;\n }\n matcher = parseConjunction();\n }\n return (matcherInput) => matchers.some((matcher2) => matcher2(matcherInput));\n }\n}\nfunction isIdentifier(token) {\n return !!token && !!token.match(/[\\w\\.:]+/);\n}\nfunction newTokenizer(input) {\n let regex = /([LR]:|[\\w\\.:][\\w\\.:\\-]*|[\\,\\|\\-\\(\\)])/g;\n let match = regex.exec(input);\n return {\n next: () => {\n if (!match) {\n return null;\n }\n const res = match[0];\n match = regex.exec(input);\n return res;\n }\n };\n}\n\n// src/onigLib.ts\nvar FindOption = /* @__PURE__ */ ((FindOption2) => {\n FindOption2[FindOption2[\"None\"] = 0] = \"None\";\n FindOption2[FindOption2[\"NotBeginString\"] = 1] = \"NotBeginString\";\n FindOption2[FindOption2[\"NotEndString\"] = 2] = \"NotEndString\";\n FindOption2[FindOption2[\"NotBeginPosition\"] = 4] = \"NotBeginPosition\";\n FindOption2[FindOption2[\"DebugCall\"] = 8] = \"DebugCall\";\n return FindOption2;\n})(FindOption || {});\nfunction disposeOnigString(str) {\n if (typeof str.dispose === \"function\") {\n str.dispose();\n }\n}\n\n// src/grammar/grammarDependencies.ts\nvar TopLevelRuleReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n toKey() {\n return this.scopeName;\n }\n};\nvar TopLevelRepositoryRuleReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n toKey() {\n return `${this.scopeName}#${this.ruleName}`;\n }\n};\nvar ExternalReferenceCollector = class {\n _references = [];\n _seenReferenceKeys = /* @__PURE__ */ new Set();\n get references() {\n return this._references;\n }\n visitedRule = /* @__PURE__ */ new Set();\n add(reference) {\n const key = reference.toKey();\n if (this._seenReferenceKeys.has(key)) {\n return;\n }\n this._seenReferenceKeys.add(key);\n this._references.push(reference);\n }\n};\nvar ScopeDependencyProcessor = class {\n constructor(repo, initialScopeName) {\n this.repo = repo;\n this.initialScopeName = initialScopeName;\n this.seenFullScopeRequests.add(this.initialScopeName);\n this.Q = [new TopLevelRuleReference(this.initialScopeName)];\n }\n seenFullScopeRequests = /* @__PURE__ */ new Set();\n seenPartialScopeRequests = /* @__PURE__ */ new Set();\n Q;\n processQueue() {\n const q = this.Q;\n this.Q = [];\n const deps = new ExternalReferenceCollector();\n for (const dep of q) {\n collectReferencesOfReference(dep, this.initialScopeName, this.repo, deps);\n }\n for (const dep of deps.references) {\n if (dep instanceof TopLevelRuleReference) {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n this.seenFullScopeRequests.add(dep.scopeName);\n this.Q.push(dep);\n } else {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n if (this.seenPartialScopeRequests.has(dep.toKey())) {\n continue;\n }\n this.seenPartialScopeRequests.add(dep.toKey());\n this.Q.push(dep);\n }\n }\n }\n};\nfunction collectReferencesOfReference(reference, baseGrammarScopeName, repo, result) {\n const selfGrammar = repo.lookup(reference.scopeName);\n if (!selfGrammar) {\n if (reference.scopeName === baseGrammarScopeName) {\n throw new Error(`No grammar provided for <${baseGrammarScopeName}>`);\n }\n return;\n }\n const baseGrammar = repo.lookup(baseGrammarScopeName);\n if (reference instanceof TopLevelRuleReference) {\n collectExternalReferencesInTopLevelRule({ baseGrammar, selfGrammar }, result);\n } else {\n collectExternalReferencesInTopLevelRepositoryRule(\n reference.ruleName,\n { baseGrammar, selfGrammar, repository: selfGrammar.repository },\n result\n );\n }\n const injections = repo.injections(reference.scopeName);\n if (injections) {\n for (const injection of injections) {\n result.add(new TopLevelRuleReference(injection));\n }\n }\n}\nfunction collectExternalReferencesInTopLevelRepositoryRule(ruleName, context, result) {\n if (context.repository && context.repository[ruleName]) {\n const rule = context.repository[ruleName];\n collectExternalReferencesInRules([rule], context, result);\n }\n}\nfunction collectExternalReferencesInTopLevelRule(context, result) {\n if (context.selfGrammar.patterns && Array.isArray(context.selfGrammar.patterns)) {\n collectExternalReferencesInRules(\n context.selfGrammar.patterns,\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n if (context.selfGrammar.injections) {\n collectExternalReferencesInRules(\n Object.values(context.selfGrammar.injections),\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n}\nfunction collectExternalReferencesInRules(rules, context, result) {\n for (const rule of rules) {\n if (result.visitedRule.has(rule)) {\n continue;\n }\n result.visitedRule.add(rule);\n const patternRepository = rule.repository ? mergeObjects({}, context.repository, rule.repository) : context.repository;\n if (Array.isArray(rule.patterns)) {\n collectExternalReferencesInRules(rule.patterns, { ...context, repository: patternRepository }, result);\n }\n const include = rule.include;\n if (!include) {\n continue;\n }\n const reference = parseInclude(include);\n switch (reference.kind) {\n case 0 /* Base */:\n collectExternalReferencesInTopLevelRule({ ...context, selfGrammar: context.baseGrammar }, result);\n break;\n case 1 /* Self */:\n collectExternalReferencesInTopLevelRule(context, result);\n break;\n case 2 /* RelativeReference */:\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, { ...context, repository: patternRepository }, result);\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const selfGrammar = reference.scopeName === context.selfGrammar.scopeName ? context.selfGrammar : reference.scopeName === context.baseGrammar.scopeName ? context.baseGrammar : void 0;\n if (selfGrammar) {\n const newContext = { baseGrammar: context.baseGrammar, selfGrammar, repository: patternRepository };\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, newContext, result);\n } else {\n collectExternalReferencesInTopLevelRule(newContext, result);\n }\n } else {\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n result.add(new TopLevelRepositoryRuleReference(reference.scopeName, reference.ruleName));\n } else {\n result.add(new TopLevelRuleReference(reference.scopeName));\n }\n }\n break;\n }\n }\n}\nvar BaseReference = class {\n kind = 0 /* Base */;\n};\nvar SelfReference = class {\n kind = 1 /* Self */;\n};\nvar RelativeReference = class {\n constructor(ruleName) {\n this.ruleName = ruleName;\n }\n kind = 2 /* RelativeReference */;\n};\nvar TopLevelReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n kind = 3 /* TopLevelReference */;\n};\nvar TopLevelRepositoryReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n kind = 4 /* TopLevelRepositoryReference */;\n};\nfunction parseInclude(include) {\n if (include === \"$base\") {\n return new BaseReference();\n } else if (include === \"$self\") {\n return new SelfReference();\n }\n const indexOfSharp = include.indexOf(\"#\");\n if (indexOfSharp === -1) {\n return new TopLevelReference(include);\n } else if (indexOfSharp === 0) {\n return new RelativeReference(include.substring(1));\n } else {\n const scopeName = include.substring(0, indexOfSharp);\n const ruleName = include.substring(indexOfSharp + 1);\n return new TopLevelRepositoryReference(scopeName, ruleName);\n }\n}\n\n// src/rule.ts\nvar HAS_BACK_REFERENCES = /\\\\(\\d+)/;\nvar BACK_REFERENCING_END = /\\\\(\\d+)/g;\nvar ruleIdSymbol = Symbol(\"RuleId\");\nvar endRuleId = -1;\nvar whileRuleId = -2;\nfunction ruleIdFromNumber(id) {\n return id;\n}\nfunction ruleIdToNumber(id) {\n return id;\n}\nvar Rule = class {\n $location;\n id;\n _nameIsCapturing;\n _name;\n _contentNameIsCapturing;\n _contentName;\n constructor($location, id, name, contentName) {\n this.$location = $location;\n this.id = id;\n this._name = name || null;\n this._nameIsCapturing = RegexSource.hasCaptures(this._name);\n this._contentName = contentName || null;\n this._contentNameIsCapturing = RegexSource.hasCaptures(this._contentName);\n }\n get debugName() {\n const location = this.$location ? `${basename(this.$location.filename)}:${this.$location.line}` : \"unknown\";\n return `${this.constructor.name}#${this.id} @ ${location}`;\n }\n getName(lineText, captureIndices) {\n if (!this._nameIsCapturing || this._name === null || lineText === null || captureIndices === null) {\n return this._name;\n }\n return RegexSource.replaceCaptures(this._name, lineText, captureIndices);\n }\n getContentName(lineText, captureIndices) {\n if (!this._contentNameIsCapturing || this._contentName === null) {\n return this._contentName;\n }\n return RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);\n }\n};\nvar CaptureRule = class extends Rule {\n retokenizeCapturedWithRuleId;\n constructor($location, id, name, contentName, retokenizeCapturedWithRuleId) {\n super($location, id, name, contentName);\n this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;\n }\n dispose() {\n }\n collectPatterns(grammar, out) {\n throw new Error(\"Not supported!\");\n }\n compile(grammar, endRegexSource) {\n throw new Error(\"Not supported!\");\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n throw new Error(\"Not supported!\");\n }\n};\nvar MatchRule = class extends Rule {\n _match;\n captures;\n _cachedCompiledPatterns;\n constructor($location, id, name, match, captures) {\n super($location, id, name, null);\n this._match = new RegExpSource(match, this.id);\n this.captures = captures;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugMatchRegExp() {\n return `${this._match.source}`;\n }\n collectPatterns(grammar, out) {\n out.push(this._match);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar IncludeOnlyRule = class extends Rule {\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, patterns) {\n super($location, id, name, contentName);\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n collectPatterns(grammar, out) {\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, out);\n }\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginEndRule = class extends Rule {\n _begin;\n beginCaptures;\n _end;\n endHasBackReferences;\n endCaptures;\n applyEndPatternLast;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this._end = new RegExpSource(end ? end : \"\\uFFFF\", -1);\n this.endHasBackReferences = this._end.hasBackReferences;\n this.endCaptures = endCaptures;\n this.applyEndPatternLast = applyEndPatternLast || false;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugEndRegExp() {\n return `${this._end.source}`;\n }\n getEndWithResolvedBackReferences(lineText, captureIndices) {\n return this._end.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);\n } else {\n this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);\n }\n }\n if (this._end.hasBackReferences) {\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length() - 1, endRegexSource);\n } else {\n this._cachedCompiledPatterns.setSource(0, endRegexSource);\n }\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginWhileRule = class extends Rule {\n _begin;\n beginCaptures;\n whileCaptures;\n _while;\n whileHasBackReferences;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n _cachedCompiledWhilePatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this.whileCaptures = whileCaptures;\n this._while = new RegExpSource(_while, whileRuleId);\n this.whileHasBackReferences = this._while.hasBackReferences;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n this._cachedCompiledWhilePatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n if (this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns.dispose();\n this._cachedCompiledWhilePatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugWhileRegExp() {\n return `${this._while.source}`;\n }\n getWhileWithResolvedBackReferences(lineText, captureIndices) {\n return this._while.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n }\n return this._cachedCompiledPatterns;\n }\n compileWhile(grammar, endRegexSource) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compile(grammar);\n }\n compileWhileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledWhilePatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns = new RegExpSourceList();\n this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);\n }\n if (this._while.hasBackReferences) {\n this._cachedCompiledWhilePatterns.setSource(0, endRegexSource ? endRegexSource : \"\\uFFFF\");\n }\n return this._cachedCompiledWhilePatterns;\n }\n};\nvar RuleFactory = class _RuleFactory {\n static createCaptureRule(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {\n return helper.registerRule((id) => {\n return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);\n });\n }\n static getCompiledRuleId(desc, helper, repository) {\n if (!desc.id) {\n helper.registerRule((id) => {\n desc.id = id;\n if (desc.match) {\n return new MatchRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.match,\n _RuleFactory._compileCaptures(desc.captures, helper, repository)\n );\n }\n if (typeof desc.begin === \"undefined\") {\n if (desc.repository) {\n repository = mergeObjects({}, repository, desc.repository);\n }\n let patterns = desc.patterns;\n if (typeof patterns === \"undefined\" && desc.include) {\n patterns = [{ include: desc.include }];\n }\n return new IncludeOnlyRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n _RuleFactory._compilePatterns(patterns, helper, repository)\n );\n }\n if (desc.while) {\n return new BeginWhileRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.while,\n _RuleFactory._compileCaptures(desc.whileCaptures || desc.captures, helper, repository),\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n }\n return new BeginEndRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.end,\n _RuleFactory._compileCaptures(desc.endCaptures || desc.captures, helper, repository),\n desc.applyEndPatternLast,\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n });\n }\n return desc.id;\n }\n static _compileCaptures(captures, helper, repository) {\n let r = [];\n if (captures) {\n let maximumCaptureId = 0;\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n if (numericCaptureId > maximumCaptureId) {\n maximumCaptureId = numericCaptureId;\n }\n }\n for (let i = 0; i <= maximumCaptureId; i++) {\n r[i] = null;\n }\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n let retokenizeCapturedWithRuleId = 0;\n if (captures[captureId].patterns) {\n retokenizeCapturedWithRuleId = _RuleFactory.getCompiledRuleId(captures[captureId], helper, repository);\n }\n r[numericCaptureId] = _RuleFactory.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);\n }\n }\n return r;\n }\n static _compilePatterns(patterns, helper, repository) {\n let r = [];\n if (patterns) {\n for (let i = 0, len = patterns.length; i < len; i++) {\n const pattern = patterns[i];\n let ruleId = -1;\n if (pattern.include) {\n const reference = parseInclude(pattern.include);\n switch (reference.kind) {\n case 0 /* Base */:\n case 1 /* Self */:\n ruleId = _RuleFactory.getCompiledRuleId(repository[pattern.include], helper, repository);\n break;\n case 2 /* RelativeReference */:\n let localIncludedRule = repository[reference.ruleName];\n if (localIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(localIncludedRule, helper, repository);\n } else {\n }\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const externalGrammarName = reference.scopeName;\n const externalGrammarInclude = reference.kind === 4 /* TopLevelRepositoryReference */ ? reference.ruleName : null;\n const externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);\n if (externalGrammar) {\n if (externalGrammarInclude) {\n let externalIncludedRule = externalGrammar.repository[externalGrammarInclude];\n if (externalIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);\n } else {\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);\n }\n } else {\n }\n break;\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(pattern, helper, repository);\n }\n if (ruleId !== -1) {\n const rule = helper.getRule(ruleId);\n let skipRule = false;\n if (rule instanceof IncludeOnlyRule || rule instanceof BeginEndRule || rule instanceof BeginWhileRule) {\n if (rule.hasMissingPatterns && rule.patterns.length === 0) {\n skipRule = true;\n }\n }\n if (skipRule) {\n continue;\n }\n r.push(ruleId);\n }\n }\n }\n return {\n patterns: r,\n hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length\n };\n }\n};\nvar RegExpSource = class _RegExpSource {\n source;\n ruleId;\n hasAnchor;\n hasBackReferences;\n _anchorCache;\n constructor(regExpSource, ruleId) {\n if (regExpSource && typeof regExpSource === \"string\") {\n const len = regExpSource.length;\n let lastPushedPos = 0;\n let output = [];\n let hasAnchor = false;\n for (let pos = 0; pos < len; pos++) {\n const ch = regExpSource.charAt(pos);\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n const nextCh = regExpSource.charAt(pos + 1);\n if (nextCh === \"z\") {\n output.push(regExpSource.substring(lastPushedPos, pos));\n output.push(\"$(?!\\\\n)(?<!\\\\n)\");\n lastPushedPos = pos + 2;\n } else if (nextCh === \"A\" || nextCh === \"G\") {\n hasAnchor = true;\n }\n pos++;\n }\n }\n }\n this.hasAnchor = hasAnchor;\n if (lastPushedPos === 0) {\n this.source = regExpSource;\n } else {\n output.push(regExpSource.substring(lastPushedPos, len));\n this.source = output.join(\"\");\n }\n } else {\n this.hasAnchor = false;\n this.source = regExpSource;\n }\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n } else {\n this._anchorCache = null;\n }\n this.ruleId = ruleId;\n if (typeof this.source === \"string\") {\n this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);\n } else {\n this.hasBackReferences = false;\n }\n }\n clone() {\n return new _RegExpSource(this.source, this.ruleId);\n }\n setSource(newSource) {\n if (this.source === newSource) {\n return;\n }\n this.source = newSource;\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n }\n }\n resolveBackReferences(lineText, captureIndices) {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let capturedValues = captureIndices.map((capture) => {\n return lineText.substring(capture.start, capture.end);\n });\n BACK_REFERENCING_END.lastIndex = 0;\n return this.source.replace(BACK_REFERENCING_END, (match, g1) => {\n return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || \"\");\n });\n }\n _buildAnchorCache() {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let A0_G0_result = [];\n let A0_G1_result = [];\n let A1_G0_result = [];\n let A1_G1_result = [];\n let pos, len, ch, nextCh;\n for (pos = 0, len = this.source.length; pos < len; pos++) {\n ch = this.source.charAt(pos);\n A0_G0_result[pos] = ch;\n A0_G1_result[pos] = ch;\n A1_G0_result[pos] = ch;\n A1_G1_result[pos] = ch;\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n nextCh = this.source.charAt(pos + 1);\n if (nextCh === \"A\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"\\uFFFF\";\n A1_G0_result[pos + 1] = \"A\";\n A1_G1_result[pos + 1] = \"A\";\n } else if (nextCh === \"G\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"G\";\n A1_G0_result[pos + 1] = \"\\uFFFF\";\n A1_G1_result[pos + 1] = \"G\";\n } else {\n A0_G0_result[pos + 1] = nextCh;\n A0_G1_result[pos + 1] = nextCh;\n A1_G0_result[pos + 1] = nextCh;\n A1_G1_result[pos + 1] = nextCh;\n }\n pos++;\n }\n }\n }\n return {\n A0_G0: A0_G0_result.join(\"\"),\n A0_G1: A0_G1_result.join(\"\"),\n A1_G0: A1_G0_result.join(\"\"),\n A1_G1: A1_G1_result.join(\"\")\n };\n }\n resolveAnchors(allowA, allowG) {\n if (!this.hasAnchor || !this._anchorCache || typeof this.source !== \"string\") {\n return this.source;\n }\n if (allowA) {\n if (allowG) {\n return this._anchorCache.A1_G1;\n } else {\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n return this._anchorCache.A0_G1;\n } else {\n return this._anchorCache.A0_G0;\n }\n }\n }\n};\nvar RegExpSourceList = class {\n _items;\n _hasAnchors;\n _cached;\n _anchorCache;\n constructor() {\n this._items = [];\n this._hasAnchors = false;\n this._cached = null;\n this._anchorCache = {\n A0_G0: null,\n A0_G1: null,\n A1_G0: null,\n A1_G1: null\n };\n }\n dispose() {\n this._disposeCaches();\n }\n _disposeCaches() {\n if (this._cached) {\n this._cached.dispose();\n this._cached = null;\n }\n if (this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0.dispose();\n this._anchorCache.A0_G0 = null;\n }\n if (this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1.dispose();\n this._anchorCache.A0_G1 = null;\n }\n if (this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0.dispose();\n this._anchorCache.A1_G0 = null;\n }\n if (this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1.dispose();\n this._anchorCache.A1_G1 = null;\n }\n }\n push(item) {\n this._items.push(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n unshift(item) {\n this._items.unshift(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n length() {\n return this._items.length;\n }\n setSource(index, newSource) {\n if (this._items[index].source !== newSource) {\n this._disposeCaches();\n this._items[index].setSource(newSource);\n }\n }\n compile(onigLib) {\n if (!this._cached) {\n let regExps = this._items.map((e) => e.source);\n this._cached = new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n return this._cached;\n }\n compileAG(onigLib, allowA, allowG) {\n if (!this._hasAnchors) {\n return this.compile(onigLib);\n } else {\n if (allowA) {\n if (allowG) {\n if (!this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G1;\n } else {\n if (!this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n if (!this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G1;\n } else {\n if (!this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G0;\n }\n }\n }\n }\n _resolveAnchors(onigLib, allowA, allowG) {\n let regExps = this._items.map((e) => e.resolveAnchors(allowA, allowG));\n return new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n};\nvar CompiledRule = class {\n constructor(onigLib, regExps, rules) {\n this.regExps = regExps;\n this.rules = rules;\n this.scanner = onigLib.createOnigScanner(regExps);\n }\n scanner;\n dispose() {\n if (typeof this.scanner.dispose === \"function\") {\n this.scanner.dispose();\n }\n }\n toString() {\n const r = [];\n for (let i = 0, len = this.rules.length; i < len; i++) {\n r.push(\" - \" + this.rules[i] + \": \" + this.regExps[i]);\n }\n return r.join(\"\\n\");\n }\n findNextMatchSync(string, startPosition, options) {\n const result = this.scanner.findNextMatchSync(string, startPosition, options);\n if (!result) {\n return null;\n }\n return {\n ruleId: this.rules[result.index],\n captureIndices: result.captureIndices\n };\n }\n};\n\n// src/grammar/basicScopesAttributeProvider.ts\nvar BasicScopeAttributes = class {\n constructor(languageId, tokenType) {\n this.languageId = languageId;\n this.tokenType = tokenType;\n }\n};\nvar BasicScopeAttributesProvider = class _BasicScopeAttributesProvider {\n _defaultAttributes;\n _embeddedLanguagesMatcher;\n constructor(initialLanguageId, embeddedLanguages) {\n this._defaultAttributes = new BasicScopeAttributes(initialLanguageId, 8 /* NotSet */);\n this._embeddedLanguagesMatcher = new ScopeMatcher(Object.entries(embeddedLanguages || {}));\n }\n getDefaultAttributes() {\n return this._defaultAttributes;\n }\n getBasicScopeAttributes(scopeName) {\n if (scopeName === null) {\n return _BasicScopeAttributesProvider._NULL_SCOPE_METADATA;\n }\n return this._getBasicScopeAttributes.get(scopeName);\n }\n static _NULL_SCOPE_METADATA = new BasicScopeAttributes(0, 0);\n _getBasicScopeAttributes = new CachedFn((scopeName) => {\n const languageId = this._scopeToLanguage(scopeName);\n const standardTokenType = this._toStandardTokenType(scopeName);\n return new BasicScopeAttributes(languageId, standardTokenType);\n });\n /**\n * Given a produced TM scope, return the language that token describes or null if unknown.\n * e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null\n */\n _scopeToLanguage(scope) {\n return this._embeddedLanguagesMatcher.match(scope) || 0;\n }\n _toStandardTokenType(scopeName) {\n const m = scopeName.match(_BasicScopeAttributesProvider.STANDARD_TOKEN_TYPE_REGEXP);\n if (!m) {\n return 8 /* NotSet */;\n }\n switch (m[1]) {\n case \"comment\":\n return 1 /* Comment */;\n case \"string\":\n return 2 /* String */;\n case \"regex\":\n return 3 /* RegEx */;\n case \"meta.embedded\":\n return 0 /* Other */;\n }\n throw new Error(\"Unexpected match for standard token type!\");\n }\n static STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|meta\\.embedded)\\b/;\n};\nvar ScopeMatcher = class {\n values;\n scopesRegExp;\n constructor(values) {\n if (values.length === 0) {\n this.values = null;\n this.scopesRegExp = null;\n } else {\n this.values = new Map(values);\n const escapedScopes = values.map(\n ([scopeName, value]) => escapeRegExpCharacters(scopeName)\n );\n escapedScopes.sort();\n escapedScopes.reverse();\n this.scopesRegExp = new RegExp(\n `^((${escapedScopes.join(\")|(\")}))($|\\\\.)`,\n \"\"\n );\n }\n }\n match(scope) {\n if (!this.scopesRegExp) {\n return void 0;\n }\n const m = scope.match(this.scopesRegExp);\n if (!m) {\n return void 0;\n }\n return this.values.get(m[1]);\n }\n};\n\n// src/debug.ts\nvar DebugFlags = {\n InDebugMode: typeof process !== \"undefined\" && !!process.env[\"VSCODE_TEXTMATE_DEBUG\"]\n};\nvar UseOnigurumaFindOptions = false;\n\n// src/grammar/tokenizeString.ts\nvar TokenizeStringResult = class {\n constructor(stack, stoppedEarly) {\n this.stack = stack;\n this.stoppedEarly = stoppedEarly;\n }\n};\nfunction _tokenizeString(grammar, lineText, isFirstLine, linePos, stack, lineTokens, checkWhileConditions, timeLimit) {\n const lineLength = lineText.content.length;\n let STOP = false;\n let anchorPosition = -1;\n if (checkWhileConditions) {\n const whileCheckResult = _checkWhileConditions(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n lineTokens\n );\n stack = whileCheckResult.stack;\n linePos = whileCheckResult.linePos;\n isFirstLine = whileCheckResult.isFirstLine;\n anchorPosition = whileCheckResult.anchorPosition;\n }\n const startTime = Date.now();\n while (!STOP) {\n if (timeLimit !== 0) {\n const elapsedTime = Date.now() - startTime;\n if (elapsedTime > timeLimit) {\n return new TokenizeStringResult(stack, true);\n }\n }\n scanNext();\n }\n return new TokenizeStringResult(stack, false);\n function scanNext() {\n if (false) {\n console.log(\"\");\n console.log(\n `@@scanNext ${linePos}: |${lineText.content.substr(linePos).replace(/\\n$/, \"\\\\n\")}|`\n );\n }\n const r = matchRuleOrInjections(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n anchorPosition\n );\n if (!r) {\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n const captureIndices = r.captureIndices;\n const matchedRuleId = r.matchedRuleId;\n const hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;\n if (matchedRuleId === endRuleId) {\n const poppedRule = stack.getRule(grammar);\n if (false) {\n console.log(\n \" popping \" + poppedRule.debugName + \" - \" + poppedRule.debugEndRegExp\n );\n }\n lineTokens.produce(stack, captureIndices[0].start);\n stack = stack.withContentNameScopesList(stack.nameScopesList);\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n poppedRule.endCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n const popped = stack;\n stack = stack.parent;\n anchorPosition = popped.getAnchorPos();\n if (!hasAdvanced && popped.getEnterPos() === linePos) {\n if (false) {\n console.error(\n \"[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing\"\n );\n }\n stack = popped;\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const _rule = grammar.getRule(matchedRuleId);\n lineTokens.produce(stack, captureIndices[0].start);\n const beforePush = stack;\n const scopeName = _rule.getName(lineText.content, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(\n scopeName,\n grammar\n );\n stack = stack.push(\n matchedRuleId,\n linePos,\n anchorPosition,\n captureIndices[0].end === lineLength,\n null,\n nameScopesList,\n nameScopesList\n );\n if (_rule instanceof BeginEndRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\n \" pushing \" + pushedRule.debugName + \" - \" + pushedRule.debugBeginRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.endHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getEndWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else if (_rule instanceof BeginWhileRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\" pushing \" + pushedRule.debugName);\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.whileHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getWhileWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const matchingRule = _rule;\n if (false) {\n console.log(\n \" matched \" + matchingRule.debugName + \" - \" + matchingRule.debugMatchRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n matchingRule.captures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n stack = stack.pop();\n if (!hasAdvanced) {\n if (false) {\n console.error(\n \"[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping\"\n );\n }\n stack = stack.safePop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n }\n }\n if (captureIndices[0].end > linePos) {\n linePos = captureIndices[0].end;\n isFirstLine = false;\n }\n }\n}\nfunction _checkWhileConditions(grammar, lineText, isFirstLine, linePos, stack, lineTokens) {\n let anchorPosition = stack.beginRuleCapturedEOL ? 0 : -1;\n const whileRules = [];\n for (let node = stack; node; node = node.pop()) {\n const nodeRule = node.getRule(grammar);\n if (nodeRule instanceof BeginWhileRule) {\n whileRules.push({\n rule: nodeRule,\n stack: node\n });\n }\n }\n for (let whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {\n const { ruleScanner, findOptions } = prepareRuleWhileSearch(whileRule.rule, grammar, whileRule.stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (false) {\n console.log(\" scanning for while rule\");\n console.log(ruleScanner.toString());\n }\n if (r) {\n const matchedRuleId = r.ruleId;\n if (matchedRuleId !== whileRuleId) {\n stack = whileRule.stack.pop();\n break;\n }\n if (r.captureIndices && r.captureIndices.length) {\n lineTokens.produce(whileRule.stack, r.captureIndices[0].start);\n handleCaptures(grammar, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);\n lineTokens.produce(whileRule.stack, r.captureIndices[0].end);\n anchorPosition = r.captureIndices[0].end;\n if (r.captureIndices[0].end > linePos) {\n linePos = r.captureIndices[0].end;\n isFirstLine = false;\n }\n }\n } else {\n if (false) {\n console.log(\" popping \" + whileRule.rule.debugName + \" - \" + whileRule.rule.debugWhileRegExp);\n }\n stack = whileRule.stack.pop();\n break;\n }\n }\n return { stack, linePos, anchorPosition, isFirstLine };\n}\nfunction matchRuleOrInjections(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const matchResult = matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n const injections = grammar.getInjections();\n if (injections.length === 0) {\n return matchResult;\n }\n const injectionResult = matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n if (!injectionResult) {\n return matchResult;\n }\n if (!matchResult) {\n return injectionResult;\n }\n const matchResultScore = matchResult.captureIndices[0].start;\n const injectionResultScore = injectionResult.captureIndices[0].start;\n if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {\n return injectionResult;\n }\n return matchResult;\n}\nfunction matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const rule = stack.getRule(grammar);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (r) {\n return {\n captureIndices: r.captureIndices,\n matchedRuleId: r.ruleId\n };\n }\n return null;\n}\nfunction matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n let bestMatchRating = Number.MAX_VALUE;\n let bestMatchCaptureIndices = null;\n let bestMatchRuleId;\n let bestMatchResultPriority = 0;\n const scopes = stack.contentNameScopesList.getScopeNames();\n for (let i = 0, len = injections.length; i < len; i++) {\n const injection = injections[i];\n if (!injection.matcher(scopes)) {\n continue;\n }\n const rule = grammar.getRule(injection.ruleId);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, null, isFirstLine, linePos === anchorPosition);\n const matchResult = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (!matchResult) {\n continue;\n }\n if (false) {\n console.log(` matched injection: ${injection.debugSelector}`);\n console.log(ruleScanner.toString());\n }\n const matchRating = matchResult.captureIndices[0].start;\n if (matchRating >= bestMatchRating) {\n continue;\n }\n bestMatchRating = matchRating;\n bestMatchCaptureIndices = matchResult.captureIndices;\n bestMatchRuleId = matchResult.ruleId;\n bestMatchResultPriority = injection.priority;\n if (bestMatchRating === linePos) {\n break;\n }\n }\n if (bestMatchCaptureIndices) {\n return {\n priorityMatch: bestMatchResultPriority === -1,\n captureIndices: bestMatchCaptureIndices,\n matchedRuleId: bestMatchRuleId\n };\n }\n return null;\n}\nfunction prepareRuleSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction prepareRuleWhileSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compileWhile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileWhileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction getFindOptions(allowA, allowG) {\n let options = 0 /* None */;\n if (!allowA) {\n options |= 1 /* NotBeginString */;\n }\n if (!allowG) {\n options |= 4 /* NotBeginPosition */;\n }\n return options;\n}\nfunction handleCaptures(grammar, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {\n if (captures.length === 0) {\n return;\n }\n const lineTextContent = lineText.content;\n const len = Math.min(captures.length, captureIndices.length);\n const localStack = [];\n const maxEnd = captureIndices[0].end;\n for (let i = 0; i < len; i++) {\n const captureRule = captures[i];\n if (captureRule === null) {\n continue;\n }\n const captureIndex = captureIndices[i];\n if (captureIndex.length === 0) {\n continue;\n }\n if (captureIndex.start > maxEnd) {\n break;\n }\n while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n if (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);\n } else {\n lineTokens.produce(stack, captureIndex.start);\n }\n if (captureRule.retokenizeCapturedWithRuleId) {\n const scopeName = captureRule.getName(lineTextContent, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(scopeName, grammar);\n const contentName = captureRule.getContentName(lineTextContent, captureIndices);\n const contentNameScopesList = nameScopesList.pushAttributed(contentName, grammar);\n const stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, -1, false, null, nameScopesList, contentNameScopesList);\n const onigSubStr = grammar.createOnigString(lineTextContent.substring(0, captureIndex.end));\n _tokenizeString(\n grammar,\n onigSubStr,\n isFirstLine && captureIndex.start === 0,\n captureIndex.start,\n stackClone,\n lineTokens,\n false,\n /* no time limit */\n 0\n );\n disposeOnigString(onigSubStr);\n continue;\n }\n const captureRuleScopeName = captureRule.getName(lineTextContent, captureIndices);\n if (captureRuleScopeName !== null) {\n const base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;\n const captureRuleScopesList = base.pushAttributed(captureRuleScopeName, grammar);\n localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));\n }\n }\n while (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n}\nvar LocalStackElement = class {\n scopes;\n endPos;\n constructor(scopes, endPos) {\n this.scopes = scopes;\n this.endPos = endPos;\n }\n};\n\n// src/grammar/grammar.ts\nfunction createGrammar(scopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, onigLib) {\n return new Grammar(\n scopeName,\n grammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n grammarRepository,\n onigLib\n );\n}\nfunction collectInjections(result, selector, rule, ruleFactoryHelper, grammar) {\n const matchers = createMatchers(selector, nameMatcher);\n const ruleId = RuleFactory.getCompiledRuleId(rule, ruleFactoryHelper, grammar.repository);\n for (const matcher of matchers) {\n result.push({\n debugSelector: selector,\n matcher: matcher.matcher,\n ruleId,\n grammar,\n priority: matcher.priority\n });\n }\n}\nfunction nameMatcher(identifers, scopes) {\n if (scopes.length < identifers.length) {\n return false;\n }\n let lastIndex = 0;\n return identifers.every((identifier) => {\n for (let i = lastIndex; i < scopes.length; i++) {\n if (scopesAreMatching(scopes[i], identifier)) {\n lastIndex = i + 1;\n return true;\n }\n }\n return false;\n });\n}\nfunction scopesAreMatching(thisScopeName, scopeName) {\n if (!thisScopeName) {\n return false;\n }\n if (thisScopeName === scopeName) {\n return true;\n }\n const len = scopeName.length;\n return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === \".\";\n}\nvar Grammar = class {\n constructor(_rootScopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, _onigLib) {\n this._rootScopeName = _rootScopeName;\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._onigLib = _onigLib;\n this._basicScopeAttributesProvider = new BasicScopeAttributesProvider(\n initialLanguage,\n embeddedLanguages\n );\n this._rootId = -1;\n this._lastRuleId = 0;\n this._ruleId2desc = [null];\n this._includedGrammars = {};\n this._grammarRepository = grammarRepository;\n this._grammar = initGrammar(grammar, null);\n this._injections = null;\n this._tokenTypeMatchers = [];\n if (tokenTypes) {\n for (const selector of Object.keys(tokenTypes)) {\n const matchers = createMatchers(selector, nameMatcher);\n for (const matcher of matchers) {\n this._tokenTypeMatchers.push({\n matcher: matcher.matcher,\n type: tokenTypes[selector]\n });\n }\n }\n }\n }\n _rootId;\n _lastRuleId;\n _ruleId2desc;\n _includedGrammars;\n _grammarRepository;\n _grammar;\n _injections;\n _basicScopeAttributesProvider;\n _tokenTypeMatchers;\n get themeProvider() {\n return this._grammarRepository;\n }\n dispose() {\n for (const rule of this._ruleId2desc) {\n if (rule) {\n rule.dispose();\n }\n }\n }\n createOnigScanner(sources) {\n return this._onigLib.createOnigScanner(sources);\n }\n createOnigString(sources) {\n return this._onigLib.createOnigString(sources);\n }\n getMetadataForScope(scope) {\n return this._basicScopeAttributesProvider.getBasicScopeAttributes(scope);\n }\n _collectInjections() {\n const grammarRepository = {\n lookup: (scopeName2) => {\n if (scopeName2 === this._rootScopeName) {\n return this._grammar;\n }\n return this.getExternalGrammar(scopeName2);\n },\n injections: (scopeName2) => {\n return this._grammarRepository.injections(scopeName2);\n }\n };\n const result = [];\n const scopeName = this._rootScopeName;\n const grammar = grammarRepository.lookup(scopeName);\n if (grammar) {\n const rawInjections = grammar.injections;\n if (rawInjections) {\n for (let expression in rawInjections) {\n collectInjections(\n result,\n expression,\n rawInjections[expression],\n this,\n grammar\n );\n }\n }\n const injectionScopeNames = this._grammarRepository.injections(scopeName);\n if (injectionScopeNames) {\n injectionScopeNames.forEach((injectionScopeName) => {\n const injectionGrammar = this.getExternalGrammar(injectionScopeName);\n if (injectionGrammar) {\n const selector = injectionGrammar.injectionSelector;\n if (selector) {\n collectInjections(\n result,\n selector,\n injectionGrammar,\n this,\n injectionGrammar\n );\n }\n }\n });\n }\n }\n result.sort((i1, i2) => i1.priority - i2.priority);\n return result;\n }\n getInjections() {\n if (this._injections === null) {\n this._injections = this._collectInjections();\n }\n return this._injections;\n }\n registerRule(factory) {\n const id = ++this._lastRuleId;\n const result = factory(ruleIdFromNumber(id));\n this._ruleId2desc[id] = result;\n return result;\n }\n getRule(ruleId) {\n return this._ruleId2desc[ruleIdToNumber(ruleId)];\n }\n getExternalGrammar(scopeName, repository) {\n if (this._includedGrammars[scopeName]) {\n return this._includedGrammars[scopeName];\n } else if (this._grammarRepository) {\n const rawIncludedGrammar = this._grammarRepository.lookup(scopeName);\n if (rawIncludedGrammar) {\n this._includedGrammars[scopeName] = initGrammar(\n rawIncludedGrammar,\n repository && repository.$base\n );\n return this._includedGrammars[scopeName];\n }\n }\n return void 0;\n }\n tokenizeLine(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, false, timeLimit);\n return {\n tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n tokenizeLine2(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, true, timeLimit);\n return {\n tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n _tokenize(lineText, prevState, emitBinaryTokens, timeLimit) {\n if (this._rootId === -1) {\n this._rootId = RuleFactory.getCompiledRuleId(\n this._grammar.repository.$self,\n this,\n this._grammar.repository\n );\n this.getInjections();\n }\n let isFirstLine;\n if (!prevState || prevState === StateStackImpl.NULL) {\n isFirstLine = true;\n const rawDefaultMetadata = this._basicScopeAttributesProvider.getDefaultAttributes();\n const defaultStyle = this.themeProvider.getDefaults();\n const defaultMetadata = EncodedTokenMetadata.set(\n 0,\n rawDefaultMetadata.languageId,\n rawDefaultMetadata.tokenType,\n null,\n defaultStyle.fontStyle,\n defaultStyle.foregroundId,\n defaultStyle.backgroundId\n );\n const rootScopeName = this.getRule(this._rootId).getName(\n null,\n null\n );\n let scopeList;\n if (rootScopeName) {\n scopeList = AttributedScopeStack.createRootAndLookUpScopeName(\n rootScopeName,\n defaultMetadata,\n this\n );\n } else {\n scopeList = AttributedScopeStack.createRoot(\n \"unknown\",\n defaultMetadata\n );\n }\n prevState = new StateStackImpl(\n null,\n this._rootId,\n -1,\n -1,\n false,\n null,\n scopeList,\n scopeList\n );\n } else {\n isFirstLine = false;\n prevState.reset();\n }\n lineText = lineText + \"\\n\";\n const onigLineText = this.createOnigString(lineText);\n const lineLength = onigLineText.content.length;\n const lineTokens = new LineTokens(\n emitBinaryTokens,\n lineText,\n this._tokenTypeMatchers,\n this.balancedBracketSelectors\n );\n const r = _tokenizeString(\n this,\n onigLineText,\n isFirstLine,\n 0,\n prevState,\n lineTokens,\n true,\n timeLimit\n );\n disposeOnigString(onigLineText);\n return {\n lineLength,\n lineTokens,\n ruleStack: r.stack,\n stoppedEarly: r.stoppedEarly\n };\n }\n};\nfunction initGrammar(grammar, base) {\n grammar = clone(grammar);\n grammar.repository = grammar.repository || {};\n grammar.repository.$self = {\n $vscodeTextmateLocation: grammar.$vscodeTextmateLocation,\n patterns: grammar.patterns,\n name: grammar.scopeName\n };\n grammar.repository.$base = base || grammar.repository.$self;\n return grammar;\n}\nvar AttributedScopeStack = class _AttributedScopeStack {\n /**\n * Invariant:\n * ```\n * if (parent && !scopePath.extends(parent.scopePath)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, scopePath, tokenAttributes) {\n this.parent = parent;\n this.scopePath = scopePath;\n this.tokenAttributes = tokenAttributes;\n }\n static fromExtension(namesScopeList, contentNameScopesList) {\n let current = namesScopeList;\n let scopeNames = namesScopeList?.scopePath ?? null;\n for (const frame of contentNameScopesList) {\n scopeNames = ScopeStack.push(scopeNames, frame.scopeNames);\n current = new _AttributedScopeStack(current, scopeNames, frame.encodedTokenAttributes);\n }\n return current;\n }\n static createRoot(scopeName, tokenAttributes) {\n return new _AttributedScopeStack(null, new ScopeStack(null, scopeName), tokenAttributes);\n }\n static createRootAndLookUpScopeName(scopeName, tokenAttributes, grammar) {\n const rawRootMetadata = grammar.getMetadataForScope(scopeName);\n const scopePath = new ScopeStack(null, scopeName);\n const rootStyle = grammar.themeProvider.themeMatch(scopePath);\n const resolvedTokenAttributes = _AttributedScopeStack.mergeAttributes(\n tokenAttributes,\n rawRootMetadata,\n rootStyle\n );\n return new _AttributedScopeStack(null, scopePath, resolvedTokenAttributes);\n }\n get scopeName() {\n return this.scopePath.scopeName;\n }\n toString() {\n return this.getScopeNames().join(\" \");\n }\n equals(other) {\n return _AttributedScopeStack.equals(this, other);\n }\n static equals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.scopeName !== b.scopeName || a.tokenAttributes !== b.tokenAttributes) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n static mergeAttributes(existingTokenAttributes, basicScopeAttributes, styleAttributes) {\n let fontStyle = -1 /* NotSet */;\n let foreground = 0;\n let background = 0;\n if (styleAttributes !== null) {\n fontStyle = styleAttributes.fontStyle;\n foreground = styleAttributes.foregroundId;\n background = styleAttributes.backgroundId;\n }\n return EncodedTokenMetadata.set(\n existingTokenAttributes,\n basicScopeAttributes.languageId,\n basicScopeAttributes.tokenType,\n null,\n fontStyle,\n foreground,\n background\n );\n }\n pushAttributed(scopePath, grammar) {\n if (scopePath === null) {\n return this;\n }\n if (scopePath.indexOf(\" \") === -1) {\n return _AttributedScopeStack._pushAttributed(this, scopePath, grammar);\n }\n const scopes = scopePath.split(/ /g);\n let result = this;\n for (const scope of scopes) {\n result = _AttributedScopeStack._pushAttributed(result, scope, grammar);\n }\n return result;\n }\n static _pushAttributed(target, scopeName, grammar) {\n const rawMetadata = grammar.getMetadataForScope(scopeName);\n const newPath = target.scopePath.push(scopeName);\n const scopeThemeMatchResult = grammar.themeProvider.themeMatch(newPath);\n const metadata = _AttributedScopeStack.mergeAttributes(\n target.tokenAttributes,\n rawMetadata,\n scopeThemeMatchResult\n );\n return new _AttributedScopeStack(target, newPath, metadata);\n }\n getScopeNames() {\n return this.scopePath.getSegments();\n }\n getExtensionIfDefined(base) {\n const result = [];\n let self = this;\n while (self && self !== base) {\n result.push({\n encodedTokenAttributes: self.tokenAttributes,\n scopeNames: self.scopePath.getExtensionIfDefined(self.parent?.scopePath ?? null)\n });\n self = self.parent;\n }\n return self === base ? result.reverse() : void 0;\n }\n};\nvar StateStackImpl = class _StateStackImpl {\n /**\n * Invariant:\n * ```\n * if (contentNameScopesList !== nameScopesList && contentNameScopesList?.parent !== nameScopesList) {\n * \tthrow new Error();\n * }\n * if (this.parent && !nameScopesList.extends(this.parent.contentNameScopesList)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n this.parent = parent;\n this.ruleId = ruleId;\n this.beginRuleCapturedEOL = beginRuleCapturedEOL;\n this.endRule = endRule;\n this.nameScopesList = nameScopesList;\n this.contentNameScopesList = contentNameScopesList;\n this.depth = this.parent ? this.parent.depth + 1 : 1;\n this._enterPos = enterPos;\n this._anchorPos = anchorPos;\n }\n _stackElementBrand = void 0;\n // TODO remove me\n static NULL = new _StateStackImpl(\n null,\n 0,\n 0,\n 0,\n false,\n null,\n null,\n null\n );\n /**\n * The position on the current line where this state was pushed.\n * This is relevant only while tokenizing a line, to detect endless loops.\n * Its value is meaningless across lines.\n */\n _enterPos;\n /**\n * The captured anchor position when this stack element was pushed.\n * This is relevant only while tokenizing a line, to restore the anchor position when popping.\n * Its value is meaningless across lines.\n */\n _anchorPos;\n /**\n * The depth of the stack.\n */\n depth;\n equals(other) {\n if (other === null) {\n return false;\n }\n return _StateStackImpl._equals(this, other);\n }\n static _equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!this._structuralEquals(a, b)) {\n return false;\n }\n return AttributedScopeStack.equals(a.contentNameScopesList, b.contentNameScopesList);\n }\n /**\n * A structural equals check. Does not take into account `scopes`.\n */\n static _structuralEquals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n clone() {\n return this;\n }\n static _reset(el) {\n while (el) {\n el._enterPos = -1;\n el._anchorPos = -1;\n el = el.parent;\n }\n }\n reset() {\n _StateStackImpl._reset(this);\n }\n pop() {\n return this.parent;\n }\n safePop() {\n if (this.parent) {\n return this.parent;\n }\n return this;\n }\n push(ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n return new _StateStackImpl(\n this,\n ruleId,\n enterPos,\n anchorPos,\n beginRuleCapturedEOL,\n endRule,\n nameScopesList,\n contentNameScopesList\n );\n }\n getEnterPos() {\n return this._enterPos;\n }\n getAnchorPos() {\n return this._anchorPos;\n }\n getRule(grammar) {\n return grammar.getRule(this.ruleId);\n }\n toString() {\n const r = [];\n this._writeString(r, 0);\n return \"[\" + r.join(\",\") + \"]\";\n }\n _writeString(res, outIndex) {\n if (this.parent) {\n outIndex = this.parent._writeString(res, outIndex);\n }\n res[outIndex++] = `(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`;\n return outIndex;\n }\n withContentNameScopesList(contentNameScopeStack) {\n if (this.contentNameScopesList === contentNameScopeStack) {\n return this;\n }\n return this.parent.push(\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n this.endRule,\n this.nameScopesList,\n contentNameScopeStack\n );\n }\n withEndRule(endRule) {\n if (this.endRule === endRule) {\n return this;\n }\n return new _StateStackImpl(\n this.parent,\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n endRule,\n this.nameScopesList,\n this.contentNameScopesList\n );\n }\n // Used to warn of endless loops\n hasSameRuleAs(other) {\n let el = this;\n while (el && el._enterPos === other._enterPos) {\n if (el.ruleId === other.ruleId) {\n return true;\n }\n el = el.parent;\n }\n return false;\n }\n toStateStackFrame() {\n return {\n ruleId: ruleIdToNumber(this.ruleId),\n beginRuleCapturedEOL: this.beginRuleCapturedEOL,\n endRule: this.endRule,\n nameScopesList: this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList ?? null) ?? [],\n contentNameScopesList: this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList) ?? []\n };\n }\n static pushFrame(self, frame) {\n const namesScopeList = AttributedScopeStack.fromExtension(self?.nameScopesList ?? null, frame.nameScopesList);\n return new _StateStackImpl(\n self,\n ruleIdFromNumber(frame.ruleId),\n frame.enterPos ?? -1,\n frame.anchorPos ?? -1,\n frame.beginRuleCapturedEOL,\n frame.endRule,\n namesScopeList,\n AttributedScopeStack.fromExtension(namesScopeList, frame.contentNameScopesList)\n );\n }\n};\nvar BalancedBracketSelectors = class {\n balancedBracketScopes;\n unbalancedBracketScopes;\n allowAny = false;\n constructor(balancedBracketScopes, unbalancedBracketScopes) {\n this.balancedBracketScopes = balancedBracketScopes.flatMap(\n (selector) => {\n if (selector === \"*\") {\n this.allowAny = true;\n return [];\n }\n return createMatchers(selector, nameMatcher).map((m) => m.matcher);\n }\n );\n this.unbalancedBracketScopes = unbalancedBracketScopes.flatMap(\n (selector) => createMatchers(selector, nameMatcher).map((m) => m.matcher)\n );\n }\n get matchesAlways() {\n return this.allowAny && this.unbalancedBracketScopes.length === 0;\n }\n get matchesNever() {\n return this.balancedBracketScopes.length === 0 && !this.allowAny;\n }\n match(scopes) {\n for (const excluder of this.unbalancedBracketScopes) {\n if (excluder(scopes)) {\n return false;\n }\n }\n for (const includer of this.balancedBracketScopes) {\n if (includer(scopes)) {\n return true;\n }\n }\n return this.allowAny;\n }\n};\nvar LineTokens = class {\n constructor(emitBinaryTokens, lineText, tokenTypeOverrides, balancedBracketSelectors) {\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._emitBinaryTokens = emitBinaryTokens;\n this._tokenTypeOverrides = tokenTypeOverrides;\n if (false) {\n this._lineText = lineText;\n } else {\n this._lineText = null;\n }\n this._tokens = [];\n this._binaryTokens = [];\n this._lastTokenEndIndex = 0;\n }\n _emitBinaryTokens;\n /**\n * defined only if `false`.\n */\n _lineText;\n /**\n * used only if `_emitBinaryTokens` is false.\n */\n _tokens;\n /**\n * used only if `_emitBinaryTokens` is true.\n */\n _binaryTokens;\n _lastTokenEndIndex;\n _tokenTypeOverrides;\n produce(stack, endIndex) {\n this.produceFromScopes(stack.contentNameScopesList, endIndex);\n }\n produceFromScopes(scopesList, endIndex) {\n if (this._lastTokenEndIndex >= endIndex) {\n return;\n }\n if (this._emitBinaryTokens) {\n let metadata = scopesList?.tokenAttributes ?? 0;\n let containsBalancedBrackets = false;\n if (this.balancedBracketSelectors?.matchesAlways) {\n containsBalancedBrackets = true;\n }\n if (this._tokenTypeOverrides.length > 0 || this.balancedBracketSelectors && !this.balancedBracketSelectors.matchesAlways && !this.balancedBracketSelectors.matchesNever) {\n const scopes2 = scopesList?.getScopeNames() ?? [];\n for (const tokenType of this._tokenTypeOverrides) {\n if (tokenType.matcher(scopes2)) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n toOptionalTokenType(tokenType.type),\n null,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n }\n if (this.balancedBracketSelectors) {\n containsBalancedBrackets = this.balancedBracketSelectors.match(scopes2);\n }\n }\n if (containsBalancedBrackets) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n 8 /* NotSet */,\n containsBalancedBrackets,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {\n this._lastTokenEndIndex = endIndex;\n return;\n }\n this._binaryTokens.push(this._lastTokenEndIndex);\n this._binaryTokens.push(metadata);\n this._lastTokenEndIndex = endIndex;\n return;\n }\n const scopes = scopesList?.getScopeNames() ?? [];\n this._tokens.push({\n startIndex: this._lastTokenEndIndex,\n endIndex,\n // value: lineText.substring(lastTokenEndIndex, endIndex),\n scopes\n });\n this._lastTokenEndIndex = endIndex;\n }\n getResult(stack, lineLength) {\n if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {\n this._tokens.pop();\n }\n if (this._tokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._tokens[this._tokens.length - 1].startIndex = 0;\n }\n return this._tokens;\n }\n getBinaryResult(stack, lineLength) {\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {\n this._binaryTokens.pop();\n this._binaryTokens.pop();\n }\n if (this._binaryTokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._binaryTokens[this._binaryTokens.length - 2] = 0;\n }\n const result = new Uint32Array(this._binaryTokens.length);\n for (let i = 0, len = this._binaryTokens.length; i < len; i++) {\n result[i] = this._binaryTokens[i];\n }\n return result;\n }\n};\n\n// src/registry.ts\nvar SyncRegistry = class {\n constructor(theme, _onigLib) {\n this._onigLib = _onigLib;\n this._theme = theme;\n }\n _grammars = /* @__PURE__ */ new Map();\n _rawGrammars = /* @__PURE__ */ new Map();\n _injectionGrammars = /* @__PURE__ */ new Map();\n _theme;\n dispose() {\n for (const grammar of this._grammars.values()) {\n grammar.dispose();\n }\n }\n setTheme(theme) {\n this._theme = theme;\n }\n getColorMap() {\n return this._theme.getColorMap();\n }\n /**\n * Add `grammar` to registry and return a list of referenced scope names\n */\n addGrammar(grammar, injectionScopeNames) {\n this._rawGrammars.set(grammar.scopeName, grammar);\n if (injectionScopeNames) {\n this._injectionGrammars.set(grammar.scopeName, injectionScopeNames);\n }\n }\n /**\n * Lookup a raw grammar.\n */\n lookup(scopeName) {\n return this._rawGrammars.get(scopeName);\n }\n /**\n * Returns the injections for the given grammar\n */\n injections(targetScope) {\n return this._injectionGrammars.get(targetScope);\n }\n /**\n * Get the default theme settings\n */\n getDefaults() {\n return this._theme.getDefaults();\n }\n /**\n * Match a scope in the theme.\n */\n themeMatch(scopePath) {\n return this._theme.match(scopePath);\n }\n /**\n * Lookup a grammar.\n */\n grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n if (!this._grammars.has(scopeName)) {\n let rawGrammar = this._rawGrammars.get(scopeName);\n if (!rawGrammar) {\n return null;\n }\n this._grammars.set(scopeName, createGrammar(\n scopeName,\n rawGrammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n this,\n this._onigLib\n ));\n }\n return this._grammars.get(scopeName);\n }\n};\n\n// src/index.ts\nvar Registry = class {\n _options;\n _syncRegistry;\n _ensureGrammarCache;\n constructor(options) {\n this._options = options;\n this._syncRegistry = new SyncRegistry(\n Theme.createFromRawTheme(options.theme, options.colorMap),\n options.onigLib\n );\n this._ensureGrammarCache = /* @__PURE__ */ new Map();\n }\n dispose() {\n this._syncRegistry.dispose();\n }\n /**\n * Change the theme. Once called, no previous `ruleStack` should be used anymore.\n */\n setTheme(theme, colorMap) {\n this._syncRegistry.setTheme(Theme.createFromRawTheme(theme, colorMap));\n }\n /**\n * Returns a lookup array for color ids.\n */\n getColorMap() {\n return this._syncRegistry.getColorMap();\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithEmbeddedLanguages(initialScopeName, initialLanguage, embeddedLanguages) {\n return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithConfiguration(initialScopeName, initialLanguage, configuration) {\n return this._loadGrammar(\n initialScopeName,\n initialLanguage,\n configuration.embeddedLanguages,\n configuration.tokenTypes,\n new BalancedBracketSelectors(\n configuration.balancedBracketSelectors || [],\n configuration.unbalancedBracketSelectors || []\n )\n );\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n */\n loadGrammar(initialScopeName) {\n return this._loadGrammar(initialScopeName, 0, null, null, null);\n }\n _loadGrammar(initialScopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n const dependencyProcessor = new ScopeDependencyProcessor(this._syncRegistry, initialScopeName);\n while (dependencyProcessor.Q.length > 0) {\n dependencyProcessor.Q.map((request) => this._loadSingleGrammar(request.scopeName));\n dependencyProcessor.processQueue();\n }\n return this._grammarForScopeName(\n initialScopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n _loadSingleGrammar(scopeName) {\n if (!this._ensureGrammarCache.has(scopeName)) {\n this._doLoadSingleGrammar(scopeName);\n this._ensureGrammarCache.set(scopeName, true);\n }\n }\n _doLoadSingleGrammar(scopeName) {\n const grammar = this._options.loadGrammar(scopeName);\n if (grammar) {\n const injections = typeof this._options.getInjections === \"function\" ? this._options.getInjections(scopeName) : void 0;\n this._syncRegistry.addGrammar(grammar, injections);\n }\n }\n /**\n * Adds a rawGrammar.\n */\n addGrammar(rawGrammar, injections = [], initialLanguage = 0, embeddedLanguages = null) {\n this._syncRegistry.addGrammar(rawGrammar, injections);\n return this._grammarForScopeName(rawGrammar.scopeName, initialLanguage, embeddedLanguages);\n }\n /**\n * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `addGrammar`.\n */\n _grammarForScopeName(scopeName, initialLanguage = 0, embeddedLanguages = null, tokenTypes = null, balancedBracketSelectors = null) {\n return this._syncRegistry.grammarForScopeName(\n scopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n};\nvar INITIAL = StateStackImpl.NULL;\nexport {\n EncodedTokenMetadata,\n FindOption,\n FontStyle,\n INITIAL,\n Registry,\n Theme,\n disposeOnigString\n};\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n classId: 'classID',\n dataType: 'datatype',\n itemId: 'itemID',\n strokeDashArray: 'strokeDasharray',\n strokeDashOffset: 'strokeDashoffset',\n strokeLineCap: 'strokeLinecap',\n strokeLineJoin: 'strokeLinejoin',\n strokeMiterLimit: 'strokeMiterlimit',\n typeOf: 'typeof',\n xLinkActuate: 'xlinkActuate',\n xLinkArcRole: 'xlinkArcrole',\n xLinkHref: 'xlinkHref',\n xLinkRole: 'xlinkRole',\n xLinkShow: 'xlinkShow',\n xLinkTitle: 'xlinkTitle',\n xLinkType: 'xlinkType',\n xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '',\n zwj: '',\n lrm: '',\n rlm: '',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `c` vs `c` (decimal shorter)\n // * `d` vs `d` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * The smallest way to encode a character.\n *\n * @param {number} code\n * @returns {string}\n */\nexport function formatBasic(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","import { ShikiError as ShikiError$1 } from '@shikijs/types';\nexport * from '@shikijs/types';\nimport { FontStyle, INITIAL, EncodedTokenMetadata, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';\nimport { toHtml } from 'hast-util-to-html';\n\nfunction resolveColorReplacements(theme, options) {\n const replacements = typeof theme === \"string\" ? {} : { ...theme.colorReplacements };\n const themeName = typeof theme === \"string\" ? theme : theme.name;\n for (const [key, value] of Object.entries(options?.colorReplacements || {})) {\n if (typeof value === \"string\")\n replacements[key] = value;\n else if (key === themeName)\n Object.assign(replacements, value);\n }\n return replacements;\n}\nfunction applyColorReplacements(color, replacements) {\n if (!color)\n return color;\n return replacements?.[color?.toLowerCase()] || color;\n}\n\nfunction toArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nasync function normalizeGetter(p) {\n return Promise.resolve(typeof p === \"function\" ? p() : p).then((r) => r.default || r);\n}\nfunction isPlainLang(lang) {\n return !lang || [\"plaintext\", \"txt\", \"text\", \"plain\"].includes(lang);\n}\nfunction isSpecialLang(lang) {\n return lang === \"ansi\" || isPlainLang(lang);\n}\nfunction isNoneTheme(theme) {\n return theme === \"none\";\n}\nfunction isSpecialTheme(theme) {\n return isNoneTheme(theme);\n}\n\nfunction addClassToHast(node, className) {\n if (!className)\n return node;\n node.properties ||= {};\n node.properties.class ||= [];\n if (typeof node.properties.class === \"string\")\n node.properties.class = node.properties.class.split(/\\s+/g);\n if (!Array.isArray(node.properties.class))\n node.properties.class = [];\n const targets = Array.isArray(className) ? className : className.split(/\\s+/g);\n for (const c of targets) {\n if (c && !node.properties.class.includes(c))\n node.properties.class.push(c);\n }\n return node;\n}\n\nfunction splitLines(code, preserveEnding = false) {\n if (code.length === 0) {\n return [[\"\", 0]];\n }\n const parts = code.split(/(\\r?\\n)/g);\n let index = 0;\n const lines = [];\n for (let i = 0; i < parts.length; i += 2) {\n const line = preserveEnding ? parts[i] + (parts[i + 1] || \"\") : parts[i];\n lines.push([line, index]);\n index += parts[i].length;\n index += parts[i + 1]?.length || 0;\n }\n return lines;\n}\nfunction createPositionConverter(code) {\n const lines = splitLines(code, true).map(([line]) => line);\n function indexToPos(index) {\n if (index === code.length) {\n return {\n line: lines.length - 1,\n character: lines[lines.length - 1].length\n };\n }\n let character = index;\n let line = 0;\n for (const lineText of lines) {\n if (character < lineText.length)\n break;\n character -= lineText.length;\n line++;\n }\n return { line, character };\n }\n function posToIndex(line, character) {\n let index = 0;\n for (let i = 0; i < line; i++)\n index += lines[i].length;\n index += character;\n return index;\n }\n return {\n lines,\n indexToPos,\n posToIndex\n };\n}\nfunction guessEmbeddedLanguages(code, _lang, highlighter) {\n const langs = /* @__PURE__ */ new Set();\n for (const match of code.matchAll(/:?lang=[\"']([^\"']+)[\"']/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/(?:```|~~~)([\\w-]+)/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/\\\\begin\\{([\\w-]+)\\}/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/<script\\s+(?:type|lang)=[\"']([^\"']+)[\"']/gi)) {\n const fullType = match[1].toLowerCase().trim();\n const lang = fullType.includes(\"/\") ? fullType.split(\"/\").pop() : fullType;\n if (lang)\n langs.add(lang);\n }\n if (!highlighter)\n return Array.from(langs);\n const bundle = highlighter.getBundledLanguages();\n return Array.from(langs).filter((l) => l && bundle[l]);\n}\n\nconst DEFAULT_COLOR_LIGHT_DARK = \"light-dark()\";\nconst COLOR_KEYS = [\"color\", \"background-color\"];\n\nfunction splitToken(token, offsets) {\n let lastOffset = 0;\n const tokens = [];\n for (const offset of offsets) {\n if (offset > lastOffset) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset, offset),\n offset: token.offset + lastOffset\n });\n }\n lastOffset = offset;\n }\n if (lastOffset < token.content.length) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset),\n offset: token.offset + lastOffset\n });\n }\n return tokens;\n}\nfunction splitTokens(tokens, breakpoints) {\n const sorted = Array.from(breakpoints instanceof Set ? breakpoints : new Set(breakpoints)).sort((a, b) => a - b);\n if (!sorted.length)\n return tokens;\n return tokens.map((line) => {\n return line.flatMap((token) => {\n const breakpointsInToken = sorted.filter((i) => token.offset < i && i < token.offset + token.content.length).map((i) => i - token.offset).sort((a, b) => a - b);\n if (!breakpointsInToken.length)\n return token;\n return splitToken(token, breakpointsInToken);\n });\n });\n}\nfunction flatTokenVariants(merged, variantsOrder, cssVariablePrefix, defaultColor, colorsRendering = \"css-vars\") {\n const token = {\n content: merged.content,\n explanation: merged.explanation,\n offset: merged.offset\n };\n const styles = variantsOrder.map((t) => getTokenStyleObject(merged.variants[t]));\n const styleKeys = new Set(styles.flatMap((t) => Object.keys(t)));\n const mergedStyles = {};\n const varKey = (idx, key) => {\n const keyName = key === \"color\" ? \"\" : key === \"background-color\" ? \"-bg\" : `-${key}`;\n return cssVariablePrefix + variantsOrder[idx] + (key === \"color\" ? \"\" : keyName);\n };\n styles.forEach((cur, idx) => {\n for (const key of styleKeys) {\n const value = cur[key] || \"inherit\";\n if (idx === 0 && defaultColor && COLOR_KEYS.includes(key)) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && styles.length > 1) {\n const lightIndex = variantsOrder.findIndex((t) => t === \"light\");\n const darkIndex = variantsOrder.findIndex((t) => t === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = styles[lightIndex][key] || \"inherit\";\n const darkValue = styles[darkIndex][key] || \"inherit\";\n mergedStyles[key] = `light-dark(${lightValue}, ${darkValue})`;\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n } else {\n mergedStyles[key] = value;\n }\n } else {\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n }\n }\n });\n token.htmlStyle = mergedStyles;\n return token;\n}\nfunction getTokenStyleObject(token) {\n const styles = {};\n if (token.color)\n styles.color = token.color;\n if (token.bgColor)\n styles[\"background-color\"] = token.bgColor;\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Italic)\n styles[\"font-style\"] = \"italic\";\n if (token.fontStyle & FontStyle.Bold)\n styles[\"font-weight\"] = \"bold\";\n const decorations = [];\n if (token.fontStyle & FontStyle.Underline)\n decorations.push(\"underline\");\n if (token.fontStyle & FontStyle.Strikethrough)\n decorations.push(\"line-through\");\n if (decorations.length)\n styles[\"text-decoration\"] = decorations.join(\" \");\n }\n return styles;\n}\nfunction stringifyTokenStyle(token) {\n if (typeof token === \"string\")\n return token;\n return Object.entries(token).map(([key, value]) => `${key}:${value}`).join(\";\");\n}\n\nconst _grammarStateMap = /* @__PURE__ */ new WeakMap();\nfunction setLastGrammarStateToMap(keys, state) {\n _grammarStateMap.set(keys, state);\n}\nfunction getLastGrammarStateFromMap(keys) {\n return _grammarStateMap.get(keys);\n}\nclass GrammarState {\n /**\n * Theme to Stack mapping\n */\n _stacks = {};\n lang;\n get themes() {\n return Object.keys(this._stacks);\n }\n get theme() {\n return this.themes[0];\n }\n get _stack() {\n return this._stacks[this.theme];\n }\n /**\n * Static method to create a initial grammar state.\n */\n static initial(lang, themes) {\n return new GrammarState(\n Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),\n lang\n );\n }\n constructor(...args) {\n if (args.length === 2) {\n const [stacksMap, lang] = args;\n this.lang = lang;\n this._stacks = stacksMap;\n } else {\n const [stack, lang, theme] = args;\n this.lang = lang;\n this._stacks = { [theme]: stack };\n }\n }\n /**\n * Get the internal stack object.\n * @internal\n */\n getInternalStack(theme = this.theme) {\n return this._stacks[theme];\n }\n getScopes(theme = this.theme) {\n return getScopes(this._stacks[theme]);\n }\n toJSON() {\n return {\n lang: this.lang,\n theme: this.theme,\n themes: this.themes,\n scopes: this.getScopes()\n };\n }\n}\nfunction getScopes(stack) {\n const scopes = [];\n const visited = /* @__PURE__ */ new Set();\n function pushScope(stack2) {\n if (visited.has(stack2))\n return;\n visited.add(stack2);\n const name = stack2?.nameScopesList?.scopeName;\n if (name)\n scopes.push(name);\n if (stack2.parent)\n pushScope(stack2.parent);\n }\n pushScope(stack);\n return scopes;\n}\nfunction getGrammarStack(state, theme) {\n if (!(state instanceof GrammarState))\n throw new ShikiError$1(\"Invalid grammar state\");\n return state.getInternalStack(theme);\n}\n\nfunction transformerDecorations() {\n const map = /* @__PURE__ */ new WeakMap();\n function getContext(shiki) {\n if (!map.has(shiki.meta)) {\n let normalizePosition = function(p) {\n if (typeof p === \"number\") {\n if (p < 0 || p > shiki.source.length)\n throw new ShikiError$1(`Invalid decoration offset: ${p}. Code length: ${shiki.source.length}`);\n return {\n ...converter.indexToPos(p),\n offset: p\n };\n } else {\n const line = converter.lines[p.line];\n if (line === void 0)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Lines length: ${converter.lines.length}`);\n let character = p.character;\n if (character < 0)\n character = line.length + character;\n if (character < 0 || character > line.length)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Line ${p.line} length: ${line.length}`);\n return {\n ...p,\n character,\n offset: converter.posToIndex(p.line, character)\n };\n }\n };\n const converter = createPositionConverter(shiki.source);\n const decorations = (shiki.options.decorations || []).map((d) => ({\n ...d,\n start: normalizePosition(d.start),\n end: normalizePosition(d.end)\n }));\n verifyIntersections(decorations);\n map.set(shiki.meta, {\n decorations,\n converter,\n source: shiki.source\n });\n }\n return map.get(shiki.meta);\n }\n return {\n name: \"shiki:decorations\",\n tokens(tokens) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const breakpoints = ctx.decorations.flatMap((d) => [d.start.offset, d.end.offset]);\n const splitted = splitTokens(tokens, breakpoints);\n return splitted;\n },\n code(codeEl) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const lines = Array.from(codeEl.children).filter((i) => i.type === \"element\" && i.tagName === \"span\");\n if (lines.length !== ctx.converter.lines.length)\n throw new ShikiError$1(`Number of lines in code element (${lines.length}) does not match the number of lines in the source (${ctx.converter.lines.length}). Failed to apply decorations.`);\n function applyLineSection(line, start, end, decoration) {\n const lineEl = lines[line];\n let text = \"\";\n let startIndex = -1;\n let endIndex = -1;\n if (start === 0)\n startIndex = 0;\n if (end === 0)\n endIndex = 0;\n if (end === Number.POSITIVE_INFINITY)\n endIndex = lineEl.children.length;\n if (startIndex === -1 || endIndex === -1) {\n for (let i = 0; i < lineEl.children.length; i++) {\n text += stringify(lineEl.children[i]);\n if (startIndex === -1 && text.length === start)\n startIndex = i + 1;\n if (endIndex === -1 && text.length === end)\n endIndex = i + 1;\n }\n }\n if (startIndex === -1)\n throw new ShikiError$1(`Failed to find start index for decoration ${JSON.stringify(decoration.start)}`);\n if (endIndex === -1)\n throw new ShikiError$1(`Failed to find end index for decoration ${JSON.stringify(decoration.end)}`);\n const children = lineEl.children.slice(startIndex, endIndex);\n if (!decoration.alwaysWrap && children.length === lineEl.children.length) {\n applyDecoration(lineEl, decoration, \"line\");\n } else if (!decoration.alwaysWrap && children.length === 1 && children[0].type === \"element\") {\n applyDecoration(children[0], decoration, \"token\");\n } else {\n const wrapper = {\n type: \"element\",\n tagName: \"span\",\n properties: {},\n children\n };\n applyDecoration(wrapper, decoration, \"wrapper\");\n lineEl.children.splice(startIndex, children.length, wrapper);\n }\n }\n function applyLine(line, decoration) {\n lines[line] = applyDecoration(lines[line], decoration, \"line\");\n }\n function applyDecoration(el, decoration, type) {\n const properties = decoration.properties || {};\n const transform = decoration.transform || ((i) => i);\n el.tagName = decoration.tagName || \"span\";\n el.properties = {\n ...el.properties,\n ...properties,\n class: el.properties.class\n };\n if (decoration.properties?.class)\n addClassToHast(el, decoration.properties.class);\n el = transform(el, type) || el;\n return el;\n }\n const lineApplies = [];\n const sorted = ctx.decorations.sort((a, b) => b.start.offset - a.start.offset || a.end.offset - b.end.offset);\n for (const decoration of sorted) {\n const { start, end } = decoration;\n if (start.line === end.line) {\n applyLineSection(start.line, start.character, end.character, decoration);\n } else if (start.line < end.line) {\n applyLineSection(start.line, start.character, Number.POSITIVE_INFINITY, decoration);\n for (let i = start.line + 1; i < end.line; i++)\n lineApplies.unshift(() => applyLine(i, decoration));\n applyLineSection(end.line, 0, end.character, decoration);\n }\n }\n lineApplies.forEach((i) => i());\n }\n };\n}\nfunction verifyIntersections(items) {\n for (let i = 0; i < items.length; i++) {\n const foo = items[i];\n if (foo.start.offset > foo.end.offset)\n throw new ShikiError$1(`Invalid decoration range: ${JSON.stringify(foo.start)} - ${JSON.stringify(foo.end)}`);\n for (let j = i + 1; j < items.length; j++) {\n const bar = items[j];\n const isFooHasBarStart = foo.start.offset <= bar.start.offset && bar.start.offset < foo.end.offset;\n const isFooHasBarEnd = foo.start.offset < bar.end.offset && bar.end.offset <= foo.end.offset;\n const isBarHasFooStart = bar.start.offset <= foo.start.offset && foo.start.offset < bar.end.offset;\n const isBarHasFooEnd = bar.start.offset < foo.end.offset && foo.end.offset <= bar.end.offset;\n if (isFooHasBarStart || isFooHasBarEnd || isBarHasFooStart || isBarHasFooEnd) {\n if (isFooHasBarStart && isFooHasBarEnd)\n continue;\n if (isBarHasFooStart && isBarHasFooEnd)\n continue;\n if (isBarHasFooStart && foo.start.offset === foo.end.offset)\n continue;\n if (isFooHasBarEnd && bar.start.offset === bar.end.offset)\n continue;\n throw new ShikiError$1(`Decorations ${JSON.stringify(foo.start)} and ${JSON.stringify(bar.start)} intersect.`);\n }\n }\n }\n}\nfunction stringify(el) {\n if (el.type === \"text\")\n return el.value;\n if (el.type === \"element\")\n return el.children.map(stringify).join(\"\");\n return \"\";\n}\n\nconst builtInTransformers = [\n /* @__PURE__ */ transformerDecorations()\n];\nfunction getTransformers(options) {\n const transformers = sortTransformersByEnforcement(options.transformers || []);\n return [\n ...transformers.pre,\n ...transformers.normal,\n ...transformers.post,\n ...builtInTransformers\n ];\n}\nfunction sortTransformersByEnforcement(transformers) {\n const pre = [];\n const post = [];\n const normal = [];\n for (const transformer of transformers) {\n switch (transformer.enforce) {\n case \"pre\":\n pre.push(transformer);\n break;\n case \"post\":\n post.push(transformer);\n break;\n default:\n normal.push(transformer);\n }\n }\n return { pre, post, normal };\n}\n\n// src/colors.ts\nvar namedColors = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\"\n];\n\n// src/decorations.ts\nvar decorations = {\n 1: \"bold\",\n 2: \"dim\",\n 3: \"italic\",\n 4: \"underline\",\n 7: \"reverse\",\n 8: \"hidden\",\n 9: \"strikethrough\"\n};\n\n// src/parser.ts\nfunction findSequence(value, position) {\n const nextEscape = value.indexOf(\"\\x1B\", position);\n if (nextEscape !== -1) {\n if (value[nextEscape + 1] === \"[\") {\n const nextClose = value.indexOf(\"m\", nextEscape);\n if (nextClose !== -1) {\n return {\n sequence: value.substring(nextEscape + 2, nextClose).split(\";\"),\n startPosition: nextEscape,\n position: nextClose + 1\n };\n }\n }\n }\n return {\n position: value.length\n };\n}\nfunction parseColor(sequence) {\n const colorMode = sequence.shift();\n if (colorMode === \"2\") {\n const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));\n if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))\n return;\n return {\n type: \"rgb\",\n rgb\n };\n } else if (colorMode === \"5\") {\n const index = sequence.shift();\n if (index) {\n return { type: \"table\", index: Number(index) };\n }\n }\n}\nfunction parseSequence(sequence) {\n const commands = [];\n while (sequence.length > 0) {\n const code = sequence.shift();\n if (!code)\n continue;\n const codeInt = Number.parseInt(code);\n if (Number.isNaN(codeInt))\n continue;\n if (codeInt === 0) {\n commands.push({ type: \"resetAll\" });\n } else if (codeInt <= 9) {\n const decoration = decorations[codeInt];\n if (decoration) {\n commands.push({\n type: \"setDecoration\",\n value: decorations[codeInt]\n });\n }\n } else if (codeInt <= 29) {\n const decoration = decorations[codeInt - 20];\n if (decoration) {\n commands.push({\n type: \"resetDecoration\",\n value: decoration\n });\n if (decoration === \"dim\") {\n commands.push({\n type: \"resetDecoration\",\n value: \"bold\"\n });\n }\n }\n } else if (codeInt <= 37) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 30] }\n });\n } else if (codeInt === 38) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setForegroundColor\",\n value: color\n });\n }\n } else if (codeInt === 39) {\n commands.push({\n type: \"resetForegroundColor\"\n });\n } else if (codeInt <= 47) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 40] }\n });\n } else if (codeInt === 48) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setBackgroundColor\",\n value: color\n });\n }\n } else if (codeInt === 49) {\n commands.push({\n type: \"resetBackgroundColor\"\n });\n } else if (codeInt === 53) {\n commands.push({\n type: \"setDecoration\",\n value: \"overline\"\n });\n } else if (codeInt === 55) {\n commands.push({\n type: \"resetDecoration\",\n value: \"overline\"\n });\n } else if (codeInt >= 90 && codeInt <= 97) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 90 + 8] }\n });\n } else if (codeInt >= 100 && codeInt <= 107) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 100 + 8] }\n });\n }\n }\n return commands;\n}\nfunction createAnsiSequenceParser() {\n let foreground = null;\n let background = null;\n let decorations2 = /* @__PURE__ */ new Set();\n return {\n parse(value) {\n const tokens = [];\n let position = 0;\n do {\n const findResult = findSequence(value, position);\n const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);\n if (text.length > 0) {\n tokens.push({\n value: text,\n foreground,\n background,\n decorations: new Set(decorations2)\n });\n }\n if (findResult.sequence) {\n const commands = parseSequence(findResult.sequence);\n for (const styleToken of commands) {\n if (styleToken.type === \"resetAll\") {\n foreground = null;\n background = null;\n decorations2.clear();\n } else if (styleToken.type === \"resetForegroundColor\") {\n foreground = null;\n } else if (styleToken.type === \"resetBackgroundColor\") {\n background = null;\n } else if (styleToken.type === \"resetDecoration\") {\n decorations2.delete(styleToken.value);\n }\n }\n for (const styleToken of commands) {\n if (styleToken.type === \"setForegroundColor\") {\n foreground = styleToken.value;\n } else if (styleToken.type === \"setBackgroundColor\") {\n background = styleToken.value;\n } else if (styleToken.type === \"setDecoration\") {\n decorations2.add(styleToken.value);\n }\n }\n }\n position = findResult.position;\n } while (position < value.length);\n return tokens;\n }\n };\n}\n\n// src/palette.ts\nvar defaultNamedColorsMap = {\n black: \"#000000\",\n red: \"#bb0000\",\n green: \"#00bb00\",\n yellow: \"#bbbb00\",\n blue: \"#0000bb\",\n magenta: \"#ff00ff\",\n cyan: \"#00bbbb\",\n white: \"#eeeeee\",\n brightBlack: \"#555555\",\n brightRed: \"#ff5555\",\n brightGreen: \"#00ff00\",\n brightYellow: \"#ffff55\",\n brightBlue: \"#5555ff\",\n brightMagenta: \"#ff55ff\",\n brightCyan: \"#55ffff\",\n brightWhite: \"#ffffff\"\n};\nfunction createColorPalette(namedColorsMap = defaultNamedColorsMap) {\n function namedColor(name) {\n return namedColorsMap[name];\n }\n function rgbColor(rgb) {\n return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, \"0\")).join(\"\")}`;\n }\n let colorTable;\n function getColorTable() {\n if (colorTable) {\n return colorTable;\n }\n colorTable = [];\n for (let i = 0; i < namedColors.length; i++) {\n colorTable.push(namedColor(namedColors[i]));\n }\n let levels = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; r++) {\n for (let g = 0; g < 6; g++) {\n for (let b = 0; b < 6; b++) {\n colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));\n }\n }\n }\n let level = 8;\n for (let i = 0; i < 24; i++, level += 10) {\n colorTable.push(rgbColor([level, level, level]));\n }\n return colorTable;\n }\n function tableColor(index) {\n return getColorTable()[index];\n }\n function value(color) {\n switch (color.type) {\n case \"named\":\n return namedColor(color.name);\n case \"rgb\":\n return rgbColor(color.rgb);\n case \"table\":\n return tableColor(color.index);\n }\n }\n return {\n value\n };\n}\n\nconst defaultAnsiColors = {\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0DBC79\",\n yellow: \"#E5E510\",\n blue: \"#2472C8\",\n magenta: \"#BC3FBC\",\n cyan: \"#11A8CD\",\n white: \"#E5E5E5\",\n brightBlack: \"#666666\",\n brightRed: \"#F14C4C\",\n brightGreen: \"#23D18B\",\n brightYellow: \"#F5F543\",\n brightBlue: \"#3B8EEA\",\n brightMagenta: \"#D670D6\",\n brightCyan: \"#29B8DB\",\n brightWhite: \"#FFFFFF\"\n};\nfunction tokenizeAnsiWithTheme(theme, fileContents, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const lines = splitLines(fileContents);\n const ansiPalette = Object.fromEntries(\n namedColors.map((name) => {\n const key = `terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`;\n const themeColor = theme.colors?.[key];\n return [name, themeColor || defaultAnsiColors[name]];\n })\n );\n const colorPalette = createColorPalette(ansiPalette);\n const parser = createAnsiSequenceParser();\n return lines.map(\n (line) => parser.parse(line[0]).map((token) => {\n let color;\n let bgColor;\n if (token.decorations.has(\"reverse\")) {\n color = token.background ? colorPalette.value(token.background) : theme.bg;\n bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n } else {\n color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n bgColor = token.background ? colorPalette.value(token.background) : void 0;\n }\n color = applyColorReplacements(color, colorReplacements);\n bgColor = applyColorReplacements(bgColor, colorReplacements);\n if (token.decorations.has(\"dim\"))\n color = dimColor(color);\n let fontStyle = FontStyle.None;\n if (token.decorations.has(\"bold\"))\n fontStyle |= FontStyle.Bold;\n if (token.decorations.has(\"italic\"))\n fontStyle |= FontStyle.Italic;\n if (token.decorations.has(\"underline\"))\n fontStyle |= FontStyle.Underline;\n if (token.decorations.has(\"strikethrough\"))\n fontStyle |= FontStyle.Strikethrough;\n return {\n content: token.value,\n offset: line[1],\n // TODO: more accurate offset? might need to fork ansi-sequence-parser\n color,\n bgColor,\n fontStyle\n };\n })\n );\n}\nfunction dimColor(color) {\n const hexMatch = color.match(/#([0-9a-f]{3,8})/i);\n if (hexMatch) {\n const hex = hexMatch[1];\n if (hex.length === 8) {\n const alpha = Math.round(Number.parseInt(hex.slice(6, 8), 16) / 2).toString(16).padStart(2, \"0\");\n return `#${hex.slice(0, 6)}${alpha}`;\n } else if (hex.length === 6) {\n return `#${hex}80`;\n } else if (hex.length === 4) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n const a = hex[3];\n const alpha = Math.round(Number.parseInt(`${a}${a}`, 16) / 2).toString(16).padStart(2, \"0\");\n return `#${r}${r}${g}${g}${b}${b}${alpha}`;\n } else if (hex.length === 3) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n return `#${r}${r}${g}${g}${b}${b}80`;\n }\n }\n const cssVarMatch = color.match(/var\\((--[\\w-]+-ansi-[\\w-]+)\\)/);\n if (cssVarMatch)\n return `var(${cssVarMatch[1]}-dim)`;\n return color;\n}\n\nfunction codeToTokensBase(internal, code, options = {}) {\n const {\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n const lang = internal.resolveLangAlias(options.lang || \"text\");\n if (isPlainLang(lang) || isNoneTheme(themeName))\n return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);\n const { theme, colorMap } = internal.setTheme(themeName);\n if (lang === \"ansi\")\n return tokenizeAnsiWithTheme(theme, code, options);\n const _grammar = internal.getLanguage(options.lang || \"text\");\n if (options.grammarState) {\n if (options.grammarState.lang !== _grammar.name) {\n throw new ShikiError$1(`Grammar state language \"${options.grammarState.lang}\" does not match highlight language \"${_grammar.name}\"`);\n }\n if (!options.grammarState.themes.includes(theme.name)) {\n throw new ShikiError$1(`Grammar state themes \"${options.grammarState.themes}\" do not contain highlight theme \"${theme.name}\"`);\n }\n }\n return tokenizeWithTheme(code, _grammar, theme, colorMap, options);\n}\nfunction getLastGrammarState(...args) {\n if (args.length === 2) {\n return getLastGrammarStateFromMap(args[1]);\n }\n const [internal, code, options = {}] = args;\n const {\n lang = \"text\",\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n if (isPlainLang(lang) || isNoneTheme(themeName))\n throw new ShikiError$1(\"Plain language does not have grammar state\");\n if (lang === \"ansi\")\n throw new ShikiError$1(\"ANSI language does not have grammar state\");\n const { theme, colorMap } = internal.setTheme(themeName);\n const _grammar = internal.getLanguage(lang);\n return new GrammarState(\n _tokenizeWithTheme(code, _grammar, theme, colorMap, options).stateStack,\n _grammar.name,\n theme.name\n );\n}\nfunction tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);\n const grammarState = new GrammarState(\n result.stateStack,\n grammar.name,\n theme.name\n );\n setLastGrammarStateToMap(result.tokens, grammarState);\n return result.tokens;\n}\nfunction _tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const {\n tokenizeMaxLineLength = 0,\n tokenizeTimeLimit = 500\n } = options;\n const lines = splitLines(code);\n let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(\n options.grammarContextCode,\n grammar,\n theme,\n colorMap,\n {\n ...options,\n grammarState: void 0,\n grammarContextCode: void 0\n }\n ).stateStack : INITIAL;\n let actual = [];\n const final = [];\n for (let i = 0, len = lines.length; i < len; i++) {\n const [line, lineOffset] = lines[i];\n if (line === \"\") {\n actual = [];\n final.push([]);\n continue;\n }\n if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {\n actual = [];\n final.push([{\n content: line,\n offset: lineOffset,\n color: \"\",\n fontStyle: 0\n }]);\n continue;\n }\n let resultWithScopes;\n let tokensWithScopes;\n let tokensWithScopesIndex;\n if (options.includeExplanation) {\n resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);\n tokensWithScopes = resultWithScopes.tokens;\n tokensWithScopesIndex = 0;\n }\n const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);\n const tokensLength = result.tokens.length / 2;\n for (let j = 0; j < tokensLength; j++) {\n const startIndex = result.tokens[2 * j];\n const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;\n if (startIndex === nextStartIndex)\n continue;\n const metadata = result.tokens[2 * j + 1];\n const color = applyColorReplacements(\n colorMap[EncodedTokenMetadata.getForeground(metadata)],\n colorReplacements\n );\n const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);\n const token = {\n content: line.substring(startIndex, nextStartIndex),\n offset: lineOffset + startIndex,\n color,\n fontStyle\n };\n if (options.includeExplanation) {\n const themeSettingsSelectors = [];\n if (options.includeExplanation !== \"scopeName\") {\n for (const setting of theme.settings) {\n let selectors;\n switch (typeof setting.scope) {\n case \"string\":\n selectors = setting.scope.split(/,/).map((scope) => scope.trim());\n break;\n case \"object\":\n selectors = setting.scope;\n break;\n default:\n continue;\n }\n themeSettingsSelectors.push({\n settings: setting,\n selectors: selectors.map((selector) => selector.split(/ /))\n });\n }\n }\n token.explanation = [];\n let offset = 0;\n while (startIndex + offset < nextStartIndex) {\n const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];\n const tokenWithScopesText = line.substring(\n tokenWithScopes.startIndex,\n tokenWithScopes.endIndex\n );\n offset += tokenWithScopesText.length;\n token.explanation.push({\n content: tokenWithScopesText,\n scopes: options.includeExplanation === \"scopeName\" ? explainThemeScopesNameOnly(\n tokenWithScopes.scopes\n ) : explainThemeScopesFull(\n themeSettingsSelectors,\n tokenWithScopes.scopes\n )\n });\n tokensWithScopesIndex += 1;\n }\n }\n actual.push(token);\n }\n final.push(actual);\n actual = [];\n stateStack = result.ruleStack;\n }\n return {\n tokens: final,\n stateStack\n };\n}\nfunction explainThemeScopesNameOnly(scopes) {\n return scopes.map((scope) => ({ scopeName: scope }));\n}\nfunction explainThemeScopesFull(themeSelectors, scopes) {\n const result = [];\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i];\n result[i] = {\n scopeName: scope,\n themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))\n };\n }\n return result;\n}\nfunction matchesOne(selector, scope) {\n return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === \".\";\n}\nfunction matches(selectors, scope, parentScopes) {\n if (!matchesOne(selectors[selectors.length - 1], scope))\n return false;\n let selectorParentIndex = selectors.length - 2;\n let parentIndex = parentScopes.length - 1;\n while (selectorParentIndex >= 0 && parentIndex >= 0) {\n if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))\n selectorParentIndex -= 1;\n parentIndex -= 1;\n }\n if (selectorParentIndex === -1)\n return true;\n return false;\n}\nfunction explainThemeScope(themeSettingsSelectors, scope, parentScopes) {\n const result = [];\n for (const { selectors, settings } of themeSettingsSelectors) {\n for (const selectorPieces of selectors) {\n if (matches(selectorPieces, scope, parentScopes)) {\n result.push(settings);\n break;\n }\n }\n }\n return result;\n}\n\nfunction codeToTokensWithThemes(internal, code, options) {\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));\n const themedTokens = themes.map((t) => {\n const tokens2 = codeToTokensBase(internal, code, {\n ...options,\n theme: t.theme\n });\n const state = getLastGrammarStateFromMap(tokens2);\n const theme = typeof t.theme === \"string\" ? t.theme : t.theme.name;\n return {\n tokens: tokens2,\n state,\n theme\n };\n });\n const tokens = syncThemesTokenization(\n ...themedTokens.map((i) => i.tokens)\n );\n const mergedTokens = tokens[0].map(\n (line, lineIdx) => line.map((_token, tokenIdx) => {\n const mergedToken = {\n content: _token.content,\n variants: {},\n offset: _token.offset\n };\n if (\"includeExplanation\" in options && options.includeExplanation) {\n mergedToken.explanation = _token.explanation;\n }\n tokens.forEach((t, themeIdx) => {\n const {\n content: _,\n explanation: __,\n offset: ___,\n ...styles\n } = t[lineIdx][tokenIdx];\n mergedToken.variants[themes[themeIdx].color] = styles;\n });\n return mergedToken;\n })\n );\n const mergedGrammarState = themedTokens[0].state ? new GrammarState(\n Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),\n themedTokens[0].state.lang\n ) : void 0;\n if (mergedGrammarState)\n setLastGrammarStateToMap(mergedTokens, mergedGrammarState);\n return mergedTokens;\n}\nfunction syncThemesTokenization(...themes) {\n const outThemes = themes.map(() => []);\n const count = themes.length;\n for (let i = 0; i < themes[0].length; i++) {\n const lines = themes.map((t) => t[i]);\n const outLines = outThemes.map(() => []);\n outThemes.forEach((t, i2) => t.push(outLines[i2]));\n const indexes = lines.map(() => 0);\n const current = lines.map((l) => l[0]);\n while (current.every((t) => t)) {\n const minLength = Math.min(...current.map((t) => t.content.length));\n for (let n = 0; n < count; n++) {\n const token = current[n];\n if (token.content.length === minLength) {\n outLines[n].push(token);\n indexes[n] += 1;\n current[n] = lines[n][indexes[n]];\n } else {\n outLines[n].push({\n ...token,\n content: token.content.slice(0, minLength)\n });\n current[n] = {\n ...token,\n content: token.content.slice(minLength),\n offset: token.offset + minLength\n };\n }\n }\n }\n }\n return outThemes;\n}\n\nfunction codeToTokens(internal, code, options) {\n let bg;\n let fg;\n let tokens;\n let themeName;\n let rootStyle;\n let grammarState;\n if (\"themes\" in options) {\n const {\n defaultColor = \"light\",\n cssVariablePrefix = \"--shiki-\",\n colorsRendering = \"css-vars\"\n } = options;\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] })).sort((a, b) => a.color === defaultColor ? -1 : b.color === defaultColor ? 1 : 0);\n if (themes.length === 0)\n throw new ShikiError$1(\"`themes` option must not be empty\");\n const themeTokens = codeToTokensWithThemes(\n internal,\n code,\n options\n );\n grammarState = getLastGrammarStateFromMap(themeTokens);\n if (defaultColor && DEFAULT_COLOR_LIGHT_DARK !== defaultColor && !themes.find((t) => t.color === defaultColor))\n throw new ShikiError$1(`\\`themes\\` option must contain the defaultColor key \\`${defaultColor}\\``);\n const themeRegs = themes.map((t) => internal.getTheme(t.theme));\n const themesOrder = themes.map((t) => t.color);\n tokens = themeTokens.map((line) => line.map((token) => flatTokenVariants(token, themesOrder, cssVariablePrefix, defaultColor, colorsRendering)));\n if (grammarState)\n setLastGrammarStateToMap(tokens, grammarState);\n const themeColorReplacements = themes.map((t) => resolveColorReplacements(t.theme, options));\n fg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"fg\", colorsRendering);\n bg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"bg\", colorsRendering);\n themeName = `shiki-themes ${themeRegs.map((t) => t.name).join(\" \")}`;\n rootStyle = defaultColor ? void 0 : [fg, bg].join(\";\");\n } else if (\"theme\" in options) {\n const colorReplacements = resolveColorReplacements(options.theme, options);\n tokens = codeToTokensBase(\n internal,\n code,\n options\n );\n const _theme = internal.getTheme(options.theme);\n bg = applyColorReplacements(_theme.bg, colorReplacements);\n fg = applyColorReplacements(_theme.fg, colorReplacements);\n themeName = _theme.name;\n grammarState = getLastGrammarStateFromMap(tokens);\n } else {\n throw new ShikiError$1(\"Invalid options, either `theme` or `themes` must be provided\");\n }\n return {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n };\n}\nfunction mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, property, colorsRendering) {\n return themes.map((t, idx) => {\n const value = applyColorReplacements(themeRegs[idx][property], themeColorReplacements[idx]) || \"inherit\";\n const cssVar = `${cssVariablePrefix + t.color}${property === \"bg\" ? \"-bg\" : \"\"}:${value}`;\n if (idx === 0 && defaultColor) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && themes.length > 1) {\n const lightIndex = themes.findIndex((t2) => t2.color === \"light\");\n const darkIndex = themes.findIndex((t2) => t2.color === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = applyColorReplacements(themeRegs[lightIndex][property], themeColorReplacements[lightIndex]) || \"inherit\";\n const darkValue = applyColorReplacements(themeRegs[darkIndex][property], themeColorReplacements[darkIndex]) || \"inherit\";\n return `light-dark(${lightValue}, ${darkValue});${cssVar}`;\n }\n return value;\n }\n if (colorsRendering === \"css-vars\") {\n return cssVar;\n }\n return null;\n }).filter((i) => !!i).join(\";\");\n}\n\nfunction codeToHast(internal, code, options, transformerContext = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n}) {\n let input = code;\n for (const transformer of getTransformers(options))\n input = transformer.preprocess?.call(transformerContext, input, options) || input;\n let {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n } = codeToTokens(internal, input, options);\n const {\n mergeWhitespaces = true,\n mergeSameStyleTokens = false\n } = options;\n if (mergeWhitespaces === true)\n tokens = mergeWhitespaceTokens(tokens);\n else if (mergeWhitespaces === \"never\")\n tokens = splitWhitespaceTokens(tokens);\n if (mergeSameStyleTokens) {\n tokens = mergeAdjacentStyledTokens(tokens);\n }\n const contextSource = {\n ...transformerContext,\n get source() {\n return input;\n }\n };\n for (const transformer of getTransformers(options))\n tokens = transformer.tokens?.call(contextSource, tokens) || tokens;\n return tokensToHast(\n tokens,\n {\n ...options,\n fg,\n bg,\n themeName,\n rootStyle: options.rootStyle === false ? false : options.rootStyle ?? rootStyle\n },\n contextSource,\n grammarState\n );\n}\nfunction tokensToHast(tokens, options, transformerContext, grammarState = getLastGrammarStateFromMap(tokens)) {\n const transformers = getTransformers(options);\n const lines = [];\n const root = {\n type: \"root\",\n children: []\n };\n const {\n structure = \"classic\",\n tabindex = \"0\"\n } = options;\n const properties = {\n class: `shiki ${options.themeName || \"\"}`\n };\n if (options.rootStyle !== false) {\n if (options.rootStyle != null)\n properties.style = options.rootStyle;\n else\n properties.style = `background-color:${options.bg};color:${options.fg}`;\n }\n if (tabindex !== false && tabindex != null)\n properties.tabindex = tabindex.toString();\n for (const [key, value] of Object.entries(options.meta || {})) {\n if (!key.startsWith(\"_\"))\n properties[key] = value;\n }\n let preNode = {\n type: \"element\",\n tagName: \"pre\",\n properties,\n children: []\n };\n let codeNode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: lines\n };\n const lineNodes = [];\n const context = {\n ...transformerContext,\n structure,\n addClassToHast,\n get source() {\n return transformerContext.source;\n },\n get tokens() {\n return tokens;\n },\n get options() {\n return options;\n },\n get root() {\n return root;\n },\n get pre() {\n return preNode;\n },\n get code() {\n return codeNode;\n },\n get lines() {\n return lineNodes;\n }\n };\n tokens.forEach((line, idx) => {\n if (idx) {\n if (structure === \"inline\")\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n else if (structure === \"classic\")\n lines.push({ type: \"text\", value: \"\\n\" });\n }\n let lineNode = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n let col = 0;\n for (const token of line) {\n let tokenNode = {\n type: \"element\",\n tagName: \"span\",\n properties: {\n ...token.htmlAttrs\n },\n children: [{ type: \"text\", value: token.content }]\n };\n const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n if (style)\n tokenNode.properties.style = style;\n for (const transformer of transformers)\n tokenNode = transformer?.span?.call(context, tokenNode, idx + 1, col, lineNode, token) || tokenNode;\n if (structure === \"inline\")\n root.children.push(tokenNode);\n else if (structure === \"classic\")\n lineNode.children.push(tokenNode);\n col += token.content.length;\n }\n if (structure === \"classic\") {\n for (const transformer of transformers)\n lineNode = transformer?.line?.call(context, lineNode, idx + 1) || lineNode;\n lineNodes.push(lineNode);\n lines.push(lineNode);\n } else if (structure === \"inline\") {\n lineNodes.push(lineNode);\n }\n });\n if (structure === \"classic\") {\n for (const transformer of transformers)\n codeNode = transformer?.code?.call(context, codeNode) || codeNode;\n preNode.children.push(codeNode);\n for (const transformer of transformers)\n preNode = transformer?.pre?.call(context, preNode) || preNode;\n root.children.push(preNode);\n } else if (structure === \"inline\") {\n const syntheticLines = [];\n let currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n for (const child of root.children) {\n if (child.type === \"element\" && child.tagName === \"br\") {\n syntheticLines.push(currentLine);\n currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n } else if (child.type === \"element\" || child.type === \"text\") {\n currentLine.children.push(child);\n }\n }\n syntheticLines.push(currentLine);\n const syntheticCode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: syntheticLines\n };\n let transformedCode = syntheticCode;\n for (const transformer of transformers)\n transformedCode = transformer?.code?.call(context, transformedCode) || transformedCode;\n root.children = [];\n for (let i = 0; i < transformedCode.children.length; i++) {\n if (i > 0)\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n const line = transformedCode.children[i];\n if (line.type === \"element\")\n root.children.push(...line.children);\n }\n }\n let result = root;\n for (const transformer of transformers)\n result = transformer?.root?.call(context, result) || result;\n if (grammarState)\n setLastGrammarStateToMap(result, grammarState);\n return result;\n}\nfunction mergeWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n let carryOnContent = \"\";\n let firstOffset;\n line.forEach((token, idx) => {\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n const couldMerge = !isDecorated;\n if (couldMerge && token.content.match(/^\\s+$/) && line[idx + 1]) {\n if (firstOffset === void 0)\n firstOffset = token.offset;\n carryOnContent += token.content;\n } else {\n if (carryOnContent) {\n if (couldMerge) {\n newLine.push({\n ...token,\n offset: firstOffset,\n content: carryOnContent + token.content\n });\n } else {\n newLine.push(\n {\n content: carryOnContent,\n offset: firstOffset\n },\n token\n );\n }\n firstOffset = void 0;\n carryOnContent = \"\";\n } else {\n newLine.push(token);\n }\n }\n });\n return newLine;\n });\n}\nfunction splitWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n return line.flatMap((token) => {\n if (token.content.match(/^\\s+$/))\n return token;\n const match = token.content.match(/^(\\s*)(.*?)(\\s*)$/);\n if (!match)\n return token;\n const [, leading, content, trailing] = match;\n if (!leading && !trailing)\n return token;\n const expanded = [{\n ...token,\n offset: token.offset + leading.length,\n content\n }];\n if (leading) {\n expanded.unshift({\n content: leading,\n offset: token.offset\n });\n }\n if (trailing) {\n expanded.push({\n content: trailing,\n offset: token.offset + leading.length + content.length\n });\n }\n return expanded;\n });\n });\n}\nfunction mergeAdjacentStyledTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n for (const token of line) {\n if (newLine.length === 0) {\n newLine.push({ ...token });\n continue;\n }\n const prevToken = newLine[newLine.length - 1];\n const prevStyle = stringifyTokenStyle(prevToken.htmlStyle || getTokenStyleObject(prevToken));\n const currentStyle = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n const isPrevDecorated = prevToken.fontStyle && (prevToken.fontStyle & FontStyle.Underline || prevToken.fontStyle & FontStyle.Strikethrough);\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n if (!isPrevDecorated && !isDecorated && prevStyle === currentStyle) {\n prevToken.content += token.content;\n } else {\n newLine.push({ ...token });\n }\n }\n return newLine;\n });\n}\n\nconst hastToHtml = toHtml;\nfunction codeToHtml(internal, code, options) {\n const context = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n };\n let result = hastToHtml(codeToHast(internal, code, options, context));\n for (const transformer of getTransformers(options))\n result = transformer.postprocess?.call(context, result, options) || result;\n return result;\n}\n\nconst VSCODE_FALLBACK_EDITOR_FG = { light: \"#333333\", dark: \"#bbbbbb\" };\nconst VSCODE_FALLBACK_EDITOR_BG = { light: \"#fffffe\", dark: \"#1e1e1e\" };\nconst RESOLVED_KEY = \"__shiki_resolved\";\nfunction normalizeTheme(rawTheme) {\n if (rawTheme?.[RESOLVED_KEY])\n return rawTheme;\n const theme = {\n ...rawTheme\n };\n if (theme.tokenColors && !theme.settings) {\n theme.settings = theme.tokenColors;\n delete theme.tokenColors;\n }\n theme.type ||= \"dark\";\n theme.colorReplacements = { ...theme.colorReplacements };\n theme.settings ||= [];\n let { bg, fg } = theme;\n if (!bg || !fg) {\n const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;\n if (globalSetting?.settings?.foreground)\n fg = globalSetting.settings.foreground;\n if (globalSetting?.settings?.background)\n bg = globalSetting.settings.background;\n if (!fg && theme?.colors?.[\"editor.foreground\"])\n fg = theme.colors[\"editor.foreground\"];\n if (!bg && theme?.colors?.[\"editor.background\"])\n bg = theme.colors[\"editor.background\"];\n if (!fg)\n fg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;\n if (!bg)\n bg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;\n theme.fg = fg;\n theme.bg = bg;\n }\n if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {\n theme.settings.unshift({\n settings: {\n foreground: theme.fg,\n background: theme.bg\n }\n });\n }\n let replacementCount = 0;\n const replacementMap = /* @__PURE__ */ new Map();\n function getReplacementColor(value) {\n if (replacementMap.has(value))\n return replacementMap.get(value);\n replacementCount += 1;\n const hex = `#${replacementCount.toString(16).padStart(8, \"0\").toLowerCase()}`;\n if (theme.colorReplacements?.[`#${hex}`])\n return getReplacementColor(value);\n replacementMap.set(value, hex);\n return hex;\n }\n theme.settings = theme.settings.map((setting) => {\n const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith(\"#\");\n const replaceBg = setting.settings?.background && !setting.settings.background.startsWith(\"#\");\n if (!replaceFg && !replaceBg)\n return setting;\n const clone = {\n ...setting,\n settings: {\n ...setting.settings\n }\n };\n if (replaceFg) {\n const replacement = getReplacementColor(setting.settings.foreground);\n theme.colorReplacements[replacement] = setting.settings.foreground;\n clone.settings.foreground = replacement;\n }\n if (replaceBg) {\n const replacement = getReplacementColor(setting.settings.background);\n theme.colorReplacements[replacement] = setting.settings.background;\n clone.settings.background = replacement;\n }\n return clone;\n });\n for (const key of Object.keys(theme.colors || {})) {\n if (key === \"editor.foreground\" || key === \"editor.background\" || key.startsWith(\"terminal.ansi\")) {\n if (!theme.colors[key]?.startsWith(\"#\")) {\n const replacement = getReplacementColor(theme.colors[key]);\n theme.colorReplacements[replacement] = theme.colors[key];\n theme.colors[key] = replacement;\n }\n }\n }\n Object.defineProperty(theme, RESOLVED_KEY, {\n enumerable: false,\n writable: false,\n value: true\n });\n return theme;\n}\n\nasync function resolveLangs(langs) {\n return Array.from(new Set((await Promise.all(\n langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))\n )).flat()));\n}\nasync function resolveThemes(themes) {\n const resolved = await Promise.all(\n themes.map(\n async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))\n )\n );\n return resolved.filter((i) => !!i);\n}\n\nlet _emitDeprecation = 3;\nlet _emitError = false;\nfunction enableDeprecationWarnings(emitDeprecation = true, emitError = false) {\n _emitDeprecation = emitDeprecation;\n _emitError = emitError;\n}\nfunction warnDeprecated(message, version = 3) {\n if (!_emitDeprecation)\n return;\n if (typeof _emitDeprecation === \"number\" && version > _emitDeprecation)\n return;\n if (_emitError) {\n throw new Error(`[SHIKI DEPRECATE]: ${message}`);\n } else {\n console.trace(`[SHIKI DEPRECATE]: ${message}`);\n }\n}\n\nclass ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction resolveLangAlias(name, alias) {\n if (!alias)\n return name;\n if (alias[name]) {\n const resolved = /* @__PURE__ */ new Set([name]);\n while (alias[name]) {\n name = alias[name];\n if (resolved.has(name))\n throw new ShikiError(`Circular alias \\`${Array.from(resolved).join(\" -> \")} -> ${name}\\``);\n resolved.add(name);\n }\n }\n return name;\n}\n\nclass Registry extends Registry$1 {\n constructor(_resolver, _themes, _langs, _alias = {}) {\n super(_resolver);\n this._resolver = _resolver;\n this._themes = _themes;\n this._langs = _langs;\n this._alias = _alias;\n this._themes.map((t) => this.loadTheme(t));\n this.loadLanguages(this._langs);\n }\n _resolvedThemes = /* @__PURE__ */ new Map();\n _resolvedGrammars = /* @__PURE__ */ new Map();\n _langMap = /* @__PURE__ */ new Map();\n _langGraph = /* @__PURE__ */ new Map();\n _textmateThemeCache = /* @__PURE__ */ new WeakMap();\n _loadedThemesCache = null;\n _loadedLanguagesCache = null;\n getTheme(theme) {\n if (typeof theme === \"string\")\n return this._resolvedThemes.get(theme);\n else\n return this.loadTheme(theme);\n }\n loadTheme(theme) {\n const _theme = normalizeTheme(theme);\n if (_theme.name) {\n this._resolvedThemes.set(_theme.name, _theme);\n this._loadedThemesCache = null;\n }\n return _theme;\n }\n getLoadedThemes() {\n if (!this._loadedThemesCache)\n this._loadedThemesCache = [...this._resolvedThemes.keys()];\n return this._loadedThemesCache;\n }\n // Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`\n // is expensive. Themes can switch often especially for dual-theme support.\n //\n // The parent class also accepts `colorMap` as the second parameter, but since we don't use that,\n // we omit here so it's easier to cache the themes.\n setTheme(theme) {\n let textmateTheme = this._textmateThemeCache.get(theme);\n if (!textmateTheme) {\n textmateTheme = Theme.createFromRawTheme(theme);\n this._textmateThemeCache.set(theme, textmateTheme);\n }\n this._syncRegistry.setTheme(textmateTheme);\n }\n getGrammar(name) {\n name = resolveLangAlias(name, this._alias);\n return this._resolvedGrammars.get(name);\n }\n loadLanguage(lang) {\n if (this.getGrammar(lang.name))\n return;\n const embeddedLazilyBy = new Set(\n [...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))\n );\n this._resolver.addLanguage(lang);\n const grammarConfig = {\n balancedBracketSelectors: lang.balancedBracketSelectors || [\"*\"],\n unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []\n };\n this._syncRegistry._rawGrammars.set(lang.scopeName, lang);\n const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);\n g.name = lang.name;\n this._resolvedGrammars.set(lang.name, g);\n if (lang.aliases) {\n lang.aliases.forEach((alias) => {\n this._alias[alias] = lang.name;\n });\n }\n this._loadedLanguagesCache = null;\n if (embeddedLazilyBy.size) {\n for (const e of embeddedLazilyBy) {\n this._resolvedGrammars.delete(e.name);\n this._loadedLanguagesCache = null;\n this._syncRegistry?._injectionGrammars?.delete(e.scopeName);\n this._syncRegistry?._grammars?.delete(e.scopeName);\n this.loadLanguage(this._langMap.get(e.name));\n }\n }\n }\n dispose() {\n super.dispose();\n this._resolvedThemes.clear();\n this._resolvedGrammars.clear();\n this._langMap.clear();\n this._langGraph.clear();\n this._loadedThemesCache = null;\n }\n loadLanguages(langs) {\n for (const lang of langs)\n this.resolveEmbeddedLanguages(lang);\n const langsGraphArray = Array.from(this._langGraph.entries());\n const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);\n if (missingLangs.length) {\n const dependents = langsGraphArray.filter(([_, lang]) => {\n if (!lang)\n return false;\n const embedded = lang.embeddedLanguages || lang.embeddedLangs;\n return embedded?.some((l) => missingLangs.map(([name]) => name).includes(l));\n }).filter((lang) => !missingLangs.includes(lang));\n throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\\`${name}\\``).join(\", \")}, required by ${dependents.map(([name]) => `\\`${name}\\``).join(\", \")}`);\n }\n for (const [_, lang] of langsGraphArray)\n this._resolver.addLanguage(lang);\n for (const [_, lang] of langsGraphArray)\n this.loadLanguage(lang);\n }\n getLoadedLanguages() {\n if (!this._loadedLanguagesCache) {\n this._loadedLanguagesCache = [\n .../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])\n ];\n }\n return this._loadedLanguagesCache;\n }\n resolveEmbeddedLanguages(lang) {\n this._langMap.set(lang.name, lang);\n this._langGraph.set(lang.name, lang);\n const embedded = lang.embeddedLanguages ?? lang.embeddedLangs;\n if (embedded) {\n for (const embeddedLang of embedded)\n this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));\n }\n }\n}\n\nclass Resolver {\n _langs = /* @__PURE__ */ new Map();\n _scopeToLang = /* @__PURE__ */ new Map();\n _injections = /* @__PURE__ */ new Map();\n _onigLib;\n constructor(engine, langs) {\n this._onigLib = {\n createOnigScanner: (patterns) => engine.createScanner(patterns),\n createOnigString: (s) => engine.createString(s)\n };\n langs.forEach((i) => this.addLanguage(i));\n }\n get onigLib() {\n return this._onigLib;\n }\n getLangRegistration(langIdOrAlias) {\n return this._langs.get(langIdOrAlias);\n }\n loadGrammar(scopeName) {\n return this._scopeToLang.get(scopeName);\n }\n addLanguage(l) {\n this._langs.set(l.name, l);\n if (l.aliases) {\n l.aliases.forEach((a) => {\n this._langs.set(a, l);\n });\n }\n this._scopeToLang.set(l.scopeName, l);\n if (l.injectTo) {\n l.injectTo.forEach((i) => {\n if (!this._injections.get(i))\n this._injections.set(i, []);\n this._injections.get(i).push(l.scopeName);\n });\n }\n }\n getInjections(scopeName) {\n const scopeParts = scopeName.split(\".\");\n let injections = [];\n for (let i = 1; i <= scopeParts.length; i++) {\n const subScopeName = scopeParts.slice(0, i).join(\".\");\n injections = [...injections, ...this._injections.get(subScopeName) || []];\n }\n return injections;\n }\n}\n\nlet instancesCount = 0;\nfunction createShikiInternalSync(options) {\n instancesCount += 1;\n if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)\n console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \\`highlighter.dispose()\\` to release unused instances.`);\n let isDisposed = false;\n if (!options.engine)\n throw new ShikiError(\"`engine` option is required for synchronous mode\");\n const langs = (options.langs || []).flat(1);\n const themes = (options.themes || []).flat(1).map(normalizeTheme);\n const resolver = new Resolver(options.engine, langs);\n const _registry = new Registry(resolver, themes, langs, options.langAlias);\n let _lastTheme;\n function resolveLangAlias$1(name) {\n return resolveLangAlias(name, options.langAlias);\n }\n function getLanguage(name) {\n ensureNotDisposed();\n const _lang = _registry.getGrammar(typeof name === \"string\" ? name : name.name);\n if (!_lang)\n throw new ShikiError(`Language \\`${name}\\` not found, you may need to load it first`);\n return _lang;\n }\n function getTheme(name) {\n if (name === \"none\")\n return { bg: \"\", fg: \"\", name: \"none\", settings: [], type: \"dark\" };\n ensureNotDisposed();\n const _theme = _registry.getTheme(name);\n if (!_theme)\n throw new ShikiError(`Theme \\`${name}\\` not found, you may need to load it first`);\n return _theme;\n }\n function setTheme(name) {\n ensureNotDisposed();\n const theme = getTheme(name);\n if (_lastTheme !== name) {\n _registry.setTheme(theme);\n _lastTheme = name;\n }\n const colorMap = _registry.getColorMap();\n return {\n theme,\n colorMap\n };\n }\n function getLoadedThemes() {\n ensureNotDisposed();\n return _registry.getLoadedThemes();\n }\n function getLoadedLanguages() {\n ensureNotDisposed();\n return _registry.getLoadedLanguages();\n }\n function loadLanguageSync(...langs2) {\n ensureNotDisposed();\n _registry.loadLanguages(langs2.flat(1));\n }\n async function loadLanguage(...langs2) {\n return loadLanguageSync(await resolveLangs(langs2));\n }\n function loadThemeSync(...themes2) {\n ensureNotDisposed();\n for (const theme of themes2.flat(1)) {\n _registry.loadTheme(theme);\n }\n }\n async function loadTheme(...themes2) {\n ensureNotDisposed();\n return loadThemeSync(await resolveThemes(themes2));\n }\n function ensureNotDisposed() {\n if (isDisposed)\n throw new ShikiError(\"Shiki instance has been disposed\");\n }\n function dispose() {\n if (isDisposed)\n return;\n isDisposed = true;\n _registry.dispose();\n instancesCount -= 1;\n }\n return {\n setTheme,\n getTheme,\n getLanguage,\n getLoadedThemes,\n getLoadedLanguages,\n resolveLangAlias: resolveLangAlias$1,\n loadLanguage,\n loadLanguageSync,\n loadTheme,\n loadThemeSync,\n dispose,\n [Symbol.dispose]: dispose\n };\n}\n\nasync function createShikiInternal(options) {\n if (!options.engine) {\n warnDeprecated(\"`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.\");\n }\n const [\n themes,\n langs,\n engine\n ] = await Promise.all([\n resolveThemes(options.themes || []),\n resolveLangs(options.langs || []),\n options.engine\n ]);\n return createShikiInternalSync({\n ...options,\n themes,\n langs,\n engine\n });\n}\n\nasync function createHighlighterCore(options) {\n const internal = await createShikiInternal(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction createHighlighterCoreSync(options) {\n const internal = createShikiInternalSync(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction makeSingletonHighlighterCore(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighterCore2(options) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: options.themes || [],\n langs: options.langs || []\n });\n return _shiki;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighterCore2;\n}\nconst getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore);\n\nfunction createBundledHighlighter(options) {\n const bundledLanguages = options.langs;\n const bundledThemes = options.themes;\n const engine = options.engine;\n async function createHighlighter(options2) {\n function resolveLang(lang) {\n if (typeof lang === \"string\") {\n lang = options2.langAlias?.[lang] || lang;\n if (isSpecialLang(lang))\n return [];\n const bundle = bundledLanguages[lang];\n if (!bundle)\n throw new ShikiError$1(`Language \\`${lang}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return lang;\n }\n function resolveTheme(theme) {\n if (isSpecialTheme(theme))\n return \"none\";\n if (typeof theme === \"string\") {\n const bundle = bundledThemes[theme];\n if (!bundle)\n throw new ShikiError$1(`Theme \\`${theme}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return theme;\n }\n const _themes = (options2.themes ?? []).map((i) => resolveTheme(i));\n const langs = (options2.langs ?? []).map((i) => resolveLang(i));\n const core = await createHighlighterCore({\n engine: options2.engine ?? engine(),\n ...options2,\n themes: _themes,\n langs\n });\n return {\n ...core,\n loadLanguage(...langs2) {\n return core.loadLanguage(...langs2.map(resolveLang));\n },\n loadTheme(...themes) {\n return core.loadTheme(...themes.map(resolveTheme));\n },\n getBundledLanguages() {\n return bundledLanguages;\n },\n getBundledThemes() {\n return bundledThemes;\n }\n };\n }\n return createHighlighter;\n}\nfunction makeSingletonHighlighter(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighter(options = {}) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: [],\n langs: []\n });\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighter;\n}\nfunction createSingletonShorthands(createHighlighter, config) {\n const getSingletonHighlighter = makeSingletonHighlighter(createHighlighter);\n async function get(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: \"theme\" in options ? [options.theme] : Object.values(options.themes)\n });\n const langs = await config?.guessEmbeddedLanguages?.(code, options.lang, shiki);\n if (langs) {\n await shiki.loadLanguage(...langs);\n }\n return shiki;\n }\n return {\n getSingletonHighlighter(options) {\n return getSingletonHighlighter(options);\n },\n async codeToHtml(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHtml(code, options);\n },\n async codeToHast(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHast(code, options);\n },\n async codeToTokens(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokens(code, options);\n },\n async codeToTokensBase(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensBase(code, options);\n },\n async codeToTokensWithThemes(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensWithThemes(code, options);\n },\n async getLastGrammarState(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: [options.theme]\n });\n return shiki.getLastGrammarState(code, options);\n }\n };\n}\nconst createdBundledHighlighter = createBundledHighlighter;\n\nfunction createCssVariablesTheme(options = {}) {\n const {\n name = \"css-variables\",\n variablePrefix = \"--shiki-\",\n fontStyle = true\n } = options;\n const variable = (name2) => {\n if (options.variableDefaults?.[name2])\n return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;\n return `var(${variablePrefix}${name2})`;\n };\n const theme = {\n name,\n type: \"dark\",\n colors: {\n \"editor.foreground\": variable(\"foreground\"),\n \"editor.background\": variable(\"background\"),\n \"terminal.ansiBlack\": variable(\"ansi-black\"),\n \"terminal.ansiRed\": variable(\"ansi-red\"),\n \"terminal.ansiGreen\": variable(\"ansi-green\"),\n \"terminal.ansiYellow\": variable(\"ansi-yellow\"),\n \"terminal.ansiBlue\": variable(\"ansi-blue\"),\n \"terminal.ansiMagenta\": variable(\"ansi-magenta\"),\n \"terminal.ansiCyan\": variable(\"ansi-cyan\"),\n \"terminal.ansiWhite\": variable(\"ansi-white\"),\n \"terminal.ansiBrightBlack\": variable(\"ansi-bright-black\"),\n \"terminal.ansiBrightRed\": variable(\"ansi-bright-red\"),\n \"terminal.ansiBrightGreen\": variable(\"ansi-bright-green\"),\n \"terminal.ansiBrightYellow\": variable(\"ansi-bright-yellow\"),\n \"terminal.ansiBrightBlue\": variable(\"ansi-bright-blue\"),\n \"terminal.ansiBrightMagenta\": variable(\"ansi-bright-magenta\"),\n \"terminal.ansiBrightCyan\": variable(\"ansi-bright-cyan\"),\n \"terminal.ansiBrightWhite\": variable(\"ansi-bright-white\")\n },\n tokenColors: [\n {\n scope: [\n \"keyword.operator.accessor\",\n \"meta.group.braces.round.function.arguments\",\n \"meta.template.expression\",\n \"markup.fenced_code meta.embedded.block\"\n ],\n settings: {\n foreground: variable(\"foreground\")\n }\n },\n {\n scope: \"emphasis\",\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: [\"strong\", \"markup.heading.markdown\", \"markup.bold.markdown\"],\n settings: {\n fontStyle: \"bold\"\n }\n },\n {\n scope: [\"markup.italic.markdown\"],\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: \"meta.link.inline.markdown\",\n settings: {\n fontStyle: \"underline\",\n foreground: variable(\"token-link\")\n }\n },\n {\n scope: [\"string\", \"markup.fenced_code\", \"markup.inline\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n scope: [\"comment\", \"string.quoted.docstring.multi\"],\n settings: {\n foreground: variable(\"token-comment\")\n }\n },\n {\n scope: [\n \"constant.numeric\",\n \"constant.language\",\n \"constant.other.placeholder\",\n \"constant.character.format.placeholder\",\n \"variable.language.this\",\n \"variable.other.object\",\n \"variable.other.class\",\n \"variable.other.constant\",\n \"meta.property-name\",\n \"meta.property-value\",\n \"support\"\n ],\n settings: {\n foreground: variable(\"token-constant\")\n }\n },\n {\n scope: [\n \"keyword\",\n \"storage.modifier\",\n \"storage.type\",\n \"storage.control.clojure\",\n \"entity.name.function.clojure\",\n \"entity.name.tag.yaml\",\n \"support.function.node\",\n \"support.type.property-name.json\",\n \"punctuation.separator.key-value\",\n \"punctuation.definition.template-expression\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n scope: \"variable.parameter.function\",\n settings: {\n foreground: variable(\"token-parameter\")\n }\n },\n {\n scope: [\n \"support.function\",\n \"entity.name.type\",\n \"entity.other.inherited-class\",\n \"meta.function-call\",\n \"meta.instance.constructor\",\n \"entity.other.attribute-name\",\n \"entity.name.function\",\n \"constant.keyword.clojure\"\n ],\n settings: {\n foreground: variable(\"token-function\")\n }\n },\n {\n scope: [\n \"entity.name.tag\",\n \"string.quoted\",\n \"string.regexp\",\n \"string.interpolated\",\n \"string.template\",\n \"string.unquoted.plain.out.yaml\",\n \"keyword.other.template\"\n ],\n settings: {\n foreground: variable(\"token-string-expression\")\n }\n },\n {\n scope: [\n \"punctuation.definition.arguments\",\n \"punctuation.definition.dict\",\n \"punctuation.separator\",\n \"meta.function-call.arguments\"\n ],\n settings: {\n foreground: variable(\"token-punctuation\")\n }\n },\n {\n // [Custom] Markdown links\n scope: [\n \"markup.underline.link\",\n \"punctuation.definition.metadata.markdown\"\n ],\n settings: {\n foreground: variable(\"token-link\")\n }\n },\n {\n // [Custom] Markdown list\n scope: [\"beginning.punctuation.definition.list.markdown\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n // [Custom] Markdown punctuation definition brackets\n scope: [\n \"punctuation.definition.string.begin.markdown\",\n \"punctuation.definition.string.end.markdown\",\n \"string.other.link.title.markdown\",\n \"string.other.link.description.markdown\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n // [Custom] Diff\n scope: [\n \"markup.inserted\",\n \"meta.diff.header.to-file\",\n \"punctuation.definition.inserted\"\n ],\n settings: {\n foreground: variable(\"token-inserted\")\n }\n },\n {\n scope: [\n \"markup.deleted\",\n \"meta.diff.header.from-file\",\n \"punctuation.definition.deleted\"\n ],\n settings: {\n foreground: variable(\"token-deleted\")\n }\n },\n {\n scope: [\n \"markup.changed\",\n \"punctuation.definition.changed\"\n ],\n settings: {\n foreground: variable(\"token-changed\")\n }\n }\n ]\n };\n if (!fontStyle) {\n theme.tokenColors = theme.tokenColors?.map((tokenColor) => {\n if (tokenColor.settings?.fontStyle)\n delete tokenColor.settings.fontStyle;\n return tokenColor;\n });\n }\n return theme;\n}\n\nexport { addClassToHast, applyColorReplacements, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createBundledHighlighter, createCssVariablesTheme, createHighlighterCore, createHighlighterCoreSync, createPositionConverter, createShikiInternal, createShikiInternalSync, createSingletonShorthands, createdBundledHighlighter, enableDeprecationWarnings, flatTokenVariants, getSingletonHighlighterCore, getTokenStyleObject, guessEmbeddedLanguages, hastToHtml, isNoneTheme, isPlainLang, isSpecialLang, isSpecialTheme, makeSingletonHighlighter, makeSingletonHighlighterCore, normalizeGetter, normalizeTheme, resolveColorReplacements, splitLines, splitToken, splitTokens, stringifyTokenStyle, toArray, tokenizeAnsiWithTheme, tokenizeWithTheme, tokensToHast, transformerDecorations, warnDeprecated };\n","import type { ThemesType } from './types';\n\nexport const DIFFS_TAG_NAME = 'diffs-container' as const;\n\n// Misc patch/content parsing regexes\nexport const COMMIT_METADATA_SPLIT: RegExp = /(?=^From [a-f0-9]+ .+$)/m;\nexport const GIT_DIFF_FILE_BREAK_REGEX: RegExp = /(?=^diff --git)/gm;\nexport const UNIFIED_DIFF_FILE_BREAK_REGEX: RegExp = /(?=^---\\s+\\S)/gm;\nexport const FILE_CONTEXT_BLOB: RegExp = /(?=^@@ )/gm;\nexport const HUNK_HEADER: RegExp =\n /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@(?: (.*))?/m;\nexport const SPLIT_WITH_NEWLINES: RegExp = /(?<=\\n)/;\nexport const FILENAME_HEADER_REGEX: RegExp = /^(---|\\+\\+\\+)\\s+([^\\t\\r\\n]+)/;\nexport const FILENAME_HEADER_REGEX_GIT: RegExp =\n /^(---|\\+\\+\\+)\\s+[ab]\\/([^\\t\\r\\n]+)/;\nexport const ALTERNATE_FILE_NAMES_GIT: RegExp =\n /^diff --git (?:\"a\\/(.+?)\"|a\\/(.+?)) (?:\"b\\/(.+?)\"|b\\/(.+?))$/;\nexport const FILE_MODE_FROM_INDEX: RegExp =\n /^index (?:[0-9a-f]+)\\.\\.(?:[0-9a-f]+)(?: (\\d+))?/;\n\nexport const HEADER_METADATA_SLOT_ID = 'header-metadata';\n\nexport const DEFAULT_THEMES: ThemesType = {\n dark: 'pierre-dark',\n light: 'pierre-light',\n};\n\nexport const UNSAFE_CSS_ATTRIBUTE = 'data-unsafe-css';\nexport const CORE_CSS_ATTRIBUTE = 'data-core-css';\n","import type { SupportedLanguages } from '../../types';\nimport type { ResolvedLanguage } from '../../worker';\n\nexport const ResolvedLanguages: Map<SupportedLanguages, ResolvedLanguage> =\n new Map();\n\nexport const ResolvingLanguages: Map<\n SupportedLanguages,\n Promise<ResolvedLanguage>\n> = new Map();\n\nexport const AttachedLanguages: Set<string> = new Set();\n","import type { DiffsHighlighter } from '../../types';\nimport type { ResolvedLanguage } from '../../worker';\nimport { AttachedLanguages, ResolvedLanguages } from './constants';\n\nexport function attachResolvedLanguages(\n resolvedLanguages: ResolvedLanguage | ResolvedLanguage[],\n highlighter: DiffsHighlighter\n): void {\n resolvedLanguages = Array.isArray(resolvedLanguages)\n ? resolvedLanguages\n : [resolvedLanguages];\n\n for (const resolvedLang of resolvedLanguages) {\n if (AttachedLanguages.has(resolvedLang.name)) continue;\n let lang = ResolvedLanguages.get(resolvedLang.name);\n if (lang == null) {\n lang = resolvedLang;\n ResolvedLanguages.set(resolvedLang.name, lang);\n }\n AttachedLanguages.add(lang.name);\n highlighter.loadLanguageSync(lang.data);\n }\n}\n","import type { ThemeRegistration, ThemeRegistrationResolved } from 'shiki';\n\nimport type { DiffsThemeNames } from '../../types';\n\nexport const ResolvedThemes: Map<DiffsThemeNames, ThemeRegistrationResolved> =\n new Map();\n\nexport const ResolvingThemes: Map<\n DiffsThemeNames,\n Promise<ThemeRegistrationResolved>\n> = new Map();\n\nexport const RegisteredCustomThemes: Map<\n string,\n () => Promise<ThemeRegistrationResolved | ThemeRegistration>\n> = new Map();\n\nexport const AttachedThemes: Set<string> = new Set();\n","import type {\n DiffsHighlighter,\n DiffsThemeNames,\n ThemeRegistrationResolved,\n} from '../../types';\nimport { AttachedThemes, ResolvedThemes } from './constants';\n\nexport function attachResolvedThemes(\n themes:\n | DiffsThemeNames\n | ThemeRegistrationResolved\n | (DiffsThemeNames | ThemeRegistrationResolved)[],\n highlighter: DiffsHighlighter\n): void {\n themes = Array.isArray(themes) ? themes : [themes];\n for (let themeRef of themes) {\n let resolvedTheme: ThemeRegistrationResolved | undefined;\n if (typeof themeRef === 'string') {\n resolvedTheme = ResolvedThemes.get(themeRef);\n if (resolvedTheme == null) {\n throw new Error(\n `loadResolvedThemes: ${themeRef} is not resolved, you must resolve it before calling loadResolvedThemes`\n );\n }\n } else {\n resolvedTheme = themeRef;\n themeRef = themeRef.name;\n if (!ResolvedThemes.has(themeRef)) {\n ResolvedThemes.set(themeRef, resolvedTheme);\n }\n }\n if (AttachedThemes.has(themeRef)) continue;\n AttachedThemes.add(themeRef);\n highlighter.loadThemeSync(resolvedTheme);\n }\n}\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nclass CharacterDiff extends Diff {\n}\nexport const characterDiff = new CharacterDiff();\nexport function diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n","export function longestCommonPrefix(str1, str2) {\n let i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nexport function longestCommonSuffix(str1, str2) {\n let i;\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nexport function replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(`string ${JSON.stringify(string)} doesn't start with prefix ${JSON.stringify(oldPrefix)}; this is a bug`);\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nexport function replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(`string ${JSON.stringify(string)} doesn't end with suffix ${JSON.stringify(oldSuffix)}; this is a bug`);\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nexport function removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nexport function removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nexport function maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n let startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n let endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n const map = Array(endB);\n let k = 0; // Index that lags behind j\n map[0] = 0;\n for (let j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n }\n else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (let i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nexport function hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nexport function hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\nexport function trailingWs(string) {\n // Yes, this looks overcomplicated and dumb - why not replace the whole function with\n // return string match(/\\s*$/)[0]\n // you ask? Because:\n // 1. the trap described at https://markamery.com/blog/quadratic-time-regexes/ would mean doing\n // this would cause this function to take O(n²) time in the worst case (specifically when\n // there is a massive run of NON-TRAILING whitespace in `string`), and\n // 2. the fix proposed in the same blog post, of using a negative lookbehind, is incompatible\n // with old Safari versions that we'd like to not break if possible (see\n // https://github.com/kpdecker/jsdiff/pull/550)\n // It feels absurd to do this with an explicit loop instead of a regex, but I really can't see a\n // better way that doesn't result in broken behaviour.\n let i;\n for (i = string.length - 1; i >= 0; i--) {\n if (!string[i].match(/\\s/)) {\n break;\n }\n }\n return string.substring(i + 1);\n}\nexport function leadingWs(string) {\n // Thankfully the annoying considerations described in trailingWs don't apply here:\n const match = string.match(/^\\s*/);\n return match ? match[0] : '';\n}\n","import Diff from './base.js';\nimport { longestCommonPrefix, longestCommonSuffix, replacePrefix, replaceSuffix, removePrefix, removeSuffix, maximumOverlap, leadingWs, trailingWs } from '../util/string.js';\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nconst extendedWordChars = 'a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}';\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nconst tokenizeIncludingWhitespace = new RegExp(`[${extendedWordChars}]+|\\\\s+|[^${extendedWordChars}]`, 'ug');\nclass WordDiff extends Diff {\n equals(left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n }\n tokenize(value, options = {}) {\n let parts;\n if (options.intlSegmenter) {\n const segmenter = options.intlSegmenter;\n if (segmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n parts = Array.from(segmenter.segment(value), segment => segment.segment);\n }\n else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n const tokens = [];\n let prevPart = null;\n parts.forEach(part => {\n if ((/\\s/).test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n }\n else {\n tokens.push(tokens.pop() + part);\n }\n }\n else if (prevPart != null && (/\\s/).test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n }\n else {\n tokens.push(prevPart + part);\n }\n }\n else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n }\n join(tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map((token, i) => {\n if (i == 0) {\n return token;\n }\n else {\n return token.replace((/^\\s+/), '');\n }\n }).join('');\n }\n postProcess(changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n let lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n let insertion = null;\n let deletion = null;\n changes.forEach(change => {\n if (change.added) {\n insertion = change;\n }\n else if (change.removed) {\n deletion = change;\n }\n else {\n if (insertion || deletion) { // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n }\n return changes;\n }\n}\nexport const wordDiff = new WordDiff();\nexport function diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n const oldWsPrefix = leadingWs(deletion.value);\n const oldWsSuffix = trailingWs(deletion.value);\n const newWsPrefix = leadingWs(insertion.value);\n const newWsSuffix = trailingWs(insertion.value);\n if (startKeep) {\n const commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n const commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n }\n else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n const ws = leadingWs(insertion.value);\n insertion.value = insertion.value.substring(ws.length);\n }\n if (endKeep) {\n const ws = leadingWs(endKeep.value);\n endKeep.value = endKeep.value.substring(ws.length);\n }\n // otherwise we've got a deletion and no insertion\n }\n else if (startKeep && endKeep) {\n const newWsFull = leadingWs(endKeep.value), delWsStart = leadingWs(deletion.value), delWsEnd = trailingWs(deletion.value);\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n const newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n const newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n }\n else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n const endKeepWsPrefix = leadingWs(endKeep.value);\n const deletionWsSuffix = trailingWs(deletion.value);\n const overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n }\n else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n const startKeepWsSuffix = trailingWs(startKeep.value);\n const deletionWsPrefix = leadingWs(deletion.value);\n const overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, overlap);\n }\n}\nclass WordsWithSpaceDiff extends Diff {\n tokenize(value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct tokens, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n const regex = new RegExp(`(\\\\r?\\\\n)|[${extendedWordChars}]+|[^\\\\S\\\\n\\\\r]+|[^${extendedWordChars}]`, 'ug');\n return value.match(regex) || [];\n }\n}\nexport const wordsWithSpaceDiff = new WordsWithSpaceDiff();\nexport function diffWordsWithSpace(oldStr, newStr, options) {\n return wordsWithSpaceDiff.diff(oldStr, newStr, options);\n}\n","export function generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n }\n else if (options) {\n for (const name in options) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(options, name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","import Diff from './base.js';\nfunction isSentenceEndPunct(char) {\n return char == '.' || char == '!' || char == '?';\n}\nclass SentenceDiff extends Diff {\n tokenize(value) {\n var _a;\n // If in future we drop support for environments that don't support lookbehinds, we can replace\n // this entire function with:\n // return value.split(/(?<=[.!?])(\\s+|$)/);\n // but until then, for similar reasons to the trailingWs function in string.ts, we are forced\n // to do this verbosely \"by hand\" instead of using a regex.\n const result = [];\n let tokenStartI = 0;\n for (let i = 0; i < value.length; i++) {\n if (i == value.length - 1) {\n result.push(value.slice(tokenStartI));\n break;\n }\n if (isSentenceEndPunct(value[i]) && value[i + 1].match(/\\s/)) {\n // We've hit a sentence break - i.e. a punctuation mark followed by whitespace.\n // We now want to push TWO tokens to the result:\n // 1. the sentence\n result.push(value.slice(tokenStartI, i + 1));\n // 2. the whitespace\n i = tokenStartI = i + 1;\n while ((_a = value[i + 1]) === null || _a === void 0 ? void 0 : _a.match(/\\s/)) {\n i++;\n }\n result.push(value.slice(tokenStartI, i + 1));\n // Then the next token (a sentence) starts on the character after the whitespace.\n // (It's okay if this is off the end of the string - then the outer loop will terminate\n // here anyway.)\n tokenStartI = i + 1;\n }\n }\n return result;\n }\n}\nexport const sentenceDiff = new SentenceDiff();\nexport function diffSentences(oldStr, newStr, options) {\n return sentenceDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nclass CssDiff extends Diff {\n tokenize(value) {\n return value.split(/([{}:;,]|\\s+)/);\n }\n}\nexport const cssDiff = new CssDiff();\nexport function diffCss(oldStr, newStr, options) {\n return cssDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nimport { tokenize } from './line.js';\nclass JsonDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n get useLongestToken() {\n // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n return true;\n }\n castInput(value, options) {\n const { undefinedReplacement, stringifyReplacer = (k, v) => typeof v === 'undefined' ? undefinedReplacement : v } = options;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), null, ' ');\n }\n equals(left, right, options) {\n return super.equals(left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n }\n}\nexport const jsonDiff = new JsonDiff();\nexport function diffJson(oldStr, newStr, options) {\n return jsonDiff.diff(oldStr, newStr, options);\n}\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nexport function canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key === undefined ? '' : key, obj);\n }\n let i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n let canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, String(i));\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (typeof obj === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n const sortedKeys = [];\n let key;\n for (key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n sortedKeys.push(key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n key = sortedKeys[i];\n canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n }\n else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n","import Diff from './base.js';\nclass ArrayDiff extends Diff {\n tokenize(value) {\n return value.slice();\n }\n join(value) {\n return value;\n }\n removeEmpty(value) {\n return value;\n }\n}\nexport const arrayDiff = new ArrayDiff();\nexport function diffArrays(oldArr, newArr, options) {\n return arrayDiff.diff(oldArr, newArr, options);\n}\n","export function unixToWin(patch) {\n if (Array.isArray(patch)) {\n // It would be cleaner if instead of the line below we could just write\n // return patch.map(unixToWin)\n // but mysteriously TypeScript (v5.7.3 at the time of writing) does not like this and it will\n // refuse to compile, thinking that unixToWin could then return StructuredPatch[][] and the\n // result would be incompatible with the overload signatures.\n // See bug report at https://github.com/microsoft/TypeScript/issues/61398.\n return patch.map(p => unixToWin(p));\n }\n return Object.assign(Object.assign({}, patch), { hunks: patch.hunks.map(hunk => (Object.assign(Object.assign({}, hunk), { lines: hunk.lines.map((line, i) => {\n var _a;\n return (line.startsWith('\\\\') || line.endsWith('\\r') || ((_a = hunk.lines[i + 1]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\')))\n ? line\n : line + '\\r';\n }) }))) });\n}\nexport function winToUnix(patch) {\n if (Array.isArray(patch)) {\n // (See comment above equivalent line in unixToWin)\n return patch.map(p => winToUnix(p));\n }\n return Object.assign(Object.assign({}, patch), { hunks: patch.hunks.map(hunk => (Object.assign(Object.assign({}, hunk), { lines: hunk.lines.map(line => line.endsWith('\\r') ? line.substring(0, line.length - 1) : line) }))) });\n}\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nexport function isUnix(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return !patch.some(index => index.hunks.some(hunk => hunk.lines.some(line => !line.startsWith('\\\\') && line.endsWith('\\r'))));\n}\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nexport function isWin(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return patch.some(index => index.hunks.some(hunk => hunk.lines.some(line => line.endsWith('\\r'))))\n && patch.every(index => index.hunks.every(hunk => hunk.lines.every((line, i) => { var _a; return line.startsWith('\\\\') || line.endsWith('\\r') || ((_a = hunk.lines[i + 1]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\')); })));\n}\n","/**\n * Parses a patch into structured data, in the same structure returned by `structuredPatch`.\n *\n * @return a JSON object representation of the a patch, suitable for use with the `applyPatch` method.\n */\nexport function parsePatch(uniDiff) {\n const diffstr = uniDiff.split(/\\n/), list = [];\n let i = 0;\n function parseIndex() {\n const index = {};\n list.push(index);\n // Parse diff metadata\n while (i < diffstr.length) {\n const line = diffstr[i];\n // File header found, end parsing diff metadata\n if ((/^(---|\\+\\+\\+|@@)\\s/).test(line)) {\n break;\n }\n // Diff index\n const header = (/^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/).exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n const line = diffstr[i];\n if ((/^(Index:\\s|diff\\s|---\\s|\\+\\+\\+\\s|===================================================================)/).test(line)) {\n break;\n }\n else if ((/^@@/).test(line)) {\n index.hunks.push(parseHunk());\n }\n else if (line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(line));\n }\n else {\n i++;\n }\n }\n }\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n const fileHeader = (/^(---|\\+\\+\\+)\\s+(.*)\\r?$/).exec(diffstr[i]);\n if (fileHeader) {\n const data = fileHeader[2].split('\\t', 2), header = (data[1] || '').trim();\n let fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if ((/^\".*\"$/).test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n if (fileHeader[1] === '---') {\n index.oldFileName = fileName;\n index.oldHeader = header;\n }\n else {\n index.newFileName = fileName;\n index.newHeader = header;\n }\n i++;\n }\n }\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var _a;\n const chunkHeaderIndex = i, chunkHeaderLine = diffstr[i++], chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n const hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n let addCount = 0, removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || ((_a = diffstr[i]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\'))); i++) {\n const operation = (diffstr[i].length == 0 && i != (diffstr.length - 1)) ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n }\n else if (operation === '-') {\n removeCount++;\n }\n else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n }\n else {\n throw new Error(`Hunk at line ${chunkHeaderIndex + 1} contained invalid line ${diffstr[i]}`);\n }\n }\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n","// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nexport default function (start, minLine, maxLine) {\n let wantForward = true, backwardExhausted = false, forwardExhausted = false, localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n }\n else {\n wantForward = false;\n }\n // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return start + localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n }\n // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return start - localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n }\n // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n return undefined;\n };\n}\n","import { hasOnlyWinLineEndings, hasOnlyUnixLineEndings } from '../util/string.js';\nimport { isWin, isUnix, unixToWin, winToUnix } from './line-endings.js';\nimport { parsePatch } from './parse.js';\nimport distanceIterator from '../util/distance-iterator.js';\n/**\n * attempts to apply a unified diff patch.\n *\n * Hunks are applied first to last.\n * `applyPatch` first tries to apply the first hunk at the line number specified in the hunk header, and with all context lines matching exactly.\n * If that fails, it tries scanning backwards and forwards, one line at a time, to find a place to apply the hunk where the context lines match exactly.\n * If that still fails, and `fuzzFactor` is greater than zero, it increments the maximum number of mismatches (missing, extra, or changed context lines) that there can be between the hunk context and a region where we are trying to apply the patch such that the hunk will still be considered to match.\n * Regardless of `fuzzFactor`, lines to be deleted in the hunk *must* be present for a hunk to match, and the context lines *immediately* before and after an insertion must match exactly.\n *\n * Once a hunk is successfully fitted, the process begins again with the next hunk.\n * Regardless of `fuzzFactor`, later hunks must be applied later in the file than earlier hunks.\n *\n * If a hunk cannot be successfully fitted *anywhere* with fewer than `fuzzFactor` mismatches, `applyPatch` fails and returns `false`.\n *\n * If a hunk is successfully fitted but not at the line number specified by the hunk header, all subsequent hunks have their target line number adjusted accordingly.\n * (e.g. if the first hunk is applied 10 lines below where the hunk header said it should fit, `applyPatch` will *start* looking for somewhere to apply the second hunk 10 lines below where its hunk header says it goes.)\n *\n * If the patch was applied successfully, returns a string containing the patched text.\n * If the patch could not be applied (because some hunks in the patch couldn't be fitted to the text in `source`), `applyPatch` returns false.\n *\n * @param patch a string diff or the output from the `parsePatch` or `structuredPatch` methods.\n */\nexport function applyPatch(source, patch, options = {}) {\n let patches;\n if (typeof patch === 'string') {\n patches = parsePatch(patch);\n }\n else if (Array.isArray(patch)) {\n patches = patch;\n }\n else {\n patches = [patch];\n }\n if (patches.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n return applyStructuredPatch(source, patches[0], options);\n}\nfunction applyStructuredPatch(source, patch, options = {}) {\n if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n if (hasOnlyWinLineEndings(source) && isUnix(patch)) {\n patch = unixToWin(patch);\n }\n else if (hasOnlyUnixLineEndings(source) && isWin(patch)) {\n patch = winToUnix(patch);\n }\n }\n // Apply the diff to the input\n const lines = source.split('\\n'), hunks = patch.hunks, compareLine = options.compareLine || ((lineNumber, line, operation, patchContent) => line === patchContent), fuzzFactor = options.fuzzFactor || 0;\n let minLine = 0;\n if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n throw new Error('fuzzFactor must be a non-negative integer');\n }\n // Special case for empty patch.\n if (!hunks.length) {\n return source;\n }\n // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n // newline that already exists - then we either return false and fail to apply the patch (if\n // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n let prevLine = '', removeEOFNL = false, addEOFNL = false;\n for (let i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n const line = hunks[hunks.length - 1].lines[i];\n if (line[0] == '\\\\') {\n if (prevLine[0] == '+') {\n removeEOFNL = true;\n }\n else if (prevLine[0] == '-') {\n addEOFNL = true;\n }\n }\n prevLine = line;\n }\n if (removeEOFNL) {\n if (addEOFNL) {\n // This means the final line gets changed but doesn't have a trailing newline in either the\n // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n if (!fuzzFactor && lines[lines.length - 1] == '') {\n return false;\n }\n }\n else if (lines[lines.length - 1] == '') {\n lines.pop();\n }\n else if (!fuzzFactor) {\n return false;\n }\n }\n else if (addEOFNL) {\n if (lines[lines.length - 1] != '') {\n lines.push('');\n }\n else if (!fuzzFactor) {\n return false;\n }\n }\n /**\n * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n * insertions, substitutions, or deletions, while ensuring also that:\n * - lines deleted in the hunk match exactly, and\n * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n * immediately preceding and following lines of context match exactly\n *\n * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n *\n * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n * `replacementLines`. Otherwise, returns null.\n */\n function applyHunk(hunkLines, toPos, maxErrors, hunkLinesI = 0, lastContextLineMatched = true, patchedLines = [], patchedLinesLength = 0) {\n let nConsecutiveOldContextLines = 0;\n let nextContextLineMustMatch = false;\n for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n const hunkLine = hunkLines[hunkLinesI], operation = (hunkLine.length > 0 ? hunkLine[0] : ' '), content = (hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine);\n if (operation === '-') {\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n toPos++;\n nConsecutiveOldContextLines = 0;\n }\n else {\n if (!maxErrors || lines[toPos] == null) {\n return null;\n }\n patchedLines[patchedLinesLength] = lines[toPos];\n return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n }\n }\n if (operation === '+') {\n if (!lastContextLineMatched) {\n return null;\n }\n patchedLines[patchedLinesLength] = content;\n patchedLinesLength++;\n nConsecutiveOldContextLines = 0;\n nextContextLineMustMatch = true;\n }\n if (operation === ' ') {\n nConsecutiveOldContextLines++;\n patchedLines[patchedLinesLength] = lines[toPos];\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n patchedLinesLength++;\n lastContextLineMatched = true;\n nextContextLineMustMatch = false;\n toPos++;\n }\n else {\n if (nextContextLineMustMatch || !maxErrors) {\n return null;\n }\n // Consider 3 possibilities in sequence:\n // 1. lines contains a *substitution* not included in the patch context, or\n // 2. lines contains an *insertion* not included in the patch context, or\n // 3. lines contains a *deletion* not included in the patch context\n // The first two options are of course only possible if the line from lines is non-null -\n // i.e. only option 3 is possible if we've overrun the end of the old file.\n return (lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength));\n }\n }\n }\n // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n // that starts in this hunk's trailing context.\n patchedLinesLength -= nConsecutiveOldContextLines;\n toPos -= nConsecutiveOldContextLines;\n patchedLines.length = patchedLinesLength;\n return {\n patchedLines,\n oldLineLastI: toPos - 1\n };\n }\n const resultLines = [];\n // Search best fit offsets for each hunk based on the previous ones\n let prevHunkOffset = 0;\n for (let i = 0; i < hunks.length; i++) {\n const hunk = hunks[i];\n let hunkResult;\n const maxLine = lines.length - hunk.oldLines + fuzzFactor;\n let toPos;\n for (let maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n toPos = hunk.oldStart + prevHunkOffset - 1;\n const iterator = distanceIterator(toPos, minLine, maxLine);\n for (; toPos !== undefined; toPos = iterator()) {\n hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n if (hunkResult) {\n break;\n }\n }\n if (hunkResult) {\n break;\n }\n }\n if (!hunkResult) {\n return false;\n }\n // Copy everything from the end of where we applied the last hunk to the start of this hunk\n for (let i = minLine; i < toPos; i++) {\n resultLines.push(lines[i]);\n }\n // Add the lines produced by applying the hunk:\n for (let i = 0; i < hunkResult.patchedLines.length; i++) {\n const line = hunkResult.patchedLines[i];\n resultLines.push(line);\n }\n // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunkResult.oldLineLastI + 1;\n // Note the offset between where the patch said the hunk should've applied and where we\n // applied it, so we can adjust future hunks accordingly:\n prevHunkOffset = toPos + 1 - hunk.oldStart;\n }\n // Copy over the rest of the lines from the old text\n for (let i = minLine; i < lines.length; i++) {\n resultLines.push(lines[i]);\n }\n return resultLines.join('\\n');\n}\n/**\n * applies one or more patches.\n *\n * `patch` may be either an array of structured patch objects, or a string representing a patch in unified diff format (which may patch one or more files).\n *\n * This method will iterate over the contents of the patch and apply to data provided through callbacks. The general flow for each patch index is:\n *\n * - `options.loadFile(index, callback)` is called. The caller should then load the contents of the file and then pass that to the `callback(err, data)` callback. Passing an `err` will terminate further patch execution.\n * - `options.patched(index, content, callback)` is called once the patch has been applied. `content` will be the return value from `applyPatch`. When it's ready, the caller should call `callback(err)` callback. Passing an `err` will terminate further patch execution.\n *\n * Once all patches have been applied or an error occurs, the `options.complete(err)` callback is made.\n */\nexport function applyPatches(uniDiff, options) {\n const spDiff = typeof uniDiff === 'string' ? parsePatch(uniDiff) : uniDiff;\n let currentIndex = 0;\n function processIndex() {\n const index = spDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n const updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\n","export function reversePatch(structuredPatch) {\n if (Array.isArray(structuredPatch)) {\n // (See comment in unixToWin for why we need the pointless-looking anonymous function here)\n return structuredPatch.map(patch => reversePatch(patch)).reverse();\n }\n return Object.assign(Object.assign({}, structuredPatch), { oldFileName: structuredPatch.newFileName, oldHeader: structuredPatch.newHeader, newFileName: structuredPatch.oldFileName, newHeader: structuredPatch.oldHeader, hunks: structuredPatch.hunks.map(hunk => {\n return {\n oldLines: hunk.newLines,\n oldStart: hunk.newStart,\n newLines: hunk.oldLines,\n newStart: hunk.oldStart,\n lines: hunk.lines.map(l => {\n if (l.startsWith('-')) {\n return `+${l.slice(1)}`;\n }\n if (l.startsWith('+')) {\n return `-${l.slice(1)}`;\n }\n return l;\n })\n };\n }) });\n}\n","import { diffLines } from '../diff/line.js';\nexport function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n let optionsObj;\n if (!options) {\n optionsObj = {};\n }\n else if (typeof options === 'function') {\n optionsObj = { callback: options };\n }\n else {\n optionsObj = options;\n }\n if (typeof optionsObj.context === 'undefined') {\n optionsObj.context = 4;\n }\n // We copy this into its own variable to placate TypeScript, which thinks\n // optionsObj.context might be undefined in the callbacks below.\n const context = optionsObj.context;\n // @ts-expect-error (runtime check for something that is correctly a static type error)\n if (optionsObj.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!optionsObj.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, optionsObj));\n }\n else {\n const { callback } = optionsObj;\n diffLines(oldStr, newStr, Object.assign(Object.assign({}, optionsObj), { callback: (diff) => {\n const patch = diffLinesResultToPatch(diff);\n // TypeScript is unhappy without the cast because it does not understand that `patch` may\n // be undefined here only if `callback` is StructuredPatchCallbackAbortable:\n callback(patch);\n } }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n if (!diff) {\n return;\n }\n diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n function contextLines(lines) {\n return lines.map(function (entry) { return ' ' + entry; });\n }\n const hunks = [];\n let oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1;\n for (let i = 0; i < diff.length; i++) {\n const current = diff[i], lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n // If we have previous context, start with that\n if (!oldRangeStart) {\n const prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = context > 0 ? contextLines(prev.lines.slice(-context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n // Output our changes\n for (const line of lines) {\n curRange.push((current.added ? '+' : '-') + line);\n }\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n }\n else {\n oldLine += lines.length;\n }\n }\n else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= context * 2 && i < diff.length - 2) {\n // Overlapping\n for (const line of contextLines(lines)) {\n curRange.push(line);\n }\n }\n else {\n // end the range and output\n const contextSize = Math.min(lines.length, context);\n for (const line of contextLines(lines.slice(0, contextSize))) {\n curRange.push(line);\n }\n const hunk = {\n oldStart: oldRangeStart,\n oldLines: (oldLine - oldRangeStart + contextSize),\n newStart: newRangeStart,\n newLines: (newLine - newRangeStart + contextSize),\n lines: curRange\n };\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n }\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (const hunk of hunks) {\n for (let i = 0; i < hunk.lines.length; i++) {\n if (hunk.lines[i].endsWith('\\n')) {\n hunk.lines[i] = hunk.lines[i].slice(0, -1);\n }\n else {\n hunk.lines.splice(i + 1, 0, '\\\');\n i++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName, newFileName: newFileName,\n oldHeader: oldHeader, newHeader: newHeader,\n hunks: hunks\n };\n }\n}\n/**\n * creates a unified diff patch.\n * @param patch either a single structured patch object (as returned by `structuredPatch`) or an array of them (as returned by `parsePatch`)\n */\nexport function formatPatch(patch) {\n if (Array.isArray(patch)) {\n return patch.map(formatPatch).join('\\n');\n }\n const ret = [];\n if (patch.oldFileName == patch.newFileName) {\n ret.push('Index: ' + patch.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + patch.oldFileName + (typeof patch.oldHeader === 'undefined' ? '' : '\\t' + patch.oldHeader));\n ret.push('+++ ' + patch.newFileName + (typeof patch.newHeader === 'undefined' ? '' : '\\t' + patch.newHeader));\n for (let i = 0; i < patch.hunks.length; i++) {\n const hunk = patch.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines\n + ' +' + hunk.newStart + ',' + hunk.newLines\n + ' @@');\n for (const line of hunk.lines) {\n ret.push(line);\n }\n }\n return ret.join('\\n') + '\\n';\n}\nexport function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (typeof options === 'function') {\n options = { callback: options };\n }\n if (!(options === null || options === void 0 ? void 0 : options.callback)) {\n const patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n }\n else {\n const { callback } = options;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: patchObj => {\n if (!patchObj) {\n callback(undefined);\n }\n else {\n callback(formatPatch(patchObj));\n }\n } }));\n }\n}\nexport function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n const hasTrailingNl = text.endsWith('\\n');\n const result = text.split('\\n').map(line => line + '\\n');\n if (hasTrailingNl) {\n result.pop();\n }\n else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n","/**\n * converts a list of change objects to the format returned by Google's [diff-match-patch](https://github.com/google/diff-match-patch) library\n */\nexport function convertChangesToDMP(changes) {\n const ret = [];\n let change, operation;\n for (let i = 0; i < changes.length; i++) {\n change = changes[i];\n if (change.added) {\n operation = 1;\n }\n else if (change.removed) {\n operation = -1;\n }\n else {\n operation = 0;\n }\n ret.push([operation, change.value]);\n }\n return ret;\n}\n","/**\n * converts a list of change objects to a serialized XML format\n */\nexport function convertChangesToXML(changes) {\n const ret = [];\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n }\n else if (change.removed) {\n ret.push('<del>');\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push('</ins>');\n }\n else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n}\nfunction escapeHTML(s) {\n let n = s;\n n = n.replace(/&/g, '&');\n n = n.replace(/</g, '<');\n n = n.replace(/>/g, '>');\n n = n.replace(/\"/g, '"');\n return n;\n}\n","export function cleanLastNewline(contents: string): string {\n return contents.replace(/\\n$|\\r\\n$/, '');\n}\n","const matchers = [\n [/^(<!--)(.+)(-->)$/, false],\n [/^(\\/\\*)(.+)(\\*\\/)$/, false],\n [/^(\\/\\/|[\"'#]|;{1,2}|%{1,2}|--)(.*)$/, true],\n /**\n * for multi-line comments like this\n */\n [/^(\\*)(.+)$/, true]\n];\nfunction parseComments(lines, jsx, matchAlgorithm) {\n const out = [];\n for (const line of lines) {\n if (matchAlgorithm === \"v3\") {\n const splittedElements = line.children.flatMap((element, idx) => {\n if (element.type !== \"element\")\n return element;\n const token = element.children[0];\n if (token.type !== \"text\")\n return element;\n const isLast = idx === line.children.length - 1;\n const isComment = matchToken(token.value, isLast);\n if (!isComment)\n return element;\n const rawSplits = token.value.split(/(\\s+\\/\\/)/);\n if (rawSplits.length <= 1)\n return element;\n let splits = [rawSplits[0]];\n for (let i = 1; i < rawSplits.length; i += 2) {\n splits.push(rawSplits[i] + (rawSplits[i + 1] || \"\"));\n }\n splits = splits.filter(Boolean);\n if (splits.length <= 1)\n return element;\n return splits.map((split) => {\n return {\n ...element,\n children: [\n {\n type: \"text\",\n value: split\n }\n ]\n };\n });\n });\n if (splittedElements.length !== line.children.length)\n line.children = splittedElements;\n }\n const elements = line.children;\n let start = elements.length - 1;\n if (matchAlgorithm === \"v1\")\n start = 0;\n else if (jsx)\n start = elements.length - 2;\n for (let i = Math.max(start, 0); i < elements.length; i++) {\n const token = elements[i];\n if (token.type !== \"element\")\n continue;\n const head = token.children.at(0);\n if (head?.type !== \"text\")\n continue;\n const isLast = i === elements.length - 1;\n let match = matchToken(head.value, isLast);\n let additionalTokens;\n if (!match && i > 0 && head.value.trim().startsWith(\"[!code\")) {\n const prevToken = elements[i - 1];\n if (prevToken?.type === \"element\") {\n const prevHead = prevToken.children.at(0);\n if (prevHead?.type === \"text\" && prevHead.value.includes(\"//\")) {\n const combinedValue = prevHead.value + head.value;\n const combinedMatch = matchToken(combinedValue, isLast);\n if (combinedMatch) {\n match = combinedMatch;\n out.push({\n info: combinedMatch,\n line,\n token: prevToken,\n // Use the previous token as the main token\n isLineCommentOnly: elements.length === 2 && prevToken.children.length === 1 && token.children.length === 1,\n isJsxStyle: false,\n additionalTokens: [token]\n // Current token is the additional one\n });\n continue;\n }\n }\n }\n }\n if (!match)\n continue;\n if (jsx && !isLast && i !== 0) {\n const isJsxStyle = isValue(elements[i - 1], \"{\") && isValue(elements[i + 1], \"}\");\n out.push({\n info: match,\n line,\n token,\n isLineCommentOnly: elements.length === 3 && token.children.length === 1,\n isJsxStyle,\n additionalTokens\n });\n } else {\n out.push({\n info: match,\n line,\n token,\n isLineCommentOnly: elements.length === 1 && token.children.length === 1,\n isJsxStyle: false,\n additionalTokens\n });\n }\n }\n }\n return out;\n}\nfunction isValue(element, value) {\n if (element.type !== \"element\")\n return false;\n const text = element.children[0];\n if (text.type !== \"text\")\n return false;\n return text.value.trim() === value;\n}\nfunction matchToken(text, isLast) {\n let trimmed = text.trimStart();\n const spaceFront = text.length - trimmed.length;\n trimmed = trimmed.trimEnd();\n const spaceEnd = text.length - trimmed.length - spaceFront;\n for (const [matcher, endOfLine] of matchers) {\n if (endOfLine && !isLast)\n continue;\n const result = matcher.exec(trimmed);\n if (!result)\n continue;\n return [\n \" \".repeat(spaceFront) + result[1],\n result[2],\n result[3] ? result[3] + \" \".repeat(spaceEnd) : void 0\n ];\n }\n}\nfunction v1ClearEndCommentPrefix(text) {\n const match = text.match(/(?:\\/\\/|[\"'#]|;{1,2}|%{1,2}|--)(\\s*)$/);\n if (match && match[1].trim().length === 0) {\n return text.slice(0, match.index);\n }\n return text;\n}\n\nfunction createCommentNotationTransformer(name, regex, onMatch, matchAlgorithm) {\n if (matchAlgorithm == null) {\n matchAlgorithm = \"v3\";\n }\n return {\n name,\n code(code) {\n const lines = code.children.filter((i) => i.type === \"element\");\n const linesToRemove = [];\n code.data ??= {};\n const data = code.data;\n data._shiki_notation ??= parseComments(lines, [\"jsx\", \"tsx\"].includes(this.options.lang), matchAlgorithm);\n const parsed = data._shiki_notation;\n for (const comment of parsed) {\n if (comment.info[1].length === 0)\n continue;\n let lineIdx = lines.indexOf(comment.line);\n if (comment.isLineCommentOnly && matchAlgorithm !== \"v1\")\n lineIdx++;\n let replaced = false;\n comment.info[1] = comment.info[1].replace(regex, (...match) => {\n if (onMatch.call(this, match, comment.line, comment.token, lines, lineIdx)) {\n replaced = true;\n return \"\";\n }\n return match[0];\n });\n if (!replaced)\n continue;\n if (matchAlgorithm === \"v1\")\n comment.info[1] = v1ClearEndCommentPrefix(comment.info[1]);\n const isEmpty = comment.info[1].trim().length === 0;\n if (isEmpty)\n comment.info[1] = \"\";\n if (isEmpty && comment.isLineCommentOnly) {\n linesToRemove.push(comment.line);\n } else if (isEmpty && comment.isJsxStyle) {\n comment.line.children.splice(comment.line.children.indexOf(comment.token) - 1, 3);\n } else if (isEmpty) {\n if (comment.additionalTokens) {\n for (let j = comment.additionalTokens.length - 1; j >= 0; j--) {\n const additionalToken = comment.additionalTokens[j];\n const tokenIndex = comment.line.children.indexOf(additionalToken);\n if (tokenIndex !== -1) {\n comment.line.children.splice(tokenIndex, 1);\n }\n }\n }\n comment.line.children.splice(comment.line.children.indexOf(comment.token), 1);\n } else {\n const head = comment.token.children[0];\n if (head.type === \"text\") {\n head.value = comment.info.join(\"\");\n if (comment.additionalTokens) {\n for (const additionalToken of comment.additionalTokens) {\n const additionalHead = additionalToken.children[0];\n if (additionalHead?.type === \"text\") {\n additionalHead.value = \"\";\n }\n }\n }\n }\n }\n }\n for (const line of linesToRemove) {\n const index = code.children.indexOf(line);\n const nextLine = code.children[index + 1];\n let removeLength = 1;\n if (nextLine?.type === \"text\" && nextLine?.value === \"\\n\")\n removeLength = 2;\n code.children.splice(index, removeLength);\n }\n }\n };\n}\n\nfunction transformerCompactLineOptions(lineOptions = []) {\n return {\n name: \"@shikijs/transformers:compact-line-options\",\n line(node, line) {\n const lineOption = lineOptions.find((o) => o.line === line);\n if (lineOption?.classes)\n this.addClassToHast(node, lineOption.classes);\n return node;\n }\n };\n}\n\nfunction parseMetaHighlightString(meta) {\n if (!meta)\n return null;\n const match = meta.match(/\\{([\\d,-]+)\\}/);\n if (!match)\n return null;\n const lines = match[1].split(\",\").flatMap((v) => {\n const range = v.split(\"-\").map((n) => Number.parseInt(n, 10));\n return range.length === 1 ? [range[0]] : Array.from({ length: range[1] - range[0] + 1 }, (_, i) => range[0] + i);\n });\n return lines;\n}\nconst symbol = Symbol(\"highlighted-lines\");\nfunction transformerMetaHighlight(options = {}) {\n const { className = \"highlighted\", zeroIndexed = false } = options;\n return {\n name: \"@shikijs/transformers:meta-highlight\",\n line(node, lineNumber) {\n if (!this.options.meta?.__raw)\n return;\n const meta = this.meta;\n meta[symbol] ??= parseMetaHighlightString(this.options.meta.__raw);\n const highlightedLines = meta[symbol] ?? [];\n const effectiveLine = zeroIndexed ? lineNumber - 1 : lineNumber;\n if (highlightedLines.includes(effectiveLine))\n this.addClassToHast(node, className);\n return node;\n }\n };\n}\n\nfunction parseMetaHighlightWords(meta) {\n if (!meta)\n return [];\n const match = Array.from(meta.matchAll(/\\/((?:\\\\.|[^/])+)\\//g));\n return match.map((v) => v[1].replace(/\\\\(.)/g, \"$1\"));\n}\nfunction transformerMetaWordHighlight(options = {}) {\n const {\n className = \"highlighted-word\"\n } = options;\n return {\n name: \"@shikijs/transformers:meta-word-highlight\",\n preprocess(code, options2) {\n if (!this.options.meta?.__raw)\n return;\n const words = parseMetaHighlightWords(this.options.meta.__raw);\n options2.decorations ||= [];\n for (const word of words) {\n const indexes = findAllSubstringIndexes(code, word);\n for (const index of indexes) {\n options2.decorations.push({\n start: index,\n end: index + word.length,\n properties: {\n class: className\n }\n });\n }\n }\n }\n };\n}\nfunction findAllSubstringIndexes(str, substr) {\n const indexes = [];\n let cursor = 0;\n while (true) {\n const index = str.indexOf(substr, cursor);\n if (index === -1 || index >= str.length)\n break;\n if (index < cursor)\n break;\n indexes.push(index);\n cursor = index + substr.length;\n }\n return indexes;\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction transformerNotationMap(options = {}, name = \"@shikijs/transformers:notation-map\") {\n const {\n classMap = {},\n classActivePre = void 0,\n classActiveCode = void 0\n } = options;\n return createCommentNotationTransformer(\n name,\n new RegExp(`#?\\\\s*\\\\[!code (${Object.keys(classMap).map(escapeRegExp).join(\"|\")})(:\\\\d+)?\\\\]`, \"gi\"),\n function([_, match, range = \":1\"], _line, _comment, lines, index) {\n const lineNum = Number.parseInt(range.slice(1), 10);\n for (let i = index; i < Math.min(index + lineNum, lines.length); i++) {\n this.addClassToHast(lines[i], classMap[match]);\n }\n if (classActivePre)\n this.addClassToHast(this.pre, classActivePre);\n if (classActiveCode)\n this.addClassToHast(this.code, classActiveCode);\n return true;\n },\n options.matchAlgorithm\n );\n}\n\nfunction transformerNotationDiff(options = {}) {\n const {\n classLineAdd = \"diff add\",\n classLineRemove = \"diff remove\",\n classActivePre = \"has-diff\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap: {\n \"++\": classLineAdd,\n \"--\": classLineRemove\n },\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-diff\"\n );\n}\n\nfunction transformerNotationErrorLevel(options = {}) {\n const {\n classMap = {\n error: [\"highlighted\", \"error\"],\n warning: [\"highlighted\", \"warning\"]\n },\n classActivePre = \"has-highlighted\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap,\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-error-level\"\n );\n}\n\nfunction transformerNotationFocus(options = {}) {\n const {\n classActiveLine = \"focused\",\n classActivePre = \"has-focused\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap: {\n focus: classActiveLine\n },\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-focus\"\n );\n}\n\nfunction transformerNotationHighlight(options = {}) {\n const {\n classActiveLine = \"highlighted\",\n classActivePre = \"has-highlighted\",\n classActiveCode\n } = options;\n return transformerNotationMap(\n {\n classMap: {\n highlight: classActiveLine,\n hl: classActiveLine\n },\n classActivePre,\n classActiveCode,\n matchAlgorithm: options.matchAlgorithm\n },\n \"@shikijs/transformers:notation-highlight\"\n );\n}\n\nfunction highlightWordInLine(line, ignoredElement, word, className) {\n const content = getTextContent(line);\n let index = content.indexOf(word);\n while (index !== -1) {\n highlightRange.call(this, line.children, ignoredElement, index, word.length, className);\n index = content.indexOf(word, index + 1);\n }\n}\nfunction getTextContent(element) {\n if (element.type === \"text\")\n return element.value;\n if (element.type === \"element\" && element.tagName === \"span\")\n return element.children.map(getTextContent).join(\"\");\n return \"\";\n}\nfunction highlightRange(elements, ignoredElement, index, len, className) {\n let currentIdx = 0;\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.type !== \"element\" || element.tagName !== \"span\" || element === ignoredElement)\n continue;\n const textNode = element.children[0];\n if (textNode.type !== \"text\")\n continue;\n if (hasOverlap([currentIdx, currentIdx + textNode.value.length - 1], [index, index + len])) {\n const start = Math.max(0, index - currentIdx);\n const length = len - Math.max(0, currentIdx - index);\n if (length === 0)\n continue;\n const separated = separateToken(element, textNode, start, length);\n this.addClassToHast(separated[1], className);\n const output = separated.filter(Boolean);\n elements.splice(i, 1, ...output);\n i += output.length - 1;\n }\n currentIdx += textNode.value.length;\n }\n}\nfunction hasOverlap(range1, range2) {\n return range1[0] <= range2[1] && range1[1] >= range2[0];\n}\nfunction separateToken(span, textNode, index, len) {\n const text = textNode.value;\n const createNode = (value) => inheritElement(span, {\n children: [\n {\n type: \"text\",\n value\n }\n ]\n });\n return [\n index > 0 ? createNode(text.slice(0, index)) : void 0,\n createNode(text.slice(index, index + len)),\n index + len < text.length ? createNode(text.slice(index + len)) : void 0\n ];\n}\nfunction inheritElement(original, overrides) {\n return {\n ...original,\n properties: {\n ...original.properties\n },\n ...overrides\n };\n}\n\nfunction transformerNotationWordHighlight(options = {}) {\n const {\n classActiveWord = \"highlighted-word\",\n classActivePre = void 0\n } = options;\n return createCommentNotationTransformer(\n \"@shikijs/transformers:notation-highlight-word\",\n /\\s*\\[!code word:((?:\\\\.|[^:\\]])+)(:\\d+)?\\]/,\n function([_, word, range], _line, comment, lines, index) {\n const lineNum = range ? Number.parseInt(range.slice(1), 10) : lines.length;\n word = word.replace(/\\\\(.)/g, \"$1\");\n for (let i = index; i < Math.min(index + lineNum, lines.length); i++) {\n highlightWordInLine.call(this, lines[i], comment, word, classActiveWord);\n }\n if (classActivePre)\n this.addClassToHast(this.pre, classActivePre);\n return true;\n },\n options.matchAlgorithm\n );\n}\n\nfunction transformerRemoveComments(options = {}) {\n const { removeEmptyLines = true } = options;\n return {\n name: \"@shikijs/transformers:remove-comments\",\n preprocess(_code, options2) {\n if (options2.includeExplanation !== true && options2.includeExplanation !== \"scopeName\")\n throw new Error(\"`transformerRemoveComments` requires `includeExplanation` to be set to `true` or `'scopeName'`\");\n },\n tokens(tokens) {\n const result = [];\n for (const line of tokens) {\n const filteredLine = [];\n let hasComment = false;\n for (const token of line) {\n const isComment = token.explanation?.some(\n (exp) => exp.scopes.some((s) => s.scopeName.startsWith(\"comment\"))\n );\n if (isComment) {\n hasComment = true;\n } else {\n filteredLine.push(token);\n }\n }\n if (removeEmptyLines && hasComment) {\n const isAllWhitespace = filteredLine.every((token) => !token.content.trim());\n if (isAllWhitespace)\n continue;\n }\n result.push(filteredLine);\n }\n return result;\n }\n };\n}\n\nfunction transformerRemoveLineBreak() {\n return {\n name: \"@shikijs/transformers:remove-line-break\",\n code(code) {\n code.children = code.children.filter((line) => !(line.type === \"text\" && line.value === \"\\n\"));\n }\n };\n}\n\nfunction transformerRemoveNotationEscape() {\n return {\n name: \"@shikijs/transformers:remove-notation-escape\",\n code(hast) {\n function replace(node) {\n if (node.type === \"text\") {\n node.value = node.value.replace(\"[\\\\!code\", \"[!code\");\n } else if (\"children\" in node) {\n for (const child of node.children) {\n replace(child);\n }\n }\n }\n replace(hast);\n return hast;\n }\n };\n}\n\nfunction transformerRenderIndentGuides(options = {}) {\n return {\n name: \"@shikijs/transformers:render-indent-guides\",\n code(hast) {\n const indent = Number(\n this.options.meta?.indent ?? this.options.meta?.__raw?.match(/\\{indent:(\\d+|false)\\}/)?.[1] ?? options.indent ?? 2\n );\n if (Number.isNaN(indent) || indent <= 0) {\n return hast;\n }\n const indentRegex = new RegExp(` {${indent}}| {0,${indent - 1}}\t| {1,}$`, \"g\");\n const emptyLines = [];\n let level = 0;\n for (const line of hast.children) {\n if (line.type !== \"element\") {\n continue;\n }\n const first = line.children[0];\n if (first?.type !== \"element\" || first?.children[0]?.type !== \"text\") {\n emptyLines.push([line, level]);\n continue;\n }\n const text = first.children[0];\n const blanks = text.value.split(/[^ \\t]/, 1)[0];\n const ranges = [];\n for (const match of blanks.matchAll(indentRegex)) {\n const start = match.index;\n const end = start + match[0].length;\n ranges.push([start, end]);\n }\n for (const [line2, level2] of emptyLines) {\n line2.children.unshift(...Array.from({ length: Math.min(ranges.length, level2 + 1) }, (_, i) => ({\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"indent\",\n style: `--indent-offset: ${i * indent}ch;`\n },\n children: []\n })));\n }\n emptyLines.length = 0;\n level = ranges.length;\n if (ranges.length) {\n line.children.unshift(\n ...ranges.map(([start, end]) => ({\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"indent\"\n },\n children: [{\n type: \"text\",\n value: text.value.slice(start, end)\n }]\n }))\n );\n text.value = text.value.slice(ranges.at(-1)[1]);\n }\n }\n return hast;\n }\n };\n}\n\nfunction isTab(part) {\n return part === \"\t\";\n}\nfunction isSpace(part) {\n return part === \" \" || part === \"\t\";\n}\nfunction separateContinuousSpaces(inputs) {\n const result = [];\n let current = \"\";\n function bump() {\n if (current.length)\n result.push(current);\n current = \"\";\n }\n inputs.forEach((part, idx) => {\n if (isTab(part)) {\n bump();\n result.push(part);\n } else if (isSpace(part) && (isSpace(inputs[idx - 1]) || isSpace(inputs[idx + 1]))) {\n bump();\n result.push(part);\n } else {\n current += part;\n }\n });\n bump();\n return result;\n}\nfunction splitSpaces(parts, type, renderContinuousSpaces = true) {\n if (type === \"all\")\n return parts;\n let leftCount = 0;\n let rightCount = 0;\n if (type === \"boundary\") {\n for (let i = 0; i < parts.length; i++) {\n if (isSpace(parts[i]))\n leftCount++;\n else\n break;\n }\n }\n if (type === \"boundary\" || type === \"trailing\") {\n for (let i = parts.length - 1; i >= 0; i--) {\n if (isSpace(parts[i]))\n rightCount++;\n else\n break;\n }\n }\n const middle = parts.slice(leftCount, parts.length - rightCount);\n return [\n ...parts.slice(0, leftCount),\n ...renderContinuousSpaces ? separateContinuousSpaces(middle) : [middle.join(\"\")],\n ...parts.slice(parts.length - rightCount)\n ];\n}\n\nfunction transformerRenderWhitespace(options = {}) {\n const classMap = {\n \" \": options.classSpace ?? \"space\",\n \"\t\": options.classTab ?? \"tab\"\n };\n const position = options.position ?? \"all\";\n const keys = Object.keys(classMap);\n return {\n name: \"@shikijs/transformers:render-whitespace\",\n // We use `root` hook here to ensure it runs after all other transformers\n root(root) {\n const pre = root.children[0];\n const code = pre.tagName === \"pre\" ? pre.children[0] : { children: [root] };\n code.children.forEach(\n (line) => {\n if (line.type !== \"element\" && line.type !== \"root\")\n return;\n const elements = line.children.filter((token) => token.type === \"element\");\n const last = elements.length - 1;\n line.children = line.children.flatMap((token) => {\n if (token.type !== \"element\")\n return token;\n const index = elements.indexOf(token);\n if (position === \"boundary\" && index !== 0 && index !== last)\n return token;\n if (position === \"trailing\" && index !== last)\n return token;\n const node = token.children[0];\n if (node.type !== \"text\" || !node.value)\n return token;\n const parts = splitSpaces(\n node.value.split(/([ \\t])/).filter((i) => i.length),\n position === \"boundary\" && index === last && last !== 0 ? \"trailing\" : position,\n position !== \"trailing\"\n );\n if (parts.length <= 1)\n return token;\n return parts.map((part) => {\n const clone = {\n ...token,\n properties: { ...token.properties }\n };\n clone.children = [{ type: \"text\", value: part }];\n if (keys.includes(part)) {\n this.addClassToHast(clone, classMap[part]);\n delete clone.properties.style;\n }\n return clone;\n });\n });\n }\n );\n }\n };\n}\n\nfunction transformerStyleToClass(options = {}) {\n const {\n classPrefix = \"__shiki_\",\n classSuffix = \"\",\n classReplacer = (className) => className\n } = options;\n const classToStyle = /* @__PURE__ */ new Map();\n function stringifyStyle(style) {\n return Object.entries(style).map(([key, value]) => `${key}:${value}`).join(\";\");\n }\n function registerStyle(style) {\n const str = typeof style === \"string\" ? style : stringifyStyle(style);\n let className = classPrefix + cyrb53(str) + classSuffix;\n className = classReplacer(className);\n if (!classToStyle.has(className)) {\n classToStyle.set(\n className,\n typeof style === \"string\" ? style : { ...style }\n );\n }\n return className;\n }\n return {\n name: \"@shikijs/transformers:style-to-class\",\n pre(t) {\n if (!t.properties.style)\n return;\n const className = registerStyle(t.properties.style);\n delete t.properties.style;\n this.addClassToHast(t, className);\n },\n tokens(lines) {\n for (const line of lines) {\n for (const token of line) {\n if (!token.htmlStyle)\n continue;\n const className = registerStyle(token.htmlStyle);\n token.htmlStyle = {};\n token.htmlAttrs ||= {};\n if (!token.htmlAttrs.class)\n token.htmlAttrs.class = className;\n else\n token.htmlAttrs.class += ` ${className}`;\n }\n }\n },\n getClassRegistry() {\n return classToStyle;\n },\n getCSS() {\n let css = \"\";\n for (const [className, style] of classToStyle.entries()) {\n css += `.${className}{${typeof style === \"string\" ? style : stringifyStyle(style)}}`;\n }\n return css;\n },\n clearRegistry() {\n classToStyle.clear();\n }\n };\n}\nfunction cyrb53(str, seed = 0) {\n let h1 = 3735928559 ^ seed;\n let h2 = 1103547991 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);\n h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);\n h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);\n return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36).slice(0, 6);\n}\n\nexport { createCommentNotationTransformer, findAllSubstringIndexes, parseMetaHighlightString, parseMetaHighlightWords, transformerCompactLineOptions, transformerMetaHighlight, transformerMetaWordHighlight, transformerNotationDiff, transformerNotationErrorLevel, transformerNotationFocus, transformerNotationHighlight, transformerNotationMap, transformerNotationWordHighlight, transformerRemoveComments, transformerRemoveLineBreak, transformerRemoveNotationEscape, transformerRenderIndentGuides, transformerRenderWhitespace, transformerStyleToClass };\n","import type {\n ElementContent,\n Element as HASTElement,\n Properties,\n Root,\n RootContent,\n Text,\n} from 'hast';\n\nimport type { SVGSpriteNames } from '../sprite';\n\nexport function createTextNodeElement(value: string): Text {\n return { type: 'text', value };\n}\n\ninterface CreateHastElementProps {\n tagName:\n | 'span'\n | 'div'\n | 'code'\n | 'pre'\n | 'slot'\n | 'svg'\n | 'use'\n | 'style'\n | 'template';\n children?: ElementContent[];\n properties?: Properties;\n}\n\nexport function createHastElement({\n tagName,\n children = [],\n properties = {},\n}: CreateHastElementProps): HASTElement {\n return {\n type: 'element',\n tagName,\n properties,\n children,\n };\n}\n\ninterface CreateIconProps {\n name: SVGSpriteNames;\n width?: number;\n height?: number;\n properties?: Properties;\n}\n\nexport function createIconElement({\n name,\n width = 16,\n height = 16,\n properties,\n}: CreateIconProps): HASTElement {\n return createHastElement({\n tagName: 'svg',\n properties: { width, height, viewBox: '0 0 16 16', ...properties },\n children: [\n createHastElement({\n tagName: 'use',\n properties: { href: `#${name.replace(/^#/, '')}` },\n }),\n ],\n });\n}\n\nexport function findCodeElement(\n nodes: Root | HASTElement\n): HASTElement | undefined {\n let firstChild: RootContent | HASTElement | Root | null = nodes.children[0];\n while (firstChild != null) {\n if (firstChild.type === 'element' && firstChild.tagName === 'code') {\n return firstChild;\n }\n if ('children' in firstChild) {\n firstChild = firstChild.children[0];\n } else {\n firstChild = null;\n }\n }\n return undefined;\n}\n","import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport type { SharedRenderState } from '../types';\nimport { createHastElement, createTextNodeElement } from './hast_utils';\n\nexport function processLine(\n node: HASTElement,\n line: number,\n state: SharedRenderState\n): ElementContent {\n const lineInfo =\n typeof state.lineInfo === 'function'\n ? state.lineInfo(line)\n : state.lineInfo[line];\n if (lineInfo == null) {\n console.error({ node, line, state });\n throw new Error(`processLine: line ${line}, contains no state.lineInfo`);\n }\n // We need to convert the current line to a div but keep all the decorations\n // that may be applied\n node.tagName = 'span';\n node.properties['data-column-content'] = '';\n\n // NOTE(amadeus): We need to push newline characters into empty rows or else\n // copy/pasta will have issues\n if (node.children.length === 0) {\n node.children.push(createTextNodeElement('\\n'));\n }\n const children = [\n createHastElement({\n tagName: 'span',\n children: [\n createHastElement({\n tagName: 'span',\n children: [{ type: 'text', value: `${lineInfo.lineNumber}` }],\n properties: { 'data-line-number-content': '' },\n }),\n ],\n properties: { 'data-column-number': '' },\n }),\n node,\n ];\n return createHastElement({\n tagName: 'div',\n children,\n properties: {\n 'data-line': lineInfo.lineNumber,\n 'data-alt-line': lineInfo.altLineNumber,\n 'data-line-type': lineInfo.type,\n 'data-line-index': lineInfo.lineIndex,\n },\n });\n}\n","import {\n type ShikiTransformerStyleToClass,\n transformerStyleToClass,\n} from '@shikijs/transformers';\nimport type { ElementContent } from 'hast';\n\nimport type { SharedRenderState, ShikiTransformer } from '../types';\nimport { findCodeElement } from './hast_utils';\nimport { processLine } from './processLine';\n\ninterface CreateTransformerWithStateReturn {\n state: SharedRenderState;\n transformers: ShikiTransformer[];\n toClass: ShikiTransformerStyleToClass;\n}\n\nexport function createTransformerWithState(\n useCSSClasses = false\n): CreateTransformerWithStateReturn {\n const state: SharedRenderState = {\n lineInfo: {},\n };\n const transformers: ShikiTransformer[] = [\n {\n line(node) {\n // Remove the default class\n delete node.properties.class;\n return node;\n },\n pre(pre) {\n const code = findCodeElement(pre);\n const children: ElementContent[] = [];\n if (code != null) {\n let index = 1;\n for (const node of code.children) {\n if (node.type !== 'element') continue;\n children.push(processLine(node, index, state));\n index++;\n }\n code.children = children;\n }\n return pre;\n },\n },\n ];\n if (useCSSClasses) {\n transformers.push(tokenStyleNormalizer, toClass);\n }\n return { state, transformers, toClass };\n}\n\nconst toClass = transformerStyleToClass({ classPrefix: 'hl-' });\n\n// Create a transformer that converts token color/fontStyle to htmlStyle\n// This needs to run BEFORE transformerStyleToClass\nconst tokenStyleNormalizer: ShikiTransformer = {\n name: 'token-style-normalizer',\n tokens(lines) {\n for (const line of lines) {\n for (const token of line) {\n // Skip if htmlStyle is already set\n if (token.htmlStyle != null) continue;\n\n const style: Record<string, string> = {};\n\n if (token.color != null) {\n style.color = token.color;\n }\n if (token.bgColor != null) {\n style['background-color'] = token.bgColor;\n }\n if (token.fontStyle != null && token.fontStyle !== 0) {\n // FontStyle is a bitmask: 1 = italic, 2 = bold, 4 = underline\n if ((token.fontStyle & 1) !== 0) {\n style['font-style'] = 'italic';\n }\n if ((token.fontStyle & 2) !== 0) {\n style['font-weight'] = 'bold';\n }\n if ((token.fontStyle & 4) !== 0) {\n style['text-decoration'] = 'underline';\n }\n }\n\n // Only set htmlStyle if we have any styles\n if (Object.keys(style).length > 0) {\n token.htmlStyle = style;\n }\n }\n }\n },\n};\n","export function formatCSSVariablePrefix(prefix: string = 'diffs') {\n return `--${prefix}-`;\n}\n","import type { ExtensionFormatMap, SupportedLanguages } from '../types';\n\nexport const EXTENSION_TO_FILE_FORMAT: ExtensionFormatMap = {\n '1c': '1c',\n abap: 'abap',\n as: 'actionscript-3',\n ada: 'ada',\n adb: 'ada',\n ads: 'ada',\n adoc: 'asciidoc',\n asciidoc: 'asciidoc',\n 'component.html': 'angular-html',\n 'component.ts': 'angular-ts',\n conf: 'nginx',\n htaccess: 'apache',\n cls: 'tex',\n trigger: 'apex',\n apl: 'apl',\n applescript: 'applescript',\n scpt: 'applescript',\n ara: 'ara',\n asm: 'asm',\n s: 'riscv',\n astro: 'astro',\n awk: 'awk',\n bal: 'ballerina',\n sh: 'zsh',\n bash: 'zsh',\n bat: 'cmd',\n cmd: 'cmd',\n be: 'berry',\n beancount: 'beancount',\n bib: 'bibtex',\n bicep: 'bicep',\n 'blade.php': 'blade',\n bsl: 'bsl',\n c: 'c',\n h: 'objective-cpp',\n cs: 'csharp',\n cpp: 'cpp',\n hpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n hh: 'cpp',\n cdc: 'cdc',\n cairo: 'cairo',\n clar: 'clarity',\n clj: 'clojure',\n cljs: 'clojure',\n cljc: 'clojure',\n soy: 'soy',\n cmake: 'cmake',\n 'CMakeLists.txt': 'cmake',\n cob: 'cobol',\n cbl: 'cobol',\n cobol: 'cobol',\n CODEOWNERS: 'codeowners',\n ql: 'ql',\n coffee: 'coffeescript',\n lisp: 'lisp',\n cl: 'lisp',\n lsp: 'lisp',\n log: 'log',\n v: 'verilog',\n cql: 'cql',\n cr: 'crystal',\n css: 'css',\n csv: 'csv',\n cue: 'cue',\n cypher: 'cypher',\n cyp: 'cypher',\n d: 'd',\n dart: 'dart',\n dax: 'dax',\n desktop: 'desktop',\n diff: 'diff',\n patch: 'diff',\n Dockerfile: 'dockerfile',\n dockerfile: 'dockerfile',\n env: 'dotenv',\n dm: 'dream-maker',\n edge: 'edge',\n el: 'emacs-lisp',\n ex: 'elixir',\n exs: 'elixir',\n elm: 'elm',\n erb: 'erb',\n erl: 'erlang',\n hrl: 'erlang',\n f: 'fortran-fixed-form',\n for: 'fortran-fixed-form',\n fs: 'fsharp',\n fsi: 'fsharp',\n fsx: 'fsharp',\n f03: 'f03',\n f08: 'f08',\n f18: 'f18',\n f77: 'f77',\n f90: 'fortran-free-form',\n f95: 'fortran-free-form',\n fnl: 'fennel',\n fish: 'fish',\n ftl: 'ftl',\n tres: 'gdresource',\n res: 'gdresource',\n gd: 'gdscript',\n gdshader: 'gdshader',\n gs: 'genie',\n feature: 'gherkin',\n COMMIT_EDITMSG: 'git-commit',\n 'git-rebase-todo': 'git-rebase',\n gjs: 'glimmer-js',\n gleam: 'gleam',\n gts: 'glimmer-ts',\n glsl: 'glsl',\n vert: 'glsl',\n frag: 'glsl',\n shader: 'shaderlab',\n gp: 'gnuplot',\n plt: 'gnuplot',\n gnuplot: 'gnuplot',\n go: 'go',\n graphql: 'graphql',\n gql: 'graphql',\n groovy: 'groovy',\n gvy: 'groovy',\n hack: 'hack',\n haml: 'haml',\n hbs: 'handlebars',\n handlebars: 'handlebars',\n hs: 'haskell',\n lhs: 'haskell',\n hx: 'haxe',\n hcl: 'hcl',\n hjson: 'hjson',\n hlsl: 'hlsl',\n fx: 'hlsl',\n html: 'html',\n htm: 'html',\n http: 'http',\n rest: 'http',\n hxml: 'hxml',\n hy: 'hy',\n imba: 'imba',\n ini: 'ini',\n cfg: 'ini',\n jade: 'pug',\n pug: 'pug',\n java: 'java',\n js: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n jinja: 'jinja',\n jinja2: 'jinja',\n j2: 'jinja',\n jison: 'jison',\n jl: 'julia',\n json: 'json',\n json5: 'json5',\n jsonc: 'jsonc',\n jsonl: 'jsonl',\n jsonnet: 'jsonnet',\n libsonnet: 'jsonnet',\n jssm: 'jssm',\n jsx: 'jsx',\n kt: 'kotlin',\n kts: 'kts',\n kql: 'kusto',\n tex: 'tex',\n ltx: 'tex',\n lean: 'lean4',\n less: 'less',\n liquid: 'liquid',\n lit: 'lit',\n ll: 'llvm',\n logo: 'logo',\n lua: 'lua',\n luau: 'luau',\n Makefile: 'makefile',\n mk: 'makefile',\n makefile: 'makefile',\n md: 'markdown',\n markdown: 'markdown',\n marko: 'marko',\n m: 'wolfram',\n mat: 'matlab',\n mdc: 'mdc',\n mdx: 'mdx',\n wiki: 'wikitext',\n mediawiki: 'wikitext',\n mmd: 'mermaid',\n mermaid: 'mermaid',\n mips: 'mipsasm',\n mojo: 'mojo',\n '🔥': 'mojo',\n move: 'move',\n nar: 'narrat',\n nf: 'nextflow',\n nim: 'nim',\n nims: 'nim',\n nimble: 'nim',\n nix: 'nix',\n nu: 'nushell',\n mm: 'objective-cpp',\n ml: 'ocaml',\n mli: 'ocaml',\n mll: 'ocaml',\n mly: 'ocaml',\n pas: 'pascal',\n p: 'pascal',\n pl: 'prolog',\n pm: 'perl',\n t: 'perl',\n raku: 'raku',\n p6: 'raku',\n pl6: 'raku',\n php: 'php',\n phtml: 'php',\n pls: 'plsql',\n sql: 'sql',\n po: 'po',\n polar: 'polar',\n pcss: 'postcss',\n pot: 'pot',\n potx: 'potx',\n pq: 'powerquery',\n pqm: 'powerquery',\n ps1: 'powershell',\n psm1: 'powershell',\n psd1: 'powershell',\n prisma: 'prisma',\n pro: 'prolog',\n P: 'prolog',\n properties: 'properties',\n proto: 'protobuf',\n pp: 'puppet',\n purs: 'purescript',\n py: 'python',\n pyw: 'python',\n pyi: 'python',\n qml: 'qml',\n qmldir: 'qmldir',\n qss: 'qss',\n r: 'r',\n R: 'r',\n rkt: 'racket',\n rktl: 'racket',\n razor: 'razor',\n cshtml: 'razor',\n rb: 'ruby',\n rbw: 'ruby',\n reg: 'reg',\n regex: 'regexp',\n rel: 'rel',\n rs: 'rust',\n rst: 'rst',\n rake: 'ruby',\n gemspec: 'ruby',\n sas: 'sas',\n sass: 'sass',\n scala: 'scala',\n sc: 'scala',\n scm: 'scheme',\n ss: 'scheme',\n sld: 'scheme',\n scss: 'scss',\n sdbl: 'sdbl',\n shadergraph: 'shader',\n st: 'smalltalk',\n sol: 'solidity',\n sparql: 'sparql',\n rq: 'sparql',\n spl: 'splunk',\n config: 'ssh-config',\n do: 'stata',\n ado: 'stata',\n dta: 'stata',\n styl: 'stylus',\n stylus: 'stylus',\n svelte: 'svelte',\n swift: 'swift',\n sv: 'system-verilog',\n svh: 'system-verilog',\n service: 'systemd',\n socket: 'systemd',\n device: 'systemd',\n timer: 'systemd',\n talon: 'talonscript',\n tasl: 'tasl',\n tcl: 'tcl',\n templ: 'templ',\n tf: 'tf',\n tfvars: 'tfvars',\n toml: 'toml',\n ts: 'typescript',\n tsp: 'typespec',\n tsv: 'tsv',\n tsx: 'tsx',\n ttl: 'turtle',\n twig: 'twig',\n typ: 'typst',\n vv: 'v',\n vala: 'vala',\n vapi: 'vala',\n vb: 'vb',\n vbs: 'vb',\n bas: 'vb',\n vh: 'verilog',\n vhd: 'vhdl',\n vhdl: 'vhdl',\n vim: 'vimscript',\n vue: 'vue',\n 'vine.ts': 'vue-vine',\n vy: 'vyper',\n wasm: 'wasm',\n wat: 'wasm',\n wy: '文言',\n wgsl: 'wgsl',\n wit: 'wit',\n wl: 'wolfram',\n nb: 'wolfram',\n xml: 'xml',\n xsl: 'xsl',\n xslt: 'xsl',\n yaml: 'yaml',\n yml: 'yml',\n zs: 'zenscript',\n zig: 'zig',\n zsh: 'zsh',\n sty: 'tex',\n};\n\nexport function getFiletypeFromFileName(fileName: string): SupportedLanguages {\n // Handle special files without extensions first\n if (EXTENSION_TO_FILE_FORMAT[fileName] != null) {\n return EXTENSION_TO_FILE_FORMAT[fileName];\n }\n\n // Try compound extensions first (e.g., .blade.php, .component.ts)\n const compoundMatch = fileName.match(/\\.([^/\\\\]+\\.[^/\\\\]+)$/);\n if (\n compoundMatch != null &&\n EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] != null\n ) {\n return EXTENSION_TO_FILE_FORMAT[compoundMatch[1]] ?? 'text';\n }\n\n // Fall back to simple extension\n const simpleMatch = fileName.match(/\\.([^.]+)$/);\n return EXTENSION_TO_FILE_FORMAT[simpleMatch?.[1] ?? ''] ?? 'text';\n}\n\nexport function extendFileFormatMap(map: ExtensionFormatMap): void {\n for (const key in map) {\n EXTENSION_TO_FILE_FORMAT[key] = map[key];\n }\n}\n","import { DEFAULT_THEMES } from '../constants';\nimport type {\n DiffsHighlighter,\n DiffsThemeNames,\n ThemeRegistrationResolved,\n ThemesType,\n} from '../types';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\n\ninterface GetHighlighterThemeStylesProps {\n theme?: DiffsThemeNames | ThemesType;\n highlighter: DiffsHighlighter;\n prefix?: string;\n}\n\n// FIXME(amadeus): We'll probably need to\n// re-think this when it comes to removing inline\n// styles\nexport function getHighlighterThemeStyles({\n theme = DEFAULT_THEMES,\n highlighter,\n prefix,\n}: GetHighlighterThemeStylesProps): string {\n let styles = '';\n if (typeof theme === 'string') {\n const themeData = highlighter.getTheme(theme);\n styles += `color:${themeData.fg};`;\n styles += `background-color:${themeData.bg};`;\n styles += `${formatCSSVariablePrefix(prefix)}fg:${themeData.fg};`;\n styles += `${formatCSSVariablePrefix(prefix)}bg:${themeData.bg};`;\n styles += getThemeVariables(themeData, prefix);\n } else {\n let themeData = highlighter.getTheme(theme.dark);\n styles += `${formatCSSVariablePrefix(prefix)}dark:${themeData.fg};`;\n styles += `${formatCSSVariablePrefix(prefix)}dark-bg:${themeData.bg};`;\n styles += getThemeVariables(themeData, prefix, 'dark');\n\n themeData = highlighter.getTheme(theme.light);\n styles += `${formatCSSVariablePrefix(prefix)}light:${themeData.fg};`;\n styles += `${formatCSSVariablePrefix(prefix)}light-bg:${themeData.bg};`;\n styles += getThemeVariables(themeData, prefix, 'light');\n }\n return styles;\n}\n\nfunction getThemeVariables(\n themeData: ThemeRegistrationResolved,\n prefix?: string,\n modePrefix?: string\n) {\n modePrefix = modePrefix != null ? `${modePrefix}-` : '';\n let styles = '';\n const additionGreen =\n themeData.colors?.['gitDecoration.addedResourceForeground'] ??\n themeData.colors?.['terminal.ansiGreen'];\n if (additionGreen != null) {\n styles += `${formatCSSVariablePrefix(prefix)}${modePrefix}addition-color:${additionGreen};`;\n }\n const deletionRed =\n themeData.colors?.['gitDecoration.deletedResourceForeground'] ??\n themeData.colors?.['terminal.ansiRed'];\n if (deletionRed != null) {\n styles += `${formatCSSVariablePrefix(prefix)}${modePrefix}deletion-color:${deletionRed};`;\n }\n const modifiedBlue =\n themeData.colors?.['gitDecoration.modifiedResourceForeground'] ??\n themeData.colors?.['terminal.ansiBlue'];\n if (modifiedBlue != null) {\n styles += `${formatCSSVariablePrefix(prefix)}${modePrefix}modified-color:${modifiedBlue};`;\n }\n return styles;\n}\n","import type { ElementContent, Root, RootContent } from 'hast';\n\nexport function getLineNodes(nodes: Root): ElementContent[] {\n let firstChild: RootContent | Element | Root | null = nodes.children[0];\n while (firstChild != null) {\n if (firstChild.type === 'element' && firstChild.tagName === 'code') {\n return firstChild.children;\n }\n if ('children' in firstChild) {\n firstChild = firstChild.children[0];\n } else {\n firstChild = null;\n }\n }\n console.error(nodes);\n throw new Error('getLineNodes: Unable to find children');\n}\n","import { type ChangeObject } from 'diff';\n\nimport type { DecorationItem } from '../types';\n\ninterface CreateDiffSpanDecorationProps {\n line: number;\n spanStart: number;\n spanLength: number;\n}\n\nexport function createDiffSpanDecoration({\n line,\n spanStart,\n spanLength,\n}: CreateDiffSpanDecorationProps): DecorationItem {\n return {\n start: { line, character: spanStart },\n end: { line, character: spanStart + spanLength },\n properties: { 'data-diff-span': '' },\n alwaysWrap: true,\n };\n}\n\ninterface PushOrJoinSpanProps {\n item: ChangeObject<string>;\n arr: [0 | 1, string][];\n enableJoin: boolean;\n isNeutral?: boolean;\n isLastItem?: boolean;\n}\n\n// For diff decoration spans, we want to be sure that if there is a single\n// white-space gap between diffs that we join them together into a longer diff span.\n// Spans are basically just a tuple - 1 means the content should be\n// highlighted, 0 means it should not, we still need to the span data to figure\n// out span positions\nexport function pushOrJoinSpan({\n item,\n arr,\n enableJoin,\n isNeutral = false,\n isLastItem = false,\n}: PushOrJoinSpanProps): void {\n const lastItem = arr[arr.length - 1];\n if (lastItem == null || isLastItem || !enableJoin) {\n arr.push([isNeutral ? 0 : 1, item.value]);\n return;\n }\n const isLastItemNeutral = lastItem[0] === 0;\n if (\n isNeutral === isLastItemNeutral ||\n // If we have a single space neutral item, lets join it to a previous\n // space non-neutral item to avoid single space gaps\n (isNeutral && item.value.length === 1 && !isLastItemNeutral)\n ) {\n lastItem[1] += item.value;\n return;\n }\n arr.push([isNeutral ? 0 : 1, item.value]);\n}\n","import { diffChars, diffWordsWithSpace } from 'diff';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DecorationItem,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n FileDiffMetadata,\n Hunk,\n LineDiffTypes,\n LineInfo,\n RenderDiffFilesResult,\n RenderDiffOptions,\n SupportedLanguages,\n ThemedDiffResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport {\n createDiffSpanDecoration,\n pushOrJoinSpan,\n} from './parseDiffDecorations';\n\nexport function renderDiffWithHighlighter(\n diff: FileDiffMetadata,\n highlighter: DiffsHighlighter,\n options: RenderDiffOptions,\n forcePlainText = false\n): ThemedDiffResult {\n const baseThemeType = (() => {\n const theme = options.theme ?? DEFAULT_THEMES;\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme: options.theme,\n highlighter,\n });\n // If we've received a diff with both files\n if (diff.newLines != null && diff.oldLines != null) {\n const {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n } = processLines({\n hunks: diff.hunks,\n oldLines: diff.oldLines,\n newLines: diff.newLines,\n lineDiffType: options.lineDiffType,\n });\n const oldFile = {\n name: diff.prevName ?? diff.name,\n contents: oldContent,\n };\n const newFile = {\n name: diff.name,\n contents: newContent,\n };\n const code = renderTwoFiles({\n oldFile,\n oldInfo,\n oldDecorations,\n\n newFile,\n newInfo,\n newDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n });\n return { code, themeStyles, baseThemeType };\n }\n const hunks: RenderDiffFilesResult[] = [];\n let splitLineIndex = 0;\n let unifiedLineIndex = 0;\n for (const hunk of diff.hunks) {\n const {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n splitLineIndex: newSplitLineIndex,\n unifiedLineIndex: newUnifiedLineIndex,\n } = processLines({\n hunks: [hunk],\n splitLineIndex,\n unifiedLineIndex,\n lineDiffType: options.lineDiffType,\n });\n const oldFile = {\n name: diff.prevName ?? diff.name,\n contents: oldContent,\n };\n const newFile = {\n name: diff.name,\n contents: newContent,\n };\n hunks.push(\n renderTwoFiles({\n oldFile,\n oldInfo,\n oldDecorations,\n\n newFile,\n newInfo,\n newDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n })\n );\n splitLineIndex = newSplitLineIndex;\n unifiedLineIndex = newUnifiedLineIndex;\n }\n\n const code = (() => {\n if (hunks.length <= 1) {\n const hunk = hunks[0] ?? { oldLines: [], newLines: [] };\n if (hunk.newLines.length === 0 || hunk.oldLines.length === 0) {\n return hunk;\n }\n }\n return { hunks };\n })();\n\n return { code, themeStyles, baseThemeType };\n}\n\ninterface ProcessLineDiffProps {\n oldLine: string | undefined;\n newLine: string | undefined;\n oldLineIndex: number;\n newLineIndex: number;\n oldDecorations: DecorationItem[];\n newDecorations: DecorationItem[];\n lineDiffType: LineDiffTypes;\n}\n\nfunction computeLineDiffDecorations({\n oldLine,\n newLine,\n oldLineIndex,\n newLineIndex,\n oldDecorations,\n newDecorations,\n lineDiffType,\n}: ProcessLineDiffProps) {\n if (oldLine == null || newLine == null || lineDiffType === 'none') {\n return;\n }\n oldLine = cleanLastNewline(oldLine);\n newLine = cleanLastNewline(newLine);\n // NOTE(amadeus): Because we visually trim trailing newlines when rendering,\n // we also gotta make sure the diff parsing doesn't include the newline\n // character that could be there...\n const lineDiff =\n lineDiffType === 'char'\n ? diffChars(oldLine, newLine)\n : diffWordsWithSpace(oldLine, newLine);\n const deletionSpans: [0 | 1, string][] = [];\n const additionSpans: [0 | 1, string][] = [];\n const enableJoin = lineDiffType === 'word-alt';\n for (const item of lineDiff) {\n const isLastItem = item === lineDiff[lineDiff.length - 1];\n if (!item.added && !item.removed) {\n pushOrJoinSpan({\n item,\n arr: deletionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n pushOrJoinSpan({\n item,\n arr: additionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n } else if (item.removed) {\n pushOrJoinSpan({ item, arr: deletionSpans, enableJoin, isLastItem });\n } else {\n pushOrJoinSpan({ item, arr: additionSpans, enableJoin, isLastItem });\n }\n }\n let spanIndex = 0;\n for (const span of deletionSpans) {\n if (span[0] === 1) {\n oldDecorations.push(\n createDiffSpanDecoration({\n // Decoration indexes start at 0\n line: oldLineIndex - 1,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n spanIndex = 0;\n for (const span of additionSpans) {\n if (span[0] === 1) {\n newDecorations.push(\n createDiffSpanDecoration({\n // Decoration indexes start at 0\n line: newLineIndex - 1,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n}\n\ninterface ProcessLinesProps {\n hunks: Hunk[];\n oldLines?: string[];\n newLines?: string[];\n splitLineIndex?: number;\n unifiedLineIndex?: number;\n newLineIndex?: number;\n oldLineIndex?: number;\n lineDiffType: LineDiffTypes;\n}\n\nfunction processLines({\n hunks,\n oldLines,\n newLines,\n splitLineIndex = 0,\n unifiedLineIndex = 0,\n lineDiffType,\n}: ProcessLinesProps) {\n const oldInfo: Record<number, LineInfo | undefined> = {};\n const newInfo: Record<number, LineInfo | undefined> = {};\n const oldDecorations: DecorationItem[] = [];\n const newDecorations: DecorationItem[] = [];\n let newLineIndex = 1;\n let oldLineIndex = 1;\n let newLineNumber = 1;\n let oldLineNumber = 1;\n let oldContent = '';\n let newContent = '';\n for (const hunk of hunks) {\n // If there's content prior to the hunk, lets fill it up\n while (\n oldLines != null &&\n newLines != null &&\n newLineIndex < hunk.additionStart &&\n oldLineIndex < hunk.deletionStart\n ) {\n oldInfo[oldLineIndex] = {\n type: 'context-expanded',\n lineNumber: oldLineNumber,\n altLineNumber: newLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n newInfo[newLineIndex] = {\n type: 'context-expanded',\n lineNumber: newLineNumber,\n altLineNumber: oldLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += oldLines[oldLineIndex - 1];\n newContent += newLines[newLineIndex - 1];\n oldLineIndex++;\n newLineIndex++;\n oldLineNumber++;\n newLineNumber++;\n splitLineIndex++;\n unifiedLineIndex++;\n }\n oldLineNumber = hunk.deletionStart;\n newLineNumber = hunk.additionStart;\n\n // Lets process the actual hunk content\n for (const hunkContent of hunk.hunkContent) {\n if (hunkContent.type === 'context') {\n for (const line of hunkContent.lines) {\n oldInfo[oldLineIndex] = {\n type: 'context',\n lineNumber: oldLineNumber,\n altLineNumber: newLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n newInfo[newLineIndex] = {\n type: 'context',\n lineNumber: newLineNumber,\n altLineNumber: oldLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += line;\n newContent += line;\n oldLineIndex++;\n newLineIndex++;\n newLineNumber++;\n oldLineNumber++;\n splitLineIndex++;\n unifiedLineIndex++;\n }\n } else {\n const len = Math.max(\n hunkContent.additions.length,\n hunkContent.deletions.length\n );\n let i = 0;\n // NOTE(amadeus): Since we iterate through deletions and additions\n // simultaneously, we have to create a secondary iterator for\n // unifiedLineIndex, and then when we're done, add the combined lengths\n // of additions/deletions to the main variable\n let _unifiedLineIndex = unifiedLineIndex;\n while (i < len) {\n const oldLine = hunkContent.deletions[i];\n const newLine = hunkContent.additions[i];\n computeLineDiffDecorations({\n newLine,\n oldLine,\n oldLineIndex,\n newLineIndex,\n oldDecorations,\n newDecorations,\n lineDiffType,\n });\n if (oldLine != null) {\n oldInfo[oldLineIndex] = {\n type: 'change-deletion',\n lineNumber: oldLineNumber,\n lineIndex: `${_unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += oldLine;\n oldLineIndex++;\n oldLineNumber++;\n }\n if (newLine != null) {\n newInfo[newLineIndex] = {\n type: 'change-addition',\n lineNumber: newLineNumber,\n lineIndex: `${_unifiedLineIndex + hunkContent.deletions.length},${splitLineIndex}`,\n };\n newContent += newLine;\n newLineIndex++;\n newLineNumber++;\n }\n splitLineIndex++;\n _unifiedLineIndex++;\n i++;\n }\n unifiedLineIndex +=\n hunkContent.additions.length + hunkContent.deletions.length;\n }\n }\n\n if (\n oldLines == null ||\n newLines == null ||\n hunk !== hunks[hunks.length - 1]\n )\n continue;\n // If we are on the last hunk, we should fully iterate through the rest\n // of the lines\n while (oldLineIndex <= oldLines.length || newLineIndex <= oldLines.length) {\n const oldLine = oldLines[oldLineIndex - 1];\n const newLine = newLines[newLineIndex - 1];\n if (oldLine == null && newLine == null) {\n break;\n }\n if (oldLine != null) {\n oldInfo[oldLineIndex] = {\n type: 'context-expanded',\n lineNumber: oldLineNumber,\n altLineNumber: newLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n oldContent += oldLine;\n oldLineIndex++;\n oldLineNumber++;\n }\n if (newLine != null) {\n newInfo[newLineIndex] = {\n type: 'context-expanded',\n lineNumber: newLineNumber,\n altLineNumber: oldLineNumber,\n lineIndex: `${unifiedLineIndex},${splitLineIndex}`,\n };\n newContent += newLine;\n newLineIndex++;\n newLineNumber++;\n }\n splitLineIndex++;\n unifiedLineIndex++;\n }\n }\n return {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n splitLineIndex,\n unifiedLineIndex,\n };\n}\n\ninterface RenderTwoFilesProps {\n oldFile: FileContents;\n newFile: FileContents;\n oldInfo: Record<number, LineInfo | undefined>;\n newInfo: Record<number, LineInfo | undefined>;\n oldDecorations: DecorationItem[];\n newDecorations: DecorationItem[];\n options: RenderDiffOptions;\n highlighter: DiffsHighlighter;\n languageOverride: SupportedLanguages | undefined;\n}\n\nfunction renderTwoFiles({\n oldFile,\n newFile,\n oldInfo,\n newInfo,\n highlighter,\n oldDecorations,\n newDecorations,\n languageOverride,\n options: { theme: themeOrThemes = DEFAULT_THEMES, ...options },\n}: RenderTwoFilesProps) {\n const oldLang = languageOverride ?? getFiletypeFromFileName(oldFile.name);\n const newLang = languageOverride ?? getFiletypeFromFileName(newFile.name);\n const { state, transformers } = createTransformerWithState();\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n return typeof themeOrThemes === 'string'\n ? {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n theme: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n }\n : {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n themes: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n };\n })();\n\n const oldLines = (() => {\n if (oldFile.contents === '') {\n return [];\n }\n hastConfig.lang = oldLang;\n state.lineInfo = oldInfo;\n hastConfig.decorations = oldDecorations;\n return getLineNodes(\n highlighter.codeToHast(cleanLastNewline(oldFile.contents), hastConfig)\n );\n })();\n const newLines = (() => {\n if (newFile.contents === '') {\n return [];\n }\n hastConfig.lang = newLang;\n hastConfig.decorations = newDecorations;\n state.lineInfo = newInfo;\n return getLineNodes(\n highlighter.codeToHast(cleanLastNewline(newFile.contents), hastConfig)\n );\n })();\n\n return { oldLines, newLines };\n}\n","import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: RenderFileOptions,\n forcePlainText = false\n): ThemedFileResult {\n const { state, transformers } = createTransformerWithState();\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType = (() => {\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1,\n lineNumber: shikiLineNumber,\n });\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n if (typeof theme === 'string') {\n return {\n lang,\n theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n tokenizeMaxLineLength,\n };\n }\n return {\n lang,\n themes: theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n tokenizeMaxLineLength,\n };\n })();\n return {\n code: getLineNodes(\n highlighter.codeToHast(cleanLastNewline(file.contents), hastConfig)\n ),\n themeStyles,\n baseThemeType: baseThemeType,\n };\n}\n","import { createJavaScriptRegexEngine } from '@shikijs/engine-javascript';\nimport { createHighlighterCoreSync } from 'shiki/core';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport { attachResolvedLanguages } from '../highlighter/languages/attachResolvedLanguages';\nimport { attachResolvedThemes } from '../highlighter/themes/attachResolvedThemes';\nimport type {\n DiffsHighlighter,\n RenderDiffOptions,\n RenderFileOptions,\n ThemedDiffResult,\n ThemedFileResult,\n} from '../types';\nimport { renderDiffWithHighlighter } from '../utils/renderDiffWithHighlighter';\nimport { renderFileWithHighlighter } from '../utils/renderFileWithHighlighter';\nimport type {\n InitializeSuccessResponse,\n InitializeWorkerRequest,\n RenderDiffRequest,\n RenderDiffSuccessResponse,\n RenderErrorResponse,\n RenderFileRequest,\n RenderFileSuccessResponse,\n SetRenderOptionsWorkerRequest,\n WorkerRenderingOptions,\n WorkerRequest,\n WorkerRequestId,\n} from './types';\n\nlet highlighter: DiffsHighlighter | undefined;\nlet renderOptions: WorkerRenderingOptions = {\n theme: DEFAULT_THEMES,\n tokenizeMaxLineLength: 1000,\n lineDiffType: 'word-alt',\n};\n\nself.addEventListener('error', (event) => {\n console.error('[Shiki Worker] Unhandled error:', event.error);\n});\n\n// Handle incoming messages from the main thread\nself.addEventListener('message', (event: MessageEvent<WorkerRequest>) => {\n const request = event.data;\n\n try {\n switch (request.type) {\n case 'initialize':\n handleInitialize(request);\n break;\n case 'set-render-options':\n handleSetRenderOptions(request);\n break;\n case 'file':\n handleRenderFile(request);\n break;\n case 'diff':\n handleRenderDiff(request);\n break;\n default:\n throw new Error(\n `Unknown request type: ${(request as WorkerRequest).type}`\n );\n }\n } catch (error) {\n console.error('Worker error:', error);\n sendError(request.id, error);\n }\n});\n\nfunction handleInitialize({\n id,\n renderOptions: options,\n resolvedThemes,\n resolvedLanguages,\n}: InitializeWorkerRequest) {\n const highlighter = getHighlighter();\n attachResolvedThemes(resolvedThemes, highlighter);\n if (resolvedLanguages != null) {\n attachResolvedLanguages(resolvedLanguages, highlighter);\n }\n renderOptions = options;\n postMessage({\n type: 'success',\n id,\n requestType: 'initialize',\n sentAt: Date.now(),\n } satisfies InitializeSuccessResponse);\n}\n\nfunction handleSetRenderOptions({\n id,\n renderOptions: options,\n resolvedThemes,\n}: SetRenderOptionsWorkerRequest) {\n const highlighter = getHighlighter();\n attachResolvedThemes(resolvedThemes, highlighter);\n renderOptions = options;\n postMessage({\n type: 'success',\n id,\n requestType: 'set-render-options',\n sentAt: Date.now(),\n });\n}\n\nfunction handleRenderFile({ id, file, resolvedLanguages }: RenderFileRequest) {\n const highlighter = getHighlighter();\n // Load resolved languages if provided\n if (resolvedLanguages != null) {\n attachResolvedLanguages(resolvedLanguages, highlighter);\n }\n const fileOptions = {\n theme: renderOptions.theme,\n tokenizeMaxLineLength: renderOptions.tokenizeMaxLineLength,\n };\n sendFileSuccess(\n id,\n renderFileWithHighlighter(file, highlighter, fileOptions),\n fileOptions\n );\n}\n\nfunction handleRenderDiff({ id, diff, resolvedLanguages }: RenderDiffRequest) {\n const highlighter = getHighlighter();\n // Load resolved languages if provided\n if (resolvedLanguages != null) {\n attachResolvedLanguages(resolvedLanguages, highlighter);\n }\n const result = renderDiffWithHighlighter(diff, highlighter, renderOptions);\n sendDiffSuccess(id, result, renderOptions);\n}\n\nfunction getHighlighter(): DiffsHighlighter {\n highlighter ??= createHighlighterCoreSync({\n themes: [],\n langs: [],\n engine: createJavaScriptRegexEngine(),\n }) as DiffsHighlighter;\n return highlighter;\n}\n\nfunction sendFileSuccess(\n id: WorkerRequestId,\n result: ThemedFileResult,\n options: RenderFileOptions\n) {\n postMessage({\n type: 'success',\n requestType: 'file',\n id,\n result,\n options,\n sentAt: Date.now(),\n } satisfies RenderFileSuccessResponse);\n}\n\nfunction sendDiffSuccess(\n id: WorkerRequestId,\n result: ThemedDiffResult,\n options: RenderDiffOptions\n) {\n postMessage({\n type: 'success',\n requestType: 'diff',\n id,\n result,\n options,\n sentAt: Date.now(),\n } satisfies RenderDiffSuccessResponse);\n}\n\nfunction sendError(id: WorkerRequestId, error: unknown) {\n const response: RenderErrorResponse = {\n type: 'error',\n id,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n };\n postMessage(response);\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,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87],"mappings":"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B,SAAgB,cAAc,MAAM,MAAM,MAAM;CAC9C,MAAM,QAAQ,QAAQ,KAAK,SAAS,GAAG,CAAC,aAAa;AACrD,QAAO,QAAQ,QAAQ,CAAC,iBAAiB,KAAK,OAAO,aAAa,KAAK,CAAC,GACpE,QACA,QAAQ;;;;;ACdd,MAAM,eAAe;;;;;;;;;AAUrB,SAAgB,UAAU,MAAM,MAAM,MAAM;CAC1C,MAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,QAAO,QAAQ,QAAQ,CAAC,aAAa,KAAK,OAAO,aAAa,KAAK,CAAC,GAChE,QACA,QAAQ;;;;;;;;;;ACTd,MAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;AC3GD,MAAa,yBAAyB;CACpC,MAAM;CACN,OAAO;CACP,MAAM;CACN,OAAO;CACP,QAAQ;CACR,KAAK;CACL,QAAQ;CACR,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,OAAO;CACP,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,QAAQ;CACR,QAAQ;C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WAAW;KACX,YAAY,SAAS,aAAa;KACnC;IACF;GACD;IACE,OAAO;KAAC;KAAU;KAAsB;KAAgB;IACxD,UAAU,EACR,YAAY,SAAS,eAAe,EACrC;IACF;GACD;IACE,OAAO,CAAC,WAAW,gCAAgC;IACnD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,iBAAiB,EACvC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IACE,OAAO;IACP,UAAU,EACR,YAAY,SAAS,kBAAkB,EACxC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,iBAAiB,EACvC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,0BAA0B,EAChD;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,oBAAoB,EAC1C;IACF;GACD;IAEE,OAAO,CACL,yBACA,2CACD;IACD,UAAU,EACR,YAAY,SAAS,aAAa,EACnC;IACF;GACD;IAEE,OAAO,CAAC,iDAAiD;IACzD,UAAU,EACR,YAAY,SAAS,eAAe,EACrC;IACF;GACD;IAEE,OAAO;KACL;KACA;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IAEE,OAAO;KACL;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,iBAAiB,EACvC;IACF;GACD;IACE,OAAO;KACL;KACA;KACA;KACD;IACD,UAAU,EACR,YAAY,SAAS,gBAAgB,EACtC;IACF;GACD;IACE,OAAO,CACL,kBACA,iCACD;IACD,UAAU,EACR,YAAY,SAA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"}
|