diff --git a/CHANGELOG.md b/CHANGELOG.md index 29dcd19..54b3807 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [0.15.4](https://github.com/atom-ide-community/atom-ide-signature-help/compare/v0.15.3...v0.15.4) (2021-06-07) + + +### Bug Fixes + +* documentation can be null ([15a5bf4](https://github.com/atom-ide-community/atom-ide-signature-help/commit/15a5bf4e3e2a99ce1ff929a32bdbedd9adddb821)) +* keep react outside of the bundle ([4cf07ae](https://github.com/atom-ide-community/atom-ide-signature-help/commit/4cf07aec5eaf0672b1268e6ab5a93448c24c4e3c)) +* update dependencies ([0ac8094](https://github.com/atom-ide-community/atom-ide-signature-help/commit/0ac80947e5f9e65dbcab19eaf7b2239b51e180e2)) + ## [0.15.3](https://github.com/atom-ide-community/atom-ide-signature-help/compare/v0.15.2...v0.15.3) (2021-02-27) diff --git a/dist/main.js.map b/dist/main.js.map index 54f0d96..8f3ce3b 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-atom/ProviderRegistry.ts","../node_modules/.pnpm/dompurify@2.2.9/node_modules/dompurify/src/utils.js","../node_modules/.pnpm/dompurify@2.2.9/node_modules/dompurify/src/tags.js","../node_modules/.pnpm/dompurify@2.2.9/node_modules/dompurify/src/attrs.js","../node_modules/.pnpm/dompurify@2.2.9/node_modules/dompurify/src/regexp.js","../node_modules/.pnpm/dompurify@2.2.9/node_modules/dompurify/src/purify.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/defaults.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/helpers.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Tokenizer.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/rules.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Lexer.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Renderer.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/TextRenderer.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Slugger.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Parser.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/marked.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/node_modules/.pnpm/dompurify@2.2.6/node_modules/dompurify/src/utils.js","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/src/utils/event-loop-yielder.ts","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/src/renderer.ts","../node_modules/.pnpm/atom-ide-markdown-service@2.1.0/node_modules/atom-ide-markdown-service/src/highlighter.ts","../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-ui/MarkdownRenderer.ts","../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-ui/float-pane/MarkdownView.tsx","../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-ui/float-pane/SnippetView.tsx","../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-ui/float-pane/ReactView.tsx","../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-ui/float-pane/ViewContainer.tsx","../node_modules/.pnpm/atom-ide-base@2.6.0/node_modules/atom-ide-base/src-commons-ui/float-pane/selectable-overlay.ts","../src/signature-help-manager.ts","../src/main.ts"],"sourcesContent":["import { Disposable, TextEditor } from \"atom\"\nimport { Provider as ProviderTypes, BusySignalProvider, FindReferencesProvider } from \"../types-packages/main.d\"\n\nexport class ProviderRegistry> {\n private providers: Array\n\n constructor() {\n this.providers = []\n }\n\n addProvider(provider: Provider): Disposable {\n const index = this.providers.findIndex((p) => provider.priority > p.priority)\n if (index === -1) {\n this.providers.push(provider)\n } else {\n this.providers.splice(index, 0, provider)\n }\n return new Disposable(() => {\n this.removeProvider(provider)\n })\n }\n\n removeProvider(provider: Provider): void {\n const index = this.providers.indexOf(provider)\n if (index !== -1) {\n this.providers.splice(index, 1)\n }\n }\n\n // TODO deprecate since there can be N providers.\n getProviderForEditor(editor: TextEditor): Provider | null {\n const grammar = editor.getGrammar().scopeName\n return this.findProvider(grammar)\n }\n\n // TODO create an ordering or priority aware util to prefer instead.\n getAllProvidersForEditor(editor: TextEditor): Iterable {\n const grammar = editor.getGrammar().scopeName\n return this.findAllProviders(grammar)\n }\n\n findProvider(grammar: string): Provider | null {\n for (const provider of this.findAllProviders(grammar)) {\n return provider\n }\n return null\n }\n\n /**\n * Iterates over all providers matching the grammar, in priority order.\n */\n *findAllProviders(grammar: string): Iterable {\n for (const provider of this.providers) {\n if (provider.grammarScopes == null || provider.grammarScopes.indexOf(grammar) !== -1) {\n yield provider\n }\n }\n }\n}\n","const {\n hasOwnProperty,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n let property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n hasOwnProperty,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'feimage',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (\n document.currentScript &&\n document.currentScript.hasAttribute(ATTR_NAME)\n ) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n Text,\n Comment,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n const trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n originalDocument\n );\n const emptyHTML =\n trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML('')\n : '';\n\n const { implementation, createNodeIterator, createDocumentFragment } =\n document;\n const { importNode } = originalDocument;\n\n let documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof getParentNode === 'function' &&\n implementation &&\n typeof implementation.createHTMLDocument !== 'undefined' &&\n documentMode !== 9;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify.\n *\n * This defaults to `true` starting DOMPurify 2.2.0. Note that setting it to `false`\n * might cause XSS from attacks hidden in closed shadowroots in case the browser\n * supports Declarative Shadow: DOM https://web.dev/declarative-shadow-dom/\n */\n let RETURN_DOM_IMPORT = true;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n let SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n const FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR)\n : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR)\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS)\n : DEFAULT_DATA_URI_TAGS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT !== false; // Default true\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erronously deleted from\n // HTML namespace.\n const commonSvgAndHTMLElements = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG or MathML). Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function (node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function (name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node,\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty) {\n /* Create a HTML document */\n let doc;\n let leadingWhitespace;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, 'text/html');\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n const _createIterator = function (root) {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT,\n null,\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function (elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (\n typeof elm.nodeName !== 'string' ||\n typeof elm.textContent !== 'string' ||\n typeof elm.removeChild !== 'function' ||\n !(elm.attributes instanceof NamedNodeMap) ||\n typeof elm.removeAttribute !== 'function' ||\n typeof elm.setAttribute !== 'function' ||\n typeof elm.namespaceURI !== 'string' ||\n typeof elm.insertBefore !== 'function'\n ) {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function (object) {\n return typeof Node === 'object'\n ? object instanceof Node\n : object &&\n typeof object === 'object' &&\n typeof object.nodeType === 'number' &&\n typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function (entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode) {\n let content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = stringToLowerCase(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n !_isNode(currentNode.firstElementChild) &&\n (!_isNode(currentNode.content) ||\n !_isNode(currentNode.content.firstElementChild)) &&\n regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(\n cloneNode(childNodes[i], true),\n getNextSibling(currentNode)\n );\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if (\n (tagName === 'noscript' || tagName === 'noembed') &&\n regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR, ' ');\n content = stringReplace(content, ERB_EXPR, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR, lcName)) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n // eslint-disable-next-line no-negated-condition\n } else if (!value) {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n } else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode) {\n let attr;\n let value;\n let lcName;\n let l;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n const { name, namespaceURI } = attr;\n value = stringTrim(attr.value);\n lcName = stringToLowerCase(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR, ' ');\n value = stringReplace(value, ERB_EXPR, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment) {\n let shadowNode;\n const shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n let body;\n let importedNode;\n let currentNode;\n let oldNode;\n let returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw typeErrorCreate('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (\n typeof window.toStaticHTML === 'object' ||\n typeof window.toStaticHTML === 'function'\n ) {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* No special handling necessary for in-place sanitization */\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = stringToLowerCase(tag);\n const lcName = stringToLowerCase(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n","function getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n","/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nmodule.exports = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n","const { defaults } = require('./defaults.js');\nconst {\n rtrim,\n splitCells,\n escape,\n findClosingBracket\n} = require('./helpers.js');\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nmodule.exports = class Tokenizer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src, tokens) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n return {\n raw: cap[0],\n text: cap[0].trimRight()\n };\n }\n\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length > bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list\n itemMatch.splice(i, 2, itemMatch[i] + '\\n' + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else {\n if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n');\n list.raw = list.raw.substring(0, list.raw.length - addBack.length);\n i = l - 1;\n }\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src, tokens) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n return {\n raw: cap[0],\n text: cap[0]\n };\n }\n\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n strong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.strong.start.exec(src);\n\n if (match && (!match[1] || (match[1] && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))))) {\n maskedSrc = maskedSrc.slice(-1 * src.length);\n const endReg = match[0] === '**' ? this.rules.inline.strong.endAst : this.rules.inline.strong.endUnd;\n\n endReg.lastIndex = 0;\n\n let cap;\n while ((match = endReg.exec(maskedSrc)) != null) {\n cap = this.rules.inline.strong.middle.exec(maskedSrc.slice(0, match.index + 3));\n if (cap) {\n return {\n type: 'strong',\n raw: src.slice(0, cap[0].length),\n text: src.slice(2, cap[0].length - 2)\n };\n }\n }\n }\n }\n\n em(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.em.start.exec(src);\n\n if (match && (!match[1] || (match[1] && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))))) {\n maskedSrc = maskedSrc.slice(-1 * src.length);\n const endReg = match[0] === '*' ? this.rules.inline.em.endAst : this.rules.inline.em.endUnd;\n\n endReg.lastIndex = 0;\n\n let cap;\n while ((match = endReg.exec(maskedSrc)) != null) {\n cap = this.rules.inline.em.middle.exec(maskedSrc.slice(0, match.index + 2));\n if (cap) {\n return {\n type: 'em',\n raw: src.slice(0, cap[0].length),\n text: src.slice(1, cap[0].length - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n","const {\n noopTest,\n edit,\n merge\n} = require('./helpers.js');\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest,\n table: noopTest,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit(/^( *)(bull)/)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /|$)/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge({}, block.normal, {\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n strong: {\n start: /^(?:(\\*\\*(?=[*punctuation]))|\\*\\*)(?![\\s])|__/, // (1) returns if starts w/ punctuation\n middle: /^\\*\\*(?:(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)|\\*(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)*?\\*)+?\\*\\*$|^__(?![\\s])((?:(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)*?_)+?)__$/,\n endAst: /[^punctuation\\s]\\*\\*(?!\\*)|[punctuation]\\*\\*(?!\\*)(?:(?=[punctuation_\\s]|$))/, // last char can't be punct, or final * must also be followed by punct (or endline)\n endUnd: /[^\\s]__(?!_)(?:(?=[punctuation*\\s])|$)/ // last char can't be a space, and final _ must preceed punct or \\s (or endline)\n },\n em: {\n start: /^(?:(\\*(?=[punctuation]))|\\*)(?![*\\s])|_/, // (1) returns if starts w/ punctuation\n middle: /^\\*(?:(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)|\\*(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)*?\\*)+?\\*$|^_(?![_\\s])(?:(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)*?_)+?_$/,\n endAst: /[^punctuation\\s]\\*(?!\\*)|[punctuation]\\*(?!\\*)(?:(?=[punctuation_\\s]|$))/, // last char can't be punct, or final * must also be followed by punct (or endline)\n endUnd: /[^\\s]_(?!_)(?:(?=[punctuation*\\s])|$)/ // last char can't be a space, and final _ must preceed punct or \\s (or endline)\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, \ninline._blockSkip = '\\\\[[^\\\\]]*?\\\\]\\\\([^\\\\)]*?\\\\)|`[^`]*?`|<[^>]*?>';\ninline._overlapSkip = '__[^_]*?__|\\\\*\\\\*\\\\[^\\\\*\\\\]*?\\\\*\\\\*';\n\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.em.start = edit(inline.em.start)\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.em.middle = edit(inline.em.middle)\n .replace(/punctuation/g, inline._punctuation)\n .replace(/overlapSkip/g, inline._overlapSkip)\n .getRegex();\n\ninline.em.endAst = edit(inline.em.endAst, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.em.endUnd = edit(inline.em.endUnd, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.strong.start = edit(inline.strong.start)\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.strong.middle = edit(inline.strong.middle)\n .replace(/punctuation/g, inline._punctuation)\n .replace(/overlapSkip/g, inline._overlapSkip)\n .getRegex();\n\ninline.strong.endAst = edit(inline.strong.endAst, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.strong.endUnd = edit(inline.strong.endUnd, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.blockSkip = edit(inline._blockSkip, 'g')\n .getRegex();\n\ninline.overlapSkip = edit(inline._overlapSkip, 'g')\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\ 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nmodule.exports = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src, tokens)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n } else {\n lastToken = tokens[tokens.length - 1];\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src, tokens)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n } else {\n lastToken = tokens[tokens.length - 1];\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n default: {\n // do nothing\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // strong\n if (token = this.tokenizer.strong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // em\n if (token = this.tokenizer.em(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n prevChar = token.raw.slice(-1);\n keepPrevChar = true;\n tokens.push(token);\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n","const { defaults } = require('./defaults.js');\nconst {\n cleanUrl,\n escape\n} = require('./helpers.js');\n\n/**\n * Renderer\n */\nmodule.exports = class Renderer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '
'\n        + (escaped ? code : escape(code, true))\n        + '
\\n';\n }\n\n return '
'\n      + (escaped ? code : escape(code, true))\n      + '
\\n';\n }\n\n blockquote(quote) {\n return '
\\n' + quote + '
\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return ''\n + text\n + '\\n';\n }\n // ignore IDs\n return '' + text + '\\n';\n }\n\n hr() {\n return this.options.xhtml ? '
\\n' : '
\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n\n listitem(text) {\n return '
  • ' + text + '
  • \\n';\n }\n\n checkbox(checked) {\n return ' ';\n }\n\n paragraph(text) {\n return '

    ' + text + '

    \\n';\n }\n\n table(header, body) {\n if (body) body = '' + body + '';\n\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n\n tablerow(content) {\n return '\\n' + content + '\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '\\n';\n }\n\n // span level renderer\n strong(text) {\n return '' + text + '';\n }\n\n em(text) {\n return '' + text + '';\n }\n\n codespan(text) {\n return '' + text + '';\n }\n\n br() {\n return this.options.xhtml ? '
    ' : '
    ';\n }\n\n del(text) {\n return '' + text + '';\n }\n\n link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '\"'' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n","/**\n * TextRenderer\n * returns only the textual part of the token\n */\nmodule.exports = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n","/**\n * Slugger generates header id\n */\nmodule.exports = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n","const Renderer = require('./Renderer.js');\nconst TextRenderer = require('./TextRenderer.js');\nconst Slugger = require('./Slugger.js');\nconst { defaults } = require('./defaults.js');\nconst {\n unescape\n} = require('./helpers.js');\n\n/**\n * Parsing & Compiling\n */\nmodule.exports = class Parser {\n constructor(options) {\n this.options = options || defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n","const Lexer = require('./Lexer.js');\nconst Parser = require('./Parser.js');\nconst Tokenizer = require('./Tokenizer.js');\nconst Renderer = require('./Renderer.js');\nconst TextRenderer = require('./TextRenderer.js');\nconst Slugger = require('./Slugger.js');\nconst {\n merge,\n checkSanitizeDeprecation,\n escape\n} = require('./helpers.js');\nconst {\n getDefaults,\n changeDefaults,\n defaults\n} = require('./defaults.js');\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n try {\n const tokens = Lexer.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.Tokenizer = Tokenizer;\n\nmarked.Slugger = Slugger;\n\nmarked.parse = marked;\n\nmodule.exports = marked;\n","const {\n hasOwnProperty,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n let property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n return null;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n hasOwnProperty,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n","/**\r\n * A helper to allow the JavaScript event loop continue for a given interval between each\r\n * iteration of a CPU intensive loop. If the time spent in the loop reaches the given\r\n * maxTime, the operation is killed.\r\n *\r\n * @returns An async function to call inside your heavy loop. It will return `false` if\r\n * the operation has exceeded the given max time (`true` otherwise).\r\n */\r\nexport function eventLoopYielder(delayMs: number, maxTimeMs: number) {\r\n const started = performance.now()\r\n let lastYield = started\r\n return async function (): Promise {\r\n const now = performance.now()\r\n if (now - lastYield > delayMs) {\r\n await new Promise(setImmediate)\r\n lastYield = now\r\n }\r\n return now - started <= maxTimeMs\r\n }\r\n}\r\n\r\n/** Throws maximum time reached error */\r\nexport function maxTimeError(name: string, timeS: number) {\r\n const err = new Error(\"Max time reached\")\r\n atom.notifications.addError(`${name} took more than ${timeS} seconds to complete`, {\r\n dismissable: true,\r\n description: `${name} took too long to complete and was terminated.`,\r\n stack: err.stack,\r\n })\r\n return err\r\n}\r\n","import marked from \"marked\"\r\n\r\n/**\r\n * safe DOM markup operations\r\n * a reference to the DOMpurify function to make safe HTML strings\r\n * @type {DOMPurify}\r\n */\r\nimport DOMPurify from \"dompurify\"\r\nimport { highlightTreeSitter } from \"./highlighter\"\r\n\r\nmarked.setOptions({\r\n breaks: true,\r\n})\r\n\r\nexport type DOMPurifyConfig = Omit\r\n\r\n/**\r\n * renders markdown to safe HTML asynchronously\r\n * @param markdownText the markdown text to render\r\n * @param scopeName scope name used for highlighting the code\r\n * @param purifyConfig (optional) configuration object for DOMPurify\r\n * @return the html string containing the result\r\n */\r\nexport async function render(\r\n markdownText: string,\r\n scopeName: string = \"text.plain\",\r\n domPurifyConfig?: DOMPurifyConfig\r\n): Promise {\r\n return new Promise((resolve, reject) => {\r\n marked(\r\n markdownText,\r\n {\r\n highlight: function (code, _lang, callback) {\r\n highlightTreeSitter(code, scopeName)\r\n .then((codeResult) => {\r\n callback!(null, codeResult)\r\n })\r\n .catch((e) => {\r\n callback!(e)\r\n })\r\n },\r\n },\r\n (e, html) => {\r\n if (e) {\r\n reject(e)\r\n }\r\n // sanitization\r\n html = domPurifyConfig ? DOMPurify.sanitize(html, domPurifyConfig) : DOMPurify.sanitize(html)\r\n\r\n return resolve(html)\r\n }\r\n )\r\n })\r\n}\r\n","import { TextBuffer, LanguageMode } from \"atom\"\r\nimport { eventLoopYielder, maxTimeError } from \"./utils/event-loop-yielder\"\r\n\r\ndeclare module \"atom\" {\r\n interface GrammarRegistry {\r\n grammarForId(id: string): Grammar\r\n languageModeForGrammarAndBuffer(g: Grammar, b: TextBuffer): LanguageMode\r\n }\r\n interface LanguageMode {\r\n readonly fullyTokenized?: boolean\r\n readonly tree?: boolean\r\n onDidTokenize(cb: () => void): Disposable\r\n buildHighlightIterator(): HighlightIterator\r\n classNameForScopeId(id: ScopeId): string\r\n startTokenizing?(): void\r\n }\r\n interface HighlightIterator {\r\n seek(pos: { row: number; column: number }): void\r\n getPosition(): { row: number; column: number }\r\n getOpenScopeIds?(): ScopeId[]\r\n getCloseScopeIds?(): ScopeId[]\r\n moveToSuccessor(): void\r\n }\r\n interface ScopeId {}\r\n}\r\n\r\nexport async function highlightTreeSitter(sourceCode: string, scopeName: string) {\r\n const yielder = eventLoopYielder(100, 5000)\r\n const buf = new TextBuffer()\r\n try {\r\n const grammar = atom.grammars.grammarForId(scopeName)\r\n const lm = atom.grammars.languageModeForGrammarAndBuffer(grammar, buf)\r\n buf.setLanguageMode(lm)\r\n buf.setText(sourceCode)\r\n const end = buf.getEndPosition()\r\n if (lm.startTokenizing) lm.startTokenizing()\r\n await tokenized(lm)\r\n const iter = lm.buildHighlightIterator()\r\n if (iter.getOpenScopeIds && iter.getCloseScopeIds) {\r\n let pos = { row: 0, column: 0 }\r\n iter.seek(pos)\r\n const res = []\r\n while (pos.row < end.row || (pos.row === end.row && pos.column <= end.column)) {\r\n res.push(\r\n ...iter.getCloseScopeIds().map(() => \"\"),\r\n ...iter.getOpenScopeIds().map((x) => ``)\r\n )\r\n iter.moveToSuccessor()\r\n const nextPos = iter.getPosition()\r\n res.push(escapeHTML(buf.getTextInRange([pos, nextPos])))\r\n\r\n if (!(await yielder())) {\r\n console.error(maxTimeError(\"Atom-IDE-Markdown-Service: Highlighter\", 5))\r\n break\r\n }\r\n pos = nextPos\r\n }\r\n return res.join(\"\")\r\n } else {\r\n return sourceCode\r\n }\r\n } finally {\r\n buf.destroy()\r\n }\r\n}\r\n\r\nasync function tokenized(lm: LanguageMode) {\r\n return new Promise((resolve) => {\r\n if (lm.fullyTokenized || lm.tree) {\r\n resolve(undefined)\r\n } else if (lm.onDidTokenize) {\r\n const disp = lm.onDidTokenize(() => {\r\n disp.dispose()\r\n resolve(undefined)\r\n })\r\n } else {\r\n resolve(undefined) // null language mode\r\n }\r\n })\r\n}\r\n\r\nfunction escapeHTML(str: string) {\r\n return str\r\n .replace(/&/g, \"&\")\r\n .replace(//g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\")\r\n}\r\n","// Use built-in markdown renderer when the markdown service is not available\n\nimport { MarkdownService } from \"../types-packages/main\"\n\nlet render: MarkdownService[\"render\"] | undefined = undefined\n\nexport async function getMarkdownRenderer() {\n if (!render) {\n //@ts-ignore\n render = ((await import(\"atom-ide-markdown-service/modules/renderer\")) as MarkdownService).render\n }\n return render\n}\n","import * as React from \"react\"\nimport DOMPurify from \"dompurify\"\nimport { MarkdownService } from \"../../types-packages/main\"\nimport { getMarkdownRenderer } from \"../MarkdownRenderer\"\n\nexport interface Props {\n markdown: Array | string\n grammarName?: string\n renderer?: MarkdownService\n containerClassName: string\n contentClassName: string\n // already rendered markdown\n html?: Array | string\n}\n\ninterface State {\n markdown: string\n}\n\n/**\n * A react component that can hosts markdown texts\n */\nexport class MarkdownView extends React.Component {\n state: State = { markdown: \"\" }\n\n render() {\n return (\n
    this.onMouseWheel(e)}>\n \n
    \n )\n }\n\n /**\n * handles the mouse wheel event to enable scrolling over long text\n * @param evt the mouse wheel event being triggered\n */\n onMouseWheel(evt: React.WheelEvent) {\n evt.stopPropagation()\n }\n\n /**\n Calls `getDocumentationHtml` to convert Markdown to markdown\n */\n async componentDidMount() {\n this.setState({\n markdown: (await renderMarkdown(this.props.markdown, this.props.grammarName, this.props.renderer)) ?? \"\",\n })\n }\n}\n\n/**\n * convert the markdown documentation to markdown\n * @param markdownTexts the documentation text in markdown format to be converted\n * @param grammarName the default grammar used for embedded code samples\n * @param renderer markdown service to be used for rendering\n * @return a promise object to track the asynchronous operation\n */\nexport async function renderMarkdown(\n markdownTexts: Array | string,\n grammarName: string = atom.workspace.getActiveTextEditor()?.getGrammar().scopeName?.toLowerCase() || \"\",\n renderer?: MarkdownService\n): Promise {\n if (markdownTexts === undefined) {\n return null\n }\n\n let markdownText = \"\"\n // if Array\n if (Array.isArray(markdownTexts)) {\n if (markdownTexts.length === 0) {\n return null\n }\n markdownText = (markdownTexts as Array).join(\"\\r\\n\")\n }\n // if string\n else {\n //@ts-ignore\n markdownText = markdownTexts\n }\n if (renderer) {\n return DOMPurify.sanitize(await renderer.render(markdownText, grammarName))\n } else {\n // Use built-in markdown renderer (it already does sanitization)\n const render = await getMarkdownRenderer()\n return await render(markdownText, grammarName)\n }\n}\n","import * as React from \"react\"\nimport DOMPurify from \"dompurify\"\nimport { MarkdownService } from \"../../types-packages/main\"\nimport { getMarkdownRenderer } from \"../MarkdownRenderer\"\n\nexport interface Props {\n snippet: Array | string\n grammarName?: string\n renderer?: MarkdownService\n containerClassName: string\n contentClassName: string\n}\n\ninterface State {\n snippet: string\n}\n\n/**\n * A React component that hosts a code snippet with syntax highlighting\n */\nexport class SnippetView extends React.Component {\n state = { snippet: \"\" }\n\n render() {\n return (\n
    this.onMouseWheel(e)}>\n \n
    \n )\n }\n\n /**\n * handles the mouse wheel event to enable scrolling over long text\n * @param evt the mouse wheel event being triggered\n */\n onMouseWheel(evt: React.WheelEvent) {\n evt.stopPropagation()\n }\n\n async componentDidMount() {\n this.setState({\n snippet: (await getSnippetHtml(this.props.snippet, this.props.grammarName, this.props.renderer)) ?? \"\",\n })\n }\n}\n\nconst regexPremeable = /^\\s*<(\\?|!)([a-zA-Z]+)?\\s*/i\nconst regexLSPPrefix = /^\\((method|property|parameter|alias)\\)\\W/\n\n/**\n * converts a given code snippet into syntax formatted HTML\n * @param snippets the code snippet to be converted\n * @param grammarName the name of the grammar to be used for syntax highlighting\n * @param renderer markdown service to be used for rendering\n * @return a promise object to track the asynchronous operation\n */\nexport async function getSnippetHtml(\n snippets: Array | string,\n grammarName: string = atom.workspace.getActiveTextEditor()?.getGrammar().scopeName?.toLowerCase() || \"\",\n renderer?: MarkdownService\n): Promise {\n if (snippets === undefined) {\n return null\n }\n\n // if string\n if (typeof snippets === \"string\") {\n snippets = [snippets]\n }\n\n // if Array\n if (Array.isArray(snippets)) {\n if (snippets.length === 0) {\n return null\n }\n const markdown = snippets\n .map((snippet) => {\n snippet = snippet\n .replace(regexPremeable, \"\") // remove any preamble from the line\n .replace(regexLSPPrefix, \"\") // remove LSP prefix\n return `\\`\\`\\`\\n${snippet}\\n\\`\\`\\``\n })\n .join(\"\\n\")\n\n if (renderer) {\n return DOMPurify.sanitize(await renderer.render(markdown, grammarName))\n } else {\n // Use built-in markdown renderer (it already does sanitization)\n const render = await getMarkdownRenderer()\n return await render(markdown, grammarName)\n }\n } else {\n return null\n }\n}\n","import * as React from \"react\"\n\nexport interface Props {\n component: () => React.ReactElement\n containerClassName: string\n contentClassName: string\n}\n\ninterface State {}\n\n/**\n * A react component that can host an externally given React component\n */\nexport class ReactView extends React.Component {\n render() {\n let children = null\n if (this.props.component) {\n children =
    {this.props.component()}
    \n }\n\n return
    {children}
    \n }\n}\n","import { MarkdownView, Props as MarkdownViewProps } from \"./MarkdownView\"\nimport { SnippetView, Props as SnippetViewProps } from \"./SnippetView\"\nimport { ReactView, Props as ReactViewProps } from \"./ReactView\"\nimport type { ReactElement } from \"react\"\nimport * as React from \"react\"\nimport ReactDOM from \"react-dom\"\n\nexport const DATATIP_ACTIONS = Object.freeze({\n PIN: \"PIN\",\n CLOSE: \"CLOSE\",\n})\n\nconst IconsForAction = {\n [DATATIP_ACTIONS.PIN]: \"pin\",\n [DATATIP_ACTIONS.CLOSE]: \"x\",\n}\n\ninterface Props {\n component?: ReactViewProps\n markdown?: MarkdownViewProps\n snippet?: SnippetViewProps\n action?: string\n actionTitle?: string\n className?: string\n onActionClick?: Function\n onMouseDown?: Function\n onClickCapture?: Function\n}\n\ninterface State {}\n\n/**\n * an etch component for a decoration pane\n */\nexport class ViewContainer extends React.Component {\n actionButton?: JSX.Element\n children: Array = []\n rootElement: HTMLElement = document.createElement(\"div\")\n\n /**\n * renders the data tip view component\n * @return the data tip view element\n */\n render(): ReactElement {\n this.actionButton = this.ActionClick(this.props.action, this.props.actionTitle)\n this.updateChildren()\n return (\n \n {this.children}\n {this.actionButton}\n \n )\n }\n\n get element() {\n return ReactDOM.render(this.render(), this.rootElement)\n }\n\n /**\n * internal helper function to figure out the structure of the data tip view\n * to be rendered\n */\n updateChildren() {\n if (this.props.component) {\n this.children.push()\n }\n if (this.props.snippet) {\n this.children.push()\n }\n if (this.props.markdown) {\n this.children.push()\n }\n }\n\n ActionClick(action: string | undefined, actionTitle: string | undefined) {\n let actionButton = undefined\n if (action !== undefined && IconsForAction[action] != null) {\n const actionIcon = IconsForAction[action]\n actionButton = (\n {\n this.props.onActionClick?.(event)\n }}\n title={actionTitle}\n />\n )\n }\n return actionButton\n }\n\n async destroy() {\n return // this.componentWillUnmount()\n }\n}\n","import type { TextEditor, TextEditorComponent } from \"atom\"\n\n/** makes the text selectable and copyable\n *\n * Note: you can directly add `user-select: text` (and `pointer-events: all`) in CSS for better performance\n */\nexport function makeOverlaySelectable(editor: TextEditor, overlayElement: HTMLElement, focusFix = true) {\n // allow the browser to handle selecting\n overlayElement.setAttribute(\"tabindex\", \"-1\")\n\n // make it selectable\n if (!overlayElement.style.userSelect || overlayElement.style.userSelect === \"none\") {\n overlayElement.style.userSelect = \"text\"\n }\n\n if (focusFix) {\n // fix overlay focus issue\n overlayFocusFix(editor, overlayElement)\n }\n\n // add copy keybindings\n overlayElement.classList.add(\"native-key-bindings\")\n}\n\n/**\n * - focus on the datatip once the text is selected (cursor gets disabled temporarily)\n * - remove focus once mouse leaves\n */\nexport function overlayFocusFix(editor: TextEditor, element: HTMLElement) {\n const editorComponent = atom.views.getView(editor).getComponent()\n element.addEventListener(\"mousedown\", () => {\n blurEditor(editorComponent)\n element.addEventListener(\"mouseleave\", () => {\n focusEditor(editorComponent)\n })\n })\n}\n\nexport function focusEditor(editorComponent: TextEditorComponent) {\n // @ts-ignore\n editorComponent?.didFocus()\n}\n\nexport function blurEditor(editorComponent: TextEditorComponent) {\n // @ts-ignore\n editorComponent?.didBlurHiddenInput({\n relatedTarget: null,\n })\n}\n\n/*\n██████ ███████ ██████ ██████ ███████ ██████ █████ ████████ ███████ ██████\n██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n██ ██ █████ ██████ ██████ █████ ██ ███████ ██ █████ ██ ██\n██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n██████ ███████ ██ ██ ██ ███████ ██████ ██ ██ ██ ███████ ██████\n*/\n\n/** @deprecated use `makeOverlaySelectable` instead.\n *\n * Makes the overlay component copyable\n * - you should call `makeOverlaySelectable` before this\n * - If your element already has mouseenter and mouseleav listeners, directly use `copyListener`\n */\nexport function makeOverLayCopyable(element: HTMLElement) {\n element.addEventListener(\"mouseenter\", () => {\n element.addEventListener(\"keydown\", copyListener)\n })\n\n element.addEventListener(\"mouseleave\", () => {\n element.removeEventListener(\"keydown\", copyListener)\n })\n}\n\n/** @deprecated use `makeOverlaySelectable` instead.\n *\n * A manual copy listener\n * Usage. Add the listener to your mouse enter and mouseleave listeners\n ```ts\n element.addEventListener(\"mouseenter\", () => {element.addEventListener(\"keydown\", copyListener)}`\n element.addEventListener(\"mouseleave\", () => {element.removeEventListener(\"keydown\", copyListener)}`\n ```\n*/\nexport async function copyListener(event: KeyboardEvent) {\n event.preventDefault()\n if (event.ctrlKey && event.key === \"c\") {\n const text = document.getSelection()?.toString() ?? \"\"\n await navigator.clipboard.writeText(text)\n }\n} // TODO we should not need to manually listen for copy paste\n","import { CompositeDisposable, Disposable, Range, Point, TextEditor, TextEditorElement } from \"atom\"\r\nimport { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\r\nimport { ViewContainer } from \"atom-ide-base/commons-ui/float-pane/ViewContainer\"\r\nimport { makeOverlaySelectable } from \"atom-ide-base/commons-ui/float-pane/selectable-overlay\"\r\nimport { SignatureHelpRegistry, SignatureHelpProvider } from \"atom-ide-base\"\r\n\r\nexport class SignatureHelpManager {\r\n /**\r\n * holds a reference to disposable items from this data tip manager\r\n */\r\n subscriptions = new CompositeDisposable()\r\n /**\r\n * holds a list of registered data tip providers\r\n */\r\n providerRegistry = new ProviderRegistry()\r\n /**\r\n * holds a weak reference to all watched Atom text editors\r\n */\r\n watchedEditors = new WeakSet()\r\n /**\r\n * holds a reference to the current watched Atom text editor\r\n */\r\n editor: TextEditor | null = null\r\n /**\r\n * holds a reference to the current watched Atom text editor viewbuffer\r\n */\r\n editorView: TextEditorElement | null = null\r\n /**\r\n * holds a reference to all disposable items for the current watched Atom text editor\r\n */\r\n editorSubscriptions: CompositeDisposable = new CompositeDisposable()\r\n /**\r\n * holds a reference to all disposable items for the current signature help\r\n */\r\n signatureHelpDisposables: CompositeDisposable = new CompositeDisposable()\r\n /**\r\n * config flag denoting if the signature help should be shown during typing automatically\r\n */\r\n showSignatureHelpOnTyping = false\r\n\r\n /**\r\n * initialization routine\r\n */\r\n initialize() {\r\n this.subscriptions.add(\r\n atom.workspace.observeTextEditors((editor) => {\r\n const disposable = this.watchEditor(editor)\r\n editor.onDidDestroy(() => disposable?.dispose())\r\n }),\r\n atom.commands.add(\"atom-text-editor\", {\r\n \"signature-help:show\": (evt) => {\r\n const editor = evt.currentTarget.getModel()\r\n if (atom.workspace.isTextEditor(editor)) {\r\n const provider = this.providerRegistry.getProviderForEditor(editor)\r\n const position = editor.getLastCursor().getBufferPosition()\r\n if (provider) {\r\n this.showSignatureHelp(provider, editor, position)\r\n }\r\n }\r\n },\r\n }),\r\n atom.config.observe(\"atom-ide-signature-help.showSignatureHelpOnTyping\", (toggleSwitch) => {\r\n this.showSignatureHelpOnTyping = toggleSwitch\r\n // forces update of internal editor tracking\r\n const editor = this.editor\r\n this.editor = null\r\n this.updateCurrentEditor(editor)\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * dispose function to clean up any disposable references used\r\n */\r\n dispose() {\r\n this.signatureHelpDisposables.dispose()\r\n\r\n this.editorSubscriptions.dispose()\r\n\r\n this.subscriptions.dispose()\r\n }\r\n\r\n /**\r\n * returns the provider registry as a consumable service\r\n */\r\n get signatureHelpRegistry(): SignatureHelpRegistry {\r\n return (provider) => {\r\n return this.providerRegistry.addProvider(provider)\r\n }\r\n }\r\n\r\n /**\r\n * checks and setups an Atom Text editor instance for tracking cursor/mouse movements\r\n * @param editor a valid Atom Text editor instance\r\n */\r\n watchEditor(editor: TextEditor) {\r\n if (this.watchedEditors.has(editor)) {\r\n return\r\n }\r\n let editorView = atom.views.getView(editor)\r\n if (editorView.hasFocus()) {\r\n this.updateCurrentEditor(editor)\r\n }\r\n let focusListener = () => this.updateCurrentEditor(editor)\r\n editorView.addEventListener(\"focus\", focusListener)\r\n let blurListener = () => this.unmountDataTip()\r\n editorView.addEventListener(\"blur\", blurListener)\r\n\r\n let disposable = new Disposable(() => {\r\n editorView.removeEventListener(\"focus\", focusListener)\r\n editorView.removeEventListener(\"blur\", blurListener)\r\n if (this.editor === editor) {\r\n this.updateCurrentEditor(null)\r\n }\r\n })\r\n\r\n this.watchedEditors.add(editor)\r\n this.subscriptions.add(disposable)\r\n\r\n return new Disposable(() => {\r\n disposable.dispose()\r\n this.subscriptions.remove(disposable)\r\n this.watchedEditors.delete(editor)\r\n })\r\n }\r\n\r\n /**\r\n * updates the internal references to a specific Atom Text editor instance in case\r\n * it has been decided to track this instance\r\n * @param editor the Atom Text editor instance to be tracked\r\n */\r\n updateCurrentEditor(editor: TextEditor | null) {\r\n if (editor === this.editor) {\r\n return\r\n }\r\n this.editorSubscriptions.dispose()\r\n\r\n // Stop tracking editor + buffer\r\n this.unmountDataTip()\r\n this.editor = null\r\n this.editorView = null\r\n\r\n if (!editor || !atom.workspace.isTextEditor(editor)) {\r\n return\r\n }\r\n\r\n this.editor = editor\r\n this.editorView = atom.views.getView(this.editor)\r\n\r\n this.editorSubscriptions = new CompositeDisposable()\r\n\r\n if (!this.showSignatureHelpOnTyping) {\r\n return\r\n }\r\n\r\n // @ts-ignore\r\n const editorElement: TextEditorElement = this.editor.getElement()\r\n editorElement.addEventListener(\"keydown\", (evt) => {\r\n if (evt.keyCode === 27) {\r\n this.unmountDataTip()\r\n }\r\n })\r\n\r\n this.editorSubscriptions.add(\r\n this.editor.getBuffer().onDidChangeText((evt) => {\r\n if (evt.changes.length != 1) {\r\n return\r\n }\r\n\r\n const change = evt.changes[0]\r\n // Use the start of the current selection as the cursor position.\r\n // (Autocomplete often inserts a placeholder and puts the cursor at the end.)\r\n const cursorPosition = editor.getSelectedBufferRange().start\r\n\r\n if (\r\n change.newText.length === 0 ||\r\n // Don't allow multi-line changes.\r\n change.newRange.start.row !== change.newRange.end.row ||\r\n // The change should cover the current cursor position.\r\n !change.newRange.containsPoint(cursorPosition)\r\n ) {\r\n return this.unmountDataTip()\r\n }\r\n // Use the character before the cursor as the 'trigger character'.\r\n const index = Math.max(0, cursorPosition.column - change.newRange.start.column - 1)\r\n\r\n const provider = this.providerRegistry.getProviderForEditor(editor)\r\n\r\n if (!provider) {\r\n return\r\n }\r\n\r\n if (provider.triggerCharacters?.has(change.newText[index])) {\r\n this.showSignatureHelp(provider, editor, cursorPosition)\r\n }\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * @param provider\r\n * @param editor\r\n * @param position\r\n */\r\n async showSignatureHelp(provider: SignatureHelpProvider, editor: TextEditor, position: Point) {\r\n try {\r\n const signatureHelp = await provider.getSignatureHelp(editor, position)\r\n\r\n if (!signatureHelp || signatureHelp.signatures.length == 0) {\r\n this.unmountDataTip()\r\n } else {\r\n const index = signatureHelp.activeSignature || 0\r\n const signature = signatureHelp.signatures[index]\r\n const paramIndex = signatureHelp.activeParameter || 0\r\n const parameter = signature.parameters !== undefined ? signature.parameters[paramIndex] || null : null\r\n\r\n // clear last data tip\r\n this.unmountDataTip()\r\n\r\n let doc = \"\"\r\n if (parameter) {\r\n let parameterDocumentation = \"\"\r\n // TODO documentation can be null. Update the types!\r\n if (parameter.documentation === undefined || parameter.documentation === null) {\r\n // parameterDocumentation = \"\"\r\n } else if (typeof parameter.documentation === \"string\") {\r\n parameterDocumentation = parameter.documentation\r\n } else if (typeof (parameter.documentation as { value: string }).value === \"string\") {\r\n // TODO undocumented type?\r\n parameterDocumentation = (parameter.documentation as { value: string }).value\r\n }\r\n doc = `${parameter.label} ${parameterDocumentation}`\r\n } else if (signature.documentation) {\r\n let signatureDocumentation = \"\"\r\n if (signature.documentation === undefined || signature.documentation === null) {\r\n // signatureDocumentation = \"\"\r\n } else if (typeof signature.documentation === \"string\") {\r\n signatureDocumentation = signature.documentation\r\n } else if (typeof (signature.documentation as { value: string }).value === \"string\") {\r\n // TODO undocumented type?\r\n signatureDocumentation = (signature.documentation as { value: string }).value\r\n }\r\n doc = signatureDocumentation\r\n }\r\n\r\n const grammar = editor.getGrammar().scopeName.toLowerCase()\r\n const signatureHelpView = new ViewContainer({\r\n snippet: {\r\n snippet: signature.label,\r\n grammarName: grammar,\r\n containerClassName: \"signature-snippet-container\",\r\n contentClassName: \"signature-snippet\",\r\n },\r\n markdown: {\r\n markdown: doc,\r\n grammarName: grammar,\r\n containerClassName: \"signature-markdown-container\",\r\n contentClassName: \"signature-markdown\",\r\n },\r\n className: \"signature-element\",\r\n })\r\n this.signatureHelpDisposables = this.mountSignatureHelp(editor, position, signatureHelpView)\r\n }\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n }\r\n\r\n /**\r\n * mounts displays a signature help view component at a specific position in a given Atom Text editor\r\n * @param editor the Atom Text editor instance to host the data tip view\r\n * @param position the position on which to show the signature help view\r\n * @param view the signature help component to display\r\n * @return a composite object to release references at a later stage\r\n */\r\n mountSignatureHelp(editor: TextEditor, position: Point, view: ViewContainer) {\r\n const element = view.element as HTMLElement\r\n\r\n let disposables = new CompositeDisposable()\r\n const overlayMarker = editor.markBufferRange(new Range(position, position), {\r\n invalidate: \"overlap\", // TODO It was never. Shouldn't be surround?\r\n })\r\n\r\n makeOverlaySelectable(editor, element)\r\n\r\n const marker = editor.decorateMarker(overlayMarker, {\r\n type: \"overlay\",\r\n class: \"signature-overlay\",\r\n position: \"head\", // follows the cursor\r\n item: element,\r\n })\r\n\r\n // TODO do this for some valid range\r\n // editor.onDidChangeCursorPosition(\r\n // () => marker.destroy() // destroy the marker if user clicks somewhere else\r\n // )\r\n\r\n // move box above the current editing line\r\n // HACK: patch the decoration's style so it is shown above the current line\r\n setTimeout(() => {\r\n const overlay = element.parentElement\r\n if (!overlay) {\r\n return\r\n }\r\n const hight = element.getBoundingClientRect().height\r\n const lineHight = editor.getLineHeightInPixels()\r\n //@ts-ignore internal type\r\n const availableHight = (position.row - editor.getFirstVisibleScreenRow()) * lineHight\r\n if (hight < availableHight + 80) {\r\n overlay.style.transform = `translateY(-${lineHight + hight}px)`\r\n } else {\r\n // move right so it does not overlap with auto-complete-list\r\n // @ts-ignore\r\n const autoCompleteList = (editor.getElement() as TextEditorElement).querySelector(\r\n \"autocomplete-suggestion-list\"\r\n )\r\n if (autoCompleteList) {\r\n overlay.style.transform = `translateX(${autoCompleteList.clientWidth}px)`\r\n } else {\r\n overlay.style.transform = \"translateX(300px)\"\r\n }\r\n }\r\n element.style.visibility = \"visible\"\r\n }, 100)\r\n\r\n disposables.add(\r\n new Disposable(() => overlayMarker.destroy()),\r\n new Disposable(() => view.destroy()),\r\n new Disposable(() => marker.destroy())\r\n )\r\n\r\n return disposables\r\n }\r\n\r\n /**\r\n * unmounts / hides the most recent data tip view component\r\n */\r\n unmountDataTip() {\r\n this.signatureHelpDisposables.dispose()\r\n }\r\n}\r\n","import { CompositeDisposable } from \"atom\"\nimport { SignatureHelpManager } from \"./signature-help-manager\"\nimport { SignatureHelpRegistry } from \"atom-ide-base\"\n\nlet subscriptions = new CompositeDisposable()\nlet signatureHelpManager: SignatureHelpManager\n\n/**\n * called by Atom when activating an extension\n */\nexport function activate() {\n // Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable\n signatureHelpManager = new SignatureHelpManager()\n subscriptions.add(signatureHelpManager)\n ;(require(\"atom-package-deps\") as typeof import(\"atom-package-deps\"))\n .install(\"atom-ide-signature-help\", true)\n .then(() => {\n signatureHelpManager.initialize()\n })\n}\n\n/**\n * called by Atom when deactivating an extension\n */\nexport function deactivate() {\n subscriptions.dispose()\n}\n\nexport function provideSignatureHelp(): SignatureHelpRegistry {\n return signatureHelpManager.signatureHelpRegistry\n}\n\nexport const config = {\n showSignatureHelpOnTyping: {\n title: \"Show signature automatically\",\n description:\n \"If set to true, the signature help is shown as soon as you start typing. Otherwise you will have to activate it via keypress.\",\n type: \"boolean\",\n default: true,\n },\n}\n"],"names":["ProviderRegistry_2","[object Object]","this","providers","provider","index","findIndex","p","priority","push","splice","atom_1","removeProvider","indexOf","editor","grammar","getGrammar","scopeName","findProvider","findAllProviders","grammarScopes","hasOwnProperty","Object","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","Reflect","apply","construct","fun","thisValue","args","x","Func","func","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","stringToLowerCase","String","toLowerCase","stringMatch","match","stringReplace","replace","stringIndexOf","stringTrim","trim","regExpTest","RegExp","test","typeErrorCreate","TypeError","thisArg","addToSet","set","array","l","length","element","lcElement","clone","object","newObject","property","lookupGetter","prop","desc","get","value","warn","html","svg","svgFilters","svgDisallowed","mathMl","mathMlDisallowed","text","xml","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","document","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","getAttribute","policyName","_","createDOMPurify","DOMPurify","root","version","VERSION","removed","nodeType","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","Text","Comment","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","RETURN_TRUSTED_TYPE","createHTML","implementation","createNodeIterator","createDocumentFragment","importNode","documentMode","hooks","createHTMLDocument","EXPRESSIONS","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","ATTRS","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_DOM_IMPORT","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","CONFIG","formElement","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","namespaceURI","Boolean","commonSvgAndHTMLElements","_forceRemove","node","parentNode","removeChild","outerHTML","remove","_removeAttribute","name","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","_createIterator","call","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isClobbered","elm","nodeName","textContent","attributes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","firstElementChild","i","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","hookEvent","attrName","attrValue","keepAttr","forceKeepAttr","undefined","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toString","_typeof","toStaticHTML","appendChild","firstChild","nodeIterator","serializedHTML","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","defaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","getDefaults","changeDefaults","newDefaults","module","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","unescapeTest","unescape","n","charAt","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","rtrim","relativeBase","str","c","invert","suffLen","currChar","substr","escape","encode","edit","regex","opt","source","obj","val","getRegex","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","target","key","arguments","splitCells","tableRow","count","cells","offset","escaped","curr","split","findClosingBracket","b","level","checkSanitizeDeprecation","console","repeatString","pattern","result","require","outputLink","cap","link","raw","title","type","constructor","options","space","src","rules","block","newline","code","tokens","lastToken","trimRight","codeBlockStyle","fences","matchIndentToCode","indentToCode","map","matchIndentInNode","indentInNode","slice","join","lang","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","bcurr","bnext","addBack","istask","ischecked","next","listItemStart","task","checked","pre","def","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","reflink","links","nolink","strong","maskedSrc","prevChar","punctuation","endReg","endAst","endUnd","lastIndex","middle","em","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","inlineText","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","_blockSkip","_overlapSkip","blockSkip","overlapSkip","_scheme","_email","_attribute","_href","_extended_email","out","charCodeAt","Math","random","Lexer","Tokenizer","lex","inlineTokens","blockTokens","top","token","errMsg","error","Error","j","k","l2","row","keepPrevChar","keys","includes","lastIndexOf","infostring","quote","slugger","slug","listitem","checkbox","tablerow","tablecell","flags","image","seen","serialize","getNextSafeSlug","originalSlug","isDryRun","occurenceAccumulator","dryrun","Parser","Renderer","textRenderer","TextRenderer","Slugger","parse","parseInline","l3","cell","itemBody","unshift","marked","callback","done","err","pending","setTimeout","message","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","lexer","_len2","_key2","maxTimeError","timeS","atom","notifications","addError","dismissable","description","stack","async","markdownText","domPurifyConfig","Promise","resolve","reject","_lang","sourceCode","yielder","delayMs","maxTimeMs","started","performance","now","lastYield","setImmediate","buf","TextBuffer","grammars","grammarForId","lm","languageModeForGrammarAndBuffer","setLanguageMode","setText","end","getEndPosition","startTokenizing","fullyTokenized","tree","onDidTokenize","disp","dispose","iter","buildHighlightIterator","getOpenScopeIds","getCloseScopeIds","pos","column","seek","res","classNameForScopeId","moveToSuccessor","nextPos","getPosition","getTextInRange","destroy","highlightTreeSitter","then","codeResult","catch","render","MarkdownView","React","Component","markdown","className","props","containerClassName","onWheel","onMouseWheel","contentClassName","dangerouslySetInnerHTML","__html","state","evt","stopPropagation","setState","renderMarkdown","grammarName","markdownTexts","workspace","getActiveTextEditor","isArray","dompurify_1","MarkdownRenderer_1","SnippetView","snippet","getSnippetHtml","regexPremeable","regexLSPPrefix","snippets","ReactView","children","component","exports","PIN","CLOSE","IconsForAction","ViewContainer","actionButton","ActionClick","action","actionTitle","updateChildren","onMouseDown","onClickCapture","react_dom_1","rootElement","ReactView_1","SnippetView_1","MarkdownView_1","actionIcon","onClick","onActionClick","event","overlayElement","focusFix","style","userSelect","overlayFocusFix","classList","add","editorComponent","views","getView","getComponent","addEventListener","blurEditor","focusEditor","didFocus","didBlurHiddenInput","relatedTarget","copyListener","preventDefault","ctrlKey","getSelection","navigator","clipboard","writeText","removeEventListener","SignatureHelpManager","CompositeDisposable","ProviderRegistry","WeakSet","subscriptions","observeTextEditors","disposable","watchEditor","onDidDestroy","commands","signature-help:show","currentTarget","getModel","isTextEditor","providerRegistry","getProviderForEditor","position","getLastCursor","getBufferPosition","showSignatureHelp","config","observe","toggleSwitch","showSignatureHelpOnTyping","updateCurrentEditor","signatureHelpDisposables","editorSubscriptions","signatureHelpRegistry","addProvider","watchedEditors","has","editorView","hasFocus","focusListener","blurListener","unmountDataTip","Disposable","delete","getElement","keyCode","getBuffer","onDidChangeText","changes","change","cursorPosition","getSelectedBufferRange","newText","newRange","containsPoint","max","triggerCharacters","signatureHelp","getSignatureHelp","signatures","activeSignature","signature","paramIndex","activeParameter","parameter","parameters","parameterDocumentation","documentation","label","signatureDocumentation","signatureHelpView","mountSignatureHelp","view","disposables","overlayMarker","markBufferRange","Range","invalidate","makeOverlaySelectable","marker","decorateMarker","class","overlay","parentElement","hight","getBoundingClientRect","height","lineHight","getLineHeightInPixels","getFirstVisibleScreenRow","transform","autoCompleteList","querySelector","clientWidth","visibility","signatureHelpManager","install","initialize","default"],"mappings":"ytBAAA,kBAGAA,qBAAA,MAGEC,cACEC,KAAKC,UAAY,GAGnBF,YAAYG,GACV,MAAMC,EAAQH,KAAKC,UAAUG,WAAWC,GAAMH,EAASI,SAAWD,EAAEC,WAMpE,OALe,IAAXH,EACFH,KAAKC,UAAUM,KAAKL,GAEpBF,KAAKC,UAAUO,OAAOL,EAAO,EAAGD,GAE3B,IAAIO,cAAW,KACpBT,KAAKU,eAAeR,MAIxBH,eAAeG,GACb,MAAMC,EAAQH,KAAKC,UAAUU,QAAQT,IACtB,IAAXC,GACFH,KAAKC,UAAUO,OAAOL,EAAO,GAKjCJ,qBAAqBa,GACnB,MAAMC,EAAUD,EAAOE,aAAaC,UACpC,OAAOf,KAAKgB,aAAaH,GAI3Bd,yBAAyBa,GACvB,MAAMC,EAAUD,EAAOE,aAAaC,UACpC,OAAOf,KAAKiB,iBAAiBJ,GAG/Bd,aAAac,GACX,IAAK,MAAMX,KAAYF,KAAKiB,iBAAiBJ,GAC3C,OAAOX,EAET,OAAO,KAMTH,kBAAkBc,GAChB,IAAK,MAAMX,KAAYF,KAAKC,UACI,MAA1BC,EAASgB,gBAAsE,IAA7ChB,EAASgB,cAAcP,QAAQE,WAC7DX,uBCrDZiB,EAKEC,OALFD,eACAE,EAIED,OAJFC,eACAC,EAGEF,OAHFE,SACAC,EAEEH,OAFFG,eACAC,EACEJ,OADFI,yBAGIC,EAAyBL,OAAzBK,OAAQC,EAAiBN,OAAjBM,KAAMC,EAAWP,OAAXO,SAC0B,oBAAZC,SAA2BA,QAAvDC,IAAAA,MAAOC,IAAAA,UAERD,MACK,SAAUE,EAAKC,EAAWC,UACzBF,EAAIF,MAAMG,EAAWC,KAI3BR,MACM,SAAUS,UACVA,IAINR,MACI,SAAUQ,UACRA,IAINJ,MACS,SAAUK,EAAMF,4CACfE,uIAAQF,QAIvB,IAoB4BG,EApBtBC,EAAeC,EAAQC,MAAMC,UAAUC,SAEvCC,EAAWJ,EAAQC,MAAMC,UAAUG,KACnCC,EAAYN,EAAQC,MAAMC,UAAUjC,MAGpCsC,EAAoBP,EAAQQ,OAAON,UAAUO,aAC7CC,EAAcV,EAAQQ,OAAON,UAAUS,OACvCC,EAAgBZ,EAAQQ,OAAON,UAAUW,SACzCC,EAAgBd,EAAQQ,OAAON,UAAU7B,SACzC0C,EAAaf,EAAQQ,OAAON,UAAUc,MAEtCC,EAAajB,EAAQkB,OAAOhB,UAAUiB,MAEtCC,GAMsBtB,EANQuB,UAO3B,sCAAI1B,gDAASH,EAAUM,EAAMH,KAL/B,SAASK,EAAQF,UACf,SAACwB,8BAAY3B,0DAASJ,EAAMO,EAAMwB,EAAS3B,IAQ7C,SAAS4B,EAASC,EAAKC,GACxB1C,KAIayC,EAAK,cAGlBE,EAAID,EAAME,OACPD,KAAK,KACNE,EAAUH,EAAMC,MACG,iBAAZE,EAAsB,KACzBC,EAAYtB,EAAkBqB,GAChCC,IAAcD,IAEX5C,EAASyC,OACNC,GAAKG,KAGHA,KAIVD,IAAW,SAGVJ,EAIF,SAASM,EAAMC,OACdC,EAAY3C,EAAO,MAErB4C,aACCA,KAAYF,EACXxC,EAAMV,EAAgBkD,EAAQ,CAACE,QACvBA,GAAYF,EAAOE,WAI1BD,EAOT,SAASE,EAAaH,EAAQI,QACV,OAAXJ,GAAiB,KAChBK,EAAOlD,EAAyB6C,EAAQI,MAC1CC,EAAM,IACJA,EAAKC,WACArC,EAAQoC,EAAKC,QAGI,mBAAfD,EAAKE,aACPtC,EAAQoC,EAAKE,SAIfrD,EAAe8C,mBAGHH,kBACbW,KAAK,qBAAsBX,GAC5B,MC3HJ,IAAMY,EAAOrD,EAAO,CACzB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAIWsD,EAAMtD,EAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAGWuD,EAAavD,EAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAOWwD,EAAgBxD,EAAO,CAClC,UACA,gBACA,SACA,UACA,eACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAGWyD,EAASzD,EAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAKW0D,EAAmB1D,EAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAGW2D,EAAO3D,EAAO,CAAC,UCpRfqD,EAAOrD,EAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAGWsD,EAAMtD,EAAO,CACxB,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OAC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"} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../node_modules/atom-ide-base/src-commons-atom/ProviderRegistry.ts","../node_modules/dompurify/src/utils.js","../node_modules/dompurify/src/tags.js","../node_modules/dompurify/src/attrs.js","../node_modules/dompurify/src/regexp.js","../node_modules/dompurify/src/purify.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/defaults.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/helpers.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Tokenizer.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/rules.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Lexer.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Renderer.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/TextRenderer.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Slugger.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/Parser.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/marked@1.2.9/node_modules/marked/src/marked.js","../node_modules/atom-ide-markdown-service/node_modules/.pnpm/dompurify@2.2.6/node_modules/dompurify/src/utils.js","../node_modules/atom-ide-markdown-service/src/utils/event-loop-yielder.ts","../node_modules/atom-ide-markdown-service/src/renderer.ts","../node_modules/atom-ide-markdown-service/src/highlighter.ts","../node_modules/atom-ide-base/src-commons-ui/MarkdownRenderer.ts","../node_modules/atom-ide-base/src-commons-ui/float-pane/MarkdownView.tsx","../node_modules/atom-ide-base/src-commons-ui/float-pane/SnippetView.tsx","../node_modules/atom-ide-base/src-commons-ui/float-pane/ReactView.tsx","../node_modules/atom-ide-base/src-commons-ui/float-pane/ViewContainer.tsx","../node_modules/atom-ide-base/src-commons-ui/float-pane/selectable-overlay.ts","../src/signature-help-manager.ts","../src/main.ts"],"sourcesContent":["import { Disposable, TextEditor } from \"atom\"\nimport { Provider as ProviderTypes, BusySignalProvider, FindReferencesProvider } from \"../types-packages/main.d\"\n\nexport class ProviderRegistry> {\n private providers: Array\n\n constructor() {\n this.providers = []\n }\n\n addProvider(provider: Provider): Disposable {\n const index = this.providers.findIndex((p) => provider.priority > p.priority)\n if (index === -1) {\n this.providers.push(provider)\n } else {\n this.providers.splice(index, 0, provider)\n }\n return new Disposable(() => {\n this.removeProvider(provider)\n })\n }\n\n removeProvider(provider: Provider): void {\n const index = this.providers.indexOf(provider)\n if (index !== -1) {\n this.providers.splice(index, 1)\n }\n }\n\n // TODO deprecate since there can be N providers.\n getProviderForEditor(editor: TextEditor): Provider | null {\n const grammar = editor.getGrammar().scopeName\n return this.findProvider(grammar)\n }\n\n // TODO create an ordering or priority aware util to prefer instead.\n getAllProvidersForEditor(editor: TextEditor): Iterable {\n const grammar = editor.getGrammar().scopeName\n return this.findAllProviders(grammar)\n }\n\n findProvider(grammar: string): Provider | null {\n for (const provider of this.findAllProviders(grammar)) {\n return provider\n }\n return null\n }\n\n /**\n * Iterates over all providers matching the grammar, in priority order.\n */\n *findAllProviders(grammar: string): Iterable {\n for (const provider of this.providers) {\n if (provider.grammarScopes == null || provider.grammarScopes.indexOf(grammar) !== -1) {\n yield provider\n }\n }\n }\n}\n","const {\n hasOwnProperty,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n let property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n hasOwnProperty,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'feimage',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (\n document.currentScript &&\n document.currentScript.hasAttribute(ATTR_NAME)\n ) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n Text,\n Comment,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n const trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n originalDocument\n );\n const emptyHTML =\n trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML('')\n : '';\n\n const { implementation, createNodeIterator, createDocumentFragment } =\n document;\n const { importNode } = originalDocument;\n\n let documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof getParentNode === 'function' &&\n implementation &&\n typeof implementation.createHTMLDocument !== 'undefined' &&\n documentMode !== 9;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify.\n *\n * This defaults to `true` starting DOMPurify 2.2.0. Note that setting it to `false`\n * might cause XSS from attacks hidden in closed shadowroots in case the browser\n * supports Declarative Shadow: DOM https://web.dev/declarative-shadow-dom/\n */\n let RETURN_DOM_IMPORT = true;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n let SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n const FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR)\n : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR)\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS)\n : DEFAULT_DATA_URI_TAGS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT !== false; // Default true\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erronously deleted from\n // HTML namespace.\n const commonSvgAndHTMLElements = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG or MathML). Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function (node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function (name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node,\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty) {\n /* Create a HTML document */\n let doc;\n let leadingWhitespace;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, 'text/html');\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n const _createIterator = function (root) {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT,\n null,\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function (elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (\n typeof elm.nodeName !== 'string' ||\n typeof elm.textContent !== 'string' ||\n typeof elm.removeChild !== 'function' ||\n !(elm.attributes instanceof NamedNodeMap) ||\n typeof elm.removeAttribute !== 'function' ||\n typeof elm.setAttribute !== 'function' ||\n typeof elm.namespaceURI !== 'string' ||\n typeof elm.insertBefore !== 'function'\n ) {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function (object) {\n return typeof Node === 'object'\n ? object instanceof Node\n : object &&\n typeof object === 'object' &&\n typeof object.nodeType === 'number' &&\n typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function (entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode) {\n let content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = stringToLowerCase(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n !_isNode(currentNode.firstElementChild) &&\n (!_isNode(currentNode.content) ||\n !_isNode(currentNode.content.firstElementChild)) &&\n regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(\n cloneNode(childNodes[i], true),\n getNextSibling(currentNode)\n );\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if (\n (tagName === 'noscript' || tagName === 'noembed') &&\n regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR, ' ');\n content = stringReplace(content, ERB_EXPR, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR, lcName)) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n // eslint-disable-next-line no-negated-condition\n } else if (!value) {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n } else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode) {\n let attr;\n let value;\n let lcName;\n let l;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n const { name, namespaceURI } = attr;\n value = stringTrim(attr.value);\n lcName = stringToLowerCase(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR, ' ');\n value = stringReplace(value, ERB_EXPR, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment) {\n let shadowNode;\n const shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n let body;\n let importedNode;\n let currentNode;\n let oldNode;\n let returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw typeErrorCreate('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (\n typeof window.toStaticHTML === 'object' ||\n typeof window.toStaticHTML === 'function'\n ) {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* No special handling necessary for in-place sanitization */\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = stringToLowerCase(tag);\n const lcName = stringToLowerCase(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n","function getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n","/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nmodule.exports = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n","const { defaults } = require('./defaults.js');\nconst {\n rtrim,\n splitCells,\n escape,\n findClosingBracket\n} = require('./helpers.js');\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nmodule.exports = class Tokenizer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src, tokens) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n return {\n raw: cap[0],\n text: cap[0].trimRight()\n };\n }\n\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length > bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list\n itemMatch.splice(i, 2, itemMatch[i] + '\\n' + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else {\n if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n');\n list.raw = list.raw.substring(0, list.raw.length - addBack.length);\n i = l - 1;\n }\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src, tokens) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n return {\n raw: cap[0],\n text: cap[0]\n };\n }\n\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n strong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.strong.start.exec(src);\n\n if (match && (!match[1] || (match[1] && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))))) {\n maskedSrc = maskedSrc.slice(-1 * src.length);\n const endReg = match[0] === '**' ? this.rules.inline.strong.endAst : this.rules.inline.strong.endUnd;\n\n endReg.lastIndex = 0;\n\n let cap;\n while ((match = endReg.exec(maskedSrc)) != null) {\n cap = this.rules.inline.strong.middle.exec(maskedSrc.slice(0, match.index + 3));\n if (cap) {\n return {\n type: 'strong',\n raw: src.slice(0, cap[0].length),\n text: src.slice(2, cap[0].length - 2)\n };\n }\n }\n }\n }\n\n em(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.em.start.exec(src);\n\n if (match && (!match[1] || (match[1] && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))))) {\n maskedSrc = maskedSrc.slice(-1 * src.length);\n const endReg = match[0] === '*' ? this.rules.inline.em.endAst : this.rules.inline.em.endUnd;\n\n endReg.lastIndex = 0;\n\n let cap;\n while ((match = endReg.exec(maskedSrc)) != null) {\n cap = this.rules.inline.em.middle.exec(maskedSrc.slice(0, match.index + 2));\n if (cap) {\n return {\n type: 'em',\n raw: src.slice(0, cap[0].length),\n text: src.slice(1, cap[0].length - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n","const {\n noopTest,\n edit,\n merge\n} = require('./helpers.js');\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest,\n table: noopTest,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit(/^( *)(bull)/)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /|$)/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge({}, block.normal, {\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n strong: {\n start: /^(?:(\\*\\*(?=[*punctuation]))|\\*\\*)(?![\\s])|__/, // (1) returns if starts w/ punctuation\n middle: /^\\*\\*(?:(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)|\\*(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)*?\\*)+?\\*\\*$|^__(?![\\s])((?:(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)*?_)+?)__$/,\n endAst: /[^punctuation\\s]\\*\\*(?!\\*)|[punctuation]\\*\\*(?!\\*)(?:(?=[punctuation_\\s]|$))/, // last char can't be punct, or final * must also be followed by punct (or endline)\n endUnd: /[^\\s]__(?!_)(?:(?=[punctuation*\\s])|$)/ // last char can't be a space, and final _ must preceed punct or \\s (or endline)\n },\n em: {\n start: /^(?:(\\*(?=[punctuation]))|\\*)(?![*\\s])|_/, // (1) returns if starts w/ punctuation\n middle: /^\\*(?:(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)|\\*(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)*?\\*)+?\\*$|^_(?![_\\s])(?:(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)*?_)+?_$/,\n endAst: /[^punctuation\\s]\\*(?!\\*)|[punctuation]\\*(?!\\*)(?:(?=[punctuation_\\s]|$))/, // last char can't be punct, or final * must also be followed by punct (or endline)\n endUnd: /[^\\s]_(?!_)(?:(?=[punctuation*\\s])|$)/ // last char can't be a space, and final _ must preceed punct or \\s (or endline)\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, \ninline._blockSkip = '\\\\[[^\\\\]]*?\\\\]\\\\([^\\\\)]*?\\\\)|`[^`]*?`|<[^>]*?>';\ninline._overlapSkip = '__[^_]*?__|\\\\*\\\\*\\\\[^\\\\*\\\\]*?\\\\*\\\\*';\n\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.em.start = edit(inline.em.start)\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.em.middle = edit(inline.em.middle)\n .replace(/punctuation/g, inline._punctuation)\n .replace(/overlapSkip/g, inline._overlapSkip)\n .getRegex();\n\ninline.em.endAst = edit(inline.em.endAst, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.em.endUnd = edit(inline.em.endUnd, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.strong.start = edit(inline.strong.start)\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.strong.middle = edit(inline.strong.middle)\n .replace(/punctuation/g, inline._punctuation)\n .replace(/overlapSkip/g, inline._overlapSkip)\n .getRegex();\n\ninline.strong.endAst = edit(inline.strong.endAst, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.strong.endUnd = edit(inline.strong.endUnd, 'g')\n .replace(/punctuation/g, inline._punctuation)\n .getRegex();\n\ninline.blockSkip = edit(inline._blockSkip, 'g')\n .getRegex();\n\ninline.overlapSkip = edit(inline._overlapSkip, 'g')\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\ 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nmodule.exports = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src, tokens)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n } else {\n lastToken = tokens[tokens.length - 1];\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src, tokens)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n } else {\n lastToken = tokens[tokens.length - 1];\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n default: {\n // do nothing\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // strong\n if (token = this.tokenizer.strong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // em\n if (token = this.tokenizer.em(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n prevChar = token.raw.slice(-1);\n keepPrevChar = true;\n tokens.push(token);\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n","const { defaults } = require('./defaults.js');\nconst {\n cleanUrl,\n escape\n} = require('./helpers.js');\n\n/**\n * Renderer\n */\nmodule.exports = class Renderer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '
    '\n        + (escaped ? code : escape(code, true))\n        + '
    \\n';\n }\n\n return '
    '\n      + (escaped ? code : escape(code, true))\n      + '
    \\n';\n }\n\n blockquote(quote) {\n return '
    \\n' + quote + '
    \\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return ''\n + text\n + '\\n';\n }\n // ignore IDs\n return '' + text + '\\n';\n }\n\n hr() {\n return this.options.xhtml ? '
    \\n' : '
    \\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n\n listitem(text) {\n return '
  • ' + text + '
  • \\n';\n }\n\n checkbox(checked) {\n return ' ';\n }\n\n paragraph(text) {\n return '

    ' + text + '

    \\n';\n }\n\n table(header, body) {\n if (body) body = '' + body + '';\n\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n\n tablerow(content) {\n return '\\n' + content + '\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '\\n';\n }\n\n // span level renderer\n strong(text) {\n return '' + text + '';\n }\n\n em(text) {\n return '' + text + '';\n }\n\n codespan(text) {\n return '' + text + '';\n }\n\n br() {\n return this.options.xhtml ? '
    ' : '
    ';\n }\n\n del(text) {\n return '' + text + '';\n }\n\n link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '
    ';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '\"'' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n","/**\n * TextRenderer\n * returns only the textual part of the token\n */\nmodule.exports = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n","/**\n * Slugger generates header id\n */\nmodule.exports = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n","const Renderer = require('./Renderer.js');\nconst TextRenderer = require('./TextRenderer.js');\nconst Slugger = require('./Slugger.js');\nconst { defaults } = require('./defaults.js');\nconst {\n unescape\n} = require('./helpers.js');\n\n/**\n * Parsing & Compiling\n */\nmodule.exports = class Parser {\n constructor(options) {\n this.options = options || defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n","const Lexer = require('./Lexer.js');\nconst Parser = require('./Parser.js');\nconst Tokenizer = require('./Tokenizer.js');\nconst Renderer = require('./Renderer.js');\nconst TextRenderer = require('./TextRenderer.js');\nconst Slugger = require('./Slugger.js');\nconst {\n merge,\n checkSanitizeDeprecation,\n escape\n} = require('./helpers.js');\nconst {\n getDefaults,\n changeDefaults,\n defaults\n} = require('./defaults.js');\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n try {\n const tokens = Lexer.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.Tokenizer = Tokenizer;\n\nmarked.Slugger = Slugger;\n\nmarked.parse = marked;\n\nmodule.exports = marked;\n","const {\n hasOwnProperty,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n let property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n return null;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n hasOwnProperty,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n","/**\r\n * A helper to allow the JavaScript event loop continue for a given interval between each\r\n * iteration of a CPU intensive loop. If the time spent in the loop reaches the given\r\n * maxTime, the operation is killed.\r\n *\r\n * @returns An async function to call inside your heavy loop. It will return `false` if\r\n * the operation has exceeded the given max time (`true` otherwise).\r\n */\r\nexport function eventLoopYielder(delayMs: number, maxTimeMs: number) {\r\n const started = performance.now()\r\n let lastYield = started\r\n return async function (): Promise {\r\n const now = performance.now()\r\n if (now - lastYield > delayMs) {\r\n await new Promise(setImmediate)\r\n lastYield = now\r\n }\r\n return now - started <= maxTimeMs\r\n }\r\n}\r\n\r\n/** Throws maximum time reached error */\r\nexport function maxTimeError(name: string, timeS: number) {\r\n const err = new Error(\"Max time reached\")\r\n atom.notifications.addError(`${name} took more than ${timeS} seconds to complete`, {\r\n dismissable: true,\r\n description: `${name} took too long to complete and was terminated.`,\r\n stack: err.stack,\r\n })\r\n return err\r\n}\r\n","import marked from \"marked\"\r\n\r\n/**\r\n * safe DOM markup operations\r\n * a reference to the DOMpurify function to make safe HTML strings\r\n * @type {DOMPurify}\r\n */\r\nimport DOMPurify from \"dompurify\"\r\nimport { highlightTreeSitter } from \"./highlighter\"\r\n\r\nmarked.setOptions({\r\n breaks: true,\r\n})\r\n\r\nexport type DOMPurifyConfig = Omit\r\n\r\n/**\r\n * renders markdown to safe HTML asynchronously\r\n * @param markdownText the markdown text to render\r\n * @param scopeName scope name used for highlighting the code\r\n * @param purifyConfig (optional) configuration object for DOMPurify\r\n * @return the html string containing the result\r\n */\r\nexport async function render(\r\n markdownText: string,\r\n scopeName: string = \"text.plain\",\r\n domPurifyConfig?: DOMPurifyConfig\r\n): Promise {\r\n return new Promise((resolve, reject) => {\r\n marked(\r\n markdownText,\r\n {\r\n highlight: function (code, _lang, callback) {\r\n highlightTreeSitter(code, scopeName)\r\n .then((codeResult) => {\r\n callback!(null, codeResult)\r\n })\r\n .catch((e) => {\r\n callback!(e)\r\n })\r\n },\r\n },\r\n (e, html) => {\r\n if (e) {\r\n reject(e)\r\n }\r\n // sanitization\r\n html = domPurifyConfig ? DOMPurify.sanitize(html, domPurifyConfig) : DOMPurify.sanitize(html)\r\n\r\n return resolve(html)\r\n }\r\n )\r\n })\r\n}\r\n","import { TextBuffer, LanguageMode } from \"atom\"\r\nimport { eventLoopYielder, maxTimeError } from \"./utils/event-loop-yielder\"\r\n\r\ndeclare module \"atom\" {\r\n interface GrammarRegistry {\r\n grammarForId(id: string): Grammar\r\n languageModeForGrammarAndBuffer(g: Grammar, b: TextBuffer): LanguageMode\r\n }\r\n interface LanguageMode {\r\n readonly fullyTokenized?: boolean\r\n readonly tree?: boolean\r\n onDidTokenize(cb: () => void): Disposable\r\n buildHighlightIterator(): HighlightIterator\r\n classNameForScopeId(id: ScopeId): string\r\n startTokenizing?(): void\r\n }\r\n interface HighlightIterator {\r\n seek(pos: { row: number; column: number }): void\r\n getPosition(): { row: number; column: number }\r\n getOpenScopeIds?(): ScopeId[]\r\n getCloseScopeIds?(): ScopeId[]\r\n moveToSuccessor(): void\r\n }\r\n interface ScopeId {}\r\n}\r\n\r\nexport async function highlightTreeSitter(sourceCode: string, scopeName: string) {\r\n const yielder = eventLoopYielder(100, 5000)\r\n const buf = new TextBuffer()\r\n try {\r\n const grammar = atom.grammars.grammarForId(scopeName)\r\n const lm = atom.grammars.languageModeForGrammarAndBuffer(grammar, buf)\r\n buf.setLanguageMode(lm)\r\n buf.setText(sourceCode)\r\n const end = buf.getEndPosition()\r\n if (lm.startTokenizing) lm.startTokenizing()\r\n await tokenized(lm)\r\n const iter = lm.buildHighlightIterator()\r\n if (iter.getOpenScopeIds && iter.getCloseScopeIds) {\r\n let pos = { row: 0, column: 0 }\r\n iter.seek(pos)\r\n const res = []\r\n while (pos.row < end.row || (pos.row === end.row && pos.column <= end.column)) {\r\n res.push(\r\n ...iter.getCloseScopeIds().map(() => \"\"),\r\n ...iter.getOpenScopeIds().map((x) => ``)\r\n )\r\n iter.moveToSuccessor()\r\n const nextPos = iter.getPosition()\r\n res.push(escapeHTML(buf.getTextInRange([pos, nextPos])))\r\n\r\n if (!(await yielder())) {\r\n console.error(maxTimeError(\"Atom-IDE-Markdown-Service: Highlighter\", 5))\r\n break\r\n }\r\n pos = nextPos\r\n }\r\n return res.join(\"\")\r\n } else {\r\n return sourceCode\r\n }\r\n } finally {\r\n buf.destroy()\r\n }\r\n}\r\n\r\nasync function tokenized(lm: LanguageMode) {\r\n return new Promise((resolve) => {\r\n if (lm.fullyTokenized || lm.tree) {\r\n resolve(undefined)\r\n } else if (lm.onDidTokenize) {\r\n const disp = lm.onDidTokenize(() => {\r\n disp.dispose()\r\n resolve(undefined)\r\n })\r\n } else {\r\n resolve(undefined) // null language mode\r\n }\r\n })\r\n}\r\n\r\nfunction escapeHTML(str: string) {\r\n return str\r\n .replace(/&/g, \"&\")\r\n .replace(//g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\")\r\n}\r\n","// Use built-in markdown renderer when the markdown service is not available\n\nimport { MarkdownService } from \"../types-packages/main\"\n\nlet render: MarkdownService[\"render\"] | undefined = undefined\n\nexport async function getMarkdownRenderer() {\n if (!render) {\n //@ts-ignore\n render = ((await import(\"atom-ide-markdown-service/modules/renderer\")) as MarkdownService).render\n }\n return render\n}\n","import * as React from \"react\"\nimport DOMPurify from \"dompurify\"\nimport { MarkdownService } from \"../../types-packages/main\"\nimport { getMarkdownRenderer } from \"../MarkdownRenderer\"\n\nexport interface Props {\n markdown: Array | string\n grammarName?: string\n renderer?: MarkdownService\n containerClassName: string\n contentClassName: string\n // already rendered markdown\n html?: Array | string\n}\n\ninterface State {\n markdown: string\n}\n\n/**\n * A react component that can hosts markdown texts\n */\nexport class MarkdownView extends React.Component {\n state: State = { markdown: \"\" }\n\n render() {\n return (\n
    this.onMouseWheel(e)}>\n \n
    \n )\n }\n\n /**\n * handles the mouse wheel event to enable scrolling over long text\n * @param evt the mouse wheel event being triggered\n */\n onMouseWheel(evt: React.WheelEvent) {\n evt.stopPropagation()\n }\n\n /**\n Calls `getDocumentationHtml` to convert Markdown to markdown\n */\n async componentDidMount() {\n this.setState({\n markdown: (await renderMarkdown(this.props.markdown, this.props.grammarName, this.props.renderer)) ?? \"\",\n })\n }\n}\n\n/**\n * convert the markdown documentation to markdown\n * @param markdownTexts the documentation text in markdown format to be converted\n * @param grammarName the default grammar used for embedded code samples\n * @param renderer markdown service to be used for rendering\n * @return a promise object to track the asynchronous operation\n */\nexport async function renderMarkdown(\n markdownTexts: Array | string,\n grammarName: string = atom.workspace.getActiveTextEditor()?.getGrammar().scopeName?.toLowerCase() || \"\",\n renderer?: MarkdownService\n): Promise {\n if (markdownTexts === undefined) {\n return null\n }\n\n let markdownText = \"\"\n // if Array\n if (Array.isArray(markdownTexts)) {\n if (markdownTexts.length === 0) {\n return null\n }\n markdownText = (markdownTexts as Array).join(\"\\r\\n\")\n }\n // if string\n else {\n //@ts-ignore\n markdownText = markdownTexts\n }\n if (renderer) {\n return DOMPurify.sanitize(await renderer.render(markdownText, grammarName))\n } else {\n // Use built-in markdown renderer (it already does sanitization)\n const render = await getMarkdownRenderer()\n return await render(markdownText, grammarName)\n }\n}\n","import * as React from \"react\"\nimport DOMPurify from \"dompurify\"\nimport { MarkdownService } from \"../../types-packages/main\"\nimport { getMarkdownRenderer } from \"../MarkdownRenderer\"\n\nexport interface Props {\n snippet: Array | string\n grammarName?: string\n renderer?: MarkdownService\n containerClassName: string\n contentClassName: string\n}\n\ninterface State {\n snippet: string\n}\n\n/**\n * A React component that hosts a code snippet with syntax highlighting\n */\nexport class SnippetView extends React.Component {\n state = { snippet: \"\" }\n\n render() {\n return (\n
    this.onMouseWheel(e)}>\n \n
    \n )\n }\n\n /**\n * handles the mouse wheel event to enable scrolling over long text\n * @param evt the mouse wheel event being triggered\n */\n onMouseWheel(evt: React.WheelEvent) {\n evt.stopPropagation()\n }\n\n async componentDidMount() {\n this.setState({\n snippet: (await getSnippetHtml(this.props.snippet, this.props.grammarName, this.props.renderer)) ?? \"\",\n })\n }\n}\n\nconst regexPremeable = /^\\s*<(\\?|!)([a-zA-Z]+)?\\s*/i\nconst regexLSPPrefix = /^\\((method|property|parameter|alias)\\)\\W/\n\n/**\n * converts a given code snippet into syntax formatted HTML\n * @param snippets the code snippet to be converted\n * @param grammarName the name of the grammar to be used for syntax highlighting\n * @param renderer markdown service to be used for rendering\n * @return a promise object to track the asynchronous operation\n */\nexport async function getSnippetHtml(\n snippets: Array | string,\n grammarName: string = atom.workspace.getActiveTextEditor()?.getGrammar().scopeName?.toLowerCase() || \"\",\n renderer?: MarkdownService\n): Promise {\n if (snippets === undefined) {\n return null\n }\n\n // if string\n if (typeof snippets === \"string\") {\n snippets = [snippets]\n }\n\n // if Array\n if (Array.isArray(snippets)) {\n if (snippets.length === 0) {\n return null\n }\n const markdown = snippets\n .map((snippet) => {\n snippet = snippet\n .replace(regexPremeable, \"\") // remove any preamble from the line\n .replace(regexLSPPrefix, \"\") // remove LSP prefix\n return `\\`\\`\\`\\n${snippet}\\n\\`\\`\\``\n })\n .join(\"\\n\")\n\n if (renderer) {\n return DOMPurify.sanitize(await renderer.render(markdown, grammarName))\n } else {\n // Use built-in markdown renderer (it already does sanitization)\n const render = await getMarkdownRenderer()\n return await render(markdown, grammarName)\n }\n } else {\n return null\n }\n}\n","import * as React from \"react\"\n\nexport interface Props {\n component: () => React.ReactElement\n containerClassName: string\n contentClassName: string\n}\n\ninterface State {}\n\n/**\n * A react component that can host an externally given React component\n */\nexport class ReactView extends React.Component {\n render() {\n let children = null\n if (this.props.component) {\n children =
    {this.props.component()}
    \n }\n\n return
    {children}
    \n }\n}\n","import { MarkdownView, Props as MarkdownViewProps } from \"./MarkdownView\"\nimport { SnippetView, Props as SnippetViewProps } from \"./SnippetView\"\nimport { ReactView, Props as ReactViewProps } from \"./ReactView\"\nimport type { ReactElement } from \"react\"\nimport * as React from \"react\"\nimport ReactDOM from \"react-dom\"\n\nexport const DATATIP_ACTIONS = Object.freeze({\n PIN: \"PIN\",\n CLOSE: \"CLOSE\",\n})\n\nconst IconsForAction = {\n [DATATIP_ACTIONS.PIN]: \"pin\",\n [DATATIP_ACTIONS.CLOSE]: \"x\",\n}\n\ninterface Props {\n component?: ReactViewProps\n markdown?: MarkdownViewProps\n snippet?: SnippetViewProps\n action?: string\n actionTitle?: string\n className?: string\n onActionClick?: Function\n onMouseDown?: Function\n onClickCapture?: Function\n}\n\ninterface State {}\n\n/**\n * an etch component for a decoration pane\n */\nexport class ViewContainer extends React.Component {\n actionButton?: JSX.Element\n children: Array = []\n rootElement: HTMLElement = document.createElement(\"div\")\n\n /**\n * renders the data tip view component\n * @return the data tip view element\n */\n render(): ReactElement {\n this.actionButton = this.ActionClick(this.props.action, this.props.actionTitle)\n this.updateChildren()\n return (\n \n {this.children}\n {this.actionButton}\n \n )\n }\n\n get element() {\n return ReactDOM.render(this.render(), this.rootElement)\n }\n\n /**\n * internal helper function to figure out the structure of the data tip view\n * to be rendered\n */\n updateChildren() {\n if (this.props.component) {\n this.children.push()\n }\n if (this.props.snippet) {\n this.children.push()\n }\n if (this.props.markdown) {\n this.children.push()\n }\n }\n\n ActionClick(action: string | undefined, actionTitle: string | undefined) {\n let actionButton = undefined\n if (action !== undefined && IconsForAction[action] != null) {\n const actionIcon = IconsForAction[action]\n actionButton = (\n {\n this.props.onActionClick?.(event)\n }}\n title={actionTitle}\n />\n )\n }\n return actionButton\n }\n\n async destroy() {\n return // this.componentWillUnmount()\n }\n}\n","import type { TextEditor, TextEditorComponent } from \"atom\"\n\n/** makes the text selectable and copyable\n *\n * Note: you can directly add `user-select: text` (and `pointer-events: all`) in CSS for better performance\n */\nexport function makeOverlaySelectable(editor: TextEditor, overlayElement: HTMLElement, focusFix = true) {\n // allow the browser to handle selecting\n overlayElement.setAttribute(\"tabindex\", \"-1\")\n\n // make it selectable\n if (!overlayElement.style.userSelect || overlayElement.style.userSelect === \"none\") {\n overlayElement.style.userSelect = \"text\"\n }\n\n if (focusFix) {\n // fix overlay focus issue\n overlayFocusFix(editor, overlayElement)\n }\n\n // add copy keybindings\n overlayElement.classList.add(\"native-key-bindings\")\n}\n\n/**\n * - focus on the datatip once the text is selected (cursor gets disabled temporarily)\n * - remove focus once mouse leaves\n */\nexport function overlayFocusFix(editor: TextEditor, element: HTMLElement) {\n const editorComponent = atom.views.getView(editor).getComponent()\n element.addEventListener(\"mousedown\", () => {\n blurEditor(editorComponent)\n element.addEventListener(\"mouseleave\", () => {\n focusEditor(editorComponent)\n })\n })\n}\n\nexport function focusEditor(editorComponent: TextEditorComponent) {\n // @ts-ignore\n editorComponent?.didFocus()\n}\n\nexport function blurEditor(editorComponent: TextEditorComponent) {\n // @ts-ignore\n editorComponent?.didBlurHiddenInput({\n relatedTarget: null,\n })\n}\n\n/*\n██████ ███████ ██████ ██████ ███████ ██████ █████ ████████ ███████ ██████\n██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n██ ██ █████ ██████ ██████ █████ ██ ███████ ██ █████ ██ ██\n██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n██████ ███████ ██ ██ ██ ███████ ██████ ██ ██ ██ ███████ ██████\n*/\n\n/** @deprecated use `makeOverlaySelectable` instead.\n *\n * Makes the overlay component copyable\n * - you should call `makeOverlaySelectable` before this\n * - If your element already has mouseenter and mouseleav listeners, directly use `copyListener`\n */\nexport function makeOverLayCopyable(element: HTMLElement) {\n element.addEventListener(\"mouseenter\", () => {\n element.addEventListener(\"keydown\", copyListener)\n })\n\n element.addEventListener(\"mouseleave\", () => {\n element.removeEventListener(\"keydown\", copyListener)\n })\n}\n\n/** @deprecated use `makeOverlaySelectable` instead.\n *\n * A manual copy listener\n * Usage. Add the listener to your mouse enter and mouseleave listeners\n ```ts\n element.addEventListener(\"mouseenter\", () => {element.addEventListener(\"keydown\", copyListener)}`\n element.addEventListener(\"mouseleave\", () => {element.removeEventListener(\"keydown\", copyListener)}`\n ```\n*/\nexport async function copyListener(event: KeyboardEvent) {\n event.preventDefault()\n if (event.ctrlKey && event.key === \"c\") {\n const text = document.getSelection()?.toString() ?? \"\"\n await navigator.clipboard.writeText(text)\n }\n} // TODO we should not need to manually listen for copy paste\n","import { CompositeDisposable, Disposable, Range, Point, TextEditor, TextEditorElement } from \"atom\"\nimport { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport { ViewContainer } from \"atom-ide-base/commons-ui/float-pane/ViewContainer\"\nimport { makeOverlaySelectable } from \"atom-ide-base/commons-ui/float-pane/selectable-overlay\"\nimport { SignatureHelpRegistry, SignatureHelpProvider } from \"atom-ide-base\"\n\nexport class SignatureHelpManager {\n /**\n * holds a reference to disposable items from this data tip manager\n */\n subscriptions = new CompositeDisposable()\n /**\n * holds a list of registered data tip providers\n */\n providerRegistry = new ProviderRegistry()\n /**\n * holds a weak reference to all watched Atom text editors\n */\n watchedEditors = new WeakSet()\n /**\n * holds a reference to the current watched Atom text editor\n */\n editor: TextEditor | null = null\n /**\n * holds a reference to the current watched Atom text editor viewbuffer\n */\n editorView: TextEditorElement | null = null\n /**\n * holds a reference to all disposable items for the current watched Atom text editor\n */\n editorSubscriptions: CompositeDisposable = new CompositeDisposable()\n /**\n * holds a reference to all disposable items for the current signature help\n */\n signatureHelpDisposables: CompositeDisposable = new CompositeDisposable()\n /**\n * config flag denoting if the signature help should be shown during typing automatically\n */\n showSignatureHelpOnTyping = false\n\n /**\n * initialization routine\n */\n initialize() {\n this.subscriptions.add(\n atom.workspace.observeTextEditors((editor) => {\n const disposable = this.watchEditor(editor)\n editor.onDidDestroy(() => disposable?.dispose())\n }),\n atom.commands.add(\"atom-text-editor\", {\n \"signature-help:show\": (evt) => {\n const editor = evt.currentTarget.getModel()\n if (atom.workspace.isTextEditor(editor)) {\n const provider = this.providerRegistry.getProviderForEditor(editor)\n const position = editor.getLastCursor().getBufferPosition()\n if (provider) {\n this.showSignatureHelp(provider, editor, position)\n }\n }\n },\n }),\n atom.config.observe(\"atom-ide-signature-help.showSignatureHelpOnTyping\", (toggleSwitch) => {\n this.showSignatureHelpOnTyping = toggleSwitch\n // forces update of internal editor tracking\n const editor = this.editor\n this.editor = null\n this.updateCurrentEditor(editor)\n })\n )\n }\n\n /**\n * dispose function to clean up any disposable references used\n */\n dispose() {\n this.signatureHelpDisposables.dispose()\n\n this.editorSubscriptions.dispose()\n\n this.subscriptions.dispose()\n }\n\n /**\n * returns the provider registry as a consumable service\n */\n get signatureHelpRegistry(): SignatureHelpRegistry {\n return (provider) => {\n return this.providerRegistry.addProvider(provider)\n }\n }\n\n /**\n * checks and setups an Atom Text editor instance for tracking cursor/mouse movements\n * @param editor a valid Atom Text editor instance\n */\n watchEditor(editor: TextEditor) {\n if (this.watchedEditors.has(editor)) {\n return\n }\n let editorView = atom.views.getView(editor)\n if (editorView.hasFocus()) {\n this.updateCurrentEditor(editor)\n }\n let focusListener = () => this.updateCurrentEditor(editor)\n editorView.addEventListener(\"focus\", focusListener)\n let blurListener = () => this.unmountDataTip()\n editorView.addEventListener(\"blur\", blurListener)\n\n let disposable = new Disposable(() => {\n editorView.removeEventListener(\"focus\", focusListener)\n editorView.removeEventListener(\"blur\", blurListener)\n if (this.editor === editor) {\n this.updateCurrentEditor(null)\n }\n })\n\n this.watchedEditors.add(editor)\n this.subscriptions.add(disposable)\n\n return new Disposable(() => {\n disposable.dispose()\n this.subscriptions.remove(disposable)\n this.watchedEditors.delete(editor)\n })\n }\n\n /**\n * updates the internal references to a specific Atom Text editor instance in case\n * it has been decided to track this instance\n * @param editor the Atom Text editor instance to be tracked\n */\n updateCurrentEditor(editor: TextEditor | null) {\n if (editor === this.editor) {\n return\n }\n this.editorSubscriptions.dispose()\n\n // Stop tracking editor + buffer\n this.unmountDataTip()\n this.editor = null\n this.editorView = null\n\n if (!editor || !atom.workspace.isTextEditor(editor)) {\n return\n }\n\n this.editor = editor\n this.editorView = atom.views.getView(this.editor)\n\n this.editorSubscriptions = new CompositeDisposable()\n\n if (!this.showSignatureHelpOnTyping) {\n return\n }\n\n // @ts-ignore\n const editorElement: TextEditorElement = this.editor.getElement()\n editorElement.addEventListener(\"keydown\", (evt) => {\n if (evt.keyCode === 27) {\n this.unmountDataTip()\n }\n })\n\n this.editorSubscriptions.add(\n this.editor.getBuffer().onDidChangeText((evt) => {\n if (evt.changes.length != 1) {\n return\n }\n\n const change = evt.changes[0]\n // Use the start of the current selection as the cursor position.\n // (Autocomplete often inserts a placeholder and puts the cursor at the end.)\n const cursorPosition = editor.getSelectedBufferRange().start\n\n if (\n change.newText.length === 0 ||\n // Don't allow multi-line changes.\n change.newRange.start.row !== change.newRange.end.row ||\n // The change should cover the current cursor position.\n !change.newRange.containsPoint(cursorPosition)\n ) {\n return this.unmountDataTip()\n }\n // Use the character before the cursor as the 'trigger character'.\n const index = Math.max(0, cursorPosition.column - change.newRange.start.column - 1)\n\n const provider = this.providerRegistry.getProviderForEditor(editor)\n\n if (!provider) {\n return\n }\n\n if (provider.triggerCharacters?.has(change.newText[index])) {\n this.showSignatureHelp(provider, editor, cursorPosition)\n }\n })\n )\n }\n\n /**\n * @param provider\n * @param editor\n * @param position\n */\n async showSignatureHelp(provider: SignatureHelpProvider, editor: TextEditor, position: Point) {\n try {\n const signatureHelp = await provider.getSignatureHelp(editor, position)\n\n if (!signatureHelp || signatureHelp.signatures.length == 0) {\n this.unmountDataTip()\n } else {\n const index = signatureHelp.activeSignature || 0\n const signature = signatureHelp.signatures[index]\n const paramIndex = signatureHelp.activeParameter || 0\n const parameter = signature.parameters !== undefined ? signature.parameters[paramIndex] || null : null\n\n // clear last data tip\n this.unmountDataTip()\n\n let doc = \"\"\n if (parameter) {\n let parameterDocumentation = \"\"\n // TODO documentation can be null. Update the types!\n if (parameter.documentation === undefined || parameter.documentation === null) {\n // parameterDocumentation = \"\"\n } else if (typeof parameter.documentation === \"string\") {\n parameterDocumentation = parameter.documentation\n } else if (typeof (parameter.documentation as { value: string }).value === \"string\") {\n // TODO undocumented type?\n parameterDocumentation = (parameter.documentation as { value: string }).value\n }\n doc = `${parameter.label} ${parameterDocumentation}`\n } else if (signature.documentation) {\n let signatureDocumentation = \"\"\n if (signature.documentation === undefined || signature.documentation === null) {\n // signatureDocumentation = \"\"\n } else if (typeof signature.documentation === \"string\") {\n signatureDocumentation = signature.documentation\n } else if (typeof (signature.documentation as { value: string }).value === \"string\") {\n // TODO undocumented type?\n signatureDocumentation = (signature.documentation as { value: string }).value\n }\n doc = signatureDocumentation\n }\n\n const grammar = editor.getGrammar().scopeName.toLowerCase()\n const signatureHelpView = new ViewContainer({\n snippet: {\n snippet: signature.label,\n grammarName: grammar,\n containerClassName: \"signature-snippet-container\",\n contentClassName: \"signature-snippet\",\n },\n markdown: {\n markdown: doc,\n grammarName: grammar,\n containerClassName: \"signature-markdown-container\",\n contentClassName: \"signature-markdown\",\n },\n className: \"signature-element\",\n })\n this.signatureHelpDisposables = this.mountSignatureHelp(editor, position, signatureHelpView)\n }\n } catch (err) {\n console.error(err)\n }\n }\n\n /**\n * mounts displays a signature help view component at a specific position in a given Atom Text editor\n * @param editor the Atom Text editor instance to host the data tip view\n * @param position the position on which to show the signature help view\n * @param view the signature help component to display\n * @return a composite object to release references at a later stage\n */\n mountSignatureHelp(editor: TextEditor, position: Point, view: ViewContainer) {\n const element = view.element as HTMLElement\n\n let disposables = new CompositeDisposable()\n const overlayMarker = editor.markBufferRange(new Range(position, position), {\n invalidate: \"overlap\", // TODO It was never. Shouldn't be surround?\n })\n\n makeOverlaySelectable(editor, element)\n\n const marker = editor.decorateMarker(overlayMarker, {\n type: \"overlay\",\n class: \"signature-overlay\",\n position: \"head\", // follows the cursor\n item: element,\n })\n\n // TODO do this for some valid range\n // editor.onDidChangeCursorPosition(\n // () => marker.destroy() // destroy the marker if user clicks somewhere else\n // )\n\n // move box above the current editing line\n // HACK: patch the decoration's style so it is shown above the current line\n setTimeout(() => {\n const overlay = element.parentElement\n if (!overlay) {\n return\n }\n const hight = element.getBoundingClientRect().height\n const lineHight = editor.getLineHeightInPixels()\n //@ts-ignore internal type\n const availableHight = (position.row - editor.getFirstVisibleScreenRow()) * lineHight\n if (hight < availableHight + 80) {\n overlay.style.transform = `translateY(-${lineHight + hight}px)`\n } else {\n // move right so it does not overlap with auto-complete-list\n // @ts-ignore\n const autoCompleteList = (editor.getElement() as TextEditorElement).querySelector(\n \"autocomplete-suggestion-list\"\n )\n if (autoCompleteList) {\n overlay.style.transform = `translateX(${autoCompleteList.clientWidth}px)`\n } else {\n overlay.style.transform = \"translateX(300px)\"\n }\n }\n element.style.visibility = \"visible\"\n }, 100)\n\n disposables.add(\n new Disposable(() => overlayMarker.destroy()),\n new Disposable(() => view.destroy()),\n new Disposable(() => marker.destroy())\n )\n\n return disposables\n }\n\n /**\n * unmounts / hides the most recent data tip view component\n */\n unmountDataTip() {\n this.signatureHelpDisposables.dispose()\n }\n}\n","import { CompositeDisposable } from \"atom\"\nimport { SignatureHelpManager } from \"./signature-help-manager\"\nimport { SignatureHelpRegistry } from \"atom-ide-base\"\n\nlet subscriptions = new CompositeDisposable()\nlet signatureHelpManager: SignatureHelpManager\n\n/**\n * called by Atom when activating an extension\n */\nexport function activate() {\n // Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable\n signatureHelpManager = new SignatureHelpManager()\n subscriptions.add(signatureHelpManager)\n ;(require(\"atom-package-deps\") as typeof import(\"atom-package-deps\"))\n .install(\"atom-ide-signature-help\", true)\n .then(() => {\n signatureHelpManager.initialize()\n })\n}\n\n/**\n * called by Atom when deactivating an extension\n */\nexport function deactivate() {\n subscriptions.dispose()\n}\n\nexport function provideSignatureHelp(): SignatureHelpRegistry {\n return signatureHelpManager.signatureHelpRegistry\n}\n\nexport const config = {\n showSignatureHelpOnTyping: {\n title: \"Show signature automatically\",\n description:\n \"If set to true, the signature help is shown as soon as you start typing. Otherwise you will have to activate it via keypress.\",\n type: \"boolean\",\n default: true,\n },\n}\n"],"names":["ProviderRegistry_2","[object Object]","this","providers","provider","index","findIndex","p","priority","push","splice","atom_1","removeProvider","indexOf","editor","grammar","getGrammar","scopeName","findProvider","findAllProviders","grammarScopes","hasOwnProperty","Object","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","Reflect","apply","construct","fun","thisValue","args","x","Func","func","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","stringToLowerCase","String","toLowerCase","stringMatch","match","stringReplace","replace","stringIndexOf","stringTrim","trim","regExpTest","RegExp","test","typeErrorCreate","TypeError","thisArg","addToSet","set","array","l","length","element","lcElement","clone","object","newObject","property","lookupGetter","prop","desc","get","value","warn","html","svg","svgFilters","svgDisallowed","mathMl","mathMlDisallowed","text","xml","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","document","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","getAttribute","policyName","_","createDOMPurify","DOMPurify","root","version","VERSION","removed","nodeType","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","Text","Comment","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","RETURN_TRUSTED_TYPE","createHTML","implementation","createNodeIterator","createDocumentFragment","importNode","documentMode","hooks","createHTMLDocument","EXPRESSIONS","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","ATTRS","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_DOM_IMPORT","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","CONFIG","formElement","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","namespaceURI","Boolean","commonSvgAndHTMLElements","_forceRemove","node","parentNode","removeChild","outerHTML","remove","_removeAttribute","name","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","_createIterator","call","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isClobbered","elm","nodeName","textContent","attributes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","firstElementChild","i","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","hookEvent","attrName","attrValue","keepAttr","forceKeepAttr","undefined","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toString","_typeof","toStaticHTML","appendChild","firstChild","nodeIterator","serializedHTML","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","defaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","getDefaults","changeDefaults","newDefaults","module","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","unescapeTest","unescape","n","charAt","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","rtrim","relativeBase","str","c","invert","suffLen","currChar","substr","escape","encode","edit","regex","opt","source","obj","val","getRegex","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","target","key","arguments","splitCells","tableRow","count","cells","offset","escaped","curr","split","findClosingBracket","b","level","checkSanitizeDeprecation","console","repeatString","pattern","result","require","outputLink","cap","link","raw","title","type","constructor","options","space","src","rules","block","newline","code","tokens","lastToken","trimRight","codeBlockStyle","fences","matchIndentToCode","indentToCode","map","matchIndentInNode","indentInNode","slice","join","lang","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","bcurr","bnext","addBack","istask","ischecked","next","listItemStart","task","checked","pre","def","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","reflink","links","nolink","strong","maskedSrc","prevChar","punctuation","endReg","endAst","endUnd","lastIndex","middle","em","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","inlineText","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","_blockSkip","_overlapSkip","blockSkip","overlapSkip","_scheme","_email","_attribute","_href","_extended_email","out","charCodeAt","Math","random","Lexer","Tokenizer","lex","inlineTokens","blockTokens","top","token","errMsg","error","Error","j","k","l2","row","keepPrevChar","keys","includes","lastIndexOf","infostring","quote","slugger","slug","listitem","checkbox","tablerow","tablecell","flags","image","seen","serialize","getNextSafeSlug","originalSlug","isDryRun","occurenceAccumulator","dryrun","Parser","Renderer","textRenderer","TextRenderer","Slugger","parse","parseInline","l3","cell","itemBody","unshift","marked","callback","done","err","pending","setTimeout","message","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","lexer","_len2","_key2","maxTimeError","timeS","atom","notifications","addError","dismissable","description","stack","async","markdownText","domPurifyConfig","Promise","resolve","reject","_lang","sourceCode","yielder","delayMs","maxTimeMs","started","performance","now","lastYield","setImmediate","buf","TextBuffer","grammars","grammarForId","lm","languageModeForGrammarAndBuffer","setLanguageMode","setText","end","getEndPosition","startTokenizing","fullyTokenized","tree","onDidTokenize","disp","dispose","iter","buildHighlightIterator","getOpenScopeIds","getCloseScopeIds","pos","column","seek","res","classNameForScopeId","moveToSuccessor","nextPos","getPosition","getTextInRange","destroy","highlightTreeSitter","then","codeResult","catch","render","MarkdownView","React","Component","markdown","className","props","containerClassName","onWheel","onMouseWheel","contentClassName","dangerouslySetInnerHTML","__html","state","evt","stopPropagation","setState","renderMarkdown","grammarName","markdownTexts","workspace","getActiveTextEditor","isArray","dompurify_1","MarkdownRenderer_1","SnippetView","snippet","getSnippetHtml","regexPremeable","regexLSPPrefix","snippets","ReactView","children","component","exports","PIN","CLOSE","IconsForAction","ViewContainer","actionButton","ActionClick","action","actionTitle","updateChildren","onMouseDown","onClickCapture","react_dom_1","rootElement","ReactView_1","SnippetView_1","MarkdownView_1","actionIcon","onClick","onActionClick","event","overlayElement","focusFix","style","userSelect","overlayFocusFix","classList","add","editorComponent","views","getView","getComponent","addEventListener","blurEditor","focusEditor","didFocus","didBlurHiddenInput","relatedTarget","copyListener","preventDefault","ctrlKey","getSelection","navigator","clipboard","writeText","removeEventListener","SignatureHelpManager","CompositeDisposable","ProviderRegistry","WeakSet","subscriptions","observeTextEditors","disposable","watchEditor","onDidDestroy","commands","signature-help:show","currentTarget","getModel","isTextEditor","providerRegistry","getProviderForEditor","position","getLastCursor","getBufferPosition","showSignatureHelp","config","observe","toggleSwitch","showSignatureHelpOnTyping","updateCurrentEditor","signatureHelpDisposables","editorSubscriptions","signatureHelpRegistry","addProvider","watchedEditors","has","editorView","hasFocus","focusListener","blurListener","unmountDataTip","Disposable","delete","getElement","keyCode","getBuffer","onDidChangeText","changes","change","cursorPosition","getSelectedBufferRange","newText","newRange","containsPoint","max","triggerCharacters","signatureHelp","getSignatureHelp","signatures","activeSignature","signature","paramIndex","activeParameter","parameter","parameters","parameterDocumentation","documentation","label","signatureDocumentation","signatureHelpView","mountSignatureHelp","view","disposables","overlayMarker","markBufferRange","Range","invalidate","makeOverlaySelectable","marker","decorateMarker","class","overlay","parentElement","hight","getBoundingClientRect","height","lineHight","getLineHeightInPixels","getFirstVisibleScreenRow","transform","autoCompleteList","querySelector","clientWidth","visibility","signatureHelpManager","install","initialize","default"],"mappings":"ytBAAA,kBAGAA,qBAAA,MAGEC,cACEC,KAAKC,UAAY,GAGnBF,YAAYG,GACV,MAAMC,EAAQH,KAAKC,UAAUG,WAAWC,GAAMH,EAASI,SAAWD,EAAEC,WAMpE,OALe,IAAXH,EACFH,KAAKC,UAAUM,KAAKL,GAEpBF,KAAKC,UAAUO,OAAOL,EAAO,EAAGD,GAE3B,IAAIO,cAAW,KACpBT,KAAKU,eAAeR,MAIxBH,eAAeG,GACb,MAAMC,EAAQH,KAAKC,UAAUU,QAAQT,IACtB,IAAXC,GACFH,KAAKC,UAAUO,OAAOL,EAAO,GAKjCJ,qBAAqBa,GACnB,MAAMC,EAAUD,EAAOE,aAAaC,UACpC,OAAOf,KAAKgB,aAAaH,GAI3Bd,yBAAyBa,GACvB,MAAMC,EAAUD,EAAOE,aAAaC,UACpC,OAAOf,KAAKiB,iBAAiBJ,GAG/Bd,aAAac,GACX,IAAK,MAAMX,KAAYF,KAAKiB,iBAAiBJ,GAC3C,OAAOX,EAET,OAAO,KAMTH,kBAAkBc,GAChB,IAAK,MAAMX,KAAYF,KAAKC,UACI,MAA1BC,EAASgB,gBAAsE,IAA7ChB,EAASgB,cAAcP,QAAQE,WAC7DX,uBCrDZiB,EAKEC,OALFD,eACAE,EAIED,OAJFC,eACAC,EAGEF,OAHFE,SACAC,EAEEH,OAFFG,eACAC,EACEJ,OADFI,yBAGIC,EAAyBL,OAAzBK,OAAQC,EAAiBN,OAAjBM,KAAMC,EAAWP,OAAXO,SAC0B,oBAAZC,SAA2BA,QAAvDC,IAAAA,MAAOC,IAAAA,UAERD,MACK,SAAUE,EAAKC,EAAWC,UACzBF,EAAIF,MAAMG,EAAWC,KAI3BR,MACM,SAAUS,UACVA,IAINR,MACI,SAAUQ,UACRA,IAINJ,MACS,SAAUK,EAAMF,4CACfE,uIAAQF,QAIvB,IAoB4BG,EApBtBC,EAAeC,EAAQC,MAAMC,UAAUC,SAEvCC,EAAWJ,EAAQC,MAAMC,UAAUG,KACnCC,EAAYN,EAAQC,MAAMC,UAAUjC,MAGpCsC,EAAoBP,EAAQQ,OAAON,UAAUO,aAC7CC,EAAcV,EAAQQ,OAAON,UAAUS,OACvCC,EAAgBZ,EAAQQ,OAAON,UAAUW,SACzCC,EAAgBd,EAAQQ,OAAON,UAAU7B,SACzC0C,EAAaf,EAAQQ,OAAON,UAAUc,MAEtCC,EAAajB,EAAQkB,OAAOhB,UAAUiB,MAEtCC,GAMsBtB,EANQuB,UAO3B,sCAAI1B,gDAASH,EAAUM,EAAMH,KAL/B,SAASK,EAAQF,UACf,SAACwB,8BAAY3B,0DAASJ,EAAMO,EAAMwB,EAAS3B,IAQ7C,SAAS4B,EAASC,EAAKC,GACxB1C,KAIayC,EAAK,cAGlBE,EAAID,EAAME,OACPD,KAAK,KACNE,EAAUH,EAAMC,MACG,iBAAZE,EAAsB,KACzBC,EAAYtB,EAAkBqB,GAChCC,IAAcD,IAEX5C,EAASyC,OACNC,GAAKG,KAGHA,KAIVD,IAAW,SAGVJ,EAIF,SAASM,EAAMC,OACdC,EAAY3C,EAAO,MAErB4C,aACCA,KAAYF,EACXxC,EAAMV,EAAgBkD,EAAQ,CAACE,QACvBA,GAAYF,EAAOE,WAI1BD,EAOT,SAASE,EAAaH,EAAQI,QACV,OAAXJ,GAAiB,KAChBK,EAAOlD,EAAyB6C,EAAQI,MAC1CC,EAAM,IACJA,EAAKC,WACArC,EAAQoC,EAAKC,QAGI,mBAAfD,EAAKE,aACPtC,EAAQoC,EAAKE,SAIfrD,EAAe8C,mBAGHH,kBACbW,KAAK,qBAAsBX,GAC5B,MC3HJ,IAAMY,EAAOrD,EAAO,CACzB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAIWsD,EAAMtD,EAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAGWuD,EAAavD,EAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAOWwD,EAAgBxD,EAAO,CAClC,UACA,gBACA,SACA,UACA,eACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAGWyD,EAASzD,EAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAKW0D,EAAmB1D,EAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAGW2D,EAAO3D,EAAO,CAAC,UCpRfqD,EAAOrD,EAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAGWsD,EAAMtD,EAAO,CACxB,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OAC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"} \ No newline at end of file diff --git a/dist/tsconfig.tsbuildinfo b/dist/tsconfig.tsbuildinfo index 07b798c..ce0519c 100644 --- a/dist/tsconfig.tsbuildinfo +++ b/dist/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"program":{"fileNames":["../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@4.3.2/node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/tslib/tslib.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostic_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/ts3.6/base.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/atom/src/atom-environment.d.ts","../node_modules/@types/atom/src/text-editor-element.d.ts","../node_modules/@types/atom/dependencies/event-kit/index.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/grammar.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/first-mate.d.ts","../node_modules/@types/atom/dependencies/first-mate/index.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/file.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/directory.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/main.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/index.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/helpers.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/point.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/range.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/text-buffer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/index.d.ts","../node_modules/@types/atom/src/buffered-node-process.d.ts","../node_modules/@types/atom/src/buffered-process.d.ts","../node_modules/@types/atom/src/clipboard.d.ts","../node_modules/@types/atom/src/color.d.ts","../node_modules/@types/atom/src/command-registry.d.ts","../node_modules/@types/atom/src/config.d.ts","../node_modules/@types/atom/src/config-schema.d.ts","../node_modules/@types/atom/src/context-menu-manager.d.ts","../node_modules/@types/atom/src/cursor.d.ts","../node_modules/@types/atom/src/decoration.d.ts","../node_modules/@types/atom/src/deserializer-manager.d.ts","../node_modules/@types/atom/src/dock.d.ts","../node_modules/@types/atom/src/get-window-load-settings.d.ts","../node_modules/@types/atom/src/git-repository.d.ts","../node_modules/@types/atom/src/grammar-registry.d.ts","../node_modules/@types/atom/src/gutter.d.ts","../node_modules/@types/atom/src/history-manager.d.ts","../node_modules/@types/atom/src/keymap-extensions.d.ts","../node_modules/@types/atom/src/layer-decoration.d.ts","../node_modules/@types/atom/src/menu-manager.d.ts","../node_modules/@types/atom/src/notification.d.ts","../node_modules/@types/atom/src/notification-manager.d.ts","../node_modules/@types/atom/src/other-types.d.ts","../node_modules/@types/atom/src/package.d.ts","../node_modules/@types/atom/src/package-manager.d.ts","../node_modules/@types/atom/src/pane.d.ts","../node_modules/@types/atom/src/panel.d.ts","../node_modules/@types/atom/src/path-watcher.d.ts","../node_modules/@types/atom/src/project.d.ts","../node_modules/@types/atom/src/scope-descriptor.d.ts","../node_modules/@types/atom/src/selection.d.ts","../node_modules/@types/atom/src/style-manager.d.ts","../node_modules/@types/atom/src/task.d.ts","../node_modules/@types/atom/src/text-editor.d.ts","../node_modules/@types/atom/src/text-editor-component.d.ts","../node_modules/@types/atom/src/text-editor-registry.d.ts","../node_modules/@types/atom/src/theme-manager.d.ts","../node_modules/@types/atom/src/tooltip.d.ts","../node_modules/@types/atom/src/tooltip-manager.d.ts","../node_modules/@types/atom/src/view-registry.d.ts","../node_modules/@types/atom/src/workspace.d.ts","../node_modules/@types/atom/src/workspace-center.d.ts","../node_modules/@types/atom/index.d.ts","../node_modules/atom-ide-base/types-packages/uri.d.ts","../node_modules/atom-ide-base/types-packages/busy-signal.d.ts","../node_modules/@types/atom/linter/config.d.ts","../node_modules/@types/atom/linter/index.d.ts","../node_modules/atom-ide-base/types-packages/code-actions.d.ts","../node_modules/atom-ide-base/types-packages/code-highlight.d.ts","../node_modules/atom-ide-base/types-packages/datatip.d.ts","../node_modules/atom-ide-base/types-packages/definitions.d.ts","../node_modules/atom-ide-base/types-packages/find-references.d.ts","../node_modules/atom-ide-base/types-packages/hyperclick.d.ts","../node_modules/atom-ide-base/types-packages/outline.d.ts","../node_modules/atom-ide-base/types-packages/sig-help.d.ts","../node_modules/@types/trusted-types/index.d.ts","../node_modules/@types/dompurify/index.d.ts","../node_modules/atom-ide-base/types-packages/markdown-service.d.ts","../node_modules/atom-ide-base/types-packages/text-edit.d.ts","../node_modules/atom-ide-base/types-packages/code-format.d.ts","../node_modules/atom-ide-base/types-packages/refactor.d.ts","../node_modules/atom-ide-base/types-packages/console.d.ts","../node_modules/atom-ide-base/types-packages/main.d.ts","../node_modules/atom-ide-base/commons-atom/providerregistry.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/scheduler/tracing.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/markdownview.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/snippetview.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/reactview.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/viewcontainer.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/selectable-overlay.d.ts","../src/signature-help-manager.ts","../node_modules/atom-package-deps/lib/index.d.ts","../src/main.ts","../node_modules/@types/color-name/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/react-dom/index.d.ts","../node_modules/@types/resolve/index.d.ts","../node_modules/@types/scheduler/index.d.ts"],"fileInfos":[{"version":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",{"version":"1dad4fe1561d99dfd6709127608b99a76e5c2643626c800434f99c48038567ee","affectsGlobalScope":true},{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"ea7abf23498b7c214c67fc14f22f41983fbb7bf7c4826c7fcdef542b2022545f","c7bdc99177a2a94d25fb13722adaaf5b3291bf70b4d1b27584ba189dd3889ba3",{"version":"7c4064a324cd755a9b281d5795fc6ebd9dd713b1c356220185c61eb1b2d0f1af","affectsGlobalScope":true},"e23424b97418eca3226fd24de079f1203eb70360622e4e093af2aff14d4be6ec","ff16181fe134bb123283eb6777c624f6f3ee3f5c17d70b8447fa68af0935d312","54868134aa26f98b6fbc8d28040d8a0f5e64a1cb0dfac7f059b35cac99d626f2","04eaa93bd75f937f9184dcb95a7983800c5770cf8ddd8ac0f3734dc02f5b20ef",{"version":"c8155caf28fc7b0a564156a5df28ad8a844a3bd32d331d148d8f3ce88025c870","affectsGlobalScope":true},"45ac321f2e15d268fd74a90ddaa6467dcaaff2c5b13f95b4b85831520fb7a491","dfc747ab8dd5f623055a4c26fd35e8cceca869fd3f1cf09701c941ca3679665a","c9f5f2920ff61d7158417b8440d5181ddc34a3dfef811a5677dd8a9fb91471e9","5cc0a492da3602510b8f5ed1852b1e0390002780d8758fbc8c0cd023ca7085f8","ec7dafafe751a5121f8f1c80201ebe7e7238c47e6329280a73c4d1ca4bb7fa28","64debeb10e4b7ae4ec9e89bfb4e04c6101ab98c3cc806d14e5488607cfec2753",{"version":"2866a528b2708aa272ec3eaafd3c980abb23aec1ef831cfc5eb2186b98c37ce5","affectsGlobalScope":true},{"version":"a5782d6cea81fe43d2db7ed41e789458c933ab3ab60602f7b5b14c4da3370496","affectsGlobalScope":true},"b86b7ff709a82ef3cba2184136c025989958bad483ffb13e4ca35d720245adf4","05b1c856de9c8f2c09c86a89455e25965342496ebe6d089760a9646c51295c76","c0d983dfc997b446ec8e456dea90e8c0c97ba896d55d7e34dfc351f32c405eb9","b447e123210c68f205f67b20c996c04a1eb64b0e591c5e06e164cd3d3a869b28","13257840c0850d4ebd7c2b17604a9e006f752de76c2400ebc752bc465c330452","42176966283d3835c34278b9b5c0f470d484c0c0c6a55c20a2c916a1ce69b6e8","0cff7901aedfe78e314f7d44088f07e2afa1b6e4f0473a4169b8456ca2fb245d","6ea59cf5479f3fad5db2caa4513d8d06d6cfee8d8df69e7a040c9b5b7f25f39c","e2236264a811ed1d09a2487a433e8f5216ae62378cf233954ae220cf886f6717","3ec1e108d587a5661ec790db607f482605ba9f3830e118ce578e3ffa3c42e22b","100b3bb9d39d2b1b5340f1bf45a52e94ef1692b45232b4ba00fac5c3cc56d331",{"version":"ec1a29ddaecb683aa360df0bd98ab5d4171d2d549554f7c5ab2a5c183a3dcb67","affectsGlobalScope":true},"7f77304372efe3c9967e5f9ea2061f1b4bf41dc3cda3c83cdd676f2e5af6b7e6","992c6f6be16c0a1d2eec13ece33adeea2c747ba27fcd078353a8f4bb5b4fea58","2597718d91e306949d89e285bf34c44192014ef541c3bd7cbb825c022749e974","a6b0abdb67d63ebe964ba5fee31bc3daf10c12eecd46b24d778426010c04c67e","ac4801ebc2355ba32329070123b1cd15891bf71b41dcaf9e75b4744832126a59","fd2298fba0640e7295e7bd545e2dfbfcccbb00c27019e501c87965a02bbdebf6","4fd3c4debadce3e9ab9dec3eb45f7f5e2e3d4ad65cf975a6d938d883cfb25a50","71ddd49185b68f27bfac127ef5d22cb2672c278e53e5370d9020ef50ca9c377d","b1ea7a6eaa7608e0e0529aebd323b526a79c6c05a4e519ae5c779675004dcdf1","9fcb033a6208485d8f3fadde31eb5cbcaf99149cff3e40c0dc53ebc6d0dff4e9","7df562288f949945cf69c21cd912100c2afedeeb7cdb219085f7f4b46cb7dde4","9d16690485ff1eb4f6fc57aebe237728fd8e03130c460919da3a35f4d9bd97f5","dcc6910d95a3625fd2b0487fda055988e46ab46c357a1b3618c27b4a8dd739c9","f4149f1aa299474c7040a35fe8f8ac2ad078cc1b190415adc1fff3ed52d490ea","3730099ed008776216268a97771de31753ef71e0a7d0ec650f588cba2a06ce44","8d649dbc429d7139a1d9a14ea2bf8af1dc089e0a879447539587463d4b6c248c","60c9e27816ec8ac8df7240598bb086e95b47edfb454c5cbf4003c812e0ed6e39","e361aecf17fc4034b4c122a1564471cdcd22ef3a51407803cb5a5fc020c04d02","4926467de88a92a4fc9971d8c6f21b91eca1c0e7fc2a46cc4638ab9440c73875",{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true},"fc0ae4a8ad3c762b96f9d2c3700cb879a373458cb0bf3175478e3b4f85f7ef2f","fabbec378e1ddd86fcf2662e716c2b8318acedb664ee3a4cba6f9e8ee8269cf1","b3593bd345ebea5e4d0a894c03251a3774b34df3d6db57075c18e089a599ba76","e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b","13c7832f048b08604b7e88b69247aecf955bb7b27a0881c2f7f23bb645435479","538743c4a70f32d2f6af137ff44a043c49dc8da6ebe2ad5e7da60cc953630e29","d2104c54b34158356c4c17dd37c7dd29e1c7dc4c77d9077e921f37d0b0f5cb87","8989b83d1d34dc4ef1100cbcc0f983f69d63118aeca3de5947e1c431ccd21ccc","35c935b77ca1da8fbf901931e0d8f25bff1cdedc9cbc01d98180cb496c445c21","3d1ffbc8fc8790ce6eef1e4ce1e79bfd5e9d0bc7d4f7cac0e95c54a7e1141875","128307a9785a229de861f811864e872ccc7b98da7953f6a67168addf64164fae","79d8197c490b07c732957dfc053b0a1bceaeba6cca9d3de6ce784d6b949fca4b","a49b47dfb004f10f3b23bb790de0c74667dfd053f7eda02ac831c351c7875498","5af3737dddb6e952a498672892404be1105ec2751b09467fbb5fd4b95efbd99b","9a1aef5196a946220a7ef874a7bc7424efef78d23ba8ff20df281b36ef62837a","3e587a8ba8dccc8217a1dfe64ca76e132ed54fdcc794765d090e0aa0147aad67","4d6e6619818eca8ab323f7b2199d9f2b324492bbf8e28dd29e3be90eb3530e8e","05d99f695e6424963c16f8a990e2fd0b703a8079baa1445ef2915fe525efc85b","acf2768b45d187b81284aa4f8e716413ce8776a90a72e755403faba08eef7dbe","8acaecb37a96026cb6d1ddb3ca4ddb32722890d18f35bc6e019dc9703dd72529","88d9da0dab92c994d171a7999ca48974be8f99c041622a78d0b1f3ff27588fc1","dc172eb5106eefa395d091bdb0d8b1963a86aae82a6a7192c1910e7f11083ccd","edaf342a2f1528da49e69e479132a88102b8d9866b129bdcf1e59d86cbd6341f","2cb11a971470a03e828df7520b3153e514bfc5065597d0690a0439f7a5e4284a","839f9c729f3bfd673257683bb86879ba1c3f8b41f01c2a6a33295ebf14927ab5","9b37c5e6e6c985efb20425b725034100d4240afe789b2ea7c5760ab6205ab645","4d74b98b593856085848bde7d83f400ad2fe5a2c36ac9dfe863f96ac206ae55d","27656836bf9547d24ed317c044fe1a3feeb58aff8433ba7813d50e8f69088034","e42db4296d48fa63531ac389627d0577a0dd6f6491b47fd7398b17ff6abd2f6c","bddc0d81daa46345e19c159cbc90638380b24e8d6ddd89d1542c6d9e31ebeddc","a204b31c3672914ff68bb20bfdaae933bf7f8f943687c371b0fd32a3482fc5d4","aeed82530b6398bccd5920a2d4c19011102927c19ce0682dc94f70ecd457a4bb","c129f26b2f8b768c7fc6c5edfd7353599d2fa9fbd19c9175192a608d687ca9a4","41507092ec15c44f72df77d95847b87dccff5f9cce4a11ff6a6f0270f3df3e74","ef048a1d0f1a5f33453b2481987a0f5011e158b757fe4f4def16a2a31efd4623","0534a685ecb1022ec62f19fe7252137f652dde0d86404723e021ed714d44c442","0be9967f0df1fd5673b743b218dde9378b8d0aa0e4a8f364f567b0bd3f004d27","867d4bc564691a35170c6620b658d0f745229a3cc30016e08520181bb1a7f1d3","429c0ccb47f85fab9f0096859a31f2bc20e2b8a814022cd71f6e5cc88ee550f1","060abd605f5f3a963d04ce8a5242f751294d4ad135ad349751089e7c29aec0d0","6c83ec67f9e4afb6ca82b7be9548cc004e8d9ef6ac6aa29b2a6846cb9e5adb5d","23782509c8247596fc3cd2080fc4491e548e1b4587939b68eb4e390eca48b971","f50fa063598d47694feba8f4d91f9fcac813b2c6fdaa5981c6ff466952faaf48","69977ff2a9fb72635702a1d7bf86fab73cf5184d45921f27affac20bb0c3ceae","5a4381be6da0f0383519663bb25660e094c9fc7cb658bf60a2cc221ffa8c7cda","b193ed7441b78595000bcd07c92bfa1b36493910579f1c33daafe42a90600537","e0196a20e6956f17ecf8f04188d34e4b3102e2b6f068b68fdfcecdefaa506e7a","e3d78def8d4e6bb8397b25068fdae6eac9d181a75c78dcf20227a251ee00bce3","0d70c986f1a71c38bf3c3c6b54425c4ba624642231ea8471a21adcd69ecbdd4d","13508efda3383aae203a1a8b5b90b79f99fea1920b65db9ff4a39538934b6c10","3a46c481fc512cce568b39ab364bb02ec588fc276240caf34e015444a5fd26d2","9098640c076d1bdbe6daf7b48d08bb2200ac28cce6db7d08118ae676a99406c9","b64113de8d7989a04f8f94e2c125ac426b9a5797fc2245bf70b96e25c1a06d76","7916e7c886d2088f3a9cad90c7967426d23a92930baf4f9e3b027cb904bc5c09","833a669fdba855086b045a3021b9b51040bd46c565a44f5cae5393cf1e8093b8","c6e2264465eb2e8cb2e12b67adc878e3a397efd6328e550b0a1a5bffabcad66d","048f40812b2a786d92fc8db2f174d35fa64581859cef090087a0f392d4010a3d","b130b6175f23bb5d9e5006ea959b78db664fe4f01abb377258e789c49c4c7cfd","2163bfddb0e1569e330731191e593feb3582cd0d27518993b6970aa8d62016ed","d302ecc0b3d2c60e6408fd2469e726967c7114d5f89b97d82f316feb8557c69d","4782235ebc38ab1dada9c9bb80ee43982f076c6d420bb0772c40fe615901889c","8f3a97edf479a690f731502f11179ec8264e11876a2b5b960a8ed64201392d86","fe9b9da3ace303035d4492d77bfed0260b3d50a04e0fbb128f6c47dcc97e8618","26062553cec8ef883a3617e98d29b395419287e48f4102105a2ee80c1997bac1","13972f1ccb5602c28eba0b02e7f6012f9eaaa0a1d56fb091996a33d67df5b3f0","f2b32e966e35467d563af676842b4e0718f1cd634f2dfdce3972ae101e5a8564",{"version":"00ef4a4324556eab6e45809e757354899d1ded0f5b2134465ee10e450f9c8d61","affectsGlobalScope":true},"56e9508f9d3e8c96d3a3f1658371293e8bc04f814da40ab3fde1b41edce4c5dd","5a322435cefe415e1a9d2c73c27e191b4114aefed2b1a49ef1e175708461d2d3","e149341309d7f08a73ade2b661a2f127ba560b7ea1780e85acfe3cdcb3d92be0","4f873a462f3653de5ac9ac1dc5a8e3c124efb25990972db81b8abee3ebae3f0a","3fa688d7d75a12a6ba2c9b4720c42a8bae33d54f11dc3f6b700debe93bc70e6e","87dd41b85c6a3d3325a8b3ab428c9c1f76bc6d1b651c879fa97d59223451cdcd","481cfd5d6497706efc11bdebbdbace30075d5f898cdd41f8970f061cfe40a967","e1306cd9eab6c0b3a5b488e9798b350244bbe7327d4ca845d982e1d6a1826a1a","e0081090f7862a7c3017f72d44ee8e2a28573b65c9f739006867e69b8ecef980","ab168fc1219e2fbd709090fd102b12610e1c1a7e0615097f5d9ff19ca442fa12","9821433ffadcd2a35d5eecbb6b17a55629ef7237c3473fe2e73ee4923f8c64ec","1fa32cdf99c6edc163d4b24059f066800a7ad0c000c43f660c1cead431de5853",{"version":"8e21d8ac0b66ff00edcdb504c6b6cb8ff639d30397e4715b362bedc3fb461929","affectsGlobalScope":true},"207be99e8d7364b5c6893fd4454ab323da7ec9bfc6e75ad02faedf1b7037f302","0b5c66f11b459e6a588221ad4974b7a7dcc1ee606a3de28516b9bfd57a5a4d73","bfe6237b2761c335b61c7fe90fa3e451e582d5ff1109b9225f1e188dd59efd57","a494399a814393efdcd4066904822d0292e7b999bca3fc91478b0f4bad64967b","74e89ad35934a9146c55e67657e23447a56f06ee0273eb44ddf0d248e9d67fcd","3077b10aeb84262b97adbd643e603ee5db682f2fdb8ea7b61fbc44bf3513462c","397996b87ee1d1979b610ebff6140f7e3da356cac2b9952f87fe727544e082b2","beb2e8b9afb4f6520259771d931d177828bcbdaca486864fa9af70a0e8c6bdbc",{"version":"ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6","affectsGlobalScope":true},"0a6f28e1d77b99b0ef7da2f0bf50f301ea8a7eb7b4f573e458e725452a477bd2","a7e32dcb90bf0c1b7a1e4ac89b0f7747cbcba25e7beddc1ebf17be1e161842ad","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"09f93eb1a5f70b195569f58a3d7852d64e3b293d773cd35f332079efc75ded56","affectsGlobalScope":true},"6ecb5886ac8b397791989b9f8cd2fb8f832e1e33a766b2615072b49a174763fb","26a5316f9efc32c5b7b42bbe40a88d16de246143f6a2c0eba64753bca8b3126a","b7e6eb6764ba012db3e459a353ee629b22564fc29a2c496a62ad200e733aa8e7","3d42ba49256d6e10196fbe8f6dd2c13f68b4cd76b7aaee2d54837c9b5ed3575d","0ae8447a66e111d54dd0abebfe31e3824688a8c9be6733e52105c9b16da76313","86105ec3ab30c6559989ec60bacfe83e9c1f53a36537985eb88764a3ce25f992","ae52fd54d9bb9eef999cab2d6d8566846393bf4cca109053db68dc8c03d6157a","c5d1681168172937fa6efa220f144dff21b9515e20ff3473ab4487a652414b0c","f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","f5bef21d79a0083d52769b9d0a549e69bc523449719aca12144cd7d55fc29c11","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","3169db033165677f1d414baf0c82ba27801089ca1b66d97af464512a47df31b5"],"options":{"declaration":true,"emitDeclarationOnly":false,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSourceMap":false,"inlineSources":true,"jsx":2,"module":99,"noEmitHelpers":true,"noEmitOnError":false,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strictNullChecks":true,"target":5},"fileIdsList":[[86],[85],[143],[90],[88,143],[45,89,143],[88,89],[99],[99,143],[45,92,93,94,95,96,97,98,99,143],[81,82,83,84,87,91,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142],[107,143],[143,146],[34,143],[156],[79],[78,79],[33,38],[44,45,52,61],[34,44,52],[70],[38,45,53],[61,66],[41,44,52],[42],[41],[44],[44,46,61,69],[44,45],[52,61,69],[44,45,47,52,61,66,69],[47,66,69],[80],[69],[41,44,61],[54],[32],[68],[59,70,73],[44,62],[61],[64],[38,52],[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77],[52],[58],[71],[33,38,44,46,55,61,69,73],[169],[165,166,167,168],[81],[143,163],[163,169],[169,170,171,172],[144],[143,147],[143,159],[143,144],[144,145,148,149,150,151,152,153,154,155,158,159,160,161,162],[157],[143,144,159],[29,143,163,175,176],[29,143,163,164,173,174]],"referencedMap":[[87,1],[86,2],[85,3],[91,4],[89,5],[88,6],[90,7],[100,8],[93,9],[92,9],[94,8],[96,9],[95,9],[98,8],[99,10],[143,11],[146,12],[147,13],[82,3],[101,3],[102,14],[105,3],[107,13],[106,3],[108,3],[109,3],[110,3],[111,3],[112,3],[114,3],[115,3],[116,3],[117,3],[118,3],[119,3],[120,3],[122,3],[121,3],[123,3],[125,3],[124,3],[126,3],[127,3],[128,3],[129,3],[131,3],[132,3],[133,3],[135,3],[83,3],[136,3],[134,3],[137,3],[139,3],[140,3],[142,3],[141,3],[157,15],[30,16],[80,17],[33,18],[34,19],[35,20],[36,21],[37,22],[38,23],[39,24],[41,25],[42,26],[43,27],[44,27],[45,28],[46,29],[47,30],[48,31],[49,32],[81,33],[50,27],[51,34],[52,35],[54,36],[55,37],[56,38],[59,27],[60,39],[61,40],[62,41],[64,27],[65,42],[66,43],[78,44],[68,45],[69,46],[70,47],[72,41],[74,48],[75,41],[180,49],[169,50],[181,51],[164,52],[170,53],[172,49],[174,3],[171,53],[173,54],[145,55],[148,56],[160,57],[149,3],[150,3],[151,58],[152,58],[153,3],[163,59],[158,60],[154,3],[161,61],[155,3],[159,3],[177,62],[175,63]],"exportedModulesMap":[[87,1],[86,2],[85,3],[91,4],[89,5],[88,6],[90,7],[100,8],[93,9],[92,9],[94,8],[96,9],[95,9],[98,8],[99,10],[143,11],[146,12],[147,13],[82,3],[101,3],[102,14],[105,3],[107,13],[106,3],[108,3],[109,3],[110,3],[111,3],[112,3],[114,3],[115,3],[116,3],[117,3],[118,3],[119,3],[120,3],[122,3],[121,3],[123,3],[125,3],[124,3],[126,3],[127,3],[128,3],[129,3],[131,3],[132,3],[133,3],[135,3],[83,3],[136,3],[134,3],[137,3],[139,3],[140,3],[142,3],[141,3],[157,15],[30,16],[80,17],[33,18],[34,19],[35,20],[36,21],[37,22],[38,23],[39,24],[41,25],[42,26],[43,27],[44,27],[45,28],[46,29],[47,30],[48,31],[49,32],[81,33],[50,27],[51,34],[52,35],[54,36],[55,37],[56,38],[59,27],[60,39],[61,40],[62,41],[64,27],[65,42],[66,43],[78,44],[68,45],[69,46],[70,47],[72,41],[74,48],[75,41],[180,49],[169,50],[181,51],[164,52],[170,53],[172,49],[174,3],[171,53],[173,54],[145,55],[148,56],[160,57],[149,3],[150,3],[151,58],[152,58],[153,3],[163,59],[158,60],[154,3],[161,61],[155,3],[159,3],[177,62],[175,63]],"semanticDiagnosticsPerFile":[6,8,7,2,9,10,11,12,13,14,15,16,3,4,20,17,18,19,21,22,23,5,24,25,26,27,1,28,84,87,86,85,91,89,88,90,100,93,92,94,96,95,97,98,99,143,146,147,82,101,102,103,104,105,107,106,108,109,110,111,112,113,114,115,116,117,118,119,120,122,121,123,125,124,126,127,128,129,130,131,132,133,135,83,136,134,137,139,138,140,142,141,178,157,179,79,30,32,80,33,34,35,36,37,38,39,40,41,42,43,44,45,46,31,76,47,48,49,81,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,78,68,69,70,71,72,73,77,74,75,167,180,165,169,181,182,168,156,164,170,172,174,171,173,145,148,160,149,162,150,151,152,153,163,158,154,161,155,159,144,176,166,29,177,175]},"version":"4.3.2"} \ No newline at end of file +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/tslib/tslib.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostic_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/ts3.6/base.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/atom/src/atom-environment.d.ts","../node_modules/@types/atom/src/text-editor-element.d.ts","../node_modules/@types/atom/dependencies/event-kit/index.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/grammar.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/first-mate.d.ts","../node_modules/@types/atom/dependencies/first-mate/index.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/file.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/directory.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/main.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/index.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/helpers.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/point.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/range.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/text-buffer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/index.d.ts","../node_modules/@types/atom/src/buffered-node-process.d.ts","../node_modules/@types/atom/src/buffered-process.d.ts","../node_modules/@types/atom/src/clipboard.d.ts","../node_modules/@types/atom/src/color.d.ts","../node_modules/@types/atom/src/command-registry.d.ts","../node_modules/@types/atom/src/config.d.ts","../node_modules/@types/atom/src/config-schema.d.ts","../node_modules/@types/atom/src/context-menu-manager.d.ts","../node_modules/@types/atom/src/cursor.d.ts","../node_modules/@types/atom/src/decoration.d.ts","../node_modules/@types/atom/src/deserializer-manager.d.ts","../node_modules/@types/atom/src/dock.d.ts","../node_modules/@types/atom/src/get-window-load-settings.d.ts","../node_modules/@types/atom/src/git-repository.d.ts","../node_modules/@types/atom/src/grammar-registry.d.ts","../node_modules/@types/atom/src/gutter.d.ts","../node_modules/@types/atom/src/history-manager.d.ts","../node_modules/@types/atom/src/keymap-extensions.d.ts","../node_modules/@types/atom/src/layer-decoration.d.ts","../node_modules/@types/atom/src/menu-manager.d.ts","../node_modules/@types/atom/src/notification.d.ts","../node_modules/@types/atom/src/notification-manager.d.ts","../node_modules/@types/atom/src/other-types.d.ts","../node_modules/@types/atom/src/package.d.ts","../node_modules/@types/atom/src/package-manager.d.ts","../node_modules/@types/atom/src/pane.d.ts","../node_modules/@types/atom/src/panel.d.ts","../node_modules/@types/atom/src/path-watcher.d.ts","../node_modules/@types/atom/src/project.d.ts","../node_modules/@types/atom/src/scope-descriptor.d.ts","../node_modules/@types/atom/src/selection.d.ts","../node_modules/@types/atom/src/style-manager.d.ts","../node_modules/@types/atom/src/task.d.ts","../node_modules/@types/atom/src/text-editor.d.ts","../node_modules/@types/atom/src/text-editor-component.d.ts","../node_modules/@types/atom/src/text-editor-registry.d.ts","../node_modules/@types/atom/src/theme-manager.d.ts","../node_modules/@types/atom/src/tooltip.d.ts","../node_modules/@types/atom/src/tooltip-manager.d.ts","../node_modules/@types/atom/src/view-registry.d.ts","../node_modules/@types/atom/src/workspace.d.ts","../node_modules/@types/atom/src/workspace-center.d.ts","../node_modules/@types/atom/index.d.ts","../node_modules/atom-ide-base/types-packages/uri.d.ts","../node_modules/atom-ide-base/types-packages/busy-signal.d.ts","../node_modules/@types/atom/linter/config.d.ts","../node_modules/@types/atom/linter/index.d.ts","../node_modules/atom-ide-base/types-packages/code-actions.d.ts","../node_modules/atom-ide-base/types-packages/code-highlight.d.ts","../node_modules/atom-ide-base/types-packages/datatip.d.ts","../node_modules/atom-ide-base/types-packages/definitions.d.ts","../node_modules/atom-ide-base/types-packages/find-references.d.ts","../node_modules/atom-ide-base/types-packages/hyperclick.d.ts","../node_modules/atom-ide-base/types-packages/outline.d.ts","../node_modules/atom-ide-base/types-packages/sig-help.d.ts","../node_modules/@types/trusted-types/index.d.ts","../node_modules/@types/dompurify/index.d.ts","../node_modules/atom-ide-base/types-packages/markdown-service.d.ts","../node_modules/atom-ide-base/types-packages/text-edit.d.ts","../node_modules/atom-ide-base/types-packages/code-format.d.ts","../node_modules/atom-ide-base/types-packages/refactor.d.ts","../node_modules/atom-ide-base/types-packages/console.d.ts","../node_modules/atom-ide-base/types-packages/main.d.ts","../node_modules/atom-ide-base/commons-atom/ProviderRegistry.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/scheduler/tracing.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/MarkdownView.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/SnippetView.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/ReactView.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/ViewContainer.d.ts","../node_modules/atom-ide-base/commons-ui/float-pane/selectable-overlay.d.ts","../src/signature-help-manager.ts","../node_modules/atom-package-deps/lib/index.d.ts","../src/main.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/react-dom/index.d.ts","../node_modules/@types/resolve/index.d.ts","../node_modules/@types/scheduler/index.d.ts"],"fileInfos":[{"version":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06",{"version":"1dad4fe1561d99dfd6709127608b99a76e5c2643626c800434f99c48038567ee","affectsGlobalScope":true},{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"ea7abf23498b7c214c67fc14f22f41983fbb7bf7c4826c7fcdef542b2022545f","c7bdc99177a2a94d25fb13722adaaf5b3291bf70b4d1b27584ba189dd3889ba3",{"version":"7c4064a324cd755a9b281d5795fc6ebd9dd713b1c356220185c61eb1b2d0f1af","affectsGlobalScope":true},"e23424b97418eca3226fd24de079f1203eb70360622e4e093af2aff14d4be6ec","ff16181fe134bb123283eb6777c624f6f3ee3f5c17d70b8447fa68af0935d312","54868134aa26f98b6fbc8d28040d8a0f5e64a1cb0dfac7f059b35cac99d626f2","04eaa93bd75f937f9184dcb95a7983800c5770cf8ddd8ac0f3734dc02f5b20ef",{"version":"c8155caf28fc7b0a564156a5df28ad8a844a3bd32d331d148d8f3ce88025c870","affectsGlobalScope":true},"45ac321f2e15d268fd74a90ddaa6467dcaaff2c5b13f95b4b85831520fb7a491","dfc747ab8dd5f623055a4c26fd35e8cceca869fd3f1cf09701c941ca3679665a","c9f5f2920ff61d7158417b8440d5181ddc34a3dfef811a5677dd8a9fb91471e9","5cc0a492da3602510b8f5ed1852b1e0390002780d8758fbc8c0cd023ca7085f8","ec7dafafe751a5121f8f1c80201ebe7e7238c47e6329280a73c4d1ca4bb7fa28","64debeb10e4b7ae4ec9e89bfb4e04c6101ab98c3cc806d14e5488607cfec2753",{"version":"2866a528b2708aa272ec3eaafd3c980abb23aec1ef831cfc5eb2186b98c37ce5","affectsGlobalScope":true},{"version":"a5782d6cea81fe43d2db7ed41e789458c933ab3ab60602f7b5b14c4da3370496","affectsGlobalScope":true},"b86b7ff709a82ef3cba2184136c025989958bad483ffb13e4ca35d720245adf4","05b1c856de9c8f2c09c86a89455e25965342496ebe6d089760a9646c51295c76","c0d983dfc997b446ec8e456dea90e8c0c97ba896d55d7e34dfc351f32c405eb9","b447e123210c68f205f67b20c996c04a1eb64b0e591c5e06e164cd3d3a869b28","13257840c0850d4ebd7c2b17604a9e006f752de76c2400ebc752bc465c330452","42176966283d3835c34278b9b5c0f470d484c0c0c6a55c20a2c916a1ce69b6e8","0cff7901aedfe78e314f7d44088f07e2afa1b6e4f0473a4169b8456ca2fb245d","6ea59cf5479f3fad5db2caa4513d8d06d6cfee8d8df69e7a040c9b5b7f25f39c","e2236264a811ed1d09a2487a433e8f5216ae62378cf233954ae220cf886f6717","3ec1e108d587a5661ec790db607f482605ba9f3830e118ce578e3ffa3c42e22b","100b3bb9d39d2b1b5340f1bf45a52e94ef1692b45232b4ba00fac5c3cc56d331",{"version":"ec1a29ddaecb683aa360df0bd98ab5d4171d2d549554f7c5ab2a5c183a3dcb67","affectsGlobalScope":true},"7f77304372efe3c9967e5f9ea2061f1b4bf41dc3cda3c83cdd676f2e5af6b7e6","992c6f6be16c0a1d2eec13ece33adeea2c747ba27fcd078353a8f4bb5b4fea58","2597718d91e306949d89e285bf34c44192014ef541c3bd7cbb825c022749e974","a6b0abdb67d63ebe964ba5fee31bc3daf10c12eecd46b24d778426010c04c67e","ac4801ebc2355ba32329070123b1cd15891bf71b41dcaf9e75b4744832126a59","fd2298fba0640e7295e7bd545e2dfbfcccbb00c27019e501c87965a02bbdebf6","4fd3c4debadce3e9ab9dec3eb45f7f5e2e3d4ad65cf975a6d938d883cfb25a50","71ddd49185b68f27bfac127ef5d22cb2672c278e53e5370d9020ef50ca9c377d","b1ea7a6eaa7608e0e0529aebd323b526a79c6c05a4e519ae5c779675004dcdf1","9fcb033a6208485d8f3fadde31eb5cbcaf99149cff3e40c0dc53ebc6d0dff4e9","7df562288f949945cf69c21cd912100c2afedeeb7cdb219085f7f4b46cb7dde4","9d16690485ff1eb4f6fc57aebe237728fd8e03130c460919da3a35f4d9bd97f5","dcc6910d95a3625fd2b0487fda055988e46ab46c357a1b3618c27b4a8dd739c9","f4149f1aa299474c7040a35fe8f8ac2ad078cc1b190415adc1fff3ed52d490ea","3730099ed008776216268a97771de31753ef71e0a7d0ec650f588cba2a06ce44","8d649dbc429d7139a1d9a14ea2bf8af1dc089e0a879447539587463d4b6c248c","60c9e27816ec8ac8df7240598bb086e95b47edfb454c5cbf4003c812e0ed6e39","e361aecf17fc4034b4c122a1564471cdcd22ef3a51407803cb5a5fc020c04d02","4926467de88a92a4fc9971d8c6f21b91eca1c0e7fc2a46cc4638ab9440c73875",{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true},"fc0ae4a8ad3c762b96f9d2c3700cb879a373458cb0bf3175478e3b4f85f7ef2f","fabbec378e1ddd86fcf2662e716c2b8318acedb664ee3a4cba6f9e8ee8269cf1","b3593bd345ebea5e4d0a894c03251a3774b34df3d6db57075c18e089a599ba76","e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b","13c7832f048b08604b7e88b69247aecf955bb7b27a0881c2f7f23bb645435479","538743c4a70f32d2f6af137ff44a043c49dc8da6ebe2ad5e7da60cc953630e29","d2104c54b34158356c4c17dd37c7dd29e1c7dc4c77d9077e921f37d0b0f5cb87","8989b83d1d34dc4ef1100cbcc0f983f69d63118aeca3de5947e1c431ccd21ccc","35c935b77ca1da8fbf901931e0d8f25bff1cdedc9cbc01d98180cb496c445c21","3d1ffbc8fc8790ce6eef1e4ce1e79bfd5e9d0bc7d4f7cac0e95c54a7e1141875","128307a9785a229de861f811864e872ccc7b98da7953f6a67168addf64164fae","79d8197c490b07c732957dfc053b0a1bceaeba6cca9d3de6ce784d6b949fca4b","a49b47dfb004f10f3b23bb790de0c74667dfd053f7eda02ac831c351c7875498","5af3737dddb6e952a498672892404be1105ec2751b09467fbb5fd4b95efbd99b","9a1aef5196a946220a7ef874a7bc7424efef78d23ba8ff20df281b36ef62837a","3e587a8ba8dccc8217a1dfe64ca76e132ed54fdcc794765d090e0aa0147aad67","4d6e6619818eca8ab323f7b2199d9f2b324492bbf8e28dd29e3be90eb3530e8e","05d99f695e6424963c16f8a990e2fd0b703a8079baa1445ef2915fe525efc85b","acf2768b45d187b81284aa4f8e716413ce8776a90a72e755403faba08eef7dbe","8acaecb37a96026cb6d1ddb3ca4ddb32722890d18f35bc6e019dc9703dd72529","88d9da0dab92c994d171a7999ca48974be8f99c041622a78d0b1f3ff27588fc1","dc172eb5106eefa395d091bdb0d8b1963a86aae82a6a7192c1910e7f11083ccd","edaf342a2f1528da49e69e479132a88102b8d9866b129bdcf1e59d86cbd6341f","2cb11a971470a03e828df7520b3153e514bfc5065597d0690a0439f7a5e4284a","839f9c729f3bfd673257683bb86879ba1c3f8b41f01c2a6a33295ebf14927ab5","9b37c5e6e6c985efb20425b725034100d4240afe789b2ea7c5760ab6205ab645","4d74b98b593856085848bde7d83f400ad2fe5a2c36ac9dfe863f96ac206ae55d","27656836bf9547d24ed317c044fe1a3feeb58aff8433ba7813d50e8f69088034","e42db4296d48fa63531ac389627d0577a0dd6f6491b47fd7398b17ff6abd2f6c","bddc0d81daa46345e19c159cbc90638380b24e8d6ddd89d1542c6d9e31ebeddc","a204b31c3672914ff68bb20bfdaae933bf7f8f943687c371b0fd32a3482fc5d4","aeed82530b6398bccd5920a2d4c19011102927c19ce0682dc94f70ecd457a4bb","c129f26b2f8b768c7fc6c5edfd7353599d2fa9fbd19c9175192a608d687ca9a4","41507092ec15c44f72df77d95847b87dccff5f9cce4a11ff6a6f0270f3df3e74","ef048a1d0f1a5f33453b2481987a0f5011e158b757fe4f4def16a2a31efd4623","0534a685ecb1022ec62f19fe7252137f652dde0d86404723e021ed714d44c442","0be9967f0df1fd5673b743b218dde9378b8d0aa0e4a8f364f567b0bd3f004d27","867d4bc564691a35170c6620b658d0f745229a3cc30016e08520181bb1a7f1d3","429c0ccb47f85fab9f0096859a31f2bc20e2b8a814022cd71f6e5cc88ee550f1","060abd605f5f3a963d04ce8a5242f751294d4ad135ad349751089e7c29aec0d0","6c83ec67f9e4afb6ca82b7be9548cc004e8d9ef6ac6aa29b2a6846cb9e5adb5d","23782509c8247596fc3cd2080fc4491e548e1b4587939b68eb4e390eca48b971","f50fa063598d47694feba8f4d91f9fcac813b2c6fdaa5981c6ff466952faaf48","69977ff2a9fb72635702a1d7bf86fab73cf5184d45921f27affac20bb0c3ceae","5a4381be6da0f0383519663bb25660e094c9fc7cb658bf60a2cc221ffa8c7cda","b193ed7441b78595000bcd07c92bfa1b36493910579f1c33daafe42a90600537","e0196a20e6956f17ecf8f04188d34e4b3102e2b6f068b68fdfcecdefaa506e7a","e3d78def8d4e6bb8397b25068fdae6eac9d181a75c78dcf20227a251ee00bce3","0d70c986f1a71c38bf3c3c6b54425c4ba624642231ea8471a21adcd69ecbdd4d","13508efda3383aae203a1a8b5b90b79f99fea1920b65db9ff4a39538934b6c10","3a46c481fc512cce568b39ab364bb02ec588fc276240caf34e015444a5fd26d2","9098640c076d1bdbe6daf7b48d08bb2200ac28cce6db7d08118ae676a99406c9","b64113de8d7989a04f8f94e2c125ac426b9a5797fc2245bf70b96e25c1a06d76","7916e7c886d2088f3a9cad90c7967426d23a92930baf4f9e3b027cb904bc5c09","833a669fdba855086b045a3021b9b51040bd46c565a44f5cae5393cf1e8093b8","c6e2264465eb2e8cb2e12b67adc878e3a397efd6328e550b0a1a5bffabcad66d","048f40812b2a786d92fc8db2f174d35fa64581859cef090087a0f392d4010a3d","b130b6175f23bb5d9e5006ea959b78db664fe4f01abb377258e789c49c4c7cfd","2163bfddb0e1569e330731191e593feb3582cd0d27518993b6970aa8d62016ed","d302ecc0b3d2c60e6408fd2469e726967c7114d5f89b97d82f316feb8557c69d","4782235ebc38ab1dada9c9bb80ee43982f076c6d420bb0772c40fe615901889c","8f3a97edf479a690f731502f11179ec8264e11876a2b5b960a8ed64201392d86","fe9b9da3ace303035d4492d77bfed0260b3d50a04e0fbb128f6c47dcc97e8618","26062553cec8ef883a3617e98d29b395419287e48f4102105a2ee80c1997bac1","13972f1ccb5602c28eba0b02e7f6012f9eaaa0a1d56fb091996a33d67df5b3f0","f2b32e966e35467d563af676842b4e0718f1cd634f2dfdce3972ae101e5a8564",{"version":"00ef4a4324556eab6e45809e757354899d1ded0f5b2134465ee10e450f9c8d61","affectsGlobalScope":true},"56e9508f9d3e8c96d3a3f1658371293e8bc04f814da40ab3fde1b41edce4c5dd","5a322435cefe415e1a9d2c73c27e191b4114aefed2b1a49ef1e175708461d2d3","e149341309d7f08a73ade2b661a2f127ba560b7ea1780e85acfe3cdcb3d92be0","4f873a462f3653de5ac9ac1dc5a8e3c124efb25990972db81b8abee3ebae3f0a","3fa688d7d75a12a6ba2c9b4720c42a8bae33d54f11dc3f6b700debe93bc70e6e","87dd41b85c6a3d3325a8b3ab428c9c1f76bc6d1b651c879fa97d59223451cdcd","481cfd5d6497706efc11bdebbdbace30075d5f898cdd41f8970f061cfe40a967","e1306cd9eab6c0b3a5b488e9798b350244bbe7327d4ca845d982e1d6a1826a1a","e0081090f7862a7c3017f72d44ee8e2a28573b65c9f739006867e69b8ecef980","ab168fc1219e2fbd709090fd102b12610e1c1a7e0615097f5d9ff19ca442fa12","9821433ffadcd2a35d5eecbb6b17a55629ef7237c3473fe2e73ee4923f8c64ec","1fa32cdf99c6edc163d4b24059f066800a7ad0c000c43f660c1cead431de5853",{"version":"8e21d8ac0b66ff00edcdb504c6b6cb8ff639d30397e4715b362bedc3fb461929","affectsGlobalScope":true},"207be99e8d7364b5c6893fd4454ab323da7ec9bfc6e75ad02faedf1b7037f302","0b5c66f11b459e6a588221ad4974b7a7dcc1ee606a3de28516b9bfd57a5a4d73","bfe6237b2761c335b61c7fe90fa3e451e582d5ff1109b9225f1e188dd59efd57","a494399a814393efdcd4066904822d0292e7b999bca3fc91478b0f4bad64967b","74e89ad35934a9146c55e67657e23447a56f06ee0273eb44ddf0d248e9d67fcd","3077b10aeb84262b97adbd643e603ee5db682f2fdb8ea7b61fbc44bf3513462c","397996b87ee1d1979b610ebff6140f7e3da356cac2b9952f87fe727544e082b2","beb2e8b9afb4f6520259771d931d177828bcbdaca486864fa9af70a0e8c6bdbc",{"version":"ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6","affectsGlobalScope":true},"4ee363f83d7be2202f34fcd84c44da71bf3a9329fee8a05f976f75083a52ea94","a7e32dcb90bf0c1b7a1e4ac89b0f7747cbcba25e7beddc1ebf17be1e161842ad","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"09f93eb1a5f70b195569f58a3d7852d64e3b293d773cd35f332079efc75ded56","affectsGlobalScope":true},"6ecb5886ac8b397791989b9f8cd2fb8f832e1e33a766b2615072b49a174763fb","26a5316f9efc32c5b7b42bbe40a88d16de246143f6a2c0eba64753bca8b3126a","b7e6eb6764ba012db3e459a353ee629b22564fc29a2c496a62ad200e733aa8e7","3d42ba49256d6e10196fbe8f6dd2c13f68b4cd76b7aaee2d54837c9b5ed3575d","0ae8447a66e111d54dd0abebfe31e3824688a8c9be6733e52105c9b16da76313","cccc88632431c3204de88f97e89714b6efaeb7399a077e91f5c41f80f2f40caa","ae52fd54d9bb9eef999cab2d6d8566846393bf4cca109053db68dc8c03d6157a","c5d1681168172937fa6efa220f144dff21b9515e20ff3473ab4487a652414b0c","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","f5bef21d79a0083d52769b9d0a549e69bc523449719aca12144cd7d55fc29c11","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","3169db033165677f1d414baf0c82ba27801089ca1b66d97af464512a47df31b5"],"options":{"declaration":true,"emitDeclarationOnly":false,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSourceMap":false,"inlineSources":true,"jsx":2,"module":99,"noEmitHelpers":true,"noEmitOnError":false,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strictNullChecks":true,"target":5},"fileIdsList":[[86],[85],[143],[90],[88,143],[45,89,143],[88,89],[99],[99,143],[45,92,93,94,95,96,97,98,99,143],[81,82,83,84,87,91,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142],[107,143],[143,146],[34,143],[156],[79],[78,79],[33,38],[44,45,52,61],[34,44,52],[70],[38,45,53],[61,66],[41,44,52],[42],[41],[44],[44,46,61,69],[44,45],[52,61,69],[44,45,47,52,61,66,69],[47,66,69],[80],[69],[41,44,61],[54],[32],[68],[59,70,73],[44,62],[61],[64],[38,52],[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77],[52],[58],[71],[33,38,44,46,55,61,69,73],[169],[165,166,167,168],[81],[143,163],[163,169],[169,170,171,172],[144],[143,147],[143,159],[143,144],[144,145,148,149,150,151,152,153,154,155,158,159,160,161,162],[157],[143,144,159],[29,143,163,175,176],[29,143,163,164,173,174]],"referencedMap":[[87,1],[86,2],[85,3],[91,4],[89,5],[88,6],[90,7],[100,8],[93,9],[92,9],[94,8],[96,9],[95,9],[98,8],[99,10],[143,11],[146,12],[147,13],[82,3],[101,3],[102,14],[105,3],[107,13],[106,3],[108,3],[109,3],[110,3],[111,3],[112,3],[114,3],[115,3],[116,3],[117,3],[118,3],[119,3],[120,3],[122,3],[121,3],[123,3],[125,3],[124,3],[126,3],[127,3],[128,3],[129,3],[131,3],[132,3],[133,3],[135,3],[83,3],[136,3],[134,3],[137,3],[139,3],[140,3],[142,3],[141,3],[157,15],[30,16],[80,17],[33,18],[34,19],[35,20],[36,21],[37,22],[38,23],[39,24],[41,25],[42,26],[43,27],[44,27],[45,28],[46,29],[47,30],[48,31],[49,32],[81,33],[50,27],[51,34],[52,35],[54,36],[55,37],[56,38],[59,27],[60,39],[61,40],[62,41],[64,27],[65,42],[66,43],[78,44],[68,45],[69,46],[70,47],[72,41],[74,48],[75,41],[179,49],[169,50],[180,51],[164,52],[170,53],[172,49],[171,53],[173,54],[174,3],[145,55],[148,56],[160,57],[149,3],[150,3],[151,58],[152,58],[153,3],[163,59],[158,60],[154,3],[161,61],[155,3],[159,3],[177,62],[175,63]],"exportedModulesMap":[[87,1],[86,2],[85,3],[91,4],[89,5],[88,6],[90,7],[100,8],[93,9],[92,9],[94,8],[96,9],[95,9],[98,8],[99,10],[143,11],[146,12],[147,13],[82,3],[101,3],[102,14],[105,3],[107,13],[106,3],[108,3],[109,3],[110,3],[111,3],[112,3],[114,3],[115,3],[116,3],[117,3],[118,3],[119,3],[120,3],[122,3],[121,3],[123,3],[125,3],[124,3],[126,3],[127,3],[128,3],[129,3],[131,3],[132,3],[133,3],[135,3],[83,3],[136,3],[134,3],[137,3],[139,3],[140,3],[142,3],[141,3],[157,15],[30,16],[80,17],[33,18],[34,19],[35,20],[36,21],[37,22],[38,23],[39,24],[41,25],[42,26],[43,27],[44,27],[45,28],[46,29],[47,30],[48,31],[49,32],[81,33],[50,27],[51,34],[52,35],[54,36],[55,37],[56,38],[59,27],[60,39],[61,40],[62,41],[64,27],[65,42],[66,43],[78,44],[68,45],[69,46],[70,47],[72,41],[74,48],[75,41],[179,49],[169,50],[180,51],[164,52],[170,53],[172,49],[171,53],[173,54],[174,3],[145,55],[148,56],[160,57],[149,3],[150,3],[151,58],[152,58],[153,3],[163,59],[158,60],[154,3],[161,61],[155,3],[159,3],[177,62],[175,63]],"semanticDiagnosticsPerFile":[84,87,86,85,91,89,88,90,100,93,92,94,96,95,97,98,99,143,146,147,82,101,102,103,104,105,107,106,108,109,110,111,112,113,114,115,116,117,118,119,120,122,121,123,125,124,126,127,128,129,130,131,132,133,135,83,136,134,137,139,138,140,142,141,157,178,79,30,32,80,33,34,35,36,37,38,39,40,41,42,43,44,45,46,31,76,47,48,49,81,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,78,68,69,70,71,72,73,77,74,75,167,179,165,169,180,181,168,156,164,170,172,171,173,174,145,148,160,149,162,150,151,152,153,163,158,154,161,155,159,144,176,166,29,6,8,7,2,9,10,11,12,13,14,15,16,3,4,20,17,18,19,21,22,23,5,24,25,26,27,1,28,177,175]},"version":"4.3.2"} \ No newline at end of file diff --git a/package.json b/package.json index 1dacbd0..dd96a63 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom-ide-signature-help", "main": "./dist/main.js", - "version": "0.15.3", + "version": "0.15.4", "description": "A replacement of the SignatureHelp functionality from the original Atom-IDE / Nuclide package developed by Facebook.", "keywords": [ "atom-package",