@codingame/monaco-vscode-emmet-default-extension 36.2.6 → 37.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/package.json +2 -2
- package/resources/emmetBrowserMain.js.map +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["<define:process.env>", "../../node_modules/jsonc-parser/lib/esm/impl/scanner.js", "../../node_modules/jsonc-parser/lib/esm/impl/format.js", "../../node_modules/jsonc-parser/lib/esm/impl/parser.js", "../../node_modules/jsonc-parser/lib/esm/impl/edit.js", "../../node_modules/jsonc-parser/lib/esm/main.js", "../../../../node_modules/has-symbols/shams.js", "../../../../node_modules/has-tostringtag/shams.js", "../../../../node_modules/es-object-atoms/index.js", "../../../../node_modules/es-errors/index.js", "../../../../node_modules/es-errors/eval.js", "../../../../node_modules/es-errors/range.js", "../../../../node_modules/es-errors/ref.js", "../../../../node_modules/es-errors/syntax.js", "../../../../node_modules/es-errors/type.js", "../../../../node_modules/es-errors/uri.js", "../../../../node_modules/math-intrinsics/abs.js", "../../../../node_modules/math-intrinsics/floor.js", "../../../../node_modules/math-intrinsics/max.js", "../../../../node_modules/math-intrinsics/min.js", "../../../../node_modules/math-intrinsics/pow.js", "../../../../node_modules/math-intrinsics/round.js", "../../../../node_modules/math-intrinsics/isNaN.js", "../../../../node_modules/math-intrinsics/sign.js", "../../../../node_modules/gopd/gOPD.js", "../../../../node_modules/gopd/index.js", "../../../../node_modules/es-define-property/index.js", "../../../../node_modules/has-symbols/index.js", "../../../../node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../../node_modules/get-proto/Object.getPrototypeOf.js", "../../../../node_modules/function-bind/implementation.js", "../../../../node_modules/function-bind/index.js", "../../../../node_modules/call-bind-apply-helpers/functionCall.js", "../../../../node_modules/call-bind-apply-helpers/functionApply.js", "../../../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../../../node_modules/call-bind-apply-helpers/actualApply.js", "../../../../node_modules/call-bind-apply-helpers/index.js", "../../../../node_modules/dunder-proto/get.js", "../../../../node_modules/get-proto/index.js", "../../../../node_modules/hasown/index.js", "../../../../node_modules/get-intrinsic/index.js", "../../../../node_modules/define-data-property/index.js", "../../../../node_modules/has-property-descriptors/index.js", "../../../../node_modules/set-function-length/index.js", "../../../../node_modules/call-bind-apply-helpers/applyBind.js", "../../../../node_modules/call-bind/index.js", "../../../../node_modules/call-bind/callBound.js", "../../../../node_modules/is-arguments/index.js", "../../../../node_modules/call-bound/index.js", "../../../../node_modules/is-regex/index.js", "../../../../node_modules/safe-regex-test/index.js", "../../../../node_modules/generator-function/index.js", "../../../../node_modules/is-generator-function/index.js", "../../../../node_modules/is-callable/index.js", "../../../../node_modules/for-each/index.js", "../../../../node_modules/possible-typed-array-names/index.js", "../../../../node_modules/available-typed-arrays/index.js", "../../../../node_modules/which-typed-array/index.js", "../../../../node_modules/is-typed-array/index.js", "../../../../node_modules/util/support/types.js", "../../../../node_modules/util/support/isBufferBrowser.js", "../../../../node_modules/inherits/inherits_browser.js", "../../../../node_modules/util/util.js", "../../node_modules/vscode-languageserver-types/lib/esm/main.js", "webpack://LIB/node_modules/path-browserify/index.js", "webpack://LIB/webpack/bootstrap", "webpack://LIB/webpack/runtime/define%20property%20getters", "webpack://LIB/webpack/runtime/hasOwnProperty%20shorthand", "webpack://LIB/webpack/runtime/make%20namespace%20object", "webpack://LIB/src/platform.ts", "webpack://LIB/src/uri.ts", "webpack://LIB/src/utils.ts", "../../node_modules/@vscode/emmet-helper/src/data.ts", "../../node_modules/@vscode/emmet-helper/src/fileService.ts", "../../node_modules/emmet/packages/scanner/scanner.js", "../../node_modules/emmet/packages/abbreviation/dist/index.js", "../../node_modules/emmet/packages/css-abbreviation/dist/index.js", "../../node_modules/emmet/src/markup/attributes.ts", "../../node_modules/emmet/src/markup/utils.ts", "../../node_modules/emmet/src/markup/snippets.ts", "../../node_modules/emmet/src/output-stream.ts", "../../node_modules/emmet/src/markup/implicit-tag.ts", "../../node_modules/emmet/src/markup/lorem/latin.json", "../../node_modules/emmet/src/markup/lorem/russian.json", "../../node_modules/emmet/src/markup/lorem/spanish.json", "../../node_modules/emmet/src/markup/lorem/index.ts", "../../node_modules/emmet/src/markup/addon/xsl.ts", "../../node_modules/emmet/src/markup/addon/bem.ts", "../../node_modules/emmet/src/markup/addon/label.ts", "../../node_modules/emmet/src/markup/format/walk.ts", "../../node_modules/emmet/src/markup/format/utils.ts", "../../node_modules/emmet/src/markup/format/template.ts", "../../node_modules/emmet/src/markup/format/comment.ts", "../../node_modules/emmet/src/markup/format/html.ts", "../../node_modules/emmet/src/markup/format/indent-format.ts", "../../node_modules/emmet/src/markup/format/haml.ts", "../../node_modules/emmet/src/markup/format/slim.ts", "../../node_modules/emmet/src/markup/format/pug.ts", "../../node_modules/emmet/src/markup/index.ts", "../../node_modules/emmet/src/stylesheet/snippets.ts", "../../node_modules/emmet/src/stylesheet/score.ts", "../../node_modules/emmet/src/stylesheet/color.ts", "../../node_modules/emmet/src/stylesheet/format.ts", "../../node_modules/emmet/src/stylesheet/index.ts", "../../node_modules/emmet/src/snippets/html.json", "../../node_modules/emmet/src/snippets/css.json", "../../node_modules/emmet/src/snippets/xsl.json", "../../node_modules/emmet/src/snippets/pug.json", "../../node_modules/emmet/src/snippets/variables.json", "../../node_modules/emmet/src/config.ts", "../../node_modules/emmet/src/extract-abbreviation/reader.ts", "../../node_modules/emmet/src/extract-abbreviation/quotes.ts", "../../node_modules/emmet/src/extract-abbreviation/brackets.ts", "../../node_modules/emmet/src/extract-abbreviation/is-html.ts", "../../node_modules/emmet/src/extract-abbreviation/index.ts", "../../node_modules/emmet/src/index.ts", "../../node_modules/@vscode/emmet-helper/src/configCompat.ts", "../../node_modules/@vscode/emmet-helper/src/emmetHelper.ts", "../../src/browser/emmetBrowserMain.ts", "../../src/emmetCommon.ts", "../../src/defaultCompletionProvider.ts", "../../src/abbreviationActions.ts", "../../src/util.ts", "../../node_modules/@emmetio/html-matcher/dist/html-matcher.es.js", "../../node_modules/@emmetio/stream-reader/dist/stream-reader.es.js", "../../node_modules/@emmetio/stream-reader-utils/dist/stream-reader-utils.es.js", "../../node_modules/@emmetio/css-parser/dist/css-parser.es.js", "../../src/bufferStream.ts", "../../node_modules/vscode-languageserver-textdocument/lib/esm/main.js", "../../src/parseDocument.ts", "../../src/removeTag.ts", "../../src/updateTag.ts", "../../src/matchTag.ts", "../../src/balance.ts", "../../src/splitJoinTag.ts", "../../src/mergeLines.ts", "../../src/toggleComment.ts", "../../src/editPoint.ts", "../../src/selectItem.ts", "../../src/selectItemHTML.ts", "../../src/selectItemStylesheet.ts", "../../src/evaluateMathExpression.ts", "../../node_modules/@emmetio/scanner/packages/scanner/src/utils.ts", "../../node_modules/@emmetio/scanner/packages/scanner/src/scanner.ts", "../../node_modules/@emmetio/math-expression/src/parser.ts", "../../node_modules/@emmetio/math-expression/src/extract.ts", "../../node_modules/@emmetio/math-expression/src/index.ts", "../../src/incrementDecrement.ts", "../../src/reflectCssValue.ts"],
|
|
4
|
-
"sourcesContent": ["{}", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport function createScanner(text, ignoreTrivia) {\n if (ignoreTrivia === void 0) { ignoreTrivia = false; }\n var len = text.length;\n var pos = 0, value = '', tokenOffset = 0, token = 16 /* Unknown */, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0 /* None */;\n function scanHexDigits(count, exact) {\n var digits = 0;\n var value = 0;\n while (digits < count || !exact) {\n var ch = text.charCodeAt(pos);\n if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {\n value = value * 16 + ch - 48 /* _0 */;\n }\n else if (ch >= 65 /* A */ && ch <= 70 /* F */) {\n value = value * 16 + ch - 65 /* A */ + 10;\n }\n else if (ch >= 97 /* a */ && ch <= 102 /* f */) {\n value = value * 16 + ch - 97 /* a */ + 10;\n }\n else {\n break;\n }\n pos++;\n digits++;\n }\n if (digits < count) {\n value = -1;\n }\n return value;\n }\n function setPosition(newPosition) {\n pos = newPosition;\n value = '';\n tokenOffset = 0;\n token = 16 /* Unknown */;\n scanError = 0 /* None */;\n }\n function scanNumber() {\n var start = pos;\n if (text.charCodeAt(pos) === 48 /* _0 */) {\n pos++;\n }\n else {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n if (pos < text.length && text.charCodeAt(pos) === 46 /* dot */) {\n pos++;\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n else {\n scanError = 3 /* UnexpectedEndOfNumber */;\n return text.substring(start, pos);\n }\n }\n var end = pos;\n if (pos < text.length && (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */)) {\n pos++;\n if (pos < text.length && text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) {\n pos++;\n }\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n end = pos;\n }\n else {\n scanError = 3 /* UnexpectedEndOfNumber */;\n }\n }\n return text.substring(start, end);\n }\n function scanString() {\n var result = '', start = pos;\n while (true) {\n if (pos >= len) {\n result += text.substring(start, pos);\n scanError = 2 /* UnexpectedEndOfString */;\n break;\n }\n var ch = text.charCodeAt(pos);\n if (ch === 34 /* doubleQuote */) {\n result += text.substring(start, pos);\n pos++;\n break;\n }\n if (ch === 92 /* backslash */) {\n result += text.substring(start, pos);\n pos++;\n if (pos >= len) {\n scanError = 2 /* UnexpectedEndOfString */;\n break;\n }\n var ch2 = text.charCodeAt(pos++);\n switch (ch2) {\n case 34 /* doubleQuote */:\n result += '\\\"';\n break;\n case 92 /* backslash */:\n result += '\\\\';\n break;\n case 47 /* slash */:\n result += '/';\n break;\n case 98 /* b */:\n result += '\\b';\n break;\n case 102 /* f */:\n result += '\\f';\n break;\n case 110 /* n */:\n result += '\\n';\n break;\n case 114 /* r */:\n result += '\\r';\n break;\n case 116 /* t */:\n result += '\\t';\n break;\n case 117 /* u */:\n var ch3 = scanHexDigits(4, true);\n if (ch3 >= 0) {\n result += String.fromCharCode(ch3);\n }\n else {\n scanError = 4 /* InvalidUnicode */;\n }\n break;\n default:\n scanError = 5 /* InvalidEscapeCharacter */;\n }\n start = pos;\n continue;\n }\n if (ch >= 0 && ch <= 0x1f) {\n if (isLineBreak(ch)) {\n result += text.substring(start, pos);\n scanError = 2 /* UnexpectedEndOfString */;\n break;\n }\n else {\n scanError = 6 /* InvalidCharacter */;\n // mark as error but continue with string\n }\n }\n pos++;\n }\n return result;\n }\n function scanNext() {\n value = '';\n scanError = 0 /* None */;\n tokenOffset = pos;\n lineStartOffset = lineNumber;\n prevTokenLineStartOffset = tokenLineStartOffset;\n if (pos >= len) {\n // at the end\n tokenOffset = len;\n return token = 17 /* EOF */;\n }\n var code = text.charCodeAt(pos);\n // trivia: whitespace\n if (isWhiteSpace(code)) {\n do {\n pos++;\n value += String.fromCharCode(code);\n code = text.charCodeAt(pos);\n } while (isWhiteSpace(code));\n return token = 15 /* Trivia */;\n }\n // trivia: newlines\n if (isLineBreak(code)) {\n pos++;\n value += String.fromCharCode(code);\n if (code === 13 /* carriageReturn */ && text.charCodeAt(pos) === 10 /* lineFeed */) {\n pos++;\n value += '\\n';\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n return token = 14 /* LineBreakTrivia */;\n }\n switch (code) {\n // tokens: []{}:,\n case 123 /* openBrace */:\n pos++;\n return token = 1 /* OpenBraceToken */;\n case 125 /* closeBrace */:\n pos++;\n return token = 2 /* CloseBraceToken */;\n case 91 /* openBracket */:\n pos++;\n return token = 3 /* OpenBracketToken */;\n case 93 /* closeBracket */:\n pos++;\n return token = 4 /* CloseBracketToken */;\n case 58 /* colon */:\n pos++;\n return token = 6 /* ColonToken */;\n case 44 /* comma */:\n pos++;\n return token = 5 /* CommaToken */;\n // strings\n case 34 /* doubleQuote */:\n pos++;\n value = scanString();\n return token = 10 /* StringLiteral */;\n // comments\n case 47 /* slash */:\n var start = pos - 1;\n // Single-line comment\n if (text.charCodeAt(pos + 1) === 47 /* slash */) {\n pos += 2;\n while (pos < len) {\n if (isLineBreak(text.charCodeAt(pos))) {\n break;\n }\n pos++;\n }\n value = text.substring(start, pos);\n return token = 12 /* LineCommentTrivia */;\n }\n // Multi-line comment\n if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {\n pos += 2;\n var safeLength = len - 1; // For lookahead.\n var commentClosed = false;\n while (pos < safeLength) {\n var ch = text.charCodeAt(pos);\n if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {\n pos += 2;\n commentClosed = true;\n break;\n }\n pos++;\n if (isLineBreak(ch)) {\n if (ch === 13 /* carriageReturn */ && text.charCodeAt(pos) === 10 /* lineFeed */) {\n pos++;\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n }\n }\n if (!commentClosed) {\n pos++;\n scanError = 1 /* UnexpectedEndOfComment */;\n }\n value = text.substring(start, pos);\n return token = 13 /* BlockCommentTrivia */;\n }\n // just a single slash\n value += String.fromCharCode(code);\n pos++;\n return token = 16 /* Unknown */;\n // numbers\n case 45 /* minus */:\n value += String.fromCharCode(code);\n pos++;\n if (pos === len || !isDigit(text.charCodeAt(pos))) {\n return token = 16 /* Unknown */;\n }\n // found a minus, followed by a number so\n // we fall through to proceed with scanning\n // numbers\n case 48 /* _0 */:\n case 49 /* _1 */:\n case 50 /* _2 */:\n case 51 /* _3 */:\n case 52 /* _4 */:\n case 53 /* _5 */:\n case 54 /* _6 */:\n case 55 /* _7 */:\n case 56 /* _8 */:\n case 57 /* _9 */:\n value += scanNumber();\n return token = 11 /* NumericLiteral */;\n // literals and unknown symbols\n default:\n // is a literal? Read the full word.\n while (pos < len && isUnknownContentCharacter(code)) {\n pos++;\n code = text.charCodeAt(pos);\n }\n if (tokenOffset !== pos) {\n value = text.substring(tokenOffset, pos);\n // keywords: true, false, null\n switch (value) {\n case 'true': return token = 8 /* TrueKeyword */;\n case 'false': return token = 9 /* FalseKeyword */;\n case 'null': return token = 7 /* NullKeyword */;\n }\n return token = 16 /* Unknown */;\n }\n // some\n value += String.fromCharCode(code);\n pos++;\n return token = 16 /* Unknown */;\n }\n }\n function isUnknownContentCharacter(code) {\n if (isWhiteSpace(code) || isLineBreak(code)) {\n return false;\n }\n switch (code) {\n case 125 /* closeBrace */:\n case 93 /* closeBracket */:\n case 123 /* openBrace */:\n case 91 /* openBracket */:\n case 34 /* doubleQuote */:\n case 58 /* colon */:\n case 44 /* comma */:\n case 47 /* slash */:\n return false;\n }\n return true;\n }\n function scanNextNonTrivia() {\n var result;\n do {\n result = scanNext();\n } while (result >= 12 /* LineCommentTrivia */ && result <= 15 /* Trivia */);\n return result;\n }\n return {\n setPosition: setPosition,\n getPosition: function () { return pos; },\n scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n getToken: function () { return token; },\n getTokenValue: function () { return value; },\n getTokenOffset: function () { return tokenOffset; },\n getTokenLength: function () { return pos - tokenOffset; },\n getTokenStartLine: function () { return lineStartOffset; },\n getTokenStartCharacter: function () { return tokenOffset - prevTokenLineStartOffset; },\n getTokenError: function () { return scanError; },\n };\n}\nfunction isWhiteSpace(ch) {\n return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ ||\n ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ ||\n ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */;\n}\nfunction isLineBreak(ch) {\n return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */;\n}\nfunction isDigit(ch) {\n return ch >= 48 /* _0 */ && ch <= 57 /* _9 */;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nexport function format(documentText, range, options) {\n var initialIndentLevel;\n var formatText;\n var formatTextStart;\n var rangeStart;\n var rangeEnd;\n if (range) {\n rangeStart = range.offset;\n rangeEnd = rangeStart + range.length;\n formatTextStart = rangeStart;\n while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {\n formatTextStart--;\n }\n var endOffset = rangeEnd;\n while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n endOffset++;\n }\n formatText = documentText.substring(formatTextStart, endOffset);\n initialIndentLevel = computeIndentLevel(formatText, options);\n }\n else {\n formatText = documentText;\n initialIndentLevel = 0;\n formatTextStart = 0;\n rangeStart = 0;\n rangeEnd = documentText.length;\n }\n var eol = getEOL(options, documentText);\n var lineBreak = false;\n var indentLevel = 0;\n var indentValue;\n if (options.insertSpaces) {\n indentValue = repeat(' ', options.tabSize || 4);\n }\n else {\n indentValue = '\\t';\n }\n var scanner = createScanner(formatText, false);\n var hasError = false;\n function newLineAndIndent() {\n return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n }\n function scanNext() {\n var token = scanner.scan();\n lineBreak = false;\n while (token === 15 /* Trivia */ || token === 14 /* LineBreakTrivia */) {\n lineBreak = lineBreak || (token === 14 /* LineBreakTrivia */);\n token = scanner.scan();\n }\n hasError = token === 16 /* Unknown */ || scanner.getTokenError() !== 0 /* None */;\n return token;\n }\n var editOperations = [];\n function addEdit(text, startOffset, endOffset) {\n if (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {\n editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n }\n }\n var firstToken = scanNext();\n if (firstToken !== 17 /* EOF */) {\n var firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n var initialIndent = repeat(indentValue, initialIndentLevel);\n addEdit(initialIndent, formatTextStart, firstTokenStart);\n }\n while (firstToken !== 17 /* EOF */) {\n var firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n var secondToken = scanNext();\n var replaceContent = '';\n while (!lineBreak && (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */)) {\n // comments on the same line: keep them on the same line, but ignore them otherwise\n var commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(' ', firstTokenEnd, commentTokenStart);\n firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n replaceContent = secondToken === 12 /* LineCommentTrivia */ ? newLineAndIndent() : '';\n secondToken = scanNext();\n }\n if (secondToken === 2 /* CloseBraceToken */) {\n if (firstToken !== 1 /* OpenBraceToken */) {\n indentLevel--;\n replaceContent = newLineAndIndent();\n }\n }\n else if (secondToken === 4 /* CloseBracketToken */) {\n if (firstToken !== 3 /* OpenBracketToken */) {\n indentLevel--;\n replaceContent = newLineAndIndent();\n }\n }\n else {\n switch (firstToken) {\n case 3 /* OpenBracketToken */:\n case 1 /* OpenBraceToken */:\n indentLevel++;\n replaceContent = newLineAndIndent();\n break;\n case 5 /* CommaToken */:\n case 12 /* LineCommentTrivia */:\n replaceContent = newLineAndIndent();\n break;\n case 13 /* BlockCommentTrivia */:\n if (lineBreak) {\n replaceContent = newLineAndIndent();\n }\n else {\n // symbol following comment on the same line: keep on same line, separate with ' '\n replaceContent = ' ';\n }\n break;\n case 6 /* ColonToken */:\n replaceContent = ' ';\n break;\n case 10 /* StringLiteral */:\n if (secondToken === 6 /* ColonToken */) {\n replaceContent = '';\n break;\n }\n // fall through\n case 7 /* NullKeyword */:\n case 8 /* TrueKeyword */:\n case 9 /* FalseKeyword */:\n case 11 /* NumericLiteral */:\n case 2 /* CloseBraceToken */:\n case 4 /* CloseBracketToken */:\n if (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */) {\n replaceContent = ' ';\n }\n else if (secondToken !== 5 /* CommaToken */ && secondToken !== 17 /* EOF */) {\n hasError = true;\n }\n break;\n case 16 /* Unknown */:\n hasError = true;\n break;\n }\n if (lineBreak && (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */)) {\n replaceContent = newLineAndIndent();\n }\n }\n var secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n firstToken = secondToken;\n }\n return editOperations;\n}\nfunction repeat(s, count) {\n var result = '';\n for (var i = 0; i < count; i++) {\n result += s;\n }\n return result;\n}\nfunction computeIndentLevel(content, options) {\n var i = 0;\n var nChars = 0;\n var tabSize = options.tabSize || 4;\n while (i < content.length) {\n var ch = content.charAt(i);\n if (ch === ' ') {\n nChars++;\n }\n else if (ch === '\\t') {\n nChars += tabSize;\n }\n else {\n break;\n }\n i++;\n }\n return Math.floor(nChars / tabSize);\n}\nfunction getEOL(options, text) {\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch === '\\r') {\n if (i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n return '\\r\\n';\n }\n return '\\r';\n }\n else if (ch === '\\n') {\n return '\\n';\n }\n }\n return (options && options.eol) || '\\n';\n}\nexport function isEOL(text, offset) {\n return '\\r\\n'.indexOf(text.charAt(offset)) !== -1;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nvar ParseOptions;\n(function (ParseOptions) {\n ParseOptions.DEFAULT = {\n allowTrailingComma: false\n };\n})(ParseOptions || (ParseOptions = {}));\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport function getLocation(text, position) {\n var segments = []; // strings or numbers\n var earlyReturnException = new Object();\n var previousNode = undefined;\n var previousNodeInst = {\n value: {},\n offset: 0,\n length: 0,\n type: 'object',\n parent: undefined\n };\n var isAtPropertyKey = false;\n function setPreviousNode(value, offset, length, type) {\n previousNodeInst.value = value;\n previousNodeInst.offset = offset;\n previousNodeInst.length = length;\n previousNodeInst.type = type;\n previousNodeInst.colonOffset = undefined;\n previousNode = previousNodeInst;\n }\n try {\n visit(text, {\n onObjectBegin: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n isAtPropertyKey = position > offset;\n segments.push(''); // push a placeholder (will be replaced)\n },\n onObjectProperty: function (name, offset, length) {\n if (position < offset) {\n throw earlyReturnException;\n }\n setPreviousNode(name, offset, length, 'property');\n segments[segments.length - 1] = name;\n if (position <= offset + length) {\n throw earlyReturnException;\n }\n },\n onObjectEnd: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.pop();\n },\n onArrayBegin: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.push(0);\n },\n onArrayEnd: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.pop();\n },\n onLiteralValue: function (value, offset, length) {\n if (position < offset) {\n throw earlyReturnException;\n }\n setPreviousNode(value, offset, length, getNodeType(value));\n if (position <= offset + length) {\n throw earlyReturnException;\n }\n },\n onSeparator: function (sep, offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n if (sep === ':' && previousNode && previousNode.type === 'property') {\n previousNode.colonOffset = offset;\n isAtPropertyKey = false;\n previousNode = undefined;\n }\n else if (sep === ',') {\n var last = segments[segments.length - 1];\n if (typeof last === 'number') {\n segments[segments.length - 1] = last + 1;\n }\n else {\n isAtPropertyKey = true;\n segments[segments.length - 1] = '';\n }\n previousNode = undefined;\n }\n }\n });\n }\n catch (e) {\n if (e !== earlyReturnException) {\n throw e;\n }\n }\n return {\n path: segments,\n previousNode: previousNode,\n isAtPropertyKey: isAtPropertyKey,\n matches: function (pattern) {\n var k = 0;\n for (var i = 0; k < pattern.length && i < segments.length; i++) {\n if (pattern[k] === segments[i] || pattern[k] === '*') {\n k++;\n }\n else if (pattern[k] !== '**') {\n return false;\n }\n }\n return k === pattern.length;\n }\n };\n}\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport function parse(text, errors, options) {\n if (errors === void 0) { errors = []; }\n if (options === void 0) { options = ParseOptions.DEFAULT; }\n var currentProperty = null;\n var currentParent = [];\n var previousParents = [];\n function onValue(value) {\n if (Array.isArray(currentParent)) {\n currentParent.push(value);\n }\n else if (currentProperty !== null) {\n currentParent[currentProperty] = value;\n }\n }\n var visitor = {\n onObjectBegin: function () {\n var object = {};\n onValue(object);\n previousParents.push(currentParent);\n currentParent = object;\n currentProperty = null;\n },\n onObjectProperty: function (name) {\n currentProperty = name;\n },\n onObjectEnd: function () {\n currentParent = previousParents.pop();\n },\n onArrayBegin: function () {\n var array = [];\n onValue(array);\n previousParents.push(currentParent);\n currentParent = array;\n currentProperty = null;\n },\n onArrayEnd: function () {\n currentParent = previousParents.pop();\n },\n onLiteralValue: onValue,\n onError: function (error, offset, length) {\n errors.push({ error: error, offset: offset, length: length });\n }\n };\n visit(text, visitor, options);\n return currentParent[0];\n}\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport function parseTree(text, errors, options) {\n if (errors === void 0) { errors = []; }\n if (options === void 0) { options = ParseOptions.DEFAULT; }\n var currentParent = { type: 'array', offset: -1, length: -1, children: [], parent: undefined }; // artificial root\n function ensurePropertyComplete(endOffset) {\n if (currentParent.type === 'property') {\n currentParent.length = endOffset - currentParent.offset;\n currentParent = currentParent.parent;\n }\n }\n function onValue(valueNode) {\n currentParent.children.push(valueNode);\n return valueNode;\n }\n var visitor = {\n onObjectBegin: function (offset) {\n currentParent = onValue({ type: 'object', offset: offset, length: -1, parent: currentParent, children: [] });\n },\n onObjectProperty: function (name, offset, length) {\n currentParent = onValue({ type: 'property', offset: offset, length: -1, parent: currentParent, children: [] });\n currentParent.children.push({ type: 'string', value: name, offset: offset, length: length, parent: currentParent });\n },\n onObjectEnd: function (offset, length) {\n ensurePropertyComplete(offset + length); // in case of a missing value for a property: make sure property is complete\n currentParent.length = offset + length - currentParent.offset;\n currentParent = currentParent.parent;\n ensurePropertyComplete(offset + length);\n },\n onArrayBegin: function (offset, length) {\n currentParent = onValue({ type: 'array', offset: offset, length: -1, parent: currentParent, children: [] });\n },\n onArrayEnd: function (offset, length) {\n currentParent.length = offset + length - currentParent.offset;\n currentParent = currentParent.parent;\n ensurePropertyComplete(offset + length);\n },\n onLiteralValue: function (value, offset, length) {\n onValue({ type: getNodeType(value), offset: offset, length: length, parent: currentParent, value: value });\n ensurePropertyComplete(offset + length);\n },\n onSeparator: function (sep, offset, length) {\n if (currentParent.type === 'property') {\n if (sep === ':') {\n currentParent.colonOffset = offset;\n }\n else if (sep === ',') {\n ensurePropertyComplete(offset);\n }\n }\n },\n onError: function (error, offset, length) {\n errors.push({ error: error, offset: offset, length: length });\n }\n };\n visit(text, visitor, options);\n var result = currentParent.children[0];\n if (result) {\n delete result.parent;\n }\n return result;\n}\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport function findNodeAtLocation(root, path) {\n if (!root) {\n return undefined;\n }\n var node = root;\n for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {\n var segment = path_1[_i];\n if (typeof segment === 'string') {\n if (node.type !== 'object' || !Array.isArray(node.children)) {\n return undefined;\n }\n var found = false;\n for (var _a = 0, _b = node.children; _a < _b.length; _a++) {\n var propertyNode = _b[_a];\n if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment) {\n node = propertyNode.children[1];\n found = true;\n break;\n }\n }\n if (!found) {\n return undefined;\n }\n }\n else {\n var index = segment;\n if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {\n return undefined;\n }\n node = node.children[index];\n }\n }\n return node;\n}\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport function getNodePath(node) {\n if (!node.parent || !node.parent.children) {\n return [];\n }\n var path = getNodePath(node.parent);\n if (node.parent.type === 'property') {\n var key = node.parent.children[0].value;\n path.push(key);\n }\n else if (node.parent.type === 'array') {\n var index = node.parent.children.indexOf(node);\n if (index !== -1) {\n path.push(index);\n }\n }\n return path;\n}\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport function getNodeValue(node) {\n switch (node.type) {\n case 'array':\n return node.children.map(getNodeValue);\n case 'object':\n var obj = Object.create(null);\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var prop = _a[_i];\n var valueNode = prop.children[1];\n if (valueNode) {\n obj[prop.children[0].value] = getNodeValue(valueNode);\n }\n }\n return obj;\n case 'null':\n case 'string':\n case 'number':\n case 'boolean':\n return node.value;\n default:\n return undefined;\n }\n}\nexport function contains(node, offset, includeRightBound) {\n if (includeRightBound === void 0) { includeRightBound = false; }\n return (offset >= node.offset && offset < (node.offset + node.length)) || includeRightBound && (offset === (node.offset + node.length));\n}\n/**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport function findNodeAtOffset(node, offset, includeRightBound) {\n if (includeRightBound === void 0) { includeRightBound = false; }\n if (contains(node, offset, includeRightBound)) {\n var children = node.children;\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length && children[i].offset <= offset; i++) {\n var item = findNodeAtOffset(children[i], offset, includeRightBound);\n if (item) {\n return item;\n }\n }\n }\n return node;\n }\n return undefined;\n}\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport function visit(text, visitor, options) {\n if (options === void 0) { options = ParseOptions.DEFAULT; }\n var _scanner = createScanner(text, false);\n function toNoArgVisit(visitFunction) {\n return visitFunction ? function () { return visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()); } : function () { return true; };\n }\n function toOneArgVisit(visitFunction) {\n return visitFunction ? function (arg) { return visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()); } : function () { return true; };\n }\n var onObjectBegin = toNoArgVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisit(visitor.onObjectProperty), onObjectEnd = toNoArgVisit(visitor.onObjectEnd), onArrayBegin = toNoArgVisit(visitor.onArrayBegin), onArrayEnd = toNoArgVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisit(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n var disallowComments = options && options.disallowComments;\n var allowTrailingComma = options && options.allowTrailingComma;\n function scanNext() {\n while (true) {\n var token = _scanner.scan();\n switch (_scanner.getTokenError()) {\n case 4 /* InvalidUnicode */:\n handleError(14 /* InvalidUnicode */);\n break;\n case 5 /* InvalidEscapeCharacter */:\n handleError(15 /* InvalidEscapeCharacter */);\n break;\n case 3 /* UnexpectedEndOfNumber */:\n handleError(13 /* UnexpectedEndOfNumber */);\n break;\n case 1 /* UnexpectedEndOfComment */:\n if (!disallowComments) {\n handleError(11 /* UnexpectedEndOfComment */);\n }\n break;\n case 2 /* UnexpectedEndOfString */:\n handleError(12 /* UnexpectedEndOfString */);\n break;\n case 6 /* InvalidCharacter */:\n handleError(16 /* InvalidCharacter */);\n break;\n }\n switch (token) {\n case 12 /* LineCommentTrivia */:\n case 13 /* BlockCommentTrivia */:\n if (disallowComments) {\n handleError(10 /* InvalidCommentToken */);\n }\n else {\n onComment();\n }\n break;\n case 16 /* Unknown */:\n handleError(1 /* InvalidSymbol */);\n break;\n case 15 /* Trivia */:\n case 14 /* LineBreakTrivia */:\n break;\n default:\n return token;\n }\n }\n }\n function handleError(error, skipUntilAfter, skipUntil) {\n if (skipUntilAfter === void 0) { skipUntilAfter = []; }\n if (skipUntil === void 0) { skipUntil = []; }\n onError(error);\n if (skipUntilAfter.length + skipUntil.length > 0) {\n var token = _scanner.getToken();\n while (token !== 17 /* EOF */) {\n if (skipUntilAfter.indexOf(token) !== -1) {\n scanNext();\n break;\n }\n else if (skipUntil.indexOf(token) !== -1) {\n break;\n }\n token = scanNext();\n }\n }\n }\n function parseString(isValue) {\n var value = _scanner.getTokenValue();\n if (isValue) {\n onLiteralValue(value);\n }\n else {\n onObjectProperty(value);\n }\n scanNext();\n return true;\n }\n function parseLiteral() {\n switch (_scanner.getToken()) {\n case 11 /* NumericLiteral */:\n var tokenValue = _scanner.getTokenValue();\n var value = Number(tokenValue);\n if (isNaN(value)) {\n handleError(2 /* InvalidNumberFormat */);\n value = 0;\n }\n onLiteralValue(value);\n break;\n case 7 /* NullKeyword */:\n onLiteralValue(null);\n break;\n case 8 /* TrueKeyword */:\n onLiteralValue(true);\n break;\n case 9 /* FalseKeyword */:\n onLiteralValue(false);\n break;\n default:\n return false;\n }\n scanNext();\n return true;\n }\n function parseProperty() {\n if (_scanner.getToken() !== 10 /* StringLiteral */) {\n handleError(3 /* PropertyNameExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n return false;\n }\n parseString(false);\n if (_scanner.getToken() === 6 /* ColonToken */) {\n onSeparator(':');\n scanNext(); // consume colon\n if (!parseValue()) {\n handleError(4 /* ValueExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n }\n }\n else {\n handleError(5 /* ColonExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n }\n return true;\n }\n function parseObject() {\n onObjectBegin();\n scanNext(); // consume open brace\n var needsComma = false;\n while (_scanner.getToken() !== 2 /* CloseBraceToken */ && _scanner.getToken() !== 17 /* EOF */) {\n if (_scanner.getToken() === 5 /* CommaToken */) {\n if (!needsComma) {\n handleError(4 /* ValueExpected */, [], []);\n }\n onSeparator(',');\n scanNext(); // consume comma\n if (_scanner.getToken() === 2 /* CloseBraceToken */ && allowTrailingComma) {\n break;\n }\n }\n else if (needsComma) {\n handleError(6 /* CommaExpected */, [], []);\n }\n if (!parseProperty()) {\n handleError(4 /* ValueExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n }\n needsComma = true;\n }\n onObjectEnd();\n if (_scanner.getToken() !== 2 /* CloseBraceToken */) {\n handleError(7 /* CloseBraceExpected */, [2 /* CloseBraceToken */], []);\n }\n else {\n scanNext(); // consume close brace\n }\n return true;\n }\n function parseArray() {\n onArrayBegin();\n scanNext(); // consume open bracket\n var needsComma = false;\n while (_scanner.getToken() !== 4 /* CloseBracketToken */ && _scanner.getToken() !== 17 /* EOF */) {\n if (_scanner.getToken() === 5 /* CommaToken */) {\n if (!needsComma) {\n handleError(4 /* ValueExpected */, [], []);\n }\n onSeparator(',');\n scanNext(); // consume comma\n if (_scanner.getToken() === 4 /* CloseBracketToken */ && allowTrailingComma) {\n break;\n }\n }\n else if (needsComma) {\n handleError(6 /* CommaExpected */, [], []);\n }\n if (!parseValue()) {\n handleError(4 /* ValueExpected */, [], [4 /* CloseBracketToken */, 5 /* CommaToken */]);\n }\n needsComma = true;\n }\n onArrayEnd();\n if (_scanner.getToken() !== 4 /* CloseBracketToken */) {\n handleError(8 /* CloseBracketExpected */, [4 /* CloseBracketToken */], []);\n }\n else {\n scanNext(); // consume close bracket\n }\n return true;\n }\n function parseValue() {\n switch (_scanner.getToken()) {\n case 3 /* OpenBracketToken */:\n return parseArray();\n case 1 /* OpenBraceToken */:\n return parseObject();\n case 10 /* StringLiteral */:\n return parseString(true);\n default:\n return parseLiteral();\n }\n }\n scanNext();\n if (_scanner.getToken() === 17 /* EOF */) {\n if (options.allowEmptyContent) {\n return true;\n }\n handleError(4 /* ValueExpected */, [], []);\n return false;\n }\n if (!parseValue()) {\n handleError(4 /* ValueExpected */, [], []);\n return false;\n }\n if (_scanner.getToken() !== 17 /* EOF */) {\n handleError(9 /* EndOfFileExpected */, [], []);\n }\n return true;\n}\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport function stripComments(text, replaceCh) {\n var _scanner = createScanner(text), parts = [], kind, offset = 0, pos;\n do {\n pos = _scanner.getPosition();\n kind = _scanner.scan();\n switch (kind) {\n case 12 /* LineCommentTrivia */:\n case 13 /* BlockCommentTrivia */:\n case 17 /* EOF */:\n if (offset !== pos) {\n parts.push(text.substring(offset, pos));\n }\n if (replaceCh !== undefined) {\n parts.push(_scanner.getTokenValue().replace(/[^\\r\\n]/g, replaceCh));\n }\n offset = _scanner.getPosition();\n break;\n }\n } while (kind !== 17 /* EOF */);\n return parts.join('');\n}\nexport function getNodeType(value) {\n switch (typeof value) {\n case 'boolean': return 'boolean';\n case 'number': return 'number';\n case 'string': return 'string';\n case 'object': {\n if (!value) {\n return 'null';\n }\n else if (Array.isArray(value)) {\n return 'array';\n }\n return 'object';\n }\n default: return 'null';\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { format, isEOL } from './format';\nimport { parseTree, findNodeAtLocation } from './parser';\nexport function removeProperty(text, path, options) {\n return setProperty(text, path, void 0, options);\n}\nexport function setProperty(text, originalPath, value, options) {\n var _a;\n var path = originalPath.slice();\n var errors = [];\n var root = parseTree(text, errors);\n var parent = void 0;\n var lastSegment = void 0;\n while (path.length > 0) {\n lastSegment = path.pop();\n parent = findNodeAtLocation(root, path);\n if (parent === void 0 && value !== void 0) {\n if (typeof lastSegment === 'string') {\n value = (_a = {}, _a[lastSegment] = value, _a);\n }\n else {\n value = [value];\n }\n }\n else {\n break;\n }\n }\n if (!parent) {\n // empty document\n if (value === void 0) { // delete\n throw new Error('Can not delete in empty document');\n }\n return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, options);\n }\n else if (parent.type === 'object' && typeof lastSegment === 'string' && Array.isArray(parent.children)) {\n var existing = findNodeAtLocation(parent, [lastSegment]);\n if (existing !== void 0) {\n if (value === void 0) { // delete\n if (!existing.parent) {\n throw new Error('Malformed AST');\n }\n var propertyIndex = parent.children.indexOf(existing.parent);\n var removeBegin = void 0;\n var removeEnd = existing.parent.offset + existing.parent.length;\n if (propertyIndex > 0) {\n // remove the comma of the previous node\n var previous = parent.children[propertyIndex - 1];\n removeBegin = previous.offset + previous.length;\n }\n else {\n removeBegin = parent.offset + 1;\n if (parent.children.length > 1) {\n // remove the comma of the next node\n var next = parent.children[1];\n removeEnd = next.offset;\n }\n }\n return withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: '' }, options);\n }\n else {\n // set value of existing property\n return withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, options);\n }\n }\n else {\n if (value === void 0) { // delete\n return []; // property does not exist, nothing to do\n }\n var newProperty = JSON.stringify(lastSegment) + \": \" + JSON.stringify(value);\n var index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map(function (p) { return p.children[0].value; })) : parent.children.length;\n var edit = void 0;\n if (index > 0) {\n var previous = parent.children[index - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n else if (parent.children.length === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n }\n else {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty + ',' };\n }\n return withFormatting(text, edit, options);\n }\n }\n else if (parent.type === 'array' && typeof lastSegment === 'number' && Array.isArray(parent.children)) {\n var insertIndex = lastSegment;\n if (insertIndex === -1) {\n // Insert\n var newProperty = \"\" + JSON.stringify(value);\n var edit = void 0;\n if (parent.children.length === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n }\n else {\n var previous = parent.children[parent.children.length - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n return withFormatting(text, edit, options);\n }\n else if (value === void 0 && parent.children.length >= 0) {\n // Removal\n var removalIndex = lastSegment;\n var toRemove = parent.children[removalIndex];\n var edit = void 0;\n if (parent.children.length === 1) {\n // only item\n edit = { offset: parent.offset + 1, length: parent.length - 2, content: '' };\n }\n else if (parent.children.length - 1 === removalIndex) {\n // last item\n var previous = parent.children[removalIndex - 1];\n var offset = previous.offset + previous.length;\n var parentEndOffset = parent.offset + parent.length;\n edit = { offset: offset, length: parentEndOffset - 2 - offset, content: '' };\n }\n else {\n edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: '' };\n }\n return withFormatting(text, edit, options);\n }\n else if (value !== void 0) {\n var edit = void 0;\n var newProperty = \"\" + JSON.stringify(value);\n if (!options.isArrayInsertion && parent.children.length > lastSegment) {\n var toModify = parent.children[lastSegment];\n edit = { offset: toModify.offset, length: toModify.length, content: newProperty };\n }\n else if (parent.children.length === 0 || lastSegment === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: parent.children.length === 0 ? newProperty : newProperty + ',' };\n }\n else {\n var index = lastSegment > parent.children.length ? parent.children.length : lastSegment;\n var previous = parent.children[index - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n return withFormatting(text, edit, options);\n }\n else {\n throw new Error(\"Can not \" + (value === void 0 ? 'remove' : (options.isArrayInsertion ? 'insert' : 'modify')) + \" Array index \" + insertIndex + \" as length is not sufficient\");\n }\n }\n else {\n throw new Error(\"Can not add \" + (typeof lastSegment !== 'number' ? 'index' : 'property') + \" to parent of type \" + parent.type);\n }\n}\nfunction withFormatting(text, edit, options) {\n if (!options.formattingOptions) {\n return [edit];\n }\n // apply the edit\n var newText = applyEdit(text, edit);\n // format the new text\n var begin = edit.offset;\n var end = edit.offset + edit.content.length;\n if (edit.length === 0 || edit.content.length === 0) { // insert or remove\n while (begin > 0 && !isEOL(newText, begin - 1)) {\n begin--;\n }\n while (end < newText.length && !isEOL(newText, end)) {\n end++;\n }\n }\n var edits = format(newText, { offset: begin, length: end - begin }, options.formattingOptions);\n // apply the formatting edits and track the begin and end offsets of the changes\n for (var i = edits.length - 1; i >= 0; i--) {\n var edit_1 = edits[i];\n newText = applyEdit(newText, edit_1);\n begin = Math.min(begin, edit_1.offset);\n end = Math.max(end, edit_1.offset + edit_1.length);\n end += edit_1.content.length - edit_1.length;\n }\n // create a single edit with all changes\n var editLength = text.length - (newText.length - end) - begin;\n return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];\n}\nexport function applyEdit(text, edit) {\n return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);\n}\nexport function isWS(text, offset) {\n return '\\r\\n \\t'.indexOf(text.charAt(offset)) !== -1;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport * as formatter from './impl/format';\nimport * as edit from './impl/edit';\nimport * as scanner from './impl/scanner';\nimport * as parser from './impl/parser';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport var createScanner = scanner.createScanner;\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport var getLocation = parser.getLocation;\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore, always check the errors list to find out if the input was valid.\n */\nexport var parse = parser.parse;\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport var parseTree = parser.parseTree;\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport var findNodeAtLocation = parser.findNodeAtLocation;\n/**\n * Finds the innermost node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport var findNodeAtOffset = parser.findNodeAtOffset;\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport var getNodePath = parser.getNodePath;\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport var getNodeValue = parser.getNodeValue;\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport var visit = parser.visit;\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport var stripComments = parser.stripComments;\nexport function printParseErrorCode(code) {\n switch (code) {\n case 1 /* InvalidSymbol */: return 'InvalidSymbol';\n case 2 /* InvalidNumberFormat */: return 'InvalidNumberFormat';\n case 3 /* PropertyNameExpected */: return 'PropertyNameExpected';\n case 4 /* ValueExpected */: return 'ValueExpected';\n case 5 /* ColonExpected */: return 'ColonExpected';\n case 6 /* CommaExpected */: return 'CommaExpected';\n case 7 /* CloseBraceExpected */: return 'CloseBraceExpected';\n case 8 /* CloseBracketExpected */: return 'CloseBracketExpected';\n case 9 /* EndOfFileExpected */: return 'EndOfFileExpected';\n case 10 /* InvalidCommentToken */: return 'InvalidCommentToken';\n case 11 /* UnexpectedEndOfComment */: return 'UnexpectedEndOfComment';\n case 12 /* UnexpectedEndOfString */: return 'UnexpectedEndOfString';\n case 13 /* UnexpectedEndOfNumber */: return 'UnexpectedEndOfNumber';\n case 14 /* InvalidUnicode */: return 'InvalidUnicode';\n case 15 /* InvalidEscapeCharacter */: return 'InvalidEscapeCharacter';\n case 16 /* InvalidCharacter */: return 'InvalidCharacter';\n }\n return '<unknown ParseErrorCode>';\n}\n/**\n * Computes the edits needed to format a JSON document.\n *\n * @param documentText The input text\n * @param range The range to format or `undefined` to format the full content\n * @param options The formatting options\n * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or\n * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of\n * text in the original document. However, multiple edits can have\n * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.\n * To apply edits to an input, you can use `applyEdits`.\n */\nexport function format(documentText, range, options) {\n return formatter.format(documentText, range, options);\n}\n/**\n * Computes the edits needed to modify a value in the JSON document.\n *\n * @param documentText The input text\n * @param path The path of the value to change. The path represents either to the document root, a property or an array item.\n * If the path points to an non-existing property or item, it will be created.\n * @param value The new value for the specified property or item. If the value is undefined,\n * the property or item will be removed.\n * @param options Options\n * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or\n * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of\n * text in the original document. However, multiple edits can have\n * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.\n * To apply edits to an input, you can use `applyEdits`.\n */\nexport function modify(text, path, value, options) {\n return edit.setProperty(text, path, value, options);\n}\n/**\n * Applies edits to a input string.\n */\nexport function applyEdits(text, edits) {\n for (var i = edits.length - 1; i >= 0; i--) {\n text = edit.applyEdit(text, edits[i]);\n }\n return text;\n}\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n", "'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = 1 + originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\tadjustedLength > 0 ? adjustedLength : 0,\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar gOPD = require('gopd');\n\n/** @type {import('.')} */\nvar fn;\n\nif (hasToStringTag) {\n\t/** @type {(receiver: ThisParameterType<typeof RegExp.prototype.exec>, ...args: Parameters<typeof RegExp.prototype.exec>) => ReturnType<typeof RegExp.prototype.exec>} */\n\tvar $exec = callBound('RegExp.prototype.exec');\n\t/** @type {object} */\n\tvar isRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\t/** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */\n\tvar badStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n\n\t/** @type {import('.')} */\n\t// @ts-expect-error TS can't figure out that the $exec call always throws\n\t// eslint-disable-next-line consistent-return\n\tfn = function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {NonNullable<typeof gOPD>} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t$exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier)));\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t};\n} else {\n\t/** @type {(receiver: ThisParameterType<typeof Object.prototype.toString>, ...args: Parameters<typeof Object.prototype.toString>) => ReturnType<typeof Object.prototype.toString>} */\n\tvar $toString = callBound('Object.prototype.toString');\n\t/** @const @type {'[object RegExp]'} */\n\tvar regexClass = '[object RegExp]';\n\n\t/** @type {import('.')} */\n\tfn = function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n}\n\nmodule.exports = fn;\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar isRegex = require('is-regex');\n\nvar $exec = callBound('RegExp.prototype.exec');\nvar $TypeError = require('es-errors/type');\n\n/** @type {import('.')} */\nmodule.exports = function regexTester(regex) {\n\tif (!isRegex(regex)) {\n\t\tthrow new $TypeError('`regex` must be a RegExp');\n\t}\n\treturn function test(s) {\n\t\treturn $exec(regex, s) !== null;\n\t};\n};\n", "'use strict';\n\n// eslint-disable-next-line no-extra-parens, no-empty-function\nconst cached = /** @type {GeneratorFunctionConstructor} */ (function* () {}.constructor);\n\n/** @type {import('.')} */\nmodule.exports = () => cached;\n\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar safeRegexTest = require('safe-regex-test');\nvar isFnRegex = safeRegexTest(/^\\s*(?:function)?\\*/);\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = require('get-proto');\n\nvar toStr = callBound('Object.prototype.toString');\nvar fnToStr = callBound('Function.prototype.toString');\n\nvar getGeneratorFunction = require('generator-function');\n\n/** @type {import('.')} */\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex(fnToStr(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tvar GeneratorFunction = getGeneratorFunction();\n\treturn GeneratorFunction && getProto(fn) === GeneratorFunction.prototype;\n};\n", "'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n", "'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/** @type {<This, A extends readonly unknown[]>(arr: A, iterator: (this: This | void, value: A[number], index: number, arr: A) => void, receiver: This | undefined) => void} */\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\n/** @type {<This, S extends string>(string: S, iterator: (this: This | void, value: S[number], index: number, string: S) => void, receiver: This | undefined) => void} */\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\n/** @type {<This, O>(obj: O, iterator: (this: This | void, value: O[keyof O], index: keyof O, obj: O) => void, receiver: This | undefined) => void} */\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\n/** @type {(x: unknown) => x is readonly unknown[]} */\nfunction isArray(x) {\n return toStr.call(x) === '[object Array]';\n}\n\n/** @type {import('.')._internal} */\nmodule.exports = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (isArray(list)) {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float16Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n", "'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType<typeof availableTypedArrays>} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n", "'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\nvar gOPD = require('gopd');\nvar getProto = require('get-proto');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\n\n/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {import('./types').Getter} Getter */\n/** @type {import('./types').Cache} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getProto) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr && getProto) {\n\t\t\tvar proto = getProto(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor && proto) {\n\t\t\t\tvar superProto = getProto(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\tif (descriptor && descriptor.get) {\n\t\t\t\tvar bound = callBind(descriptor.get);\n\t\t\t\tcache[\n\t\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t\t] = bound;\n\t\t\t}\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\tvar bound = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ (\n\t\t\t\t// @ts-expect-error TODO FIXME\n\t\t\t\tcallBind(fn)\n\t\t\t);\n\t\t\tcache[\n\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t] = bound;\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1));\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType<typeof tryAllSlices>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */(cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(name, 1));\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n", "'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n", "// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n", "module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nexport var DocumentUri;\n(function (DocumentUri) {\n function is(value) {\n return typeof value === 'string';\n }\n DocumentUri.is = is;\n})(DocumentUri || (DocumentUri = {}));\nexport var URI;\n(function (URI) {\n function is(value) {\n return typeof value === 'string';\n }\n URI.is = is;\n})(URI || (URI = {}));\nexport var integer;\n(function (integer) {\n integer.MIN_VALUE = -2147483648;\n integer.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;\n }\n integer.is = is;\n})(integer || (integer = {}));\nexport var uinteger;\n(function (uinteger) {\n uinteger.MIN_VALUE = 0;\n uinteger.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;\n }\n uinteger.is = is;\n})(uinteger || (uinteger = {}));\n/**\n * The Position namespace provides helper functions to work with\n * {@link Position} literals.\n */\nexport var Position;\n(function (Position) {\n /**\n * Creates a new Position literal from the given line and character.\n * @param line The position's line.\n * @param character The position's character.\n */\n function create(line, character) {\n if (line === Number.MAX_VALUE) {\n line = uinteger.MAX_VALUE;\n }\n if (character === Number.MAX_VALUE) {\n character = uinteger.MAX_VALUE;\n }\n return { line, character };\n }\n Position.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Position} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position.is = is;\n})(Position || (Position = {}));\n/**\n * The Range namespace provides helper functions to work with\n * {@link Range} literals.\n */\nexport var Range;\n(function (Range) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n return { start: Position.create(one, two), end: Position.create(three, four) };\n }\n else if (Position.is(one) && Position.is(two)) {\n return { start: one, end: two };\n }\n else {\n throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n }\n }\n Range.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Range} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range.is = is;\n})(Range || (Range = {}));\n/**\n * The Location namespace provides helper functions to work with\n * {@link Location} literals.\n */\nexport var Location;\n(function (Location) {\n /**\n * Creates a Location literal.\n * @param uri The location's uri.\n * @param range The location's range.\n */\n function create(uri, range) {\n return { uri, range };\n }\n Location.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Location} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location.is = is;\n})(Location || (Location = {}));\n/**\n * The LocationLink namespace provides helper functions to work with\n * {@link LocationLink} literals.\n */\nexport var LocationLink;\n(function (LocationLink) {\n /**\n * Creates a LocationLink literal.\n * @param targetUri The definition's uri.\n * @param targetRange The full range of the definition.\n * @param targetSelectionRange The span of the symbol definition at the target.\n * @param originSelectionRange The span of the symbol being defined in the originating source file.\n */\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return { targetUri, targetRange, targetSelectionRange, originSelectionRange };\n }\n LocationLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link LocationLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\n && Range.is(candidate.targetSelectionRange)\n && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink.is = is;\n})(LocationLink || (LocationLink = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link Color} literals.\n */\nexport var Color;\n(function (Color) {\n /**\n * Creates a new Color literal.\n */\n function create(red, green, blue, alpha) {\n return {\n red,\n green,\n blue,\n alpha,\n };\n }\n Color.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Color} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1)\n && Is.numberRange(candidate.green, 0, 1)\n && Is.numberRange(candidate.blue, 0, 1)\n && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color.is = is;\n})(Color || (Color = {}));\n/**\n * The ColorInformation namespace provides helper functions to work with\n * {@link ColorInformation} literals.\n */\nexport var ColorInformation;\n(function (ColorInformation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(range, color) {\n return {\n range,\n color,\n };\n }\n ColorInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation.is = is;\n})(ColorInformation || (ColorInformation = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link ColorPresentation} literals.\n */\nexport var ColorPresentation;\n(function (ColorPresentation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(label, textEdit, additionalTextEdits) {\n return {\n label,\n textEdit,\n additionalTextEdits,\n };\n }\n ColorPresentation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label)\n && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\n && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\n/**\n * A set of predefined range kinds.\n */\nexport var FoldingRangeKind;\n(function (FoldingRangeKind) {\n /**\n * Folding range for a comment\n */\n FoldingRangeKind.Comment = 'comment';\n /**\n * Folding range for an import or include\n */\n FoldingRangeKind.Imports = 'imports';\n /**\n * Folding range for a region (e.g. `#region`)\n */\n FoldingRangeKind.Region = 'region';\n})(FoldingRangeKind || (FoldingRangeKind = {}));\n/**\n * The folding range namespace provides helper functions to work with\n * {@link FoldingRange} literals.\n */\nexport var FoldingRange;\n(function (FoldingRange) {\n /**\n * Creates a new FoldingRange literal.\n */\n function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n const result = {\n startLine,\n endLine\n };\n if (Is.defined(startCharacter)) {\n result.startCharacter = startCharacter;\n }\n if (Is.defined(endCharacter)) {\n result.endCharacter = endCharacter;\n }\n if (Is.defined(kind)) {\n result.kind = kind;\n }\n if (Is.defined(collapsedText)) {\n result.collapsedText = collapsedText;\n }\n return result;\n }\n FoldingRange.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FoldingRange} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)\n && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))\n && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))\n && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange.is = is;\n})(FoldingRange || (FoldingRange = {}));\n/**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * {@link DiagnosticRelatedInformation} literals.\n */\nexport var DiagnosticRelatedInformation;\n(function (DiagnosticRelatedInformation) {\n /**\n * Creates a new DiagnosticRelatedInformation literal.\n */\n function create(location, message) {\n return {\n location,\n message\n };\n }\n DiagnosticRelatedInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n/**\n * The diagnostic's severity.\n */\nexport var DiagnosticSeverity;\n(function (DiagnosticSeverity) {\n /**\n * Reports an error.\n */\n DiagnosticSeverity.Error = 1;\n /**\n * Reports a warning.\n */\n DiagnosticSeverity.Warning = 2;\n /**\n * Reports an information.\n */\n DiagnosticSeverity.Information = 3;\n /**\n * Reports a hint.\n */\n DiagnosticSeverity.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\n/**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\nexport var DiagnosticTag;\n(function (DiagnosticTag) {\n /**\n * Unused or unnecessary code.\n *\n * Clients are allowed to render diagnostics with this tag faded out instead of having\n * an error squiggle.\n */\n DiagnosticTag.Unnecessary = 1;\n /**\n * Deprecated or obsolete code.\n *\n * Clients are allowed to rendered diagnostics with this tag strike through.\n */\n DiagnosticTag.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\n/**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\nexport var CodeDescription;\n(function (CodeDescription) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.href);\n }\n CodeDescription.is = is;\n})(CodeDescription || (CodeDescription = {}));\n/**\n * The Diagnostic namespace provides helper functions to work with\n * {@link Diagnostic} literals.\n */\nexport var Diagnostic;\n(function (Diagnostic) {\n /**\n * Creates a new Diagnostic literal.\n */\n function create(range, message, severity, code, source, relatedInformation) {\n let result = { range, message };\n if (Is.defined(severity)) {\n result.severity = severity;\n }\n if (Is.defined(code)) {\n result.code = code;\n }\n if (Is.defined(source)) {\n result.source = source;\n }\n if (Is.defined(relatedInformation)) {\n result.relatedInformation = relatedInformation;\n }\n return result;\n }\n Diagnostic.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Diagnostic} interface.\n */\n function is(value) {\n var _a;\n let candidate = value;\n return Is.defined(candidate)\n && Range.is(candidate.range)\n && Is.string(candidate.message)\n && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\n && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\n && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))\n && (Is.string(candidate.source) || Is.undefined(candidate.source))\n && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic.is = is;\n})(Diagnostic || (Diagnostic = {}));\n/**\n * The Command namespace provides helper functions to work with\n * {@link Command} literals.\n */\nexport var Command;\n(function (Command) {\n /**\n * Creates a new Command literal.\n */\n function create(title, command, ...args) {\n let result = { title, command };\n if (Is.defined(args) && args.length > 0) {\n result.arguments = args;\n }\n return result;\n }\n Command.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Command} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command.is = is;\n})(Command || (Command = {}));\n/**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\nexport var TextEdit;\n(function (TextEdit) {\n /**\n * Creates a replace text edit.\n * @param range The range of text to be replaced.\n * @param newText The new text.\n */\n function replace(range, newText) {\n return { range, newText };\n }\n TextEdit.replace = replace;\n /**\n * Creates an insert text edit.\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n */\n function insert(position, newText) {\n return { range: { start: position, end: position }, newText };\n }\n TextEdit.insert = insert;\n /**\n * Creates a delete text edit.\n * @param range The range of text to be deleted.\n */\n function del(range) {\n return { range, newText: '' };\n }\n TextEdit.del = del;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate)\n && Is.string(candidate.newText)\n && Range.is(candidate.range);\n }\n TextEdit.is = is;\n})(TextEdit || (TextEdit = {}));\nexport var ChangeAnnotation;\n(function (ChangeAnnotation) {\n function create(label, needsConfirmation, description) {\n const result = { label };\n if (needsConfirmation !== undefined) {\n result.needsConfirmation = needsConfirmation;\n }\n if (description !== undefined) {\n result.description = description;\n }\n return result;\n }\n ChangeAnnotation.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) &&\n (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n ChangeAnnotation.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nexport var ChangeAnnotationIdentifier;\n(function (ChangeAnnotationIdentifier) {\n function is(value) {\n const candidate = value;\n return Is.string(candidate);\n }\n ChangeAnnotationIdentifier.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nexport var AnnotatedTextEdit;\n(function (AnnotatedTextEdit) {\n /**\n * Creates an annotated replace text edit.\n *\n * @param range The range of text to be replaced.\n * @param newText The new text.\n * @param annotation The annotation.\n */\n function replace(range, newText, annotation) {\n return { range, newText, annotationId: annotation };\n }\n AnnotatedTextEdit.replace = replace;\n /**\n * Creates an annotated insert text edit.\n *\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n * @param annotation The annotation.\n */\n function insert(position, newText, annotation) {\n return { range: { start: position, end: position }, newText, annotationId: annotation };\n }\n AnnotatedTextEdit.insert = insert;\n /**\n * Creates an annotated delete text edit.\n *\n * @param range The range of text to be deleted.\n * @param annotation The annotation.\n */\n function del(range, annotation) {\n return { range, newText: '', annotationId: annotation };\n }\n AnnotatedTextEdit.del = del;\n function is(value) {\n const candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n/**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\nexport var TextDocumentEdit;\n(function (TextDocumentEdit) {\n /**\n * Creates a new `TextDocumentEdit`\n */\n function create(textDocument, edits) {\n return { textDocument, edits };\n }\n TextDocumentEdit.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate)\n && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n && Array.isArray(candidate.edits);\n }\n TextDocumentEdit.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nexport var CreateFile;\n(function (CreateFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: 'create',\n uri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n CreateFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile.is = is;\n})(CreateFile || (CreateFile = {}));\nexport var RenameFile;\n(function (RenameFile) {\n function create(oldUri, newUri, options, annotation) {\n let result = {\n kind: 'rename',\n oldUri,\n newUri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n RenameFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile.is = is;\n})(RenameFile || (RenameFile = {}));\nexport var DeleteFile;\n(function (DeleteFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: 'delete',\n uri\n };\n if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n DeleteFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile.is = is;\n})(DeleteFile || (DeleteFile = {}));\nexport var WorkspaceEdit;\n(function (WorkspaceEdit) {\n function is(value) {\n let candidate = value;\n return candidate &&\n (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n (candidate.documentChanges === undefined || candidate.documentChanges.every((change) => {\n if (Is.string(change.kind)) {\n return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n }\n else {\n return TextDocumentEdit.is(change);\n }\n }));\n }\n WorkspaceEdit.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nclass TextEditChangeImpl {\n constructor(edits, changeAnnotations) {\n this.edits = edits;\n this.changeAnnotations = changeAnnotations;\n }\n insert(position, newText, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.insert(position, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.insert(position, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.insert(position, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n replace(range, newText, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.replace(range, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.replace(range, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.replace(range, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n delete(range, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.del(range);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.del(range, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.del(range, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n add(edit) {\n this.edits.push(edit);\n }\n all() {\n return this.edits;\n }\n clear() {\n this.edits.splice(0, this.edits.length);\n }\n assertChangeAnnotations(value) {\n if (value === undefined) {\n throw new Error(`Text edit change is not configured to manage change annotations.`);\n }\n }\n}\n/**\n * A helper class\n */\nclass ChangeAnnotations {\n constructor(annotations) {\n this._annotations = annotations === undefined ? Object.create(null) : annotations;\n this._counter = 0;\n this._size = 0;\n }\n all() {\n return this._annotations;\n }\n get size() {\n return this._size;\n }\n manage(idOrAnnotation, annotation) {\n let id;\n if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {\n id = idOrAnnotation;\n }\n else {\n id = this.nextId();\n annotation = idOrAnnotation;\n }\n if (this._annotations[id] !== undefined) {\n throw new Error(`Id ${id} is already in use.`);\n }\n if (annotation === undefined) {\n throw new Error(`No annotation provided for id ${id}`);\n }\n this._annotations[id] = annotation;\n this._size++;\n return id;\n }\n nextId() {\n this._counter++;\n return this._counter.toString();\n }\n}\n/**\n * A workspace change helps constructing changes to a workspace.\n */\nexport class WorkspaceChange {\n constructor(workspaceEdit) {\n this._textEditChanges = Object.create(null);\n if (workspaceEdit !== undefined) {\n this._workspaceEdit = workspaceEdit;\n if (workspaceEdit.documentChanges) {\n this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);\n workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n workspaceEdit.documentChanges.forEach((change) => {\n if (TextDocumentEdit.is(change)) {\n const textEditChange = new TextEditChangeImpl(change.edits, this._changeAnnotations);\n this._textEditChanges[change.textDocument.uri] = textEditChange;\n }\n });\n }\n else if (workspaceEdit.changes) {\n Object.keys(workspaceEdit.changes).forEach((key) => {\n const textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n this._textEditChanges[key] = textEditChange;\n });\n }\n }\n else {\n this._workspaceEdit = {};\n }\n }\n /**\n * Returns the underlying {@link WorkspaceEdit} literal\n * use to be returned from a workspace edit operation like rename.\n */\n get edit() {\n this.initDocumentChanges();\n if (this._changeAnnotations !== undefined) {\n if (this._changeAnnotations.size === 0) {\n this._workspaceEdit.changeAnnotations = undefined;\n }\n else {\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n return this._workspaceEdit;\n }\n getTextEditChange(key) {\n if (OptionalVersionedTextDocumentIdentifier.is(key)) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n const textDocument = { uri: key.uri, version: key.version };\n let result = this._textEditChanges[textDocument.uri];\n if (!result) {\n const edits = [];\n const textDocumentEdit = {\n textDocument,\n edits\n };\n this._workspaceEdit.documentChanges.push(textDocumentEdit);\n result = new TextEditChangeImpl(edits, this._changeAnnotations);\n this._textEditChanges[textDocument.uri] = result;\n }\n return result;\n }\n else {\n this.initChanges();\n if (this._workspaceEdit.changes === undefined) {\n throw new Error('Workspace edit is not configured for normal text edit changes.');\n }\n let result = this._textEditChanges[key];\n if (!result) {\n let edits = [];\n this._workspaceEdit.changes[key] = edits;\n result = new TextEditChangeImpl(edits);\n this._textEditChanges[key] = result;\n }\n return result;\n }\n }\n initDocumentChanges() {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._changeAnnotations = new ChangeAnnotations();\n this._workspaceEdit.documentChanges = [];\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n initChanges() {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._workspaceEdit.changes = Object.create(null);\n }\n }\n createFile(uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = CreateFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = CreateFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n renameFile(oldUri, newUri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = RenameFile.create(oldUri, newUri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = RenameFile.create(oldUri, newUri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n deleteFile(uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = DeleteFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = DeleteFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n}\n/**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * {@link TextDocumentIdentifier} literals.\n */\nexport var TextDocumentIdentifier;\n(function (TextDocumentIdentifier) {\n /**\n * Creates a new TextDocumentIdentifier literal.\n * @param uri The document's uri.\n */\n function create(uri) {\n return { uri };\n }\n TextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n/**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link VersionedTextDocumentIdentifier} literals.\n */\nexport var VersionedTextDocumentIdentifier;\n(function (VersionedTextDocumentIdentifier) {\n /**\n * Creates a new VersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri, version };\n }\n VersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n/**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link OptionalVersionedTextDocumentIdentifier} literals.\n */\nexport var OptionalVersionedTextDocumentIdentifier;\n(function (OptionalVersionedTextDocumentIdentifier) {\n /**\n * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri, version };\n }\n OptionalVersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n/**\n * The TextDocumentItem namespace provides helper functions to work with\n * {@link TextDocumentItem} literals.\n */\nexport var TextDocumentItem;\n(function (TextDocumentItem) {\n /**\n * Creates a new TextDocumentItem literal.\n * @param uri The document's uri.\n * @param languageId The document's language identifier.\n * @param version The document's version number.\n * @param text The document's text.\n */\n function create(uri, languageId, version, text) {\n return { uri, languageId, version, text };\n }\n TextDocumentItem.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentItem} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\n/**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\nexport var MarkupKind;\n(function (MarkupKind) {\n /**\n * Plain text is supported as a content format\n */\n MarkupKind.PlainText = 'plaintext';\n /**\n * Markdown is supported as a content format\n */\n MarkupKind.Markdown = 'markdown';\n /**\n * Checks whether the given value is a value of the {@link MarkupKind} type.\n */\n function is(value) {\n const candidate = value;\n return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n }\n MarkupKind.is = is;\n})(MarkupKind || (MarkupKind = {}));\nexport var MarkupContent;\n(function (MarkupContent) {\n /**\n * Checks whether the given value conforms to the {@link MarkupContent} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent.is = is;\n})(MarkupContent || (MarkupContent = {}));\n/**\n * The kind of a completion entry.\n */\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind.Text = 1;\n CompletionItemKind.Method = 2;\n CompletionItemKind.Function = 3;\n CompletionItemKind.Constructor = 4;\n CompletionItemKind.Field = 5;\n CompletionItemKind.Variable = 6;\n CompletionItemKind.Class = 7;\n CompletionItemKind.Interface = 8;\n CompletionItemKind.Module = 9;\n CompletionItemKind.Property = 10;\n CompletionItemKind.Unit = 11;\n CompletionItemKind.Value = 12;\n CompletionItemKind.Enum = 13;\n CompletionItemKind.Keyword = 14;\n CompletionItemKind.Snippet = 15;\n CompletionItemKind.Color = 16;\n CompletionItemKind.File = 17;\n CompletionItemKind.Reference = 18;\n CompletionItemKind.Folder = 19;\n CompletionItemKind.EnumMember = 20;\n CompletionItemKind.Constant = 21;\n CompletionItemKind.Struct = 22;\n CompletionItemKind.Event = 23;\n CompletionItemKind.Operator = 24;\n CompletionItemKind.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\n/**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\nexport var InsertTextFormat;\n(function (InsertTextFormat) {\n /**\n * The primary text to be inserted is treated as a plain string.\n */\n InsertTextFormat.PlainText = 1;\n /**\n * The primary text to be inserted is treated as a snippet.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Placeholders with equal identifiers are linked,\n * that is typing in one will update others too.\n *\n * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n */\n InsertTextFormat.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\n/**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n /**\n * Render a completion as obsolete, usually using a strike-out.\n */\n CompletionItemTag.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\nexport var InsertReplaceEdit;\n(function (InsertReplaceEdit) {\n /**\n * Creates a new insert / replace edit\n */\n function create(newText, insert, replace) {\n return { newText, insert, replace };\n }\n InsertReplaceEdit.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.\n */\n function is(value) {\n const candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\n/**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\nexport var InsertTextMode;\n(function (InsertTextMode) {\n /**\n * The insertion or replace strings is taken as it is. If the\n * value is multi line the lines below the cursor will be\n * inserted using the indentation defined in the string value.\n * The client will not apply any kind of adjustments to the\n * string.\n */\n InsertTextMode.asIs = 1;\n /**\n * The editor adjusts leading whitespace of new lines so that\n * they match the indentation up to the cursor of the line for\n * which the item is accepted.\n *\n * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a\n * multi line completion item is indented using 2 tabs and all\n * following lines inserted will be indented using 2 tabs as well.\n */\n InsertTextMode.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nexport var CompletionItemLabelDetails;\n(function (CompletionItemLabelDetails) {\n function is(value) {\n const candidate = value;\n return candidate && (Is.string(candidate.detail) || candidate.detail === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n CompletionItemLabelDetails.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\n/**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\nexport var CompletionItem;\n(function (CompletionItem) {\n /**\n * Create a completion item and seed it with a label.\n * @param label The completion item's label\n */\n function create(label) {\n return { label };\n }\n CompletionItem.create = create;\n})(CompletionItem || (CompletionItem = {}));\n/**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\nexport var CompletionList;\n(function (CompletionList) {\n /**\n * Creates a new completion list.\n *\n * @param items The completion items.\n * @param isIncomplete The list is not complete.\n */\n function create(items, isIncomplete) {\n return { items: items ? items : [], isIncomplete: !!isIncomplete };\n }\n CompletionList.create = create;\n})(CompletionList || (CompletionList = {}));\nexport var MarkedString;\n(function (MarkedString) {\n /**\n * Creates a marked string from plain text.\n *\n * @param plainText The plain text.\n */\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n }\n MarkedString.fromPlainText = fromPlainText;\n /**\n * Checks whether the given value conforms to the {@link MarkedString} type.\n */\n function is(value) {\n const candidate = value;\n return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\n }\n MarkedString.is = is;\n})(MarkedString || (MarkedString = {}));\nexport var Hover;\n(function (Hover) {\n /**\n * Checks whether the given value conforms to the {@link Hover} interface.\n */\n function is(value) {\n let candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\n MarkedString.is(candidate.contents) ||\n Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));\n }\n Hover.is = is;\n})(Hover || (Hover = {}));\n/**\n * The ParameterInformation namespace provides helper functions to work with\n * {@link ParameterInformation} literals.\n */\nexport var ParameterInformation;\n(function (ParameterInformation) {\n /**\n * Creates a new parameter information literal.\n *\n * @param label A label string.\n * @param documentation A doc string.\n */\n function create(label, documentation) {\n return documentation ? { label, documentation } : { label };\n }\n ParameterInformation.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\n/**\n * The SignatureInformation namespace provides helper functions to work with\n * {@link SignatureInformation} literals.\n */\nexport var SignatureInformation;\n(function (SignatureInformation) {\n function create(label, documentation, ...parameters) {\n let result = { label };\n if (Is.defined(documentation)) {\n result.documentation = documentation;\n }\n if (Is.defined(parameters)) {\n result.parameters = parameters;\n }\n else {\n result.parameters = [];\n }\n return result;\n }\n SignatureInformation.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind.Text = 1;\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind.Read = 2;\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * DocumentHighlight namespace to provide helper functions to work with\n * {@link DocumentHighlight} literals.\n */\nexport var DocumentHighlight;\n(function (DocumentHighlight) {\n /**\n * Create a DocumentHighlight object.\n * @param range The range the highlight applies to.\n * @param kind The highlight kind\n */\n function create(range, kind) {\n let result = { range };\n if (Is.number(kind)) {\n result.kind = kind;\n }\n return result;\n }\n DocumentHighlight.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind.File = 1;\n SymbolKind.Module = 2;\n SymbolKind.Namespace = 3;\n SymbolKind.Package = 4;\n SymbolKind.Class = 5;\n SymbolKind.Method = 6;\n SymbolKind.Property = 7;\n SymbolKind.Field = 8;\n SymbolKind.Constructor = 9;\n SymbolKind.Enum = 10;\n SymbolKind.Interface = 11;\n SymbolKind.Function = 12;\n SymbolKind.Variable = 13;\n SymbolKind.Constant = 14;\n SymbolKind.String = 15;\n SymbolKind.Number = 16;\n SymbolKind.Boolean = 17;\n SymbolKind.Array = 18;\n SymbolKind.Object = 19;\n SymbolKind.Key = 20;\n SymbolKind.Null = 21;\n SymbolKind.EnumMember = 22;\n SymbolKind.Struct = 23;\n SymbolKind.Event = 24;\n SymbolKind.Operator = 25;\n SymbolKind.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\n/**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n *\n * @since 3.16\n */\nexport var SymbolTag;\n(function (SymbolTag) {\n /**\n * Render a symbol as obsolete, usually using a strike-out.\n */\n SymbolTag.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nexport var SymbolInformation;\n(function (SymbolInformation) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the location of the symbol.\n * @param uri The resource of the location of symbol.\n * @param containerName The name of the symbol containing the symbol.\n */\n function create(name, kind, range, uri, containerName) {\n let result = {\n name,\n kind,\n location: { uri, range }\n };\n if (containerName) {\n result.containerName = containerName;\n }\n return result;\n }\n SymbolInformation.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nexport var WorkspaceSymbol;\n(function (WorkspaceSymbol) {\n /**\n * Create a new workspace symbol.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param uri The resource of the location of the symbol.\n * @param range An options range of the location.\n * @returns A WorkspaceSymbol.\n */\n function create(name, kind, uri, range) {\n return range !== undefined\n ? { name, kind, location: { uri, range } }\n : { name, kind, location: { uri } };\n }\n WorkspaceSymbol.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nexport var DocumentSymbol;\n(function (DocumentSymbol) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param detail The detail of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the symbol.\n * @param selectionRange The selectionRange of the symbol.\n * @param children Children of the symbol.\n */\n function create(name, detail, kind, range, selectionRange, children) {\n let result = {\n name,\n detail,\n kind,\n range,\n selectionRange\n };\n if (children !== undefined) {\n result.children = children;\n }\n return result;\n }\n DocumentSymbol.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentSymbol} interface.\n */\n function is(value) {\n let candidate = value;\n return candidate &&\n Is.string(candidate.name) && Is.number(candidate.kind) &&\n Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\n (candidate.detail === undefined || Is.string(candidate.detail)) &&\n (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&\n (candidate.children === undefined || Array.isArray(candidate.children)) &&\n (candidate.tags === undefined || Array.isArray(candidate.tags));\n }\n DocumentSymbol.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\n/**\n * A set of predefined code action kinds\n */\nexport var CodeActionKind;\n(function (CodeActionKind) {\n /**\n * Empty kind.\n */\n CodeActionKind.Empty = '';\n /**\n * Base kind for quickfix actions: 'quickfix'\n */\n CodeActionKind.QuickFix = 'quickfix';\n /**\n * Base kind for refactoring actions: 'refactor'\n */\n CodeActionKind.Refactor = 'refactor';\n /**\n * Base kind for refactoring extraction actions: 'refactor.extract'\n *\n * Example extract actions:\n *\n * - Extract method\n * - Extract function\n * - Extract variable\n * - Extract interface from class\n * - ...\n */\n CodeActionKind.RefactorExtract = 'refactor.extract';\n /**\n * Base kind for refactoring inline actions: 'refactor.inline'\n *\n * Example inline actions:\n *\n * - Inline function\n * - Inline variable\n * - Inline constant\n * - ...\n */\n CodeActionKind.RefactorInline = 'refactor.inline';\n /**\n * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n *\n * Example rewrite actions:\n *\n * - Convert JavaScript function to class\n * - Add or remove parameter\n * - Encapsulate field\n * - Make method static\n * - Move method to base class\n * - ...\n */\n CodeActionKind.RefactorRewrite = 'refactor.rewrite';\n /**\n * Base kind for source actions: `source`\n *\n * Source code actions apply to the entire file.\n */\n CodeActionKind.Source = 'source';\n /**\n * Base kind for an organize imports source action: `source.organizeImports`\n */\n CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\n /**\n * Base kind for auto-fix source actions: `source.fixAll`.\n *\n * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n *\n * @since 3.15.0\n */\n CodeActionKind.SourceFixAll = 'source.fixAll';\n})(CodeActionKind || (CodeActionKind = {}));\n/**\n * The reason why code actions were requested.\n *\n * @since 3.17.0\n */\nexport var CodeActionTriggerKind;\n(function (CodeActionTriggerKind) {\n /**\n * Code actions were explicitly requested by the user or by an extension.\n */\n CodeActionTriggerKind.Invoked = 1;\n /**\n * Code actions were requested automatically.\n *\n * This typically happens when current selection in a file changes, but can\n * also be triggered when file content changes.\n */\n CodeActionTriggerKind.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\n/**\n * The CodeActionContext namespace provides helper functions to work with\n * {@link CodeActionContext} literals.\n */\nexport var CodeActionContext;\n(function (CodeActionContext) {\n /**\n * Creates a new CodeActionContext literal.\n */\n function create(diagnostics, only, triggerKind) {\n let result = { diagnostics };\n if (only !== undefined && only !== null) {\n result.only = only;\n }\n if (triggerKind !== undefined && triggerKind !== null) {\n result.triggerKind = triggerKind;\n }\n return result;\n }\n CodeActionContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeActionContext} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is)\n && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string))\n && (candidate.triggerKind === undefined || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n }\n CodeActionContext.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nexport var CodeAction;\n(function (CodeAction) {\n function create(title, kindOrCommandOrEdit, kind) {\n let result = { title };\n let checkKind = true;\n if (typeof kindOrCommandOrEdit === 'string') {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n }\n else if (Command.is(kindOrCommandOrEdit)) {\n result.command = kindOrCommandOrEdit;\n }\n else {\n result.edit = kindOrCommandOrEdit;\n }\n if (checkKind && kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n CodeAction.create = create;\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.title) &&\n (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\n (candidate.kind === undefined || Is.string(candidate.kind)) &&\n (candidate.edit !== undefined || candidate.command !== undefined) &&\n (candidate.command === undefined || Command.is(candidate.command)) &&\n (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&\n (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction.is = is;\n})(CodeAction || (CodeAction = {}));\n/**\n * The CodeLens namespace provides helper functions to work with\n * {@link CodeLens} literals.\n */\nexport var CodeLens;\n(function (CodeLens) {\n /**\n * Creates a new CodeLens literal.\n */\n function create(range, data) {\n let result = { range };\n if (Is.defined(data)) {\n result.data = data;\n }\n return result;\n }\n CodeLens.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeLens} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens.is = is;\n})(CodeLens || (CodeLens = {}));\n/**\n * The FormattingOptions namespace provides helper functions to work with\n * {@link FormattingOptions} literals.\n */\nexport var FormattingOptions;\n(function (FormattingOptions) {\n /**\n * Creates a new FormattingOptions literal.\n */\n function create(tabSize, insertSpaces) {\n return { tabSize, insertSpaces };\n }\n FormattingOptions.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FormattingOptions} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\n/**\n * The DocumentLink namespace provides helper functions to work with\n * {@link DocumentLink} literals.\n */\nexport var DocumentLink;\n(function (DocumentLink) {\n /**\n * Creates a new DocumentLink literal.\n */\n function create(range, target, data) {\n return { range, target, data };\n }\n DocumentLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink.is = is;\n})(DocumentLink || (DocumentLink = {}));\n/**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\nexport var SelectionRange;\n(function (SelectionRange) {\n /**\n * Creates a new SelectionRange\n * @param range the range.\n * @param parent an optional parent.\n */\n function create(range, parent) {\n return { range, parent };\n }\n SelectionRange.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\n }\n SelectionRange.is = is;\n})(SelectionRange || (SelectionRange = {}));\n/**\n * A set of predefined token types. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenTypes;\n(function (SemanticTokenTypes) {\n SemanticTokenTypes[\"namespace\"] = \"namespace\";\n /**\n * Represents a generic type. Acts as a fallback for types which can't be mapped to\n * a specific type like class or enum.\n */\n SemanticTokenTypes[\"type\"] = \"type\";\n SemanticTokenTypes[\"class\"] = \"class\";\n SemanticTokenTypes[\"enum\"] = \"enum\";\n SemanticTokenTypes[\"interface\"] = \"interface\";\n SemanticTokenTypes[\"struct\"] = \"struct\";\n SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\n SemanticTokenTypes[\"parameter\"] = \"parameter\";\n SemanticTokenTypes[\"variable\"] = \"variable\";\n SemanticTokenTypes[\"property\"] = \"property\";\n SemanticTokenTypes[\"enumMember\"] = \"enumMember\";\n SemanticTokenTypes[\"event\"] = \"event\";\n SemanticTokenTypes[\"function\"] = \"function\";\n SemanticTokenTypes[\"method\"] = \"method\";\n SemanticTokenTypes[\"macro\"] = \"macro\";\n SemanticTokenTypes[\"keyword\"] = \"keyword\";\n SemanticTokenTypes[\"modifier\"] = \"modifier\";\n SemanticTokenTypes[\"comment\"] = \"comment\";\n SemanticTokenTypes[\"string\"] = \"string\";\n SemanticTokenTypes[\"number\"] = \"number\";\n SemanticTokenTypes[\"regexp\"] = \"regexp\";\n SemanticTokenTypes[\"operator\"] = \"operator\";\n /**\n * @since 3.17.0\n */\n SemanticTokenTypes[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\n/**\n * A set of predefined token modifiers. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenModifiers;\n(function (SemanticTokenModifiers) {\n SemanticTokenModifiers[\"declaration\"] = \"declaration\";\n SemanticTokenModifiers[\"definition\"] = \"definition\";\n SemanticTokenModifiers[\"readonly\"] = \"readonly\";\n SemanticTokenModifiers[\"static\"] = \"static\";\n SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\n SemanticTokenModifiers[\"abstract\"] = \"abstract\";\n SemanticTokenModifiers[\"async\"] = \"async\";\n SemanticTokenModifiers[\"modification\"] = \"modification\";\n SemanticTokenModifiers[\"documentation\"] = \"documentation\";\n SemanticTokenModifiers[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\n/**\n * @since 3.16.0\n */\nexport var SemanticTokens;\n(function (SemanticTokens) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\n Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\n }\n SemanticTokens.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\n/**\n * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n *\n * @since 3.17.0\n */\nexport var InlineValueText;\n(function (InlineValueText) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, text) {\n return { range, text };\n }\n InlineValueText.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n }\n InlineValueText.is = is;\n})(InlineValueText || (InlineValueText = {}));\n/**\n * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n *\n * @since 3.17.0\n */\nexport var InlineValueVariableLookup;\n(function (InlineValueVariableLookup) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, variableName, caseSensitiveLookup) {\n return { range, variableName, caseSensitiveLookup };\n }\n InlineValueVariableLookup.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup)\n && (Is.string(candidate.variableName) || candidate.variableName === undefined);\n }\n InlineValueVariableLookup.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\n/**\n * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n *\n * @since 3.17.0\n */\nexport var InlineValueEvaluatableExpression;\n(function (InlineValueEvaluatableExpression) {\n /**\n * Creates a new InlineValueEvaluatableExpression literal.\n */\n function create(range, expression) {\n return { range, expression };\n }\n InlineValueEvaluatableExpression.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range)\n && (Is.string(candidate.expression) || candidate.expression === undefined);\n }\n InlineValueEvaluatableExpression.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\n/**\n * The InlineValueContext namespace provides helper functions to work with\n * {@link InlineValueContext} literals.\n *\n * @since 3.17.0\n */\nexport var InlineValueContext;\n(function (InlineValueContext) {\n /**\n * Creates a new InlineValueContext literal.\n */\n function create(frameId, stoppedLocation) {\n return { frameId, stoppedLocation };\n }\n InlineValueContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InlineValueContext} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.defined(candidate) && Range.is(value.stoppedLocation);\n }\n InlineValueContext.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\n/**\n * Inlay hint kinds.\n *\n * @since 3.17.0\n */\nexport var InlayHintKind;\n(function (InlayHintKind) {\n /**\n * An inlay hint that for a type annotation.\n */\n InlayHintKind.Type = 1;\n /**\n * An inlay hint that is for a parameter.\n */\n InlayHintKind.Parameter = 2;\n function is(value) {\n return value === 1 || value === 2;\n }\n InlayHintKind.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nexport var InlayHintLabelPart;\n(function (InlayHintLabelPart) {\n function create(value) {\n return { value };\n }\n InlayHintLabelPart.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.location === undefined || Location.is(candidate.location))\n && (candidate.command === undefined || Command.is(candidate.command));\n }\n InlayHintLabelPart.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nexport var InlayHint;\n(function (InlayHint) {\n function create(position, label, kind) {\n const result = { position, label };\n if (kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n InlayHint.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.position)\n && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is))\n && (candidate.kind === undefined || InlayHintKind.is(candidate.kind))\n && (candidate.textEdits === undefined) || Is.typedArray(candidate.textEdits, TextEdit.is)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft))\n && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight));\n }\n InlayHint.is = is;\n})(InlayHint || (InlayHint = {}));\nexport var StringValue;\n(function (StringValue) {\n function createSnippet(value) {\n return { kind: 'snippet', value };\n }\n StringValue.createSnippet = createSnippet;\n})(StringValue || (StringValue = {}));\nexport var InlineCompletionItem;\n(function (InlineCompletionItem) {\n function create(insertText, filterText, range, command) {\n return { insertText, filterText, range, command };\n }\n InlineCompletionItem.create = create;\n})(InlineCompletionItem || (InlineCompletionItem = {}));\nexport var InlineCompletionList;\n(function (InlineCompletionList) {\n function create(items) {\n return { items };\n }\n InlineCompletionList.create = create;\n})(InlineCompletionList || (InlineCompletionList = {}));\n/**\n * Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered.\n *\n * @since 3.18.0\n * @proposed\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n /**\n * Completion was triggered explicitly by a user gesture.\n */\n InlineCompletionTriggerKind.Invoked = 0;\n /**\n * Completion was triggered automatically while editing.\n */\n InlineCompletionTriggerKind.Automatic = 1;\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport var SelectedCompletionInfo;\n(function (SelectedCompletionInfo) {\n function create(range, text) {\n return { range, text };\n }\n SelectedCompletionInfo.create = create;\n})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\nexport var InlineCompletionContext;\n(function (InlineCompletionContext) {\n function create(triggerKind, selectedCompletionInfo) {\n return { triggerKind, selectedCompletionInfo };\n }\n InlineCompletionContext.create = create;\n})(InlineCompletionContext || (InlineCompletionContext = {}));\nexport var WorkspaceFolder;\n(function (WorkspaceFolder) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n }\n WorkspaceFolder.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nexport const EOL = ['\\n', '\\r\\n', '\\r'];\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new ITextDocument literal from the given uri and content.\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's version.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ITextDocument} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)\n && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument.is = is;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort(edits, (a, b) => {\n let diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = text.length;\n for (let i = sortedEdits.length - 1; i >= 0; i--) {\n let e = sortedEdits[i];\n let startOffset = document.offsetAt(e.range.start);\n let endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) {\n text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n }\n else {\n throw new Error('Overlapping edit');\n }\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument.applyEdits = applyEdits;\n function mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n let ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n }\n})(TextDocument || (TextDocument = {}));\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n let start = this.offsetAt(range.start);\n let end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = undefined;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n let lineOffsets = [];\n let text = this._content;\n let isLineStart = true;\n for (let i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n let ch = text.charAt(i);\n isLineStart = (ch === '\\r' || ch === '\\n');\n if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n i++;\n }\n }\n if (isLineStart && text.length > 0) {\n lineOffsets.push(text.length);\n }\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return Position.create(0, offset);\n }\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n let line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n}\nvar Is;\n(function (Is) {\n const toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== 'undefined';\n }\n Is.defined = defined;\n function undefined(value) {\n return typeof value === 'undefined';\n }\n Is.undefined = undefined;\n function boolean(value) {\n return value === true || value === false;\n }\n Is.boolean = boolean;\n function string(value) {\n return toString.call(value) === '[object String]';\n }\n Is.string = string;\n function number(value) {\n return toString.call(value) === '[object Number]';\n }\n Is.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === '[object Number]' && min <= value && value <= max;\n }\n Is.numberRange = numberRange;\n function integer(value) {\n return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;\n }\n Is.integer = integer;\n function uinteger(value) {\n return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;\n }\n Is.uinteger = uinteger;\n function func(value) {\n return toString.call(value) === '[object Function]';\n }\n Is.func = func;\n function objectLiteral(value) {\n // Strictly speaking class instances pass this check as well. Since the LSP\n // doesn't use classes we ignore this for now. If we do we need to add something\n // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\n return value !== null && typeof value === 'object';\n }\n Is.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is.typedArray = typedArray;\n})(Is || (Is = {}));\n", "// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n", "// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};", "__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))", "// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n// !!!!!\n// SEE https://github.com/microsoft/vscode/blob/master/src/vs/base/common/platform.ts\n// !!!!!\n\ndeclare const process: { platform: 'win32' };\ndeclare const navigator: { userAgent: string };\n\nexport let isWindows: boolean;\n\nif (typeof process === 'object') {\n\tisWindows = process.platform === 'win32';\n} else if (typeof navigator === 'object') {\n\tlet userAgent = navigator.userAgent;\n\tisWindows = userAgent.indexOf('Windows') >= 0;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { CharCode } from './charCode'\nimport { isWindows } from './platform';\n\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\n\nfunction _validateUri(ret: URI, _strict?: boolean): void {\n\n\t// scheme, must be set\n\tif (!ret.scheme && _strict) {\n\t\tthrow new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n\t}\n\n\t// scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n\t// ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n\tif (ret.scheme && !_schemePattern.test(ret.scheme)) {\n\t\tthrow new Error('[UriError]: Scheme contains illegal characters.');\n\t}\n\n\t// path, http://tools.ietf.org/html/rfc3986#section-3.3\n\t// If a URI contains an authority component, then the path component\n\t// must either be empty or begin with a slash (\"/\") character. If a URI\n\t// does not contain an authority component, then the path cannot begin\n\t// with two slash characters (\"//\").\n\tif (ret.path) {\n\t\tif (ret.authority) {\n\t\t\tif (!_singleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n\t\t\t}\n\t\t} else {\n\t\t\tif (_doubleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n\t\t\t}\n\t\t}\n\t}\n}\n\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme: string, _strict: boolean): string {\n\tif (!scheme && !_strict) {\n\t\treturn 'file';\n\t}\n\treturn scheme;\n}\n\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme: string, path: string): string {\n\n\t// the slash-character is our 'default base' as we don't\n\t// support constructing URIs relative to other URIs. This\n\t// also means that we alter and potentially break paths.\n\t// see https://tools.ietf.org/html/rfc3986#section-5.1.4\n\tswitch (scheme) {\n\t\tcase 'https':\n\t\tcase 'http':\n\t\tcase 'file':\n\t\t\tif (!path) {\n\t\t\t\tpath = _slash;\n\t\t\t} else if (path[0] !== _slash) {\n\t\t\t\tpath = _slash + path;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn path;\n}\n\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\nexport class URI implements UriComponents {\n\n\tstatic isUri(thing: any): thing is URI {\n\t\tif (thing instanceof URI) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!thing) {\n\t\t\treturn false;\n\t\t}\n\t\treturn typeof (<URI>thing).authority === 'string'\n\t\t\t&& typeof (<URI>thing).fragment === 'string'\n\t\t\t&& typeof (<URI>thing).path === 'string'\n\t\t\t&& typeof (<URI>thing).query === 'string'\n\t\t\t&& typeof (<URI>thing).scheme === 'string'\n\t\t\t&& typeof (<URI>thing).fsPath === 'string'\n\t\t\t&& typeof (<URI>thing).with === 'function'\n\t\t\t&& typeof (<URI>thing).toString === 'function';\n\t}\n\n\t/**\n\t * scheme is the 'http' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part before the first colon.\n\t */\n\treadonly scheme: string;\n\n\t/**\n\t * authority is the 'www.example.com' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part between the first double slashes and the next slash.\n\t */\n\treadonly authority: string;\n\n\t/**\n\t * path is the '/some/path' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly path: string;\n\n\t/**\n\t * query is the 'query' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly query: string;\n\n\t/**\n\t * fragment is the 'fragment' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly fragment: string;\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(scheme: string, authority?: string, path?: string, query?: string, fragment?: string, _strict?: boolean);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(components: UriComponents);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(schemeOrData: string | UriComponents, authority?: string, path?: string, query?: string, fragment?: string, _strict: boolean = false) {\n\n\t\tif (typeof schemeOrData === 'object') {\n\t\t\tthis.scheme = schemeOrData.scheme || _empty;\n\t\t\tthis.authority = schemeOrData.authority || _empty;\n\t\t\tthis.path = schemeOrData.path || _empty;\n\t\t\tthis.query = schemeOrData.query || _empty;\n\t\t\tthis.fragment = schemeOrData.fragment || _empty;\n\t\t\t// no validation because it's this URI\n\t\t\t// that creates uri components.\n\t\t\t// _validateUri(this);\n\t\t} else {\n\t\t\tthis.scheme = _schemeFix(schemeOrData, _strict);\n\t\t\tthis.authority = authority || _empty;\n\t\t\tthis.path = _referenceResolution(this.scheme, path || _empty);\n\t\t\tthis.query = query || _empty;\n\t\t\tthis.fragment = fragment || _empty;\n\n\t\t\t_validateUri(this, _strict);\n\t\t}\n\t}\n\n\t// ---- filesystem path -----------------------\n\n\t/**\n\t * Returns a string representing the corresponding file system path of this URI.\n\t * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n\t * platform specific path separator.\n\t *\n\t * * Will *not* validate the path for invalid characters and semantics.\n\t * * Will *not* look at the scheme of this URI.\n\t * * The result shall *not* be used for display purposes but for accessing a file on disk.\n\t *\n\t *\n\t * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n\t * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n\t *\n\t * ```ts\n\t\tconst u = URI.parse('file://server/c$/folder/file.txt')\n\t\tu.authority === 'server'\n\t\tu.path === '/shares/c$/file.txt'\n\t\tu.fsPath === '\\\\server\\c$\\folder\\file.txt'\n\t```\n\t *\n\t * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n\t * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n\t * with URIs that represent files on disk (`file` scheme).\n\t */\n\tget fsPath(): string {\n\t\t// if (this.scheme !== 'file') {\n\t\t// \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n\t\t// }\n\t\treturn uriToFsPath(this, false);\n\t}\n\n\t// ---- modify to new -------------------------\n\n\twith(change: { scheme?: string; authority?: string | null; path?: string | null; query?: string | null; fragment?: string | null }): URI {\n\n\t\tif (!change) {\n\t\t\treturn this;\n\t\t}\n\n\t\tlet { scheme, authority, path, query, fragment } = change;\n\t\tif (scheme === undefined) {\n\t\t\tscheme = this.scheme;\n\t\t} else if (scheme === null) {\n\t\t\tscheme = _empty;\n\t\t}\n\t\tif (authority === undefined) {\n\t\t\tauthority = this.authority;\n\t\t} else if (authority === null) {\n\t\t\tauthority = _empty;\n\t\t}\n\t\tif (path === undefined) {\n\t\t\tpath = this.path;\n\t\t} else if (path === null) {\n\t\t\tpath = _empty;\n\t\t}\n\t\tif (query === undefined) {\n\t\t\tquery = this.query;\n\t\t} else if (query === null) {\n\t\t\tquery = _empty;\n\t\t}\n\t\tif (fragment === undefined) {\n\t\t\tfragment = this.fragment;\n\t\t} else if (fragment === null) {\n\t\t\tfragment = _empty;\n\t\t}\n\n\t\tif (scheme === this.scheme\n\t\t\t&& authority === this.authority\n\t\t\t&& path === this.path\n\t\t\t&& query === this.query\n\t\t\t&& fragment === this.fragment) {\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new Uri(scheme, authority, path, query, fragment);\n\t}\n\n\t// ---- parse & validate ------------------------\n\n\t/**\n\t * Creates a new URI from a string, e.g. `http://www.example.com/some/path`,\n\t * `file:///usr/home`, or `scheme:with/path`.\n\t *\n\t * @param value A string which represents an URI (see `URI#toString`).\n\t */\n\tstatic parse(value: string, _strict: boolean = false): URI {\n\t\tconst match = _regexp.exec(value);\n\t\tif (!match) {\n\t\t\treturn new Uri(_empty, _empty, _empty, _empty, _empty);\n\t\t}\n\t\treturn new Uri(\n\t\t\tmatch[2] || _empty,\n\t\t\tpercentDecode(match[4] || _empty),\n\t\t\tpercentDecode(match[5] || _empty),\n\t\t\tpercentDecode(match[7] || _empty),\n\t\t\tpercentDecode(match[9] || _empty),\n\t\t\t_strict\n\t\t);\n\t}\n\n\t/**\n\t * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n\t * `/usr/home`, or `\\\\server\\share\\some\\path`.\n\t *\n\t * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n\t * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n\t * `URI.parse('file://' + path)` because the path might contain characters that are\n\t * interpreted (# and ?). See the following sample:\n\t * ```ts\n\tconst good = URI.file('/coding/c#/project1');\n\tgood.scheme === 'file';\n\tgood.path === '/coding/c#/project1';\n\tgood.fragment === '';\n\tconst bad = URI.parse('file://' + '/coding/c#/project1');\n\tbad.scheme === 'file';\n\tbad.path === '/coding/c'; // path is now broken\n\tbad.fragment === '/project1';\n\t```\n\t *\n\t * @param path A file system path (see `URI#fsPath`)\n\t */\n\tstatic file(path: string): URI {\n\n\t\tlet authority = _empty;\n\n\t\t// normalize to fwd-slashes on windows,\n\t\t// on other systems bwd-slashes are valid\n\t\t// filename character, eg /f\\oo/ba\\r.txt\n\t\tif (isWindows) {\n\t\t\tpath = path.replace(/\\\\/g, _slash);\n\t\t}\n\n\t\t// check for authority as used in UNC shares\n\t\t// or use the path as given\n\t\tif (path[0] === _slash && path[1] === _slash) {\n\t\t\tconst idx = path.indexOf(_slash, 2);\n\t\t\tif (idx === -1) {\n\t\t\t\tauthority = path.substring(2);\n\t\t\t\tpath = _slash;\n\t\t\t} else {\n\t\t\t\tauthority = path.substring(2, idx);\n\t\t\t\tpath = path.substring(idx) || _slash;\n\t\t\t}\n\t\t}\n\n\t\treturn new Uri('file', authority, path, _empty, _empty);\n\t}\n\n\tstatic from(components: { scheme: string; authority?: string; path?: string; query?: string; fragment?: string }): URI {\n\t\tconst result = new Uri(\n\t\t\tcomponents.scheme,\n\t\t\tcomponents.authority,\n\t\t\tcomponents.path,\n\t\t\tcomponents.query,\n\t\t\tcomponents.fragment,\n\t\t);\n\t\t_validateUri(result, true);\n\t\treturn result;\n\t}\n\n\t// ---- printing/externalize ---------------------------\n\n\t/**\n\t * Creates a string representation for this URI. It's guaranteed that calling\n\t * `URI.parse` with the result of this function creates an URI which is equal\n\t * to this URI.\n\t *\n\t * * The result shall *not* be used for display purposes but for externalization or transport.\n\t * * The result will be encoded using the percentage encoding and encoding happens mostly\n\t * ignore the scheme-specific encoding rules.\n\t *\n\t * @param skipEncoding Do not encode the result, default is `false`\n\t */\n\ttoString(skipEncoding: boolean = false): string {\n\t\treturn _asFormatted(this, skipEncoding);\n\t}\n\n\ttoJSON(): UriComponents {\n\t\treturn this;\n\t}\n\n\tstatic revive(data: UriComponents | URI): URI;\n\tstatic revive(data: UriComponents | URI | undefined): URI | undefined;\n\tstatic revive(data: UriComponents | URI | null): URI | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null {\n\t\tif (!data) {\n\t\t\treturn <any>data;\n\t\t} else if (data instanceof URI) {\n\t\t\treturn data;\n\t\t} else {\n\t\t\tconst result = new Uri(data);\n\t\t\tresult._formatted = (<UriState>data).external;\n\t\t\tresult._fsPath = (<UriState>data)._sep === _pathSepMarker ? (<UriState>data).fsPath : null;\n\t\t\treturn result;\n\t\t}\n\t}\n}\n\nexport interface UriComponents {\n\tscheme: string;\n\tauthority: string;\n\tpath: string;\n\tquery: string;\n\tfragment: string;\n}\n\ninterface UriState extends UriComponents {\n\t$mid: number;\n\texternal: string;\n\tfsPath: string;\n\t_sep: 1 | undefined;\n}\n\nconst _pathSepMarker = isWindows ? 1 : undefined;\n\n// This class exists so that URI is compatible with vscode.Uri (API).\nclass Uri extends URI {\n\n\t_formatted: string | null = null;\n\t_fsPath: string | null = null;\n\n\toverride get fsPath(): string {\n\t\tif (!this._fsPath) {\n\t\t\tthis._fsPath = uriToFsPath(this, false);\n\t\t}\n\t\treturn this._fsPath;\n\t}\n\n\toverride toString(skipEncoding: boolean = false): string {\n\t\tif (!skipEncoding) {\n\t\t\tif (!this._formatted) {\n\t\t\t\tthis._formatted = _asFormatted(this, false);\n\t\t\t}\n\t\t\treturn this._formatted;\n\t\t} else {\n\t\t\t// we don't cache that\n\t\t\treturn _asFormatted(this, true);\n\t\t}\n\t}\n\n\toverride toJSON(): UriComponents {\n\t\tconst res = <UriState>{\n\t\t\t$mid: 1\n\t\t};\n\t\t// cached state\n\t\tif (this._fsPath) {\n\t\t\tres.fsPath = this._fsPath;\n\t\t\tres._sep = _pathSepMarker;\n\t\t}\n\t\tif (this._formatted) {\n\t\t\tres.external = this._formatted;\n\t\t}\n\t\t// uri components\n\t\tif (this.path) {\n\t\t\tres.path = this.path;\n\t\t}\n\t\tif (this.scheme) {\n\t\t\tres.scheme = this.scheme;\n\t\t}\n\t\tif (this.authority) {\n\t\t\tres.authority = this.authority;\n\t\t}\n\t\tif (this.query) {\n\t\t\tres.query = this.query;\n\t\t}\n\t\tif (this.fragment) {\n\t\t\tres.fragment = this.fragment;\n\t\t}\n\t\treturn res;\n\t}\n}\n\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable: { [ch: number]: string } = {\n\t[CharCode.Colon]: '%3A', // gen-delims\n\t[CharCode.Slash]: '%2F',\n\t[CharCode.QuestionMark]: '%3F',\n\t[CharCode.Hash]: '%23',\n\t[CharCode.OpenSquareBracket]: '%5B',\n\t[CharCode.CloseSquareBracket]: '%5D',\n\t[CharCode.AtSign]: '%40',\n\n\t[CharCode.ExclamationMark]: '%21', // sub-delims\n\t[CharCode.DollarSign]: '%24',\n\t[CharCode.Ampersand]: '%26',\n\t[CharCode.SingleQuote]: '%27',\n\t[CharCode.OpenParen]: '%28',\n\t[CharCode.CloseParen]: '%29',\n\t[CharCode.Asterisk]: '%2A',\n\t[CharCode.Plus]: '%2B',\n\t[CharCode.Comma]: '%2C',\n\t[CharCode.Semicolon]: '%3B',\n\t[CharCode.Equals]: '%3D',\n\n\t[CharCode.Space]: '%20',\n};\n\nfunction encodeURIComponentFast(uriComponent: string, isPath: boolean, isAuthority: boolean): string {\n\tlet res: string | undefined = undefined;\n\tlet nativeEncodePos = -1;\n\n\tfor (let pos = 0; pos < uriComponent.length; pos++) {\n\t\tconst code = uriComponent.charCodeAt(pos);\n\n\t\t// unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n\t\tif (\n\t\t\t(code >= CharCode.a && code <= CharCode.z)\n\t\t\t|| (code >= CharCode.A && code <= CharCode.Z)\n\t\t\t|| (code >= CharCode.Digit0 && code <= CharCode.Digit9)\n\t\t\t|| code === CharCode.Dash\n\t\t\t|| code === CharCode.Period\n\t\t\t|| code === CharCode.Underline\n\t\t\t|| code === CharCode.Tilde\n\t\t\t|| (isPath && code === CharCode.Slash)\n\t\t\t|| (isAuthority && code === CharCode.OpenSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.CloseSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.Colon)\n\t\t) {\n\t\t\t// check if we are delaying native encode\n\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\tnativeEncodePos = -1;\n\t\t\t}\n\t\t\t// check if we write into a new string (by default we try to return the param)\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += uriComponent.charAt(pos);\n\t\t\t}\n\n\t\t} else {\n\t\t\t// encoding needed, we need to allocate a new string\n\t\t\tif (res === undefined) {\n\t\t\t\tres = uriComponent.substr(0, pos);\n\t\t\t}\n\n\t\t\t// check with default table first\n\t\t\tconst escaped = encodeTable[code];\n\t\t\tif (escaped !== undefined) {\n\n\t\t\t\t// check if we are delaying native encode\n\t\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\t\tnativeEncodePos = -1;\n\t\t\t\t}\n\n\t\t\t\t// append escaped variant to result\n\t\t\t\tres += escaped;\n\n\t\t\t} else if (nativeEncodePos === -1) {\n\t\t\t\t// use native encode only when needed\n\t\t\t\tnativeEncodePos = pos;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (nativeEncodePos !== -1) {\n\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n\t}\n\n\treturn res !== undefined ? res : uriComponent;\n}\n\nfunction encodeURIComponentMinimal(path: string): string {\n\tlet res: string | undefined = undefined;\n\tfor (let pos = 0; pos < path.length; pos++) {\n\t\tconst code = path.charCodeAt(pos);\n\t\tif (code === CharCode.Hash || code === CharCode.QuestionMark) {\n\t\t\tif (res === undefined) {\n\t\t\t\tres = path.substr(0, pos);\n\t\t\t}\n\t\t\tres += encodeTable[code];\n\t\t} else {\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += path[pos];\n\t\t\t}\n\t\t}\n\t}\n\treturn res !== undefined ? res : path;\n}\n\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri: URI, keepDriveLetterCasing: boolean): string {\n\n\tlet value: string;\n\tif (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n\t\t// unc path: file://shares/c$/far/boo\n\t\tvalue = `//${uri.authority}${uri.path}`;\n\t} else if (\n\t\turi.path.charCodeAt(0) === CharCode.Slash\n\t\t&& (uri.path.charCodeAt(1) >= CharCode.A && uri.path.charCodeAt(1) <= CharCode.Z || uri.path.charCodeAt(1) >= CharCode.a && uri.path.charCodeAt(1) <= CharCode.z)\n\t\t&& uri.path.charCodeAt(2) === CharCode.Colon\n\t) {\n\t\tif (!keepDriveLetterCasing) {\n\t\t\t// windows drive letter: file:///c:/far/boo\n\t\t\tvalue = uri.path[1].toLowerCase() + uri.path.substr(2);\n\t\t} else {\n\t\t\tvalue = uri.path.substr(1);\n\t\t}\n\t} else {\n\t\t// other path\n\t\tvalue = uri.path;\n\t}\n\tif (isWindows) {\n\t\tvalue = value.replace(/\\//g, '\\\\');\n\t}\n\treturn value;\n}\n\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri: URI, skipEncoding: boolean): string {\n\n\tconst encoder = !skipEncoding\n\t\t? encodeURIComponentFast\n\t\t: encodeURIComponentMinimal;\n\n\tlet res = '';\n\tlet { scheme, authority, path, query, fragment } = uri;\n\tif (scheme) {\n\t\tres += scheme;\n\t\tres += ':';\n\t}\n\tif (authority || scheme === 'file') {\n\t\tres += _slash;\n\t\tres += _slash;\n\t}\n\tif (authority) {\n\t\tlet idx = authority.indexOf('@');\n\t\tif (idx !== -1) {\n\t\t\t// <user>@<auth>\n\t\t\tconst userinfo = authority.substr(0, idx);\n\t\t\tauthority = authority.substr(idx + 1);\n\t\t\tidx = userinfo.lastIndexOf(':');\n\t\t\tif (idx === -1) {\n\t\t\t\tres += encoder(userinfo, false, false);\n\t\t\t} else {\n\t\t\t\t// <user>:<pass>@<auth>\n\t\t\t\tres += encoder(userinfo.substr(0, idx), false, false);\n\t\t\t\tres += ':';\n\t\t\t\tres += encoder(userinfo.substr(idx + 1), false, true);\n\t\t\t}\n\t\t\tres += '@';\n\t\t}\n\t\tauthority = authority.toLowerCase();\n\t\tidx = authority.lastIndexOf(':');\n\t\tif (idx === -1) {\n\t\t\tres += encoder(authority, false, true);\n\t\t} else {\n\t\t\t// <auth>:<port>\n\t\t\tres += encoder(authority.substr(0, idx), false, true);\n\t\t\tres += authority.substr(idx);\n\t\t}\n\t}\n\tif (path) {\n\t\t// lower-case windows drive letters in /C:/fff or C:/fff\n\t\tif (path.length >= 3 && path.charCodeAt(0) === CharCode.Slash && path.charCodeAt(2) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(1);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t} else if (path.length >= 2 && path.charCodeAt(1) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(0);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t}\n\t\t// encode the rest of the path\n\t\tres += encoder(path, true, false);\n\t}\n\tif (query) {\n\t\tres += '?';\n\t\tres += encoder(query, false, false);\n\t}\n\tif (fragment) {\n\t\tres += '#';\n\t\tres += !skipEncoding ? encodeURIComponentFast(fragment, false, false) : fragment;\n\t}\n\treturn res;\n}\n\n// --- decode\n\nfunction decodeURIComponentGraceful(str: string): string {\n\ttry {\n\t\treturn decodeURIComponent(str);\n\t} catch {\n\t\tif (str.length > 3) {\n\t\t\treturn str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n\t\t} else {\n\t\t\treturn str;\n\t\t}\n\t}\n}\n\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n\nfunction percentDecode(str: string): string {\n\tif (!str.match(_rEncodedAsHex)) {\n\t\treturn str;\n\t}\n\treturn str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n}\n\n/**\n * Mapped-type that replaces all occurrences of URI with UriComponents\n */\nexport type UriDto<T> = { [K in keyof T]: T[K] extends URI\n\t? UriComponents\n\t: UriDto<T[K]> };\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { CharCode } from './charCode';\nimport { URI } from './uri';\nimport * as nodePath from 'path';\n\nconst posixPath = nodePath.posix || nodePath;\nconst slash = '/';\n\nexport namespace Utils {\n\n /**\n * Joins one or more input paths to the path of URI. \n * '/' is used as the directory separation character. \n * \n * The resolved path will be normalized. That means:\n * - all '..' and '.' segments are resolved.\n * - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n * - trailing separators are preserved.\n * \n * @param uri The input URI.\n * @param paths The paths to be joined with the path of URI.\n * @returns A URI with the joined path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n */\n export function joinPath(uri: URI, ...paths: string[]): URI {\n return uri.with({ path: posixPath.join(uri.path, ...paths) });\n }\n\n\n /**\n * Resolves one or more paths against the path of a URI. \n * '/' is used as the directory separation character. \n * \n * The resolved path will be normalized. That means:\n * - all '..' and '.' segments are resolved. \n * - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n * - trailing separators are removed.\n * \n * @param uri The input URI.\n * @param paths The paths to resolve against the path of URI.\n * @returns A URI with the resolved path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n */\n export function resolvePath(uri: URI, ...paths: string[]): URI {\n let path = uri.path; \n let slashAdded = false;\n if (path[0] !== slash) {\n path = slash + path; // make the path abstract: for posixPath.resolve the first segments has to be absolute or cwd is used.\n slashAdded = true;\n }\n let resolvedPath = posixPath.resolve(path, ...paths);\n if (slashAdded && resolvedPath[0] === slash && !uri.authority) {\n resolvedPath = resolvedPath.substring(1);\n }\n return uri.with({ path: resolvedPath });\n }\n\n /**\n * Returns a URI where the path is the directory name of the input uri, similar to the Unix dirname command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The orignal URI is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The last segment of the URIs path.\n */\n export function dirname(uri: URI): URI {\n if (uri.path.length === 0 || uri.path === slash) {\n return uri;\n }\n let path = posixPath.dirname(uri.path);\n if (path.length === 1 && path.charCodeAt(0) === CharCode.Period) {\n path = '';\n }\n return uri.with({ path });\n }\n\n /**\n * Returns the last segment of the path of a URI, similar to the Unix basename command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The empty string is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The base name of the URIs path.\n */\n export function basename(uri: URI): string {\n return posixPath.basename(uri.path);\n }\n\n /**\n * Returns the extension name of the path of a URI, similar to the Unix extname command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The empty string is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The extension name of the URIs path.\n */\n export function extname(uri: URI): string {\n return posixPath.extname(uri.path);\n }\n}", null, null, "const defaultQuotedOptions = {\n escape: 92, // \\ character\n throws: false\n};\n/**\n * Check if given code is a number\n */\nfunction isNumber(code) {\n return code > 47 && code < 58;\n}\n/**\n * Check if given character code is alpha code (letter through A to Z)\n */\nfunction isAlpha(code, from, to) {\n from = from || 65; // A\n to = to || 90; // Z\n code &= ~32; // quick hack to convert any char code to uppercase char code\n return code >= from && code <= to;\n}\n/**\n * Check if given character code is alpha-numeric (letter through A to Z or number)\n */\nfunction isAlphaNumeric(code) {\n return isNumber(code) || isAlpha(code);\n}\nfunction isAlphaNumericWord(code) {\n return isNumber(code) || isAlphaWord(code);\n}\nfunction isAlphaWord(code) {\n return code === 95 /* _ */ || isAlpha(code);\n}\n/**\n * Check for Umlauts i.e. ä, Ä, ö, Ö, ü and Ü\n */\nfunction isUmlaut(code) {\n return code === 196\n || code == 214\n || code === 220\n || code === 228\n || code === 246\n || code === 252;\n}\n/**\n * Check if given character code is a white-space character: a space character\n * or line breaks\n */\nfunction isWhiteSpace(code) {\n return code === 32 /* space */\n || code === 9 /* tab */\n || code === 160; /* non-breaking space */\n}\n/**\n * Check if given character code is a space character\n */\nfunction isSpace(code) {\n return isWhiteSpace(code)\n || code === 10 /* LF */\n || code === 13; /* CR */\n}\n/**\n * Consumes 'single' or \"double\"-quoted string from given string, if possible\n * @return `true` if quoted string was consumed. The contents of quoted string\n * will be available as `stream.current()`\n */\nfunction eatQuoted(stream, options) {\n options = Object.assign(Object.assign({}, defaultQuotedOptions), options);\n const start = stream.pos;\n const quote = stream.peek();\n if (stream.eat(isQuote)) {\n while (!stream.eof()) {\n switch (stream.next()) {\n case quote:\n stream.start = start;\n return true;\n case options.escape:\n stream.next();\n break;\n }\n }\n // If we’re here then stream wasn’t properly consumed.\n // Revert stream and decide what to do\n stream.pos = start;\n if (options.throws) {\n throw stream.error('Unable to consume quoted string');\n }\n }\n return false;\n}\n/**\n * Check if given character code is a quote character\n */\nfunction isQuote(code) {\n return code === 39 /* ' */ || code === 34 /* \" */;\n}\n/**\n * Eats paired characters substring, for example `(foo)` or `[bar]`\n * @param open Character code of pair opening\n * @param close Character code of pair closing\n * @return Returns `true` if character pair was successfully consumed, it’s\n * content will be available as `stream.current()`\n */\nfunction eatPair(stream, open, close, options) {\n options = Object.assign(Object.assign({}, defaultQuotedOptions), options);\n const start = stream.pos;\n if (stream.eat(open)) {\n let stack = 1;\n let ch;\n while (!stream.eof()) {\n if (eatQuoted(stream, options)) {\n continue;\n }\n ch = stream.next();\n if (ch === open) {\n stack++;\n }\n else if (ch === close) {\n stack--;\n if (!stack) {\n stream.start = start;\n return true;\n }\n }\n else if (ch === options.escape) {\n stream.next();\n }\n }\n // If we’re here then paired character can’t be consumed\n stream.pos = start;\n if (options.throws) {\n throw stream.error(`Unable to find matching pair for ${String.fromCharCode(open)}`);\n }\n }\n return false;\n}\n\n/**\n * A streaming, character code-based string reader\n */\nclass Scanner {\n constructor(str, start, end) {\n if (end == null && typeof str === 'string') {\n end = str.length;\n }\n this.string = str;\n this.pos = this.start = start || 0;\n this.end = end || 0;\n }\n /**\n * Returns true only if the stream is at the end of the file.\n */\n eof() {\n return this.pos >= this.end;\n }\n /**\n * Creates a new stream instance which is limited to given `start` and `end`\n * range. E.g. its `eof()` method will look at `end` property, not actual\n * stream end\n */\n limit(start, end) {\n return new Scanner(this.string, start, end);\n }\n /**\n * Returns the next character code in the stream without advancing it.\n * Will return NaN at the end of the file.\n */\n peek() {\n return this.string.charCodeAt(this.pos);\n }\n /**\n * Returns the next character in the stream and advances it.\n * Also returns <code>undefined</code> when no more characters are available.\n */\n next() {\n if (this.pos < this.string.length) {\n return this.string.charCodeAt(this.pos++);\n }\n }\n /**\n * `match` can be a character code or a function that takes a character code\n * and returns a boolean. If the next character in the stream 'matches'\n * the given argument, it is consumed and returned.\n * Otherwise, `false` is returned.\n */\n eat(match) {\n const ch = this.peek();\n const ok = typeof match === 'function' ? match(ch) : ch === match;\n if (ok) {\n this.next();\n }\n return ok;\n }\n /**\n * Repeatedly calls <code>eat</code> with the given argument, until it\n * fails. Returns <code>true</code> if any characters were eaten.\n */\n eatWhile(match) {\n const start = this.pos;\n while (!this.eof() && this.eat(match)) { /* */ }\n return this.pos !== start;\n }\n /**\n * Backs up the stream n characters. Backing it up further than the\n * start of the current token will cause things to break, so be careful.\n */\n backUp(n) {\n this.pos -= (n || 1);\n }\n /**\n * Get the string between the start of the current token and the\n * current stream position.\n */\n current() {\n return this.substring(this.start, this.pos);\n }\n /**\n * Returns substring for given range\n */\n substring(start, end) {\n return this.string.slice(start, end);\n }\n /**\n * Creates error object with current stream state\n */\n error(message, pos = this.pos) {\n return new ScannerError(`${message} at ${pos + 1}`, pos, this.string);\n }\n}\nclass ScannerError extends Error {\n constructor(message, pos, str) {\n super(message);\n this.pos = pos;\n this.string = str;\n }\n}\n\nexport { ScannerError, Scanner as default, eatPair, eatQuoted, isAlpha, isAlphaNumeric, isAlphaNumericWord, isAlphaWord, isNumber, isQuote, isSpace, isUmlaut, isWhiteSpace };\n//# sourceMappingURL=scanner.js.map\n", "import Scanner, { isNumber, isQuote as isQuote$1, isSpace, isAlpha, isAlphaNumericWord, isUmlaut, ScannerError } from '@emmetio/scanner';\n\nfunction tokenScanner(tokens) {\n return {\n tokens,\n start: 0,\n pos: 0,\n size: tokens.length\n };\n}\nfunction peek(scanner) {\n return scanner.tokens[scanner.pos];\n}\nfunction next(scanner) {\n return scanner.tokens[scanner.pos++];\n}\nfunction slice(scanner, from = scanner.start, to = scanner.pos) {\n return scanner.tokens.slice(from, to);\n}\nfunction readable(scanner) {\n return scanner.pos < scanner.size;\n}\nfunction consume(scanner, test) {\n const token = peek(scanner);\n if (token && test(token)) {\n scanner.pos++;\n return true;\n }\n return false;\n}\nfunction error(scanner, message, token = peek(scanner)) {\n if (token && token.start != null) {\n message += ` at ${token.start}`;\n }\n const err = new Error(message);\n err['pos'] = token && token.start;\n return err;\n}\n\nfunction abbreviation(abbr, options = {}) {\n const scanner = tokenScanner(abbr);\n const result = statements(scanner, options);\n if (readable(scanner)) {\n throw error(scanner, 'Unexpected character');\n }\n return result;\n}\nfunction statements(scanner, options) {\n const result = {\n type: 'TokenGroup',\n elements: []\n };\n let ctx = result;\n let node;\n const stack = [];\n while (readable(scanner)) {\n if (node = element(scanner, options) || group(scanner, options)) {\n ctx.elements.push(node);\n if (consume(scanner, isChildOperator)) {\n stack.push(ctx);\n ctx = node;\n }\n else if (consume(scanner, isSiblingOperator)) {\n continue;\n }\n else if (consume(scanner, isClimbOperator)) {\n do {\n if (stack.length) {\n ctx = stack.pop();\n }\n } while (consume(scanner, isClimbOperator));\n }\n }\n else {\n break;\n }\n }\n return result;\n}\n/**\n * Consumes group from given scanner\n */\nfunction group(scanner, options) {\n if (consume(scanner, isGroupStart)) {\n const result = statements(scanner, options);\n const token = next(scanner);\n if (isBracket(token, 'group', false)) {\n result.repeat = repeater$1(scanner);\n }\n return result;\n }\n}\n/**\n * Consumes single element from given scanner\n */\nfunction element(scanner, options) {\n let attr;\n const elem = {\n type: 'TokenElement',\n name: void 0,\n attributes: void 0,\n value: void 0,\n repeat: void 0,\n selfClose: false,\n elements: []\n };\n if (elementName(scanner, options)) {\n elem.name = slice(scanner);\n }\n while (readable(scanner)) {\n scanner.start = scanner.pos;\n if (!elem.repeat && !isEmpty(elem) && consume(scanner, isRepeater)) {\n elem.repeat = scanner.tokens[scanner.pos - 1];\n }\n else if (!elem.value && text(scanner)) {\n elem.value = getText(scanner);\n }\n else if (attr = shortAttribute(scanner, 'id', options) || shortAttribute(scanner, 'class', options) || attributeSet(scanner)) {\n if (!elem.attributes) {\n elem.attributes = Array.isArray(attr) ? attr.slice() : [attr];\n }\n else {\n elem.attributes = elem.attributes.concat(attr);\n }\n }\n else {\n if (!isEmpty(elem) && consume(scanner, isCloseOperator)) {\n elem.selfClose = true;\n if (!elem.repeat && consume(scanner, isRepeater)) {\n elem.repeat = scanner.tokens[scanner.pos - 1];\n }\n }\n break;\n }\n }\n return !isEmpty(elem) ? elem : void 0;\n}\n/**\n * Consumes attribute set from given scanner\n */\nfunction attributeSet(scanner) {\n if (consume(scanner, isAttributeSetStart)) {\n const attributes = [];\n let attr;\n while (readable(scanner)) {\n if (attr = attribute(scanner)) {\n attributes.push(attr);\n }\n else if (consume(scanner, isAttributeSetEnd)) {\n break;\n }\n else if (!consume(scanner, isWhiteSpace)) {\n throw error(scanner, `Unexpected \"${peek(scanner).type}\" token`);\n }\n }\n return attributes;\n }\n}\n/**\n * Consumes attribute shorthand (class or id) from given scanner\n */\nfunction shortAttribute(scanner, type, options) {\n if (isOperator(peek(scanner), type)) {\n scanner.pos++;\n // Consume multiple operators\n let count = 1;\n while (isOperator(peek(scanner), type)) {\n scanner.pos++;\n count++;\n }\n const attr = {\n name: [createLiteral(type)]\n };\n if (count > 1) {\n attr.multiple = true;\n }\n // Consume expression after shorthand start for React-like components\n if (options.jsx && text(scanner)) {\n attr.value = getText(scanner);\n attr.expression = true;\n }\n else {\n attr.value = literal$1(scanner) ? slice(scanner) : void 0;\n }\n return attr;\n }\n}\n/**\n * Consumes single attribute from given scanner\n */\nfunction attribute(scanner) {\n if (quoted(scanner)) {\n // Consumed quoted value: it’s a value for default attribute\n return {\n value: slice(scanner)\n };\n }\n if (literal$1(scanner, true)) {\n const name = slice(scanner);\n let value;\n if (consume(scanner, isEquals)) {\n if (quoted(scanner) || literal$1(scanner, true)) {\n value = slice(scanner);\n }\n }\n return { name, value };\n }\n}\nfunction repeater$1(scanner) {\n return isRepeater(peek(scanner))\n ? scanner.tokens[scanner.pos++]\n : void 0;\n}\n/**\n * Consumes quoted value from given scanner, if possible\n */\nfunction quoted(scanner) {\n const start = scanner.pos;\n const quote = peek(scanner);\n if (isQuote(quote)) {\n scanner.pos++;\n while (readable(scanner)) {\n if (isQuote(next(scanner), quote.single)) {\n scanner.start = start;\n return true;\n }\n }\n throw error(scanner, 'Unclosed quote', quote);\n }\n return false;\n}\n/**\n * Consumes literal (unquoted value) from given scanner\n */\nfunction literal$1(scanner, allowBrackets) {\n const start = scanner.pos;\n const brackets = {\n attribute: 0,\n expression: 0,\n group: 0\n };\n while (readable(scanner)) {\n const token = peek(scanner);\n if (brackets.expression) {\n // If we’re inside expression, we should consume all content in it\n if (isBracket(token, 'expression')) {\n brackets[token.context] += token.open ? 1 : -1;\n }\n }\n else if (isQuote(token) || isOperator(token) || isWhiteSpace(token) || isRepeater(token)) {\n break;\n }\n else if (isBracket(token)) {\n if (!allowBrackets) {\n break;\n }\n if (token.open) {\n brackets[token.context]++;\n }\n else if (!brackets[token.context]) {\n // Stop if found unmatched closing brace: it must be handled\n // by parent consumer\n break;\n }\n else {\n brackets[token.context]--;\n }\n }\n scanner.pos++;\n }\n if (start !== scanner.pos) {\n scanner.start = start;\n return true;\n }\n return false;\n}\n/**\n * Consumes element name from given scanner\n */\nfunction elementName(scanner, options) {\n const start = scanner.pos;\n if (options.jsx && consume(scanner, isCapitalizedLiteral)) {\n // Check for edge case: consume immediate capitalized class names\n // for React-like components, e.g. `Foo.Bar.Baz`\n while (readable(scanner)) {\n const { pos } = scanner;\n if (!consume(scanner, isClassNameOperator) || !consume(scanner, isCapitalizedLiteral)) {\n scanner.pos = pos;\n break;\n }\n }\n }\n while (readable(scanner) && consume(scanner, isElementName$1)) {\n // empty\n }\n if (scanner.pos !== start) {\n scanner.start = start;\n return true;\n }\n return false;\n}\n/**\n * Consumes text value from given scanner\n */\nfunction text(scanner) {\n const start = scanner.pos;\n if (consume(scanner, isTextStart)) {\n let brackets = 0;\n while (readable(scanner)) {\n const token = next(scanner);\n if (isBracket(token, 'expression')) {\n if (token.open) {\n brackets++;\n }\n else if (!brackets) {\n break;\n }\n else {\n brackets--;\n }\n }\n }\n scanner.start = start;\n return true;\n }\n return false;\n}\nfunction getText(scanner) {\n let from = scanner.start;\n let to = scanner.pos;\n if (isBracket(scanner.tokens[from], 'expression', true)) {\n from++;\n }\n if (isBracket(scanner.tokens[to - 1], 'expression', false)) {\n to--;\n }\n return slice(scanner, from, to);\n}\nfunction isBracket(token, context, isOpen) {\n return Boolean(token && token.type === 'Bracket'\n && (!context || token.context === context)\n && (isOpen == null || token.open === isOpen));\n}\nfunction isOperator(token, type) {\n return Boolean(token && token.type === 'Operator' && (!type || token.operator === type));\n}\nfunction isQuote(token, isSingle) {\n return Boolean(token && token.type === 'Quote' && (isSingle == null || token.single === isSingle));\n}\nfunction isWhiteSpace(token) {\n return Boolean(token && token.type === 'WhiteSpace');\n}\nfunction isEquals(token) {\n return isOperator(token, 'equal');\n}\nfunction isRepeater(token) {\n return Boolean(token && token.type === 'Repeater');\n}\nfunction isLiteral(token) {\n return token.type === 'Literal';\n}\nfunction isCapitalizedLiteral(token) {\n if (isLiteral(token)) {\n const ch = token.value.charCodeAt(0);\n return ch >= 65 && ch <= 90;\n }\n return false;\n}\nfunction isElementName$1(token) {\n return token.type === 'Literal' || token.type === 'RepeaterNumber' || token.type === 'RepeaterPlaceholder';\n}\nfunction isClassNameOperator(token) {\n return isOperator(token, 'class');\n}\nfunction isAttributeSetStart(token) {\n return isBracket(token, 'attribute', true);\n}\nfunction isAttributeSetEnd(token) {\n return isBracket(token, 'attribute', false);\n}\nfunction isTextStart(token) {\n return isBracket(token, 'expression', true);\n}\nfunction isGroupStart(token) {\n return isBracket(token, 'group', true);\n}\nfunction createLiteral(value) {\n return { type: 'Literal', value };\n}\nfunction isEmpty(elem) {\n return !elem.name && !elem.value && !elem.attributes;\n}\nfunction isChildOperator(token) {\n return isOperator(token, 'child');\n}\nfunction isSiblingOperator(token) {\n return isOperator(token, 'sibling');\n}\nfunction isClimbOperator(token) {\n return isOperator(token, 'climb');\n}\nfunction isCloseOperator(token) {\n return isOperator(token, 'close');\n}\n\nvar Chars;\n(function (Chars) {\n /** `{` character */\n Chars[Chars[\"CurlyBracketOpen\"] = 123] = \"CurlyBracketOpen\";\n /** `}` character */\n Chars[Chars[\"CurlyBracketClose\"] = 125] = \"CurlyBracketClose\";\n /** `\\\\` character */\n Chars[Chars[\"Escape\"] = 92] = \"Escape\";\n /** `=` character */\n Chars[Chars[\"Equals\"] = 61] = \"Equals\";\n /** `[` character */\n Chars[Chars[\"SquareBracketOpen\"] = 91] = \"SquareBracketOpen\";\n /** `]` character */\n Chars[Chars[\"SquareBracketClose\"] = 93] = \"SquareBracketClose\";\n /** `*` character */\n Chars[Chars[\"Asterisk\"] = 42] = \"Asterisk\";\n /** `#` character */\n Chars[Chars[\"Hash\"] = 35] = \"Hash\";\n /** `$` character */\n Chars[Chars[\"Dollar\"] = 36] = \"Dollar\";\n /** `-` character */\n Chars[Chars[\"Dash\"] = 45] = \"Dash\";\n /** `.` character */\n Chars[Chars[\"Dot\"] = 46] = \"Dot\";\n /** `/` character */\n Chars[Chars[\"Slash\"] = 47] = \"Slash\";\n /** `:` character */\n Chars[Chars[\"Colon\"] = 58] = \"Colon\";\n /** `!` character */\n Chars[Chars[\"Excl\"] = 33] = \"Excl\";\n /** `@` character */\n Chars[Chars[\"At\"] = 64] = \"At\";\n /** `_` character */\n Chars[Chars[\"Underscore\"] = 95] = \"Underscore\";\n /** `(` character */\n Chars[Chars[\"RoundBracketOpen\"] = 40] = \"RoundBracketOpen\";\n /** `)` character */\n Chars[Chars[\"RoundBracketClose\"] = 41] = \"RoundBracketClose\";\n /** `+` character */\n Chars[Chars[\"Sibling\"] = 43] = \"Sibling\";\n /** `>` character */\n Chars[Chars[\"Child\"] = 62] = \"Child\";\n /** `^` character */\n Chars[Chars[\"Climb\"] = 94] = \"Climb\";\n /** `'` character */\n Chars[Chars[\"SingleQuote\"] = 39] = \"SingleQuote\";\n /** `\"\"` character */\n Chars[Chars[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n})(Chars || (Chars = {}));\n/**\n * If consumes escape character, sets current stream range to escaped value\n */\nfunction escaped(scanner) {\n if (scanner.eat(Chars.Escape)) {\n scanner.start = scanner.pos;\n if (!scanner.eof()) {\n scanner.pos++;\n }\n return true;\n }\n return false;\n}\n\nfunction tokenize(source) {\n const scanner = new Scanner(source);\n const result = [];\n const ctx = {\n group: 0,\n attribute: 0,\n expression: 0,\n quote: 0\n };\n let ch = 0;\n let token;\n while (!scanner.eof()) {\n ch = scanner.peek();\n token = getToken(scanner, ctx);\n if (token) {\n result.push(token);\n if (token.type === 'Quote') {\n ctx.quote = ch === ctx.quote ? 0 : ch;\n }\n else if (token.type === 'Bracket') {\n ctx[token.context] += token.open ? 1 : -1;\n }\n }\n else {\n throw scanner.error('Unexpected character');\n }\n }\n return result;\n}\n/**\n * Returns next token from given scanner, if possible\n */\nfunction getToken(scanner, ctx) {\n return field(scanner, ctx)\n || repeaterPlaceholder(scanner)\n || repeaterNumber(scanner)\n || repeater(scanner)\n || whiteSpace(scanner)\n || literal(scanner, ctx)\n || operator(scanner)\n || quote(scanner)\n || bracket(scanner);\n}\n/**\n * Consumes literal from given scanner\n */\nfunction literal(scanner, ctx) {\n const start = scanner.pos;\n const expressionStart = ctx.expression;\n let value = '';\n while (!scanner.eof()) {\n // Consume escaped sequence no matter of context\n if (escaped(scanner)) {\n value += scanner.current();\n continue;\n }\n const ch = scanner.peek();\n if (ch === Chars.Slash && !ctx.quote && !ctx.expression && !ctx.attribute) {\n // Special case for `/` character between numbers in class names\n const prev = scanner.string.charCodeAt(scanner.pos - 1);\n const next = scanner.string.charCodeAt(scanner.pos + 1);\n if (isNumber(prev) && isNumber(next)) {\n value += scanner.string[scanner.pos++];\n continue;\n }\n }\n if (ch === ctx.quote || ch === Chars.Dollar || isAllowedOperator(ch, ctx)) {\n // 1. Found matching quote\n // 2. The `$` character has special meaning in every context\n // 3. Depending on context, some characters should be treated as operators\n break;\n }\n if (expressionStart) {\n // Consume nested expressions, e.g. span{{foo}}\n if (ch === Chars.CurlyBracketOpen) {\n ctx.expression++;\n }\n else if (ch === Chars.CurlyBracketClose) {\n if (ctx.expression > expressionStart) {\n ctx.expression--;\n }\n else {\n break;\n }\n }\n }\n else if (!ctx.quote) {\n // Consuming element name\n if (!ctx.attribute && !isElementName(ch)) {\n break;\n }\n if (isAllowedSpace(ch, ctx) || isAllowedRepeater(ch, ctx) || isQuote$1(ch) || bracketType(ch)) {\n // Stop for characters not allowed in unquoted literal\n break;\n }\n }\n value += scanner.string[scanner.pos++];\n }\n if (start !== scanner.pos) {\n scanner.start = start;\n return {\n type: 'Literal',\n value,\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes white space characters as string literal from given scanner\n */\nfunction whiteSpace(scanner) {\n const start = scanner.pos;\n if (scanner.eatWhile(isSpace)) {\n return {\n type: 'WhiteSpace',\n start,\n end: scanner.pos,\n value: scanner.substring(start, scanner.pos)\n };\n }\n}\n/**\n * Consumes quote from given scanner\n */\nfunction quote(scanner) {\n const ch = scanner.peek();\n if (isQuote$1(ch)) {\n return {\n type: 'Quote',\n single: ch === Chars.SingleQuote,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes bracket from given scanner\n */\nfunction bracket(scanner) {\n const ch = scanner.peek();\n const context = bracketType(ch);\n if (context) {\n return {\n type: 'Bracket',\n open: isOpenBracket(ch),\n context,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes operator from given scanner\n */\nfunction operator(scanner) {\n const op = operatorType(scanner.peek());\n if (op) {\n return {\n type: 'Operator',\n operator: op,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes node repeat token from current stream position and returns its\n * parsed value\n */\nfunction repeater(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Asterisk)) {\n scanner.start = scanner.pos;\n let count = 1;\n let implicit = false;\n if (scanner.eatWhile(isNumber)) {\n count = Number(scanner.current());\n }\n else {\n implicit = true;\n }\n return {\n type: 'Repeater',\n count,\n value: 0,\n implicit,\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes repeater placeholder `$#` from given scanner\n */\nfunction repeaterPlaceholder(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dollar) && scanner.eat(Chars.Hash)) {\n return {\n type: 'RepeaterPlaceholder',\n value: void 0,\n start,\n end: scanner.pos\n };\n }\n scanner.pos = start;\n}\n/**\n * Consumes numbering token like `$` from given scanner state\n */\nfunction repeaterNumber(scanner) {\n const start = scanner.pos;\n if (scanner.eatWhile(Chars.Dollar)) {\n const size = scanner.pos - start;\n let reverse = false;\n let base = 1;\n let parent = 0;\n if (scanner.eat(Chars.At)) {\n // Consume numbering modifiers\n while (scanner.eat(Chars.Climb)) {\n parent++;\n }\n reverse = scanner.eat(Chars.Dash);\n scanner.start = scanner.pos;\n if (scanner.eatWhile(isNumber)) {\n base = Number(scanner.current());\n }\n }\n scanner.start = start;\n return {\n type: 'RepeaterNumber',\n size,\n reverse,\n base,\n parent,\n start,\n end: scanner.pos\n };\n }\n}\nfunction field(scanner, ctx) {\n const start = scanner.pos;\n // Fields are allowed inside expressions and attributes\n if ((ctx.expression || ctx.attribute) && scanner.eat(Chars.Dollar) && scanner.eat(Chars.CurlyBracketOpen)) {\n scanner.start = scanner.pos;\n let index;\n let name = '';\n if (scanner.eatWhile(isNumber)) {\n // It’s a field\n index = Number(scanner.current());\n name = scanner.eat(Chars.Colon) ? consumePlaceholder(scanner) : '';\n }\n else if (isAlpha(scanner.peek())) {\n // It’s a variable\n name = consumePlaceholder(scanner);\n }\n if (scanner.eat(Chars.CurlyBracketClose)) {\n return {\n type: 'Field',\n index, name,\n start,\n end: scanner.pos\n };\n }\n throw scanner.error('Expecting }');\n }\n // If we reached here then there’s no valid field here, revert\n // back to starting position\n scanner.pos = start;\n}\n/**\n * Consumes a placeholder: value right after `:` in field. Could be empty\n */\nfunction consumePlaceholder(stream) {\n const stack = [];\n stream.start = stream.pos;\n while (!stream.eof()) {\n if (stream.eat(Chars.CurlyBracketOpen)) {\n stack.push(stream.pos);\n }\n else if (stream.eat(Chars.CurlyBracketClose)) {\n if (!stack.length) {\n stream.pos--;\n break;\n }\n stack.pop();\n }\n else {\n stream.pos++;\n }\n }\n if (stack.length) {\n stream.pos = stack.pop();\n throw stream.error(`Expecting }`);\n }\n return stream.current();\n}\n/**\n * Check if given character code is an operator and it’s allowed in current context\n */\nfunction isAllowedOperator(ch, ctx) {\n const op = operatorType(ch);\n if (!op || ctx.quote || ctx.expression) {\n // No operators inside quoted values or expressions\n return false;\n }\n // Inside attributes, only `equals` is allowed\n return !ctx.attribute || op === 'equal';\n}\n/**\n * Check if given character is a space character and is allowed to be consumed\n * as a space token in current context\n */\nfunction isAllowedSpace(ch, ctx) {\n return isSpace(ch) && !ctx.expression;\n}\n/**\n * Check if given character can be consumed as repeater in current context\n */\nfunction isAllowedRepeater(ch, ctx) {\n return ch === Chars.Asterisk && !ctx.attribute && !ctx.expression;\n}\n/**\n * If given character is a bracket, returns it’s type\n */\nfunction bracketType(ch) {\n if (ch === Chars.RoundBracketOpen || ch === Chars.RoundBracketClose) {\n return 'group';\n }\n if (ch === Chars.SquareBracketOpen || ch === Chars.SquareBracketClose) {\n return 'attribute';\n }\n if (ch === Chars.CurlyBracketOpen || ch === Chars.CurlyBracketClose) {\n return 'expression';\n }\n}\n/**\n * If given character is an operator, returns it’s type\n */\nfunction operatorType(ch) {\n return (ch === Chars.Child && 'child')\n || (ch === Chars.Sibling && 'sibling')\n || (ch === Chars.Climb && 'climb')\n || (ch === Chars.Dot && 'class')\n || (ch === Chars.Hash && 'id')\n || (ch === Chars.Slash && 'close')\n || (ch === Chars.Equals && 'equal')\n || void 0;\n}\n/**\n * Check if given character is an open bracket\n */\nfunction isOpenBracket(ch) {\n return ch === Chars.CurlyBracketOpen\n || ch === Chars.SquareBracketOpen\n || ch === Chars.RoundBracketOpen;\n}\n/**\n * Check if given character is allowed in element name\n */\nfunction isElementName(ch) {\n return isAlphaNumericWord(ch)\n || isUmlaut(ch)\n || ch === Chars.Dash\n || ch === Chars.Colon\n || ch === Chars.Excl;\n}\n\nconst operators = {\n child: '>',\n class: '.',\n climb: '^',\n id: '#',\n equal: '=',\n close: '/',\n sibling: '+'\n};\nconst tokenVisitor = {\n Literal(token) {\n return token.value;\n },\n Quote(token) {\n return token.single ? '\\'' : '\"';\n },\n Bracket(token) {\n if (token.context === 'attribute') {\n return token.open ? '[' : ']';\n }\n else if (token.context === 'expression') {\n return token.open ? '{' : '}';\n }\n else {\n return token.open ? '(' : '}';\n }\n },\n Operator(token) {\n return operators[token.operator];\n },\n Field(token, state) {\n if (token.index != null) {\n // It’s a field: by default, return TextMate-compatible field\n return token.name\n ? `\\${${token.index}:${token.name}}`\n : `\\${${token.index}`;\n }\n else if (token.name) {\n // It’s a variable\n return state.getVariable(token.name);\n }\n return '';\n },\n RepeaterPlaceholder(token, state) {\n // Find closest implicit repeater\n let repeater;\n for (let i = state.repeaters.length - 1; i >= 0; i--) {\n if (state.repeaters[i].implicit) {\n repeater = state.repeaters[i];\n break;\n }\n }\n state.inserted = true;\n return state.getText(repeater && repeater.value);\n },\n RepeaterNumber(token, state) {\n let value = 1;\n const lastIx = state.repeaters.length - 1;\n // const repeaterIx = Math.max(0, state.repeaters.length - 1 - token.parent);\n const repeater = state.repeaters[lastIx];\n if (repeater) {\n value = token.reverse\n ? token.base + repeater.count - repeater.value - 1\n : token.base + repeater.value;\n if (token.parent) {\n const parentIx = Math.max(0, lastIx - token.parent);\n if (parentIx !== lastIx) {\n const parentRepeater = state.repeaters[parentIx];\n value += repeater.count * parentRepeater.value;\n }\n }\n }\n let result = String(value);\n while (result.length < token.size) {\n result = '0' + result;\n }\n return result;\n },\n WhiteSpace(token) {\n return token.value;\n }\n};\n/**\n * Converts given value token to string\n */\nfunction stringify(token, state) {\n if (!tokenVisitor[token.type]) {\n throw new Error(`Unknown token ${token.type}`);\n }\n return tokenVisitor[token.type](token, state);\n}\n\nconst urlRegex = /^((https?:|ftp:|file:)?\\/\\/|(www|ftp)\\.)[^ ]*$/;\nconst emailRegex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,5}$/;\n/**\n * Converts given token-based abbreviation into simplified and unrolled node-based\n * abbreviation\n */\nfunction convert(abbr, options = {}) {\n let textInserted = false;\n let cleanText;\n if (options.text) {\n if (Array.isArray(options.text)) {\n cleanText = options.text.filter(s => s.trim());\n }\n else {\n cleanText = options.text;\n }\n }\n const result = {\n type: 'Abbreviation',\n children: convertGroup(abbr, {\n inserted: false,\n repeaters: [],\n text: options.text,\n cleanText,\n repeatGuard: options.maxRepeat || Number.POSITIVE_INFINITY,\n getText(pos) {\n var _a;\n textInserted = true;\n let value;\n if (Array.isArray(options.text)) {\n if (pos !== undefined && pos >= 0 && pos < cleanText.length) {\n return cleanText[pos];\n }\n value = pos !== undefined ? options.text[pos] : options.text.join('\\n');\n }\n else {\n value = (_a = options.text) !== null && _a !== void 0 ? _a : '';\n }\n return value;\n },\n getVariable(name) {\n const varValue = options.variables && options.variables[name];\n return varValue != null ? varValue : name;\n }\n })\n };\n if (options.text != null && !textInserted) {\n // Text given but no implicitly repeated elements: insert it into\n // deepest child\n const deepest = deepestNode(last(result.children));\n if (deepest) {\n const text = Array.isArray(options.text) ? options.text.join('\\n') : options.text;\n insertText(deepest, text);\n if (deepest.name === 'a' && options.href) {\n // Automatically update value of `<a>` element if inserting URL or email\n insertHref(deepest, text);\n }\n }\n }\n return result;\n}\n/**\n * Converts given statement to abbreviation nodes\n */\nfunction convertStatement(node, state) {\n let result = [];\n if (node.repeat) {\n // Node is repeated: we should create copies of given node\n // and supply context token with actual repeater state\n const original = node.repeat;\n const repeat = Object.assign({}, original);\n repeat.count = repeat.implicit && Array.isArray(state.text)\n ? state.cleanText.length\n : (repeat.count || 1);\n let items;\n state.repeaters.push(repeat);\n for (let i = 0; i < repeat.count; i++) {\n repeat.value = i;\n node.repeat = repeat;\n items = isGroup(node)\n ? convertGroup(node, state)\n : convertElement(node, state);\n if (repeat.implicit && !state.inserted) {\n // It’s an implicit repeater but no repeater placeholders found inside,\n // we should insert text into deepest node\n const target = last(items);\n const deepest = target && deepestNode(target);\n if (deepest) {\n insertText(deepest, state.getText(repeat.value));\n }\n }\n result = result.concat(items);\n // We should output at least one repeated item even if it’s reached\n // repeat limit\n if (--state.repeatGuard <= 0) {\n break;\n }\n }\n state.repeaters.pop();\n node.repeat = original;\n if (repeat.implicit) {\n state.inserted = true;\n }\n }\n else {\n result = result.concat(isGroup(node) ? convertGroup(node, state) : convertElement(node, state));\n }\n return result;\n}\nfunction convertElement(node, state) {\n let children = [];\n const elem = {\n type: 'AbbreviationNode',\n name: node.name && stringifyName(node.name, state),\n value: node.value && stringifyValue(node.value, state),\n attributes: void 0,\n children,\n repeat: node.repeat && Object.assign({}, node.repeat),\n selfClosing: node.selfClose,\n };\n let result = [elem];\n for (const child of node.elements) {\n children = children.concat(convertStatement(child, state));\n }\n if (node.attributes) {\n elem.attributes = [];\n for (const attr of node.attributes) {\n elem.attributes.push(convertAttribute(attr, state));\n }\n }\n // In case if current node is a text-only snippet without fields, we should\n // put all children as siblings\n if (!elem.name && !elem.attributes && elem.value && !elem.value.some(isField)) {\n // XXX it’s unclear that `children` is not bound to `elem`\n // due to concat operation\n result = result.concat(children);\n }\n else {\n elem.children = children;\n }\n return result;\n}\nfunction convertGroup(node, state) {\n let result = [];\n for (const child of node.elements) {\n result = result.concat(convertStatement(child, state));\n }\n if (node.repeat) {\n result = attachRepeater(result, node.repeat);\n }\n return result;\n}\nfunction convertAttribute(node, state) {\n let implied = false;\n let isBoolean = false;\n let valueType = node.expression ? 'expression' : 'raw';\n let value;\n const name = node.name && stringifyName(node.name, state);\n if (name && name[0] === '!') {\n implied = true;\n }\n if (name && name[name.length - 1] === '.') {\n isBoolean = true;\n }\n if (node.value) {\n const tokens = node.value.slice();\n if (isQuote(tokens[0])) {\n // It’s a quoted value: remove quotes from output but mark attribute\n // value as quoted\n const quote = tokens.shift();\n if (tokens.length && last(tokens).type === quote.type) {\n tokens.pop();\n }\n valueType = quote.single ? 'singleQuote' : 'doubleQuote';\n }\n else if (isBracket(tokens[0], 'expression', true)) {\n // Value is expression: remove brackets but mark value type\n valueType = 'expression';\n tokens.shift();\n if (isBracket(last(tokens), 'expression', false)) {\n tokens.pop();\n }\n }\n value = stringifyValue(tokens, state);\n }\n return {\n name: isBoolean || implied\n ? name.slice(implied ? 1 : 0, isBoolean ? -1 : void 0)\n : name,\n value,\n boolean: isBoolean,\n implied,\n valueType,\n multiple: node.multiple\n };\n}\n/**\n * Converts given token list to string\n */\nfunction stringifyName(tokens, state) {\n let str = '';\n for (let i = 0; i < tokens.length; i++) {\n str += stringify(tokens[i], state);\n }\n return str;\n}\n/**\n * Converts given token list to value list\n */\nfunction stringifyValue(tokens, state) {\n const result = [];\n let str = '';\n for (let i = 0, token; i < tokens.length; i++) {\n token = tokens[i];\n if (isField(token)) {\n // We should keep original fields in output since some editors has their\n // own syntax for field or doesn’t support fields at all so we should\n // capture actual field location in output stream\n if (str) {\n result.push(str);\n str = '';\n }\n result.push(token);\n }\n else {\n str += stringify(token, state);\n }\n }\n if (str) {\n result.push(str);\n }\n return result;\n}\nfunction isGroup(node) {\n return node.type === 'TokenGroup';\n}\nfunction isField(token) {\n return typeof token === 'object' && token.type === 'Field' && token.index != null;\n}\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nfunction deepestNode(node) {\n return node.children.length ? deepestNode(last(node.children)) : node;\n}\nfunction insertText(node, text) {\n if (node.value) {\n const lastToken = last(node.value);\n if (typeof lastToken === 'string') {\n node.value[node.value.length - 1] += text;\n }\n else {\n node.value.push(text);\n }\n }\n else {\n node.value = [text];\n }\n}\nfunction insertHref(node, text) {\n var _a;\n let href = '';\n if (urlRegex.test(text)) {\n href = text;\n if (!/\\w+:/.test(href) && !href.startsWith('//')) {\n href = `http://${href}`;\n }\n }\n else if (emailRegex.test(text)) {\n href = `mailto:${text}`;\n }\n const hrefAttribute = (_a = node.attributes) === null || _a === void 0 ? void 0 : _a.find(attr => attr.name === 'href');\n if (!hrefAttribute) {\n if (!node.attributes) {\n node.attributes = [];\n }\n node.attributes.push({ name: 'href', value: [href], valueType: 'doubleQuote' });\n }\n else if (!hrefAttribute.value) {\n hrefAttribute.value = [href];\n }\n}\nfunction attachRepeater(items, repeater) {\n for (const item of items) {\n if (!item.repeat) {\n item.repeat = Object.assign({}, repeater);\n }\n }\n return items;\n}\n\n/**\n * Parses given abbreviation into node tree\n */\nfunction parseAbbreviation(abbr, options) {\n try {\n const tokens = typeof abbr === 'string' ? tokenize(abbr) : abbr;\n return convert(abbreviation(tokens, options), options);\n }\n catch (err) {\n if (err instanceof ScannerError && typeof abbr === 'string') {\n err.message += `\\n${abbr}\\n${'-'.repeat(err.pos)}^`;\n }\n throw err;\n }\n}\n\nexport { convert, parseAbbreviation as default, getToken, abbreviation as parse, tokenize };\n//# sourceMappingURL=index.js.map\n", "import Scanner, { isNumber, isAlpha, isAlphaWord, isQuote, isSpace, isAlphaNumericWord, ScannerError } from '@emmetio/scanner';\n\nvar OperatorType;\n(function (OperatorType) {\n OperatorType[\"Sibling\"] = \"+\";\n OperatorType[\"Important\"] = \"!\";\n OperatorType[\"ArgumentDelimiter\"] = \",\";\n OperatorType[\"ValueDelimiter\"] = \"-\";\n OperatorType[\"PropertyDelimiter\"] = \":\";\n})(OperatorType || (OperatorType = {}));\n\nvar Chars;\n(function (Chars) {\n /** `#` character */\n Chars[Chars[\"Hash\"] = 35] = \"Hash\";\n /** `$` character */\n Chars[Chars[\"Dollar\"] = 36] = \"Dollar\";\n /** `-` character */\n Chars[Chars[\"Dash\"] = 45] = \"Dash\";\n /** `.` character */\n Chars[Chars[\"Dot\"] = 46] = \"Dot\";\n /** `:` character */\n Chars[Chars[\"Colon\"] = 58] = \"Colon\";\n /** `,` character */\n Chars[Chars[\"Comma\"] = 44] = \"Comma\";\n /** `!` character */\n Chars[Chars[\"Excl\"] = 33] = \"Excl\";\n /** `@` character */\n Chars[Chars[\"At\"] = 64] = \"At\";\n /** `%` character */\n Chars[Chars[\"Percent\"] = 37] = \"Percent\";\n /** `_` character */\n Chars[Chars[\"Underscore\"] = 95] = \"Underscore\";\n /** `(` character */\n Chars[Chars[\"RoundBracketOpen\"] = 40] = \"RoundBracketOpen\";\n /** `)` character */\n Chars[Chars[\"RoundBracketClose\"] = 41] = \"RoundBracketClose\";\n /** `{` character */\n Chars[Chars[\"CurlyBracketOpen\"] = 123] = \"CurlyBracketOpen\";\n /** `}` character */\n Chars[Chars[\"CurlyBracketClose\"] = 125] = \"CurlyBracketClose\";\n /** `+` character */\n Chars[Chars[\"Sibling\"] = 43] = \"Sibling\";\n /** `'` character */\n Chars[Chars[\"SingleQuote\"] = 39] = \"SingleQuote\";\n /** `\"` character */\n Chars[Chars[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n /** `t` character */\n Chars[Chars[\"Transparent\"] = 116] = \"Transparent\";\n /** `/` character */\n Chars[Chars[\"Slash\"] = 47] = \"Slash\";\n})(Chars || (Chars = {}));\n\nfunction tokenize(abbr, isValue) {\n let brackets = 0;\n let token;\n const scanner = new Scanner(abbr);\n const tokens = [];\n while (!scanner.eof()) {\n token = getToken(scanner, brackets === 0 && !isValue);\n if (!token) {\n throw scanner.error('Unexpected character');\n }\n if (token.type === 'Bracket') {\n if (!brackets && token.open) {\n mergeTokens(scanner, tokens);\n }\n brackets += token.open ? 1 : -1;\n if (brackets < 0) {\n throw scanner.error('Unexpected bracket', token.start);\n }\n }\n tokens.push(token);\n // Forcibly consume next operator after unit-less numeric value or color:\n // next dash `-` must be used as value delimiter\n if (shouldConsumeDashAfter(token) && (token = operator(scanner))) {\n tokens.push(token);\n }\n }\n return tokens;\n}\n/**\n * Returns next token from given scanner, if possible\n */\nfunction getToken(scanner, short) {\n return field(scanner)\n || customProperty(scanner)\n || numberValue(scanner)\n || colorValue(scanner)\n || stringValue(scanner)\n || bracket(scanner)\n || operator(scanner)\n || whiteSpace(scanner)\n || literal(scanner, short);\n}\nfunction field(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dollar) && scanner.eat(Chars.CurlyBracketOpen)) {\n scanner.start = scanner.pos;\n let index;\n let name = '';\n if (scanner.eatWhile(isNumber)) {\n // It’s a field\n index = Number(scanner.current());\n name = scanner.eat(Chars.Colon) ? consumePlaceholder(scanner) : '';\n }\n else if (isAlpha(scanner.peek())) {\n // It’s a variable\n name = consumePlaceholder(scanner);\n }\n if (scanner.eat(Chars.CurlyBracketClose)) {\n return {\n type: 'Field',\n index, name,\n start,\n end: scanner.pos\n };\n }\n throw scanner.error('Expecting }');\n }\n // If we reached here then there’s no valid field here, revert\n // back to starting position\n scanner.pos = start;\n}\n/**\n * Consumes a placeholder: value right after `:` in field. Could be empty\n */\nfunction consumePlaceholder(stream) {\n const stack = [];\n stream.start = stream.pos;\n while (!stream.eof()) {\n if (stream.eat(Chars.CurlyBracketOpen)) {\n stack.push(stream.pos);\n }\n else if (stream.eat(Chars.CurlyBracketClose)) {\n if (!stack.length) {\n stream.pos--;\n break;\n }\n stack.pop();\n }\n else {\n stream.pos++;\n }\n }\n if (stack.length) {\n stream.pos = stack.pop();\n throw stream.error(`Expecting }`);\n }\n return stream.current();\n}\n/**\n * Consumes literal from given scanner\n * @param short Use short notation for consuming value.\n * The difference between “short” and “full” notation is that first one uses\n * alpha characters only and used for extracting keywords from abbreviation,\n * while “full” notation also supports numbers and dashes\n */\nfunction literal(scanner, short) {\n const start = scanner.pos;\n if (scanner.eat(isIdentPrefix)) {\n // SCSS or LESS variable\n // NB a bit dirty hack: if abbreviation starts with identifier prefix,\n // consume alpha characters only to allow embedded variables\n scanner.eatWhile(start ? isKeyword : isLiteral$1);\n }\n else if (scanner.eat(isAlphaWord)) {\n scanner.eatWhile(short ? isLiteral$1 : isKeyword);\n }\n else {\n // Allow dots only at the beginning of literal\n scanner.eat(Chars.Dot);\n scanner.eatWhile(isLiteral$1);\n }\n if (start !== scanner.pos) {\n scanner.start = start;\n return createLiteral(scanner, scanner.start = start);\n }\n}\nfunction createLiteral(scanner, start = scanner.start, end = scanner.pos) {\n return {\n type: 'Literal',\n value: scanner.substring(start, end),\n start,\n end\n };\n}\n/**\n * Consumes numeric CSS value (number with optional unit) from current stream,\n * if possible\n */\nfunction numberValue(scanner) {\n const start = scanner.pos;\n if (consumeNumber(scanner)) {\n scanner.start = start;\n const rawValue = scanner.current();\n // eat unit, which can be a % or alpha word\n scanner.start = scanner.pos;\n scanner.eat(Chars.Percent) || scanner.eatWhile(isAlphaWord);\n return {\n type: 'NumberValue',\n value: Number(rawValue),\n rawValue,\n unit: scanner.current(),\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes quoted string value from given scanner\n */\nfunction stringValue(scanner) {\n const ch = scanner.peek();\n const start = scanner.pos;\n let finished = false;\n if (isQuote(ch)) {\n scanner.pos++;\n while (!scanner.eof()) {\n // Do not throw error on malformed string\n if (scanner.eat(ch)) {\n finished = true;\n break;\n }\n else {\n scanner.pos++;\n }\n }\n scanner.start = start;\n return {\n type: 'StringValue',\n value: scanner.substring(start + 1, scanner.pos - (finished ? 1 : 0)),\n quote: ch === Chars.SingleQuote ? 'single' : 'double',\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes a color token from given string\n */\nfunction colorValue(scanner) {\n // supported color variations:\n // #abc → #aabbccc\n // #0 → #000000\n // #fff.5 → rgba(255, 255, 255, 0.5)\n // #t → transparent\n const start = scanner.pos;\n if (scanner.eat(Chars.Hash)) {\n const valueStart = scanner.pos;\n let color = '';\n let alpha = '';\n if (scanner.eatWhile(isHex)) {\n color = scanner.substring(valueStart, scanner.pos);\n alpha = colorAlpha(scanner);\n }\n else if (scanner.eat(Chars.Transparent)) {\n color = '0';\n alpha = colorAlpha(scanner) || '0';\n }\n else {\n alpha = colorAlpha(scanner);\n }\n if (color || alpha || scanner.eof()) {\n const { r, g, b, a } = parseColor(color, alpha);\n return {\n type: 'ColorValue',\n r, g, b, a,\n raw: scanner.substring(start + 1, scanner.pos),\n start,\n end: scanner.pos\n };\n }\n else {\n // Consumed # but no actual value: invalid color value, treat it as literal\n return createLiteral(scanner, start);\n }\n }\n scanner.pos = start;\n}\n/**\n * Consumes alpha value of color: `.1`\n */\nfunction colorAlpha(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dot)) {\n scanner.start = start;\n if (scanner.eatWhile(isNumber)) {\n return scanner.current();\n }\n return '1';\n }\n return '';\n}\n/**\n * Consumes white space characters as string literal from given scanner\n */\nfunction whiteSpace(scanner) {\n const start = scanner.pos;\n if (scanner.eatWhile(isSpace)) {\n return {\n type: 'WhiteSpace',\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes custom CSS property: --foo-bar\n */\nfunction customProperty(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dash) && scanner.eat(Chars.Dash)) {\n scanner.start = start;\n scanner.eatWhile(isKeyword);\n return {\n type: 'CustomProperty',\n value: scanner.current(),\n start,\n end: scanner.pos\n };\n }\n scanner.pos = start;\n}\n/**\n * Consumes bracket from given scanner\n */\nfunction bracket(scanner) {\n const ch = scanner.peek();\n if (isBracket$1(ch)) {\n return {\n type: 'Bracket',\n open: ch === Chars.RoundBracketOpen,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes operator from given scanner\n */\nfunction operator(scanner) {\n const op = operatorType(scanner.peek());\n if (op) {\n return {\n type: 'Operator',\n operator: op,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Eats number value from given stream\n * @return Returns `true` if number was consumed\n */\nfunction consumeNumber(stream) {\n const start = stream.pos;\n stream.eat(Chars.Dash);\n const afterNegative = stream.pos;\n const hasDecimal = stream.eatWhile(isNumber);\n const prevPos = stream.pos;\n if (stream.eat(Chars.Dot)) {\n // It’s perfectly valid to have numbers like `1.`, which enforces\n // value to float unit type\n const hasFloat = stream.eatWhile(isNumber);\n if (!hasDecimal && !hasFloat) {\n // Lone dot\n stream.pos = prevPos;\n }\n }\n // Edge case: consumed dash only: not a number, bail-out\n if (stream.pos === afterNegative) {\n stream.pos = start;\n }\n return stream.pos !== start;\n}\nfunction isIdentPrefix(code) {\n return code === Chars.At || code === Chars.Dollar;\n}\n/**\n * If given character is an operator, returns it’s type\n */\nfunction operatorType(ch) {\n return (ch === Chars.Sibling && OperatorType.Sibling)\n || (ch === Chars.Excl && OperatorType.Important)\n || (ch === Chars.Comma && OperatorType.ArgumentDelimiter)\n || (ch === Chars.Colon && OperatorType.PropertyDelimiter)\n || (ch === Chars.Dash && OperatorType.ValueDelimiter)\n || void 0;\n}\n/**\n * Check if given code is a hex value (/0-9a-f/)\n */\nfunction isHex(code) {\n return isNumber(code) || isAlpha(code, 65, 70); // A-F\n}\nfunction isKeyword(code) {\n return isAlphaNumericWord(code) || code === Chars.Dash;\n}\nfunction isBracket$1(code) {\n return code === Chars.RoundBracketOpen || code === Chars.RoundBracketClose;\n}\nfunction isLiteral$1(code) {\n return isAlphaWord(code) || code === Chars.Percent || code === Chars.Slash;\n}\n/**\n * Parses given color value from abbreviation into RGBA format\n */\nfunction parseColor(value, alpha) {\n let r = '0';\n let g = '0';\n let b = '0';\n let a = Number(alpha != null && alpha !== '' ? alpha : 1);\n if (value === 't') {\n a = 0;\n }\n else {\n switch (value.length) {\n case 0:\n break;\n case 1:\n r = g = b = value + value;\n break;\n case 2:\n r = g = b = value;\n break;\n case 3:\n r = value[0] + value[0];\n g = value[1] + value[1];\n b = value[2] + value[2];\n break;\n default:\n value += value;\n r = value.slice(0, 2);\n g = value.slice(2, 4);\n b = value.slice(4, 6);\n }\n }\n return {\n r: parseInt(r, 16),\n g: parseInt(g, 16),\n b: parseInt(b, 16),\n a\n };\n}\n/**\n * Check if scanner reader must consume dash after given token.\n * Used in cases where user must explicitly separate numeric values\n */\nfunction shouldConsumeDashAfter(token) {\n return token.type === 'ColorValue' || (token.type === 'NumberValue' && !token.unit);\n}\n/**\n * Merges last adjacent tokens into a single literal.\n * This function is used to overcome edge case when function name was parsed\n * as a list of separate tokens. For example, a `scale3d()` value will be\n * parsed as literal and number tokens (`scale` and `3d`) which is a perfectly\n * valid abbreviation but undesired result. This function will detect last adjacent\n * literal and number values and combine them into single literal\n */\nfunction mergeTokens(scanner, tokens) {\n let start = 0;\n let end = 0;\n while (tokens.length) {\n const token = last(tokens);\n if (token.type === 'Literal' || token.type === 'NumberValue') {\n start = token.start;\n if (!end) {\n end = token.end;\n }\n tokens.pop();\n }\n else {\n break;\n }\n }\n if (start !== end) {\n tokens.push(createLiteral(scanner, start, end));\n }\n}\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction tokenScanner(tokens) {\n return {\n tokens,\n start: 0,\n pos: 0,\n size: tokens.length\n };\n}\nfunction peek(scanner) {\n return scanner.tokens[scanner.pos];\n}\nfunction readable(scanner) {\n return scanner.pos < scanner.size;\n}\nfunction consume(scanner, test) {\n if (test(peek(scanner))) {\n scanner.pos++;\n return true;\n }\n return false;\n}\nfunction error(scanner, message, token = peek(scanner)) {\n if (token && token.start != null) {\n message += ` at ${token.start}`;\n }\n const err = new Error(message);\n err['pos'] = token && token.start;\n return err;\n}\n\nfunction parser(tokens, options = {}) {\n const scanner = tokenScanner(tokens);\n const result = [];\n let property;\n while (readable(scanner)) {\n if (property = consumeProperty(scanner, options)) {\n result.push(property);\n }\n else if (!consume(scanner, isSiblingOperator)) {\n throw error(scanner, 'Unexpected token');\n }\n }\n return result;\n}\n/**\n * Consumes single CSS property\n */\nfunction consumeProperty(scanner, options) {\n let name;\n let important = false;\n let valueFragment;\n const value = [];\n const token = peek(scanner);\n const valueMode = !!options.value;\n if (!valueMode && isLiteral(token) && !isFunctionStart(scanner)) {\n scanner.pos++;\n name = token.value;\n // Consume any following value delimiter after property name\n consume(scanner, isValueDelimiter);\n }\n // Skip whitespace right after property name, if any\n if (valueMode) {\n consume(scanner, isWhiteSpace);\n }\n while (readable(scanner)) {\n if (consume(scanner, isImportant)) {\n important = true;\n }\n else if (valueFragment = consumeValue(scanner, valueMode)) {\n value.push(valueFragment);\n }\n else if (!consume(scanner, isFragmentDelimiter)) {\n break;\n }\n }\n if (name || value.length || important) {\n return { name, value, important };\n }\n}\n/**\n * Consumes single value fragment, e.g. all value tokens before comma\n */\nfunction consumeValue(scanner, inArgument) {\n const result = [];\n let token;\n let args;\n while (readable(scanner)) {\n token = peek(scanner);\n if (isValue(token)) {\n scanner.pos++;\n if (isLiteral(token) && (args = consumeArguments(scanner))) {\n result.push({\n type: 'FunctionCall',\n name: token.value,\n arguments: args\n });\n }\n else {\n result.push(token);\n }\n }\n else if (isValueDelimiter(token) || (inArgument && isWhiteSpace(token))) {\n scanner.pos++;\n }\n else {\n break;\n }\n }\n return result.length\n ? { type: 'CSSValue', value: result }\n : void 0;\n}\nfunction consumeArguments(scanner) {\n const start = scanner.pos;\n if (consume(scanner, isOpenBracket)) {\n const args = [];\n let value;\n while (readable(scanner) && !consume(scanner, isCloseBracket)) {\n if (value = consumeValue(scanner, true)) {\n args.push(value);\n }\n else if (!consume(scanner, isWhiteSpace) && !consume(scanner, isArgumentDelimiter)) {\n throw error(scanner, 'Unexpected token');\n }\n }\n scanner.start = start;\n return args;\n }\n}\nfunction isLiteral(token) {\n return token && token.type === 'Literal';\n}\nfunction isBracket(token, open) {\n return token && token.type === 'Bracket' && (open == null || token.open === open);\n}\nfunction isOpenBracket(token) {\n return isBracket(token, true);\n}\nfunction isCloseBracket(token) {\n return isBracket(token, false);\n}\nfunction isWhiteSpace(token) {\n return token && token.type === 'WhiteSpace';\n}\nfunction isOperator(token, operator) {\n return token && token.type === 'Operator' && (!operator || token.operator === operator);\n}\nfunction isSiblingOperator(token) {\n return isOperator(token, OperatorType.Sibling);\n}\nfunction isArgumentDelimiter(token) {\n return isOperator(token, OperatorType.ArgumentDelimiter);\n}\nfunction isFragmentDelimiter(token) {\n return isArgumentDelimiter(token);\n}\nfunction isImportant(token) {\n return isOperator(token, OperatorType.Important);\n}\nfunction isValue(token) {\n return token.type === 'StringValue'\n || token.type === 'ColorValue'\n || token.type === 'NumberValue'\n || token.type === 'Literal'\n || token.type === 'Field'\n || token.type === 'CustomProperty';\n}\nfunction isValueDelimiter(token) {\n return isOperator(token, OperatorType.PropertyDelimiter)\n || isOperator(token, OperatorType.ValueDelimiter);\n}\nfunction isFunctionStart(scanner) {\n const t1 = scanner.tokens[scanner.pos];\n const t2 = scanner.tokens[scanner.pos + 1];\n return t1 && t2 && isLiteral(t1) && t2.type === 'Bracket';\n}\n\n/**\n * Parses given abbreviation into property set\n */\nfunction parse(abbr, options) {\n try {\n const tokens = typeof abbr === 'string' ? tokenize(abbr, options && options.value) : abbr;\n return parser(tokens, options);\n }\n catch (err) {\n if (err instanceof ScannerError && typeof abbr === 'string') {\n err.message += `\\n${abbr}\\n${'-'.repeat(err.pos)}^`;\n }\n throw err;\n }\n}\n\nexport { OperatorType, parse as default, getToken, parser, tokenize };\n//# sourceMappingURL=index.js.map\n", null, null, null, null, null, "{\n\t\"common\": [\"lorem\", \"ipsum\", \"dolor\", \"sit\", \"amet\", \"consectetur\", \"adipisicing\", \"elit\"],\n\t\"words\": [\"exercitationem\", \"perferendis\", \"perspiciatis\", \"laborum\", \"eveniet\",\n\t\t\"sunt\", \"iure\", \"nam\", \"nobis\", \"eum\", \"cum\", \"officiis\", \"excepturi\",\n\t\t\"odio\", \"consectetur\", \"quasi\", \"aut\", \"quisquam\", \"vel\", \"eligendi\",\n\t\t\"itaque\", \"non\", \"odit\", \"tempore\", \"quaerat\", \"dignissimos\",\n\t\t\"facilis\", \"neque\", \"nihil\", \"expedita\", \"vitae\", \"vero\", \"ipsum\",\n\t\t\"nisi\", \"animi\", \"cumque\", \"pariatur\", \"velit\", \"modi\", \"natus\",\n\t\t\"iusto\", \"eaque\", \"sequi\", \"illo\", \"sed\", \"ex\", \"et\", \"voluptatibus\",\n\t\t\"tempora\", \"veritatis\", \"ratione\", \"assumenda\", \"incidunt\", \"nostrum\",\n\t\t\"placeat\", \"aliquid\", \"fuga\", \"provident\", \"praesentium\", \"rem\",\n\t\t\"necessitatibus\", \"suscipit\", \"adipisci\", \"quidem\", \"possimus\",\n\t\t\"voluptas\", \"debitis\", \"sint\", \"accusantium\", \"unde\", \"sapiente\",\n\t\t\"voluptate\", \"qui\", \"aspernatur\", \"laudantium\", \"soluta\", \"amet\",\n\t\t\"quo\", \"aliquam\", \"saepe\", \"culpa\", \"libero\", \"ipsa\", \"dicta\",\n\t\t\"reiciendis\", \"nesciunt\", \"doloribus\", \"autem\", \"impedit\", \"minima\",\n\t\t\"maiores\", \"repudiandae\", \"ipsam\", \"obcaecati\", \"ullam\", \"enim\",\n\t\t\"totam\", \"delectus\", \"ducimus\", \"quis\", \"voluptates\", \"dolores\",\n\t\t\"molestiae\", \"harum\", \"dolorem\", \"quia\", \"voluptatem\", \"molestias\",\n\t\t\"magni\", \"distinctio\", \"omnis\", \"illum\", \"dolorum\", \"voluptatum\", \"ea\",\n\t\t\"quas\", \"quam\", \"corporis\", \"quae\", \"blanditiis\", \"atque\", \"deserunt\",\n\t\t\"laboriosam\", \"earum\", \"consequuntur\", \"hic\", \"cupiditate\",\n\t\t\"quibusdam\", \"accusamus\", \"ut\", \"rerum\", \"error\", \"minus\", \"eius\",\n\t\t\"ab\", \"ad\", \"nemo\", \"fugit\", \"officia\", \"at\", \"in\", \"id\", \"quos\",\n\t\t\"reprehenderit\", \"numquam\", \"iste\", \"fugiat\", \"sit\", \"inventore\",\n\t\t\"beatae\", \"repellendus\", \"magnam\", \"recusandae\", \"quod\", \"explicabo\",\n\t\t\"doloremque\", \"aperiam\", \"consequatur\", \"asperiores\", \"commodi\",\n\t\t\"optio\", \"dolor\", \"labore\", \"temporibus\", \"repellat\", \"veniam\",\n\t\t\"architecto\", \"est\", \"esse\", \"mollitia\", \"nulla\", \"a\", \"similique\",\n\t\t\"eos\", \"alias\", \"dolore\", \"tenetur\", \"deleniti\", \"porro\", \"facere\",\n\t\t\"maxime\", \"corrupti\"]\n}\n", "{\n\t\"common\": [\"далеко-далеко\", \"за\", \"словесными\", \"горами\", \"в стране\", \"гласных\", \"и согласных\", \"живут\", \"рыбные\", \"тексты\"],\n\t\"words\": [\"вдали\", \"от всех\", \"они\", \"буквенных\", \"домах\", \"на берегу\", \"семантика\",\n\t\t\"большого\", \"языкового\", \"океана\", \"маленький\", \"ручеек\", \"даль\",\n\t\t\"журчит\", \"по всей\", \"обеспечивает\", \"ее\",\"всеми\", \"необходимыми\",\n\t\t\"правилами\", \"эта\", \"парадигматическая\", \"страна\", \"которой\", \"жаренные\",\n\t\t\"предложения\", \"залетают\", \"прямо\", \"рот\", \"даже\", \"всемогущая\",\n\t\t\"пунктуация\", \"не\", \"имеет\", \"власти\", \"над\", \"рыбными\", \"текстами\",\n\t\t\"ведущими\", \"безорфографичный\", \"образ\", \"жизни\", \"однажды\", \"одна\",\n\t\t\"маленькая\", \"строчка\",\"рыбного\", \"текста\", \"имени\", \"lorem\", \"ipsum\",\n\t\t\"решила\", \"выйти\", \"большой\", \"мир\", \"грамматики\", \"великий\", \"оксмокс\",\n\t\t\"предупреждал\", \"о\", \"злых\", \"запятых\", \"диких\", \"знаках\", \"вопроса\",\n\t\t\"коварных\", \"точках\", \"запятой\", \"но\", \"текст\", \"дал\", \"сбить\",\n\t\t\"себя\", \"толку\", \"он\", \"собрал\", \"семь\", \"своих\", \"заглавных\", \"букв\",\n\t\t\"подпоясал\", \"инициал\", \"за\", \"пояс\", \"пустился\", \"дорогу\",\n\t\t\"взобравшись\", \"первую\", \"вершину\", \"курсивных\", \"гор\", \"бросил\",\n\t\t\"последний\", \"взгляд\", \"назад\", \"силуэт\", \"своего\", \"родного\", \"города\",\n\t\t\"буквоград\", \"заголовок\", \"деревни\", \"алфавит\", \"подзаголовок\", \"своего\",\n\t\t\"переулка\", \"грустный\", \"реторический\", \"вопрос\", \"скатился\", \"его\",\n\t\t\"щеке\", \"продолжил\", \"свой\", \"путь\", \"дороге\", \"встретил\", \"рукопись\",\n\t\t\"она\", \"предупредила\", \"моей\", \"все\", \"переписывается\", \"несколько\",\n\t\t\"раз\", \"единственное\", \"что\", \"меня\", \"осталось\", \"это\", \"приставка\",\n\t\t\"возвращайся\", \"ты\", \"лучше\", \"свою\", \"безопасную\", \"страну\", \"послушавшись\",\n\t\t\"рукописи\", \"наш\", \"продолжил\", \"свой\", \"путь\", \"вскоре\", \"ему\",\n\t\t\"повстречался\", \"коварный\", \"составитель\", \"рекламных\", \"текстов\",\n\t\t\"напоивший\", \"языком\", \"речью\", \"заманивший\", \"свое\", \"агентство\",\n\t\t\"которое\", \"использовало\", \"снова\", \"снова\", \"своих\", \"проектах\",\n\t\t\"если\", \"переписали\", \"то\", \"живет\", \"там\", \"до\", \"сих\", \"пор\"]\n}\n", "{\n\t\"common\": [\"mujer\", \"uno\", \"dolor\", \"más\", \"de\", \"poder\", \"mismo\", \"si\"],\n\t\"words\": [\"ejercicio\", \"preferencia\", \"perspicacia\", \"laboral\", \"paño\",\n\t\t\"suntuoso\", \"molde\", \"namibia\", \"planeador\", \"mirar\", \"demás\", \"oficinista\", \"excepción\",\n\t\t\"odio\", \"consecuencia\", \"casi\", \"auto\", \"chicharra\", \"velo\", \"elixir\",\n\t\t\"ataque\", \"no\", \"odio\", \"temporal\", \"cuórum\", \"dignísimo\",\n\t\t\"facilismo\", \"letra\", \"nihilista\", \"expedición\", \"alma\", \"alveolar\", \"aparte\",\n\t\t\"león\", \"animal\", \"como\", \"paria\", \"belleza\", \"modo\", \"natividad\",\n\t\t\"justo\", \"ataque\", \"séquito\", \"pillo\", \"sed\", \"ex\", \"y\", \"voluminoso\",\n\t\t\"temporalidad\", \"verdades\", \"racional\", \"asunción\", \"incidente\", \"marejada\",\n\t\t\"placenta\", \"amanecer\", \"fuga\", \"previsor\", \"presentación\", \"lejos\",\n\t\t\"necesariamente\", \"sospechoso\", \"adiposidad\", \"quindío\", \"pócima\",\n\t\t\"voluble\", \"débito\", \"sintió\", \"accesorio\", \"falda\", \"sapiencia\",\n\t\t\"volutas\", \"queso\", \"permacultura\", \"laudo\", \"soluciones\", \"entero\",\n\t\t\"pan\", \"litro\", \"tonelada\", \"culpa\", \"libertario\", \"mosca\", \"dictado\",\n\t\t\"reincidente\", \"nascimiento\", \"dolor\", \"escolar\", \"impedimento\", \"mínima\",\n\t\t\"mayores\", \"repugnante\", \"dulce\", \"obcecado\", \"montaña\", \"enigma\",\n\t\t\"total\", \"deletéreo\", \"décima\", \"cábala\", \"fotografía\", \"dolores\",\n\t\t\"molesto\", \"olvido\", \"paciencia\", \"resiliencia\", \"voluntad\", \"molestias\",\n\t\t\"magnífico\", \"distinción\", \"ovni\", \"marejada\", \"cerro\", \"torre\", \"y\",\n\t\t\"abogada\", \"manantial\", \"corporal\", \"agua\", \"crepúsculo\", \"ataque\", \"desierto\",\n\t\t\"laboriosamente\", \"angustia\", \"afortunado\", \"alma\", \"encefalograma\",\n\t\t\"materialidad\", \"cosas\", \"o\", \"renuncia\", \"error\", \"menos\", \"conejo\",\n\t\t\"abadía\", \"analfabeto\", \"remo\", \"fugacidad\", \"oficio\", \"en\", \"almácigo\", \"vos\", \"pan\",\n\t\t\"represión\", \"números\", \"triste\", \"refugiado\", \"trote\", \"inventor\",\n\t\t\"corchea\", \"repelente\", \"magma\", \"recusado\", \"patrón\", \"explícito\",\n\t\t\"paloma\", \"síndrome\", \"inmune\", \"autoinmune\", \"comodidad\",\n\t\t\"ley\", \"vietnamita\", \"demonio\", \"tasmania\", \"repeler\", \"apéndice\",\n\t\t\"arquitecto\", \"columna\", \"yugo\", \"computador\", \"mula\", \"a\", \"propósito\",\n\t\t\"fantasía\", \"alias\", \"rayo\", \"tenedor\", \"deleznable\", \"ventana\", \"cara\",\n\t\t\"anemia\", \"corrupto\"]\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "{\n\t\"a\": \"a[href]\",\n\t\"a:blank\": \"a[href='http://${0}' target='_blank' rel='noopener noreferrer']\",\n\t\"a:link\": \"a[href='http://${0}']\",\n\t\"a:mail\": \"a[href='mailto:${0}']\",\n\t\"a:tel\": \"a[href='tel:+${0}']\",\n\t\"abbr\": \"abbr[title]\",\n\t\"acr|acronym\": \"acronym[title]\",\n\t\"base\": \"base[href]/\",\n\t\"basefont\": \"basefont/\",\n\t\"br\": \"br/\",\n\t\"frame\": \"frame/\",\n\t\"hr\": \"hr/\",\n\t\"bdo\": \"bdo[dir]\",\n\t\"bdo:r\": \"bdo[dir=rtl]\",\n\t\"bdo:l\": \"bdo[dir=ltr]\",\n\t\"col\": \"col/\",\n\t\"link\": \"link[rel=stylesheet href]/\",\n\t\"link:css\": \"link[href='${1:style}.css']\",\n\t\"link:print\": \"link[href='${1:print}.css' media=print]\",\n\t\"link:favicon\": \"link[rel='shortcut icon' type=image/x-icon href='${1:favicon.ico}']\",\n\t\"link:mf|link:manifest\": \"link[rel='manifest' href='${1:manifest.json}']\",\n\t\"link:touch\": \"link[rel=apple-touch-icon href='${1:favicon.png}']\",\n\t\"link:rss\": \"link[rel=alternate type=application/rss+xml title=RSS href='${1:rss.xml}']\",\n\t\"link:atom\": \"link[rel=alternate type=application/atom+xml title=Atom href='${1:atom.xml}']\",\n\t\"link:im|link:import\": \"link[rel=import href='${1:component}.html']\",\n\t\"meta\": \"meta/\",\n\t\"meta:utf\": \"meta[http-equiv=Content-Type content='text/html;charset=UTF-8']\",\n\t\"meta:vp\": \"meta[name=viewport content='width=${1:device-width}, initial-scale=${2:1.0}']\",\n\t\"meta:compat\": \"meta[http-equiv=X-UA-Compatible content='${1:IE=7}']\",\n\t\"meta:edge\": \"meta:compat[content='${1:ie=edge}']\",\n\t\"meta:redirect\": \"meta[http-equiv=refresh content='0; url=${1:http://example.com}']\",\n\t\"meta:refresh\": \"meta[http-equiv=refresh content='${1:5}']\",\n\t\"meta:kw\": \"meta[name=keywords content]\",\n\t\"meta:desc\": \"meta[name=description content]\",\n\t\"style\": \"style\",\n\t\"script\": \"script\",\n\t\"script:src\": \"script[src]\",\n\t\"script:module\": \"script[type=module src]\",\n\t\"img\": \"img[src alt]/\",\n\t\"img:s|img:srcset\": \"img[srcset src alt]\",\n\t\"img:z|img:sizes\": \"img[sizes srcset src alt]\",\n\t\"picture\": \"picture\",\n\t\"src|source\": \"source/\",\n\t\"src:sc|source:src\": \"source[src type]\",\n\t\"src:s|source:srcset\": \"source[srcset]\",\n\t\"src:t|source:type\": \"source[srcset type='${1:image/}']\",\n\t\"src:z|source:sizes\": \"source[sizes srcset]\",\n\t\"src:m|source:media\": \"source[media='(${1:min-width: })' srcset]\",\n\t\"src:mt|source:media:type\": \"source:media[type='${2:image/}']\",\n\t\"src:mz|source:media:sizes\": \"source:media[sizes srcset]\",\n\t\"src:zt|source:sizes:type\": \"source[sizes srcset type='${1:image/}']\",\n\t\"iframe\": \"iframe[src frameborder=0]\",\n\t\"embed\": \"embed[src type]/\",\n\t\"object\": \"object[data type]\",\n\t\"param\": \"param[name value]/\",\n\t\"map\": \"map[name]\",\n\t\"area\": \"area[shape coords href alt]/\",\n\t\"area:d\": \"area[shape=default]\",\n\t\"area:c\": \"area[shape=circle]\",\n\t\"area:r\": \"area[shape=rect]\",\n\t\"area:p\": \"area[shape=poly]\",\n\t\"form\": \"form[action]\",\n\t\"form:get\": \"form[method=get]\",\n\t\"form:post\": \"form[method=post]\",\n\t\"label\": \"label[for]\",\n\t\"input\": \"input[type=${1:text}]/\",\n\t\"inp\": \"input[name=${1} id=${1}]\",\n\t\"input:h|input:hidden\": \"input[type=hidden name]\",\n\t\"input:t|input:text\": \"inp[type=text]\",\n\t\"input:search\": \"inp[type=search]\",\n\t\"input:email\": \"inp[type=email]\",\n\t\"input:url\": \"inp[type=url]\",\n\t\"input:p|input:password\": \"inp[type=password]\",\n\t\"input:datetime\": \"inp[type=datetime]\",\n\t\"input:date\": \"inp[type=date]\",\n\t\"input:datetime-local\": \"inp[type=datetime-local]\",\n\t\"input:month\": \"inp[type=month]\",\n\t\"input:week\": \"inp[type=week]\",\n\t\"input:time\": \"inp[type=time]\",\n\t\"input:tel\": \"inp[type=tel]\",\n\t\"input:number\": \"inp[type=number]\",\n\t\"input:color\": \"inp[type=color]\",\n\t\"input:c|input:checkbox\": \"inp[type=checkbox]\",\n\t\"input:r|input:radio\": \"inp[type=radio]\",\n\t\"input:range\": \"inp[type=range]\",\n\t\"input:f|input:file\": \"inp[type=file]\",\n\t\"input:s|input:submit\": \"input[type=submit value]\",\n\t\"input:i|input:image\": \"input[type=image src alt]\",\n\t\"input:b|input:btn|input:button\": \"input[type=button value]\",\n\t\"input:reset\": \"input:button[type=reset]\",\n\t\"isindex\": \"isindex/\",\n\t\"select\": \"select[name=${1} id=${1}]\",\n\t\"select:d|select:disabled\": \"select[disabled.]\",\n\t\"opt|option\": \"option[value]\",\n\t\"textarea\": \"textarea[name=${1} id=${1}]\",\n\t\"tarea:c|textarea:cols\":\"textarea[name=${1} id=${1} cols=${2:30}]\",\n\t\"tarea:r|textarea:rows\":\"textarea[name=${1} id=${1} rows=${3:10}]\",\n\t\"tarea:cr|textarea:cols:rows\":\"textarea[name=${1} id=${1} cols=${2:30} rows=${3:10}]\",\n\t\"marquee\": \"marquee[behavior direction]\",\n\t\"menu:c|menu:context\": \"menu[type=context]\",\n\t\"menu:t|menu:toolbar\": \"menu[type=toolbar]\",\n\t\"video\": \"video[src]\",\n\t\"audio\": \"audio[src]\",\n\t\"html:xml\": \"html[xmlns=http://www.w3.org/1999/xhtml]\",\n\t\"keygen\": \"keygen/\",\n\t\"command\": \"command/\",\n\t\"btn:s|button:s|button:submit\" : \"button[type=submit]\",\n\t\"btn:r|button:r|button:reset\" : \"button[type=reset]\",\n\t\"btn:b|button:b|button:button\" : \"button[type=button]\",\n\t\"btn:d|button:d|button:disabled\" : \"button[disabled.]\",\n\t\"fst:d|fset:d|fieldset:d|fieldset:disabled\" : \"fieldset[disabled.]\",\n\n\t\"bq\": \"blockquote\",\n\t\"fig\": \"figure\",\n\t\"figc\": \"figcaption\",\n\t\"pic\": \"picture\",\n\t\"ifr\": \"iframe\",\n\t\"emb\": \"embed\",\n\t\"obj\": \"object\",\n\t\"cap\": \"caption\",\n\t\"colg\": \"colgroup\",\n\t\"fst\": \"fieldset\",\n\t\"btn\": \"button\",\n\t\"optg\": \"optgroup\",\n\t\"tarea\": \"textarea\",\n\t\"leg\": \"legend\",\n\t\"sect\": \"section\",\n\t\"art\": \"article\",\n\t\"hdr\": \"header\",\n\t\"ftr\": \"footer\",\n\t\"adr\": \"address\",\n\t\"dlg\": \"dialog\",\n\t\"str\": \"strong\",\n\t\"prog\": \"progress\",\n\t\"mn\": \"main\",\n\t\"tem\": \"template\",\n\t\"fset\": \"fieldset\",\n\t\"datal\": \"datalist\",\n\t\"kg\": \"keygen\",\n\t\"out\": \"output\",\n\t\"det\": \"details\",\n\t\"sum\": \"summary\",\n\t\"cmd\": \"command\",\n\t\"data\": \"data[value]\",\n\t\"meter\": \"meter[value]\",\n\t\"time\": \"time[datetime]\",\n\n\t\"ri:d|ri:dpr\": \"img:s\",\n\t\"ri:v|ri:viewport\": \"img:z\",\n\t\"ri:a|ri:art\": \"pic>src:m+img\",\n\t\"ri:t|ri:type\": \"pic>src:t+img\",\n\n\t\"!!!\": \"{<!DOCTYPE html>}\",\n\t\"doc\": \"html[lang=${lang}]>(head>meta[charset=${charset}]+meta:vp+title{${1:Document}})+body\",\n\t\"!|html:5\": \"!!!+doc\",\n\n\t\"c\": \"{<!-- ${0} -->}\",\n\t\"cc:ie\": \"{<!--[if IE]>${0}<![endif]-->}\",\n\t\"cc:noie\": \"{<!--[if !IE]><!-->${0}<!--<![endif]-->}\"\n}\n", "{\n\t\"@f\": \"@font-face {\\n\\tfont-family: ${1};\\n\\tsrc: url(${2});\\n}\",\n\t\"@ff\": \"@font-face {\\n\\tfont-family: '${1:FontName}';\\n\\tsrc: url('${2:FileName}.eot');\\n\\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'),\\n\\t\\t url('${2:FileName}.woff') format('woff'),\\n\\t\\t url('${2:FileName}.ttf') format('truetype'),\\n\\t\\t url('${2:FileName}.svg#${1:FontName}') format('svg');\\n\\tfont-style: ${3:normal};\\n\\tfont-weight: ${4:normal};\\n}\",\n\t\"@i|@import\": \"@import url(${0});\",\n\t\"@kf\": \"@keyframes ${1:identifier} {\\n\\t${2}\\n}\",\n\t\"@m|@media\": \"@media ${1:screen} {\\n\\t${0}\\n}\",\n\t\"ac\": \"align-content:start|end|flex-start|flex-end|center|space-between|space-around|stretch|space-evenly\",\n\t\"ai\": \"align-items:start|end|flex-start|flex-end|center|baseline|stretch\",\n\t\"anim\": \"animation:${1:name} ${2:duration} ${3:timing-function} ${4:delay} ${5:iteration-count} ${6:direction} ${7:fill-mode}\",\n\t\"animdel\": \"animation-delay:time\",\n\t\"animdir\": \"animation-direction:normal|reverse|alternate|alternate-reverse\",\n\t\"animdur\": \"animation-duration:${1:0}s\",\n\t\"animfm\": \"animation-fill-mode:both|forwards|backwards\",\n\t\"animic\": \"animation-iteration-count:1|infinite\",\n\t\"animn\": \"animation-name\",\n\t\"animps\": \"animation-play-state:running|paused\",\n\t\"animtf\": \"animation-timing-function:linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(${1:0.1}, ${2:0.7}, ${3:1.0}, ${3:0.1})\",\n\t\"ap\": \"appearance:none\",\n\t\"as\": \"align-self:start|end|auto|flex-start|flex-end|center|baseline|stretch\",\n\t\"b\": \"bottom\",\n\t\"bd\": \"border:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdb\": \"border-bottom:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdbc\": \"border-bottom-color:${1:#000}\",\n\t\"bdbi\": \"border-bottom-image:url(${0})\",\n\t\"bdbk\": \"border-break:close\",\n\t\"bdbli\": \"border-bottom-left-image:url(${0})|continue\",\n\t\"bdblrs\": \"border-bottom-left-radius\",\n\t\"bdbri\": \"border-bottom-right-image:url(${0})|continue\",\n\t\"bdbrrs\": \"border-bottom-right-radius\",\n\t\"bdbs\": \"border-bottom-style\",\n\t\"bdbw\": \"border-bottom-width\",\n\t\"bdc\": \"border-color:${1:#000}\",\n\t\"bdci\": \"border-corner-image:url(${0})|continue\",\n\t\"bdcl\": \"border-collapse:collapse|separate\",\n\t\"bdf\": \"border-fit:repeat|clip|scale|stretch|overwrite|overflow|space\",\n\t\"bdi\": \"border-image:url(${0})\",\n\t\"bdl\": \"border-left:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdlc\": \"border-left-color:${1:#000}\",\n\t\"bdlen\": \"border-length\",\n\t\"bdli\": \"border-left-image:url(${0})\",\n\t\"bdls\": \"border-left-style\",\n\t\"bdlw\": \"border-left-width\",\n\t\"bdr\": \"border-right:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdrc\": \"border-right-color:${1:#000}\",\n\t\"bdri\": \"border-right-image:url(${0})\",\n\t\"bdrs\": \"border-radius\",\n\t\"bdrst\": \"border-right-style\",\n\t\"bdrw\": \"border-right-width\",\n\t\"bds\": \"border-style:none|hidden|dotted|dashed|solid|double|dot-dash|dot-dot-dash|wave|groove|ridge|inset|outset\",\n\t\"bdsp\": \"border-spacing\",\n\t\"bdt\": \"border-top:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdtc\": \"border-top-color:${1:#000}\",\n\t\"bdti\": \"border-top-image:url(${0})\",\n\t\"bdtli\": \"border-top-left-image:url(${0})|continue\",\n\t\"bdtlrs\": \"border-top-left-radius\",\n\t\"bdtri\": \"border-top-right-image:url(${0})|continue\",\n\t\"bdtrrs\": \"border-top-right-radius\",\n\t\"bdts\": \"border-top-style\",\n\t\"bdtw\": \"border-top-width\",\n\t\"bdw\": \"border-width\",\n \"bbs\": \"border-block-start\",\n \"bbe\": \"border-block-end\",\n \"bis\": \"border-inline-start\",\n \"bie\": \"border-inline-end\",\n\t\"bfv\": \"backface-visibility:hidden|visible\",\n\t\"bg\": \"background:${1:#000}\",\n\t\"bg:n\": \"background: none\",\n\t\"bga\": \"background-attachment:fixed|scroll\",\n\t\"bgbk\": \"background-break:bounding-box|each-box|continuous\",\n\t\"bgc\": \"background-color:${1:#fff}\",\n\t\"bgcp\": \"background-clip:padding-box|border-box|content-box|no-clip\",\n\t\"bgi\": \"background-image:url(${0})\",\n\t\"bgo\": \"background-origin:padding-box|border-box|content-box\",\n\t\"bgp\": \"background-position:${1:0} ${2:0}\",\n\t\"bgpx\": \"background-position-x\",\n\t\"bgpy\": \"background-position-y\",\n\t\"bgr\": \"background-repeat:no-repeat|repeat-x|repeat-y|space|round\",\n\t\"bgsz\": \"background-size:contain|cover\",\n \"bs\": \"block-size\",\n\t\"bxsh\": \"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:#000}|none\",\n\t\"bxsz\": \"box-sizing:border-box|content-box|border-box\",\n\t\"c\": \"color:${1:#000}\",\n \"cg\": \"column-gap\",\n\t\"cr\": \"color:rgb(${1:0}, ${2:0}, ${3:0})\",\n\t\"cra\": \"color:rgba(${1:0}, ${2:0}, ${3:0}, ${4:.5})\",\n\t\"cl\": \"clear:both|left|right|none\",\n\t\"cm\": \"/* ${0} */\",\n\t\"cnt\": \"content:'${0}'|normal|open-quote|no-open-quote|close-quote|no-close-quote|attr(${0})|counter(${0})|counters(${0})\",\n\t\"coi\": \"counter-increment\",\n\t\"colm\": \"columns\",\n\t\"colmc\": \"column-count\",\n\t\"colmf\": \"column-fill\",\n\t\"colmg\": \"column-gap\",\n\t\"colmr\": \"column-rule\",\n\t\"colmrc\": \"column-rule-color\",\n\t\"colmrs\": \"column-rule-style\",\n\t\"colmrw\": \"column-rule-width\",\n\t\"colms\": \"column-span\",\n\t\"colmw\": \"column-width\",\n\t\"cor\": \"counter-reset\",\n\t\"cp\": \"clip:auto|rect(${1:top} ${2:right} ${3:bottom} ${4:left})\",\n\t\"cps\": \"caption-side:top|bottom\",\n\t\"cur\": \"cursor:pointer|auto|default|crosshair|hand|help|move|pointer|text\",\n\t\"d\": \"display:block|none|flex|inline-flex|inline|inline-block|grid|inline-grid|subgrid|list-item|run-in|contents|table|inline-table|table-caption|table-column|table-column-group|table-header-group|table-footer-group|table-row|table-row-group|table-cell|ruby|ruby-base|ruby-base-group|ruby-text|ruby-text-group\",\n\t\"ec\": \"empty-cells:show|hide\",\n\t\"f\": \"font:${1:1em} ${2:sans-serif}\",\n\t\"fd\": \"font-display:auto|block|swap|fallback|optional\",\n\t\"fef\": \"font-effect:none|engrave|emboss|outline\",\n\t\"fem\": \"font-emphasize\",\n\t\"femp\": \"font-emphasize-position:before|after\",\n\t\"fems\": \"font-emphasize-style:none|accent|dot|circle|disc\",\n\t\"ff\": \"font-family:serif|sans-serif|cursive|fantasy|monospace\",\n\t\"fft\": \"font-family:\\\"Times New Roman\\\", Times, Baskerville, Georgia, serif\",\n\t\"ffa\": \"font-family:Arial, \\\"Helvetica Neue\\\", Helvetica, sans-serif\",\n\t\"ffv\": \"font-family:Verdana, Geneva, sans-serif\",\n\t\"fl\": \"float:left|right|none\",\n\t\"fs\": \"font-style:italic|normal|oblique\",\n\t\"fsm\": \"font-smoothing:antialiased|subpixel-antialiased|none\",\n\t\"fst\": \"font-stretch:normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded\",\n\t\"fv\": \"font-variant:normal|small-caps\",\n\t\"fvs\": \"font-variation-settings:normal|inherit|initial|unset\",\n\t\"fw\": \"font-weight:normal|bold|bolder|lighter\",\n\t\"fx\": \"flex\",\n\t\"fxb\": \"flex-basis:fill|max-content|min-content|fit-content|content\",\n\t\"fxd\": \"flex-direction:row|row-reverse|column|column-reverse\",\n\t\"fxf\": \"flex-flow\",\n\t\"fxg\": \"flex-grow\",\n\t\"fxsh\": \"flex-shrink\",\n\t\"fxw\": \"flex-wrap:nowrap|wrap|wrap-reverse\",\n\t\"fsz\": \"font-size\",\n\t\"fsza\": \"font-size-adjust\",\n\t\"g\": \"gap\",\n\t\"gtc\": \"grid-template-columns:repeat(${0})|minmax()\",\n\t\"gtr\": \"grid-template-rows:repeat(${0})|minmax()\",\n\t\"gta\": \"grid-template-areas\",\n\t\"gt\": \"grid-template\",\n\t\"gg\": \"grid-gap\",\n\t\"gcg\": \"grid-column-gap\",\n\t\"grg\": \"grid-row-gap\",\n\t\"gac\": \"grid-auto-columns:auto|minmax()\",\n\t\"gar\": \"grid-auto-rows:auto|minmax()\",\n\t\"gaf\": \"grid-auto-flow:row|column|dense|inherit|initial|unset\",\n\t\"gd\": \"grid\",\n\t\"gc\": \"grid-column\",\n\t\"gcs\": \"grid-column-start\",\n\t\"gce\": \"grid-column-end\",\n\t\"gr\": \"grid-row\",\n\t\"grs\": \"grid-row-start\",\n\t\"gre\": \"grid-row-end\",\n\t\"ga\": \"grid-area\",\n\t\"h\": \"height\",\n \"is\": \"inline-size\",\n\t\"jc\": \"justify-content:start|end|stretch|flex-start|flex-end|center|space-between|space-around|space-evenly\",\n\t\"ji\": \"justify-items:start|end|center|stretch\",\n\t\"js\": \"justify-self:start|end|center|stretch\",\n\t\"l\": \"left\",\n\t\"lg\": \"background-image:linear-gradient(${1})\",\n\t\"lh\": \"line-height\",\n\t\"lis\": \"list-style\",\n\t\"lisi\": \"list-style-image\",\n\t\"lisp\": \"list-style-position:inside|outside\",\n\t\"list\": \"list-style-type:disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman\",\n\t\"lts\": \"letter-spacing:normal\",\n\t\"m\": \"margin\",\n\t\"mah\": \"max-height\",\n\t\"mar\": \"max-resolution\",\n\t\"maw\": \"max-width\",\n\t\"mb\": \"margin-bottom\",\n\t\"mih\": \"min-height\",\n\t\"mir\": \"min-resolution\",\n\t\"miw\": \"min-width\",\n\t\"ml\": \"margin-left\",\n\t\"mr\": \"margin-right\",\n\t\"mt\": \"margin-top\",\n \"mbs\": \"margin-block-start\",\n \"mbe\": \"margin-block-end\",\n \"mis\": \"margin-inline-start\",\n \"mie\": \"margin-inline-end\",\n\t\"ol\": \"outline\",\n\t\"olc\": \"outline-color:${1:#000}|invert\",\n\t\"olo\": \"outline-offset\",\n\t\"ols\": \"outline-style:none|dotted|dashed|solid|double|groove|ridge|inset|outset\",\n\t\"olw\": \"outline-width:thin|medium|thick\",\n\t\"op|opa\": \"opacity\",\n\t\"ord\": \"order\",\n\t\"ori\": \"orientation:landscape|portrait\",\n\t\"orp\": \"orphans\",\n\t\"ov\": \"overflow:hidden|visible|hidden|scroll|auto\",\n\t\"ovs\": \"overflow-style:scrollbar|auto|scrollbar|panner|move|marquee\",\n\t\"ovx\": \"overflow-x:hidden|visible|hidden|scroll|auto\",\n\t\"ovy\": \"overflow-y:hidden|visible|hidden|scroll|auto\",\n\t\"p\": \"padding\",\n\t\"pb\": \"padding-bottom\",\n\t\"pgba\": \"page-break-after:auto|always|left|right\",\n\t\"pgbb\": \"page-break-before:auto|always|left|right\",\n\t\"pgbi\": \"page-break-inside:auto|avoid\",\n\t\"pl\": \"padding-left\",\n\t\"pos\": \"position:relative|absolute|relative|fixed|static\",\n\t\"pr\": \"padding-right\",\n\t\"pt\": \"padding-top\",\n \"pbs\": \"padding-block-start\",\n \"pbe\": \"padding-block-end\",\n \"pis\": \"padding-inline-start\",\n \"pie\": \"padding-inline-end\",\n \"spbs\": \"scroll-padding-block-start\",\n \"spbe\": \"scroll-padding-block-end\",\n \"spis\": \"scroll-padding-inline-start\",\n \"spie\": \"scroll-padding-inline-end\",\n\t\"q\": \"quotes\",\n\t\"qen\": \"quotes:'\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019'\",\n\t\"qru\": \"quotes:'\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C'\",\n\t\"r\": \"right\",\n \"rg\": \"row-gap\",\n\t\"rsz\": \"resize:none|both|horizontal|vertical\",\n\t\"t\": \"top\",\n\t\"ta\": \"text-align:left|center|right|justify\",\n\t\"tal\": \"text-align-last:left|center|right\",\n\t\"tbl\": \"table-layout:fixed\",\n\t\"td\": \"text-decoration:none|underline|overline|line-through\",\n\t\"te\": \"text-emphasis:none|accent|dot|circle|disc|before|after\",\n\t\"th\": \"text-height:auto|font-size|text-size|max-size\",\n\t\"ti\": \"text-indent\",\n\t\"tj\": \"text-justify:auto|inter-word|inter-ideograph|inter-cluster|distribute|kashida|tibetan\",\n\t\"to\": \"text-outline:${1:0} ${2:0} ${3:#000}\",\n\t\"tov\": \"text-overflow:ellipsis|clip\",\n\t\"tr\": \"text-replace\",\n\t\"trf\": \"transform:${1}|skewX(${1:angle})|skewY(${1:angle})|scale(${1:x}, ${2:y})|scaleX(${1:x})|scaleY(${1:y})|scaleZ(${1:z})|scale3d(${1:x}, ${2:y}, ${3:z})|rotate(${1:angle})|rotateX(${1:angle})|rotateY(${1:angle})|rotateZ(${1:angle})|translate(${1:x}, ${2:y})|translateX(${1:x})|translateY(${1:y})|translateZ(${1:z})|translate3d(${1:tx}, ${2:ty}, ${3:tz})\",\n\t\"trfo\": \"transform-origin\",\n\t\"trfs\": \"transform-style:preserve-3d\",\n\t\"trs\": \"transition:${1:prop} ${2:time}\",\n\t\"trsde\": \"transition-delay:${1:time}\",\n\t\"trsdu\": \"transition-duration:${1:time}\",\n\t\"trsp\": \"transition-property:${1:prop}\",\n\t\"trstf\": \"transition-timing-function:${1:fn}\",\n\t\"tsh\": \"text-shadow:${1:hoff} ${2:voff} ${3:blur} ${4:#000}\",\n\t\"tt\": \"text-transform:uppercase|lowercase|capitalize|none\",\n\t\"tw\": \"text-wrap:none|normal|unrestricted|suppress\",\n\t\"us\": \"user-select:none\",\n\t\"v\": \"visibility:hidden|visible|collapse\",\n\t\"va\": \"vertical-align:top|super|text-top|middle|baseline|bottom|text-bottom|sub\",\n\t\"w|wid\": \"width\",\n\t\"whs\": \"white-space:nowrap|pre|pre-wrap|pre-line|normal\",\n\t\"whsc\": \"white-space-collapse:normal|keep-all|loose|break-strict|break-all\",\n\t\"wido\": \"widows\",\n\t\"wm\": \"writing-mode:lr-tb|lr-tb|lr-bt|rl-tb|rl-bt|tb-rl|tb-lr|bt-lr|bt-rl\",\n\t\"wob\": \"word-break:normal|keep-all|break-all\",\n\t\"wos\": \"word-spacing\",\n\t\"wow\": \"word-wrap:none|unrestricted|suppress|break-word|normal\",\n\t\"z\": \"z-index\",\n\t\"zom\": \"zoom:1\"\n}\n", "{\n \"tm|tmatch\": \"xsl:template[match mode]\",\n \"tn|tname\": \"xsl:template[name]\",\n \"call\": \"xsl:call-template[name]\",\n \"ap\": \"xsl:apply-templates[select mode]\",\n \"api\": \"xsl:apply-imports\",\n \"imp\": \"xsl:import[href]\",\n \"inc\": \"xsl:include[href]\",\n \"ch\": \"xsl:choose\",\n \"wh|xsl:when\": \"xsl:when[test]\",\n \"ot\": \"xsl:otherwise\",\n \"if\": \"xsl:if[test]\",\n \"par\": \"xsl:param[name]\",\n \"pare\": \"xsl:param[name select]\",\n \"var\": \"xsl:variable[name]\",\n \"vare\": \"xsl:variable[name select]\",\n \"wp\": \"xsl:with-param[name select]\",\n \"key\": \"xsl:key[name match use]\",\n \"elem\": \"xsl:element[name]\",\n \"attr\": \"xsl:attribute[name]\",\n \"attrs\": \"xsl:attribute-set[name]\",\n \"cp\": \"xsl:copy[select]\",\n \"co\": \"xsl:copy-of[select]\",\n \"val\": \"xsl:value-of[select]\",\n \"for|each\": \"xsl:for-each[select]\",\n \"tex\": \"xsl:text\",\n \"com\": \"xsl:comment\",\n \"msg\": \"xsl:message[terminate=no]\",\n \"fall\": \"xsl:fallback\",\n \"num\": \"xsl:number[value]\",\n \"nam\": \"namespace-alias[stylesheet-prefix result-prefix]\",\n \"pres\": \"xsl:preserve-space[elements]\",\n \"strip\": \"xsl:strip-space[elements]\",\n \"proc\": \"xsl:processing-instruction[name]\",\n \"sort\": \"xsl:sort[select order]\",\n \"choose\": \"xsl:choose>xsl:when+xsl:otherwise\",\n \"xsl\": \"!!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{\\n|}\",\n \"!!!\": \"{<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>}\"\n}", "{\n\t\"!!!\": \"{doctype html}\"\n}\n", "{\n\t\"lang\": \"en\",\n\t\"locale\": \"en-US\",\n\t\"charset\": \"UTF-8\",\n\t\"indentation\": \"\\t\",\n\t\"newline\": \"\\n\"\n}\n", null, null, null, null, null, null, null, null, null, "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { activateEmmetExtension } from '../emmetCommon';\n\nexport function activate(context: vscode.ExtensionContext) {\n\tactivateEmmetExtension(context);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { DefaultCompletionItemProvider } from './defaultCompletionProvider';\nimport { expandEmmetAbbreviation, wrapWithAbbreviation } from './abbreviationActions';\nimport { removeTag } from './removeTag';\nimport { updateTag } from './updateTag';\nimport { matchTag } from './matchTag';\nimport { balanceOut, balanceIn } from './balance';\nimport { splitJoinTag } from './splitJoinTag';\nimport { mergeLines } from './mergeLines';\nimport { toggleComment } from './toggleComment';\nimport { fetchEditPoint } from './editPoint';\nimport { fetchSelectItem } from './selectItem';\nimport { evaluateMathExpression } from './evaluateMathExpression';\nimport { incrementDecrement } from './incrementDecrement';\nimport { LANGUAGE_MODES, getMappingForIncludedLanguages, updateEmmetExtensionsPath, migrateEmmetExtensionsPath, getPathBaseName, getSyntaxes, getEmmetMode } from './util';\nimport { reflectCssValue } from './reflectCssValue';\nimport { addFileToParseCache, clearParseCache, removeFileFromParseCache } from './parseDocument';\n\nexport function activateEmmetExtension(context: vscode.ExtensionContext) {\n\tmigrateEmmetExtensionsPath();\n\trefreshCompletionProviders(context);\n\tupdateEmmetExtensionsPath();\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.wrapWithAbbreviation', (args) => {\n\t\twrapWithAbbreviation(args);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('emmet.expandAbbreviation', (args) => {\n\t\texpandEmmetAbbreviation(args);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.removeTag', () => {\n\t\treturn removeTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.updateTag', (inputTag) => {\n\t\tif (inputTag && typeof inputTag === 'string') {\n\t\t\treturn updateTag(inputTag);\n\t\t}\n\t\treturn updateTag(undefined);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.matchTag', () => {\n\t\tmatchTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.balanceOut', () => {\n\t\tbalanceOut();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.balanceIn', () => {\n\t\tbalanceIn();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.splitJoinTag', () => {\n\t\treturn splitJoinTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.mergeLines', () => {\n\t\tmergeLines();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.toggleComment', () => {\n\t\ttoggleComment();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.nextEditPoint', () => {\n\t\tfetchEditPoint('next');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.prevEditPoint', () => {\n\t\tfetchEditPoint('prev');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.selectNextItem', () => {\n\t\tfetchSelectItem('next');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.selectPrevItem', () => {\n\t\tfetchSelectItem('prev');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.evaluateMathExpression', () => {\n\t\tevaluateMathExpression();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByOneTenth', () => {\n\t\treturn incrementDecrement(0.1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByOne', () => {\n\t\treturn incrementDecrement(1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByTen', () => {\n\t\treturn incrementDecrement(10);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByOneTenth', () => {\n\t\treturn incrementDecrement(-0.1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByOne', () => {\n\t\treturn incrementDecrement(-1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByTen', () => {\n\t\treturn incrementDecrement(-10);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.reflectCSSValue', () => {\n\t\treturn reflectCssValue();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('workbench.action.showEmmetCommands', () => {\n\t\tvscode.commands.executeCommand('workbench.action.quickOpen', '>Emmet: ');\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => {\n\t\tif (e.affectsConfiguration('emmet.includeLanguages') || e.affectsConfiguration('emmet.useInlineCompletions')) {\n\t\t\trefreshCompletionProviders(context);\n\t\t}\n\t\tif (e.affectsConfiguration('emmet.extensionsPath')) {\n\t\t\tupdateEmmetExtensionsPath();\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidSaveTextDocument((e) => {\n\t\tconst basefileName: string = getPathBaseName(e.fileName);\n\t\tif (basefileName.startsWith('snippets') && basefileName.endsWith('.json')) {\n\t\t\tupdateEmmetExtensionsPath(true);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidOpenTextDocument((e) => {\n\t\tconst emmetMode = getEmmetMode(e.languageId, {}, []) ?? '';\n\t\tconst syntaxes = getSyntaxes();\n\t\tif (syntaxes.markup.includes(emmetMode) || syntaxes.stylesheet.includes(emmetMode)) {\n\t\t\taddFileToParseCache(e);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidCloseTextDocument((e) => {\n\t\tconst emmetMode = getEmmetMode(e.languageId, {}, []) ?? '';\n\t\tconst syntaxes = getSyntaxes();\n\t\tif (syntaxes.markup.includes(emmetMode) || syntaxes.stylesheet.includes(emmetMode)) {\n\t\t\tremoveFileFromParseCache(e);\n\t\t}\n\t}));\n}\n\n/**\n * Holds any registered completion providers by their language strings\n */\nconst languageMappingForCompletionProviders: Map<string, string> = new Map<string, string>();\nconst completionProviderDisposables: vscode.Disposable[] = [];\n\nfunction refreshCompletionProviders(_: vscode.ExtensionContext) {\n\tclearCompletionProviderInfo();\n\n\tconst completionProvider = new DefaultCompletionItemProvider();\n\tconst inlineCompletionProvider: vscode.InlineCompletionItemProvider = {\n\t\tasync provideInlineCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.InlineCompletionContext, token: vscode.CancellationToken) {\n\t\t\tconst items = await completionProvider.provideCompletionItems(document, position, token, { triggerCharacter: undefined, triggerKind: vscode.CompletionTriggerKind.Invoke });\n\t\t\tif (!items) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst item = items.items[0];\n\t\t\tif (!item || !item.insertText) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst range = item.range as vscode.Range;\n\n\t\t\tif (document.getText(range) !== item.label) {\n\t\t\t\t// We only want to show an inline completion if we are really sure the user meant emmet.\n\t\t\t\t// If the user types `d`, we don't want to suggest `<div></div>`.\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tinsertText: item.insertText,\n\t\t\t\t\tfilterText: item.label,\n\t\t\t\t\trange\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t};\n\n\tconst useInlineCompletionProvider = vscode.workspace.getConfiguration('emmet').get<boolean>('useInlineCompletions');\n\tconst includedLanguages = getMappingForIncludedLanguages();\n\tObject.keys(includedLanguages).forEach(language => {\n\t\tif (languageMappingForCompletionProviders.has(language) && languageMappingForCompletionProviders.get(language) === includedLanguages[language]) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (useInlineCompletionProvider) {\n\t\t\tconst inlineCompletionsProvider = vscode.languages.registerInlineCompletionItemProvider({ language, scheme: '*' }, inlineCompletionProvider);\n\t\t\tcompletionProviderDisposables.push(inlineCompletionsProvider);\n\t\t}\n\n\t\tconst explicitProvider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]);\n\t\tcompletionProviderDisposables.push(explicitProvider);\n\n\t\tlanguageMappingForCompletionProviders.set(language, includedLanguages[language]);\n\t});\n\n\tObject.keys(LANGUAGE_MODES).forEach(language => {\n\t\tif (!languageMappingForCompletionProviders.has(language)) {\n\t\t\tif (useInlineCompletionProvider) {\n\t\t\t\tconst inlineCompletionsProvider = vscode.languages.registerInlineCompletionItemProvider({ language, scheme: '*' }, inlineCompletionProvider);\n\t\t\t\tcompletionProviderDisposables.push(inlineCompletionsProvider);\n\t\t\t}\n\n\t\t\tconst explicitProvider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[language]);\n\t\t\tcompletionProviderDisposables.push(explicitProvider);\n\n\t\t\tlanguageMappingForCompletionProviders.set(language, language);\n\t\t}\n\t});\n}\n\nfunction clearCompletionProviderInfo() {\n\tlanguageMappingForCompletionProviders.clear();\n\tlet disposable: vscode.Disposable | undefined;\n\twhile (disposable = completionProviderDisposables.pop()) {\n\t\tdisposable.dispose();\n\t}\n}\n\nexport function deactivate() {\n\tclearCompletionProviderInfo();\n\tclearParseCache();\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node, Stylesheet } from 'EmmetFlatNode';\nimport { isValidLocationForEmmetAbbreviation, getSyntaxFromArgs } from './abbreviationActions';\nimport { getEmmetHelper, getMappingForIncludedLanguages, parsePartialStylesheet, getEmmetConfiguration, getEmmetMode, isStyleSheet, getFlatNode, allowedMimeTypesInScriptTag, toLSTextDocument, getHtmlFlatNode, getEmbeddedCssNodeIfAny } from './util';\nimport { Range as LSRange } from 'vscode-languageserver-textdocument';\nimport { getRootNode } from './parseDocument';\n\nexport class DefaultCompletionItemProvider implements vscode.CompletionItemProvider {\n\n\tprivate lastCompletionType: string | undefined;\n\n\tpublic provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.CancellationToken, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {\n\t\tconst completionResult = this.provideCompletionItemsInternal(document, position, context);\n\t\tif (!completionResult) {\n\t\t\tthis.lastCompletionType = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\treturn completionResult.then(completionList => {\n\t\t\tif (!completionList || !completionList.items.length) {\n\t\t\t\tthis.lastCompletionType = undefined;\n\t\t\t\treturn completionList;\n\t\t\t}\n\t\t\tconst item = completionList.items[0];\n\t\t\tconst expandedText = item.documentation ? item.documentation.toString() : '';\n\n\t\t\tif (expandedText.startsWith('<')) {\n\t\t\t\tthis.lastCompletionType = 'html';\n\t\t\t} else if (expandedText.indexOf(':') > 0 && expandedText.endsWith(';')) {\n\t\t\t\tthis.lastCompletionType = 'css';\n\t\t\t} else {\n\t\t\t\tthis.lastCompletionType = undefined;\n\t\t\t}\n\t\t\treturn completionList;\n\t\t});\n\t}\n\n\tprivate provideCompletionItemsInternal(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {\n\t\tconst emmetConfig = vscode.workspace.getConfiguration('emmet');\n\t\tconst excludedLanguages = emmetConfig['excludeLanguages'] ? emmetConfig['excludeLanguages'] : [];\n\t\tif (excludedLanguages.includes(document.languageId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mappedLanguages = getMappingForIncludedLanguages();\n\t\tconst isSyntaxMapped = mappedLanguages[document.languageId] ? true : false;\n\t\tconst emmetMode = getEmmetMode((isSyntaxMapped ? mappedLanguages[document.languageId] : document.languageId), mappedLanguages, excludedLanguages);\n\n\t\tif (!emmetMode\n\t\t\t|| emmetConfig['showExpandedAbbreviation'] === 'never'\n\t\t\t|| ((isSyntaxMapped || emmetMode === 'jsx') && emmetConfig['showExpandedAbbreviation'] !== 'always')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet syntax = emmetMode;\n\n\t\tlet validateLocation = syntax === 'html' || syntax === 'jsx' || syntax === 'xml';\n\t\tlet rootNode: Node | undefined;\n\t\tlet currentNode: Node | undefined;\n\n\t\tconst lsDoc = toLSTextDocument(document);\n\t\tposition = document.validatePosition(position);\n\n\t\t// Don't show completions if there's a comment at the beginning of the line\n\t\tconst lineRange = new vscode.Range(position.line, 0, position.line, position.character);\n\t\tif (document.getText(lineRange).trimStart().startsWith('//')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst helper = getEmmetHelper();\n\t\tif (syntax === 'html') {\n\t\t\tif (context.triggerKind === vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\t\tswitch (this.lastCompletionType) {\n\t\t\t\t\tcase 'html':\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'css':\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (validateLocation) {\n\t\t\t\tconst positionOffset = document.offsetAt(position);\n\t\t\t\tconst emmetRootNode = getRootNode(document, true);\n\t\t\t\tconst foundNode = getHtmlFlatNode(document.getText(), emmetRootNode, positionOffset, false);\n\t\t\t\tif (foundNode) {\n\t\t\t\t\tif (foundNode.name === 'script') {\n\t\t\t\t\t\tconst typeNode = foundNode.attributes.find(attr => attr.name.toString() === 'type');\n\t\t\t\t\t\tif (typeNode) {\n\t\t\t\t\t\t\tconst typeAttrValue = typeNode.value.toString();\n\t\t\t\t\t\t\tif (typeAttrValue === 'application/javascript' || typeAttrValue === 'text/javascript') {\n\t\t\t\t\t\t\t\tif (!getSyntaxFromArgs({ language: 'javascript' })) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (allowedMimeTypesInScriptTag.includes(typeAttrValue)) {\n\t\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (foundNode.name === 'style') {\n\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst styleNode = foundNode.attributes.find(attr => attr.name.toString() === 'style');\n\t\t\t\t\t\tif (styleNode && styleNode.value.start <= positionOffset && positionOffset <= styleNode.value.end) {\n\t\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst expandOptions = isStyleSheet(syntax) ?\n\t\t\t{ lookAhead: false, syntax: 'stylesheet' } :\n\t\t\t{ lookAhead: true, syntax: 'markup' };\n\t\tconst extractAbbreviationResults = helper.extractAbbreviation(lsDoc, position, expandOptions);\n\t\tif (!extractAbbreviationResults || !helper.isAbbreviationValid(syntax, extractAbbreviationResults.abbreviation)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst offset = document.offsetAt(position);\n\t\tif (isStyleSheet(document.languageId) && context.triggerKind !== vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\tvalidateLocation = true;\n\t\t\tconst usePartialParsing = vscode.workspace.getConfiguration('emmet')['optimizeStylesheetParsing'] === true;\n\t\t\trootNode = usePartialParsing && document.lineCount > 1000 ? parsePartialStylesheet(document, position) : <Stylesheet>getRootNode(document, true);\n\t\t\tif (!rootNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurrentNode = getFlatNode(rootNode, offset, true);\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/107578\n\t\t// Validate location if syntax is of styleSheet type to ensure that location is valid for emmet abbreviation.\n\t\t// For an html document containing a <style> node, compute the embeddedCssNode and fetch the flattened node as currentNode.\n\t\tif (!isStyleSheet(document.languageId) && isStyleSheet(syntax) && context.triggerKind !== vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\tvalidateLocation = true;\n\t\t\trootNode = getRootNode(document, true);\n\t\t\tif (!rootNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst flatNode = getFlatNode(rootNode, offset, true);\n\t\t\tconst embeddedCssNode = getEmbeddedCssNodeIfAny(document, flatNode, position);\n\t\t\tcurrentNode = getFlatNode(embeddedCssNode, offset, true);\n\t\t}\n\n\t\tif (validateLocation && !isValidLocationForEmmetAbbreviation(document, rootNode, currentNode, syntax, offset, toRange(extractAbbreviationResults.abbreviationRange))) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet isNoisePromise: Thenable<boolean> = Promise.resolve(false);\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/32647\n\t\t// Check for document symbols in js/ts/jsx/tsx and avoid triggering emmet for abbreviations of the form symbolName.sometext\n\t\t// Presence of > or * or + in the abbreviation denotes valid abbreviation that should trigger emmet\n\t\tif (!isStyleSheet(syntax) && (document.languageId === 'javascript' || document.languageId === 'javascriptreact' || document.languageId === 'typescript' || document.languageId === 'typescriptreact')) {\n\t\t\tconst abbreviation: string = extractAbbreviationResults.abbreviation;\n\t\t\t// For the second condition, we don't want abbreviations that have [] characters but not ='s in them to expand\n\t\t\t// In turn, users must explicitly expand abbreviations of the form Component[attr1 attr2], but it means we don't try to expand a[i].\n\t\t\tif (abbreviation.startsWith('this.') || /\\[[^\\]=]*\\]/.test(abbreviation)) {\n\t\t\t\tisNoisePromise = Promise.resolve(true);\n\t\t\t} else {\n\t\t\t\tisNoisePromise = vscode.commands.executeCommand<vscode.SymbolInformation[] | undefined>('vscode.executeDocumentSymbolProvider', document.uri).then(symbols => {\n\t\t\t\t\treturn !!symbols && symbols.some(x => abbreviation === x.name || (abbreviation.startsWith(x.name + '.') && !/>|\\*|\\+/.test(abbreviation)));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn isNoisePromise.then((isNoise): vscode.CompletionList | undefined => {\n\t\t\tif (isNoise) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst config = getEmmetConfiguration(syntax!);\n\t\t\tconst result = helper.doComplete(toLSTextDocument(document), position, syntax, config);\n\n\t\t\tconst newItems: vscode.CompletionItem[] = [];\n\t\t\tif (result && result.items) {\n\t\t\t\tresult.items.forEach((item: any) => {\n\t\t\t\t\tconst newItem = new vscode.CompletionItem(item.label);\n\t\t\t\t\tnewItem.documentation = item.documentation;\n\t\t\t\t\tnewItem.detail = item.detail;\n\t\t\t\t\tnewItem.insertText = new vscode.SnippetString(item.textEdit.newText);\n\t\t\t\t\tconst oldrange = item.textEdit.range;\n\t\t\t\t\tnewItem.range = new vscode.Range(oldrange.start.line, oldrange.start.character, oldrange.end.line, oldrange.end.character);\n\n\t\t\t\t\tnewItem.filterText = item.filterText;\n\t\t\t\t\tnewItem.sortText = item.sortText;\n\n\t\t\t\t\tif (emmetConfig['showSuggestionsAsSnippets'] === true) {\n\t\t\t\t\t\tnewItem.kind = vscode.CompletionItemKind.Snippet;\n\t\t\t\t\t}\n\t\t\t\t\tnewItems.push(newItem);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn new vscode.CompletionList(newItems, true);\n\t\t});\n\t}\n}\n\nfunction toRange(lsRange: LSRange) {\n\treturn new vscode.Range(lsRange.start.line, lsRange.start.character, lsRange.end.line, lsRange.end.character);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node, HtmlNode, Rule, Property, Stylesheet } from 'EmmetFlatNode';\nimport { getEmmetHelper, getFlatNode, getHtmlFlatNode, getMappingForIncludedLanguages, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag, toLSTextDocument, isOffsetInsideOpenOrCloseTag } from './util';\nimport { getRootNode as parseDocument } from './parseDocument';\n\nconst trimRegex = /[\\u00a0]*[\\d#\\-\\*\\u2022]+\\.?/;\nconst hexColorRegex = /^#[\\da-fA-F]{0,6}$/;\n\ninterface ExpandAbbreviationInput {\n\tsyntax: string;\n\tabbreviation: string;\n\trangeToReplace: vscode.Range;\n\ttextToWrap?: string[];\n\tfilter?: string;\n\tindent?: string;\n\tbaseIndent?: string;\n}\n\ninterface PreviewRangesWithContent {\n\tpreviewRange: vscode.Range;\n\toriginalRange: vscode.Range;\n\toriginalContent: string;\n\ttextToWrapInPreview: string[];\n\tbaseIndent: string;\n}\n\nexport async function wrapWithAbbreviation(args: any): Promise<boolean> {\n\tif (!validate(false)) {\n\t\treturn false;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor!;\n\tconst document = editor.document;\n\n\targs = args || {};\n\tif (!args['language']) {\n\t\targs['language'] = document.languageId;\n\t}\n\t// we know it's not stylesheet due to the validate(false) call above\n\tconst syntax = getSyntaxFromArgs(args) || 'html';\n\tconst rootNode = parseDocument(document, true);\n\n\tconst helper = getEmmetHelper();\n\n\tconst operationRanges = Array.from(editor.selections).sort((a, b) => a.start.compareTo(b.start)).map(selection => {\n\t\tlet rangeToReplace: vscode.Range = selection;\n\t\t// wrap around the node if the selection falls inside its open or close tag\n\t\t{\n\t\t\tlet { start, end } = rangeToReplace;\n\n\t\t\tconst startOffset = document.offsetAt(start);\n\t\t\tconst documentText = document.getText();\n\t\t\tconst startNode = getHtmlFlatNode(documentText, rootNode, startOffset, true);\n\t\t\tif (startNode && isOffsetInsideOpenOrCloseTag(startNode, startOffset)) {\n\t\t\t\tstart = document.positionAt(startNode.start);\n\t\t\t\tconst nodeEndPosition = document.positionAt(startNode.end);\n\t\t\t\tend = nodeEndPosition.isAfter(end) ? nodeEndPosition : end;\n\t\t\t}\n\n\t\t\tconst endOffset = document.offsetAt(end);\n\t\t\tconst endNode = getHtmlFlatNode(documentText, rootNode, endOffset, true);\n\t\t\tif (endNode && isOffsetInsideOpenOrCloseTag(endNode, endOffset)) {\n\t\t\t\tconst nodeStartPosition = document.positionAt(endNode.start);\n\t\t\t\tstart = nodeStartPosition.isBefore(start) ? nodeStartPosition : start;\n\t\t\t\tconst nodeEndPosition = document.positionAt(endNode.end);\n\t\t\t\tend = nodeEndPosition.isAfter(end) ? nodeEndPosition : end;\n\t\t\t}\n\n\t\t\trangeToReplace = new vscode.Range(start, end);\n\t\t}\n\t\t// in case of multi-line, exclude last empty line from rangeToReplace\n\t\tif (!rangeToReplace.isSingleLine && rangeToReplace.end.character === 0) {\n\t\t\tconst previousLine = rangeToReplace.end.line - 1;\n\t\t\trangeToReplace = new vscode.Range(rangeToReplace.start, document.lineAt(previousLine).range.end);\n\t\t}\n\t\t// wrap line the cursor is on\n\t\tif (rangeToReplace.isEmpty) {\n\t\t\trangeToReplace = document.lineAt(rangeToReplace.start).range;\n\t\t}\n\n\t\t// ignore whitespace on the first line\n\t\tconst firstLineOfRange = document.lineAt(rangeToReplace.start);\n\t\tif (!firstLineOfRange.isEmptyOrWhitespace && firstLineOfRange.firstNonWhitespaceCharacterIndex > rangeToReplace.start.character) {\n\t\t\trangeToReplace = rangeToReplace.with(new vscode.Position(rangeToReplace.start.line, firstLineOfRange.firstNonWhitespaceCharacterIndex));\n\t\t}\n\n\t\treturn rangeToReplace;\n\t}).reduce((mergedRanges, range) => {\n\t\t// Merge overlapping ranges\n\t\tif (mergedRanges.length > 0 && range.intersection(mergedRanges[mergedRanges.length - 1])) {\n\t\t\tmergedRanges.push(range.union(mergedRanges.pop()!));\n\t\t} else {\n\t\t\tmergedRanges.push(range);\n\t\t}\n\t\treturn mergedRanges;\n\t}, [] as vscode.Range[]);\n\n\t// Backup orginal selections and update selections\n\t// Also helps with https://github.com/microsoft/vscode/issues/113930 by avoiding `editor.linkedEditing`\n\t// execution if selection is inside an open or close tag\n\tconst oldSelections = editor.selections;\n\teditor.selections = operationRanges.map(range => new vscode.Selection(range.start, range.end));\n\n\t// Fetch general information for the succesive expansions. i.e. the ranges to replace and its contents\n\tconst rangesToReplace: PreviewRangesWithContent[] = operationRanges.map(rangeToReplace => {\n\t\tlet textToWrapInPreview: string[];\n\t\tconst textToReplace = document.getText(rangeToReplace);\n\n\t\t// the following assumes all the lines are indented the same way as the first\n\t\t// this assumption helps with applyPreview later\n\t\tconst wholeFirstLine = document.lineAt(rangeToReplace.start).text;\n\t\tconst otherMatches = wholeFirstLine.match(/^(\\s*)/);\n\t\tconst baseIndent = otherMatches ? otherMatches[1] : '';\n\t\ttextToWrapInPreview = rangeToReplace.isSingleLine ?\n\t\t\t[textToReplace] :\n\t\t\ttextToReplace.split('\\n' + baseIndent).map(x => x.trimEnd());\n\n\t\t// escape $ characters, fixes #52640\n\t\ttextToWrapInPreview = textToWrapInPreview.map(e => e.replace(/(\\$\\d)/g, '\\\\$1'));\n\n\t\treturn {\n\t\t\tpreviewRange: rangeToReplace,\n\t\t\toriginalRange: rangeToReplace,\n\t\t\toriginalContent: textToReplace,\n\t\t\ttextToWrapInPreview,\n\t\t\tbaseIndent\n\t\t};\n\t});\n\n\tconst { tabSize, insertSpaces } = editor.options;\n\tconst indent = insertSpaces ? ' '.repeat(tabSize as number) : '\\t';\n\n\tfunction revertPreview(): Thenable<boolean> {\n\t\treturn editor.edit(builder => {\n\t\t\tfor (const rangeToReplace of rangesToReplace) {\n\t\t\t\tbuilder.replace(rangeToReplace.previewRange, rangeToReplace.originalContent);\n\t\t\t\trangeToReplace.previewRange = rangeToReplace.originalRange;\n\t\t\t}\n\t\t}, { undoStopBefore: false, undoStopAfter: false });\n\t}\n\n\tfunction applyPreview(expandAbbrList: ExpandAbbreviationInput[]): Thenable<boolean> {\n\t\tlet lastOldPreviewRange = new vscode.Range(0, 0, 0, 0);\n\t\tlet lastNewPreviewRange = new vscode.Range(0, 0, 0, 0);\n\t\tlet totalNewLinesInserted = 0;\n\n\t\treturn editor.edit(builder => {\n\t\t\t// the edits are applied in order top-down\n\t\t\tfor (let i = 0; i < rangesToReplace.length; i++) {\n\t\t\t\tconst expandedText = expandAbbr(expandAbbrList[i]) || '';\n\t\t\t\tif (!expandedText) {\n\t\t\t\t\t// Failed to expand text. We already showed an error inside expandAbbr.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// get the current preview range, format the new wrapped text, and then replace\n\t\t\t\t// the text in the preview range with that new text\n\t\t\t\tconst oldPreviewRange = rangesToReplace[i].previewRange;\n\t\t\t\tconst newText = expandedText\n\t\t\t\t\t.replace(/\\$\\{[\\d]*\\}/g, '|') // Removing Tabstops\n\t\t\t\t\t.replace(/\\$\\{[\\d]*:([^}]*)\\}/g, (_, placeholder) => placeholder) // Replacing Placeholders\n\t\t\t\t\t.replace(/\\\\\\$/g, '$'); // Remove backslashes before $\n\t\t\t\tbuilder.replace(oldPreviewRange, newText);\n\n\t\t\t\t// calculate the new preview range to use for future previews\n\t\t\t\t// we also have to take into account that the previous expansions could:\n\t\t\t\t// - cause new lines to appear\n\t\t\t\t// - be on the same line as other expansions\n\t\t\t\tconst expandedTextLines = newText.split('\\n');\n\t\t\t\tconst oldPreviewLines = oldPreviewRange.end.line - oldPreviewRange.start.line + 1;\n\t\t\t\tconst newLinesInserted = expandedTextLines.length - oldPreviewLines;\n\n\t\t\t\tconst newPreviewLineStart = oldPreviewRange.start.line + totalNewLinesInserted;\n\t\t\t\tlet newPreviewStart = oldPreviewRange.start.character;\n\t\t\t\tconst newPreviewLineEnd = oldPreviewRange.end.line + totalNewLinesInserted + newLinesInserted;\n\t\t\t\tlet newPreviewEnd = expandedTextLines[expandedTextLines.length - 1].length;\n\t\t\t\tif (i > 0 && newPreviewLineEnd === lastNewPreviewRange.end.line) {\n\t\t\t\t\t// If newPreviewLineEnd is equal to the previous expandedText lineEnd,\n\t\t\t\t\t// set newPreviewStart to the length of the previous expandedText in that line\n\t\t\t\t\t// plus the number of characters between both selections.\n\t\t\t\t\tnewPreviewStart = lastNewPreviewRange.end.character + (oldPreviewRange.start.character - lastOldPreviewRange.end.character);\n\t\t\t\t\tnewPreviewEnd += newPreviewStart;\n\t\t\t\t} else if (i > 0 && newPreviewLineStart === lastNewPreviewRange.end.line) {\n\t\t\t\t\t// Same as above but expandedTextLines.length > 1 so newPreviewEnd keeps its value.\n\t\t\t\t\tnewPreviewStart = lastNewPreviewRange.end.character + (oldPreviewRange.start.character - lastOldPreviewRange.end.character);\n\t\t\t\t} else if (expandedTextLines.length === 1) {\n\t\t\t\t\t// If the expandedText is single line, add the length of preceeding text as it will not be included in line length.\n\t\t\t\t\tnewPreviewEnd += oldPreviewRange.start.character;\n\t\t\t\t}\n\n\t\t\t\tlastOldPreviewRange = rangesToReplace[i].previewRange;\n\t\t\t\tlastNewPreviewRange = new vscode.Range(newPreviewLineStart, newPreviewStart, newPreviewLineEnd, newPreviewEnd);\n\t\t\t\trangesToReplace[i].previewRange = lastNewPreviewRange;\n\t\t\t\ttotalNewLinesInserted += newLinesInserted;\n\t\t\t}\n\t\t}, { undoStopBefore: false, undoStopAfter: false });\n\t}\n\n\tlet inPreviewMode = false;\n\tasync function makeChanges(inputAbbreviation: string | undefined, previewChanges: boolean): Promise<boolean> {\n\t\tconst isAbbreviationValid = !!inputAbbreviation && !!inputAbbreviation.trim() && helper.isAbbreviationValid(syntax, inputAbbreviation);\n\t\tconst extractedResults = isAbbreviationValid ? helper.extractAbbreviationFromText(inputAbbreviation!, syntax) : undefined;\n\t\tif (!extractedResults) {\n\t\t\tif (inPreviewMode) {\n\t\t\t\tinPreviewMode = false;\n\t\t\t\tawait revertPreview();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { abbreviation, filter } = extractedResults;\n\t\tif (abbreviation !== inputAbbreviation) {\n\t\t\t// Not clear what should we do in this case. Warn the user? How?\n\t\t}\n\n\t\tif (previewChanges) {\n\t\t\tconst expandAbbrList: ExpandAbbreviationInput[] = rangesToReplace.map(rangesAndContent =>\n\t\t\t\t({ syntax, abbreviation, rangeToReplace: rangesAndContent.originalRange, textToWrap: rangesAndContent.textToWrapInPreview, filter, indent, baseIndent: rangesAndContent.baseIndent })\n\t\t\t);\n\n\t\t\tinPreviewMode = true;\n\t\t\treturn applyPreview(expandAbbrList);\n\t\t}\n\n\t\tconst expandAbbrList: ExpandAbbreviationInput[] = rangesToReplace.map(rangesAndContent =>\n\t\t\t({ syntax, abbreviation, rangeToReplace: rangesAndContent.originalRange, textToWrap: rangesAndContent.textToWrapInPreview, filter, indent })\n\t\t);\n\n\t\tif (inPreviewMode) {\n\t\t\tinPreviewMode = false;\n\t\t\tawait revertPreview();\n\t\t}\n\n\t\treturn expandAbbreviationInRange(editor, expandAbbrList, false);\n\t}\n\n\tlet currentValue = '';\n\tasync function inputChanged(value: string): Promise<string> {\n\t\tif (value !== currentValue) {\n\t\t\tcurrentValue = value;\n\t\t\tawait makeChanges(value, true);\n\t\t}\n\t\treturn '';\n\t}\n\n\tconst prompt = vscode.l10n.t(\"Enter Abbreviation\");\n\tconst inputAbbreviation = (args && args['abbreviation'])\n\t\t? (args['abbreviation'] as string)\n\t\t: await vscode.window.showInputBox({ prompt, validateInput: inputChanged });\n\n\tconst changesWereMade = await makeChanges(inputAbbreviation, false);\n\tif (!changesWereMade) {\n\t\teditor.selections = oldSelections;\n\t}\n\n\treturn changesWereMade;\n}\n\nexport function expandEmmetAbbreviation(args: any): Thenable<boolean | undefined> {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn fallbackTab();\n\t}\n\n\t/**\n\t * Short circuit the parsing. If previous character is space, do not expand.\n\t */\n\tif (vscode.window.activeTextEditor.selections.length === 1 &&\n\t\tvscode.window.activeTextEditor.selection.isEmpty\n\t) {\n\t\tconst anchor = vscode.window.activeTextEditor.selection.anchor;\n\t\tif (anchor.character === 0) {\n\t\t\treturn fallbackTab();\n\t\t}\n\n\t\tconst prevPositionAnchor = anchor.translate(0, -1);\n\t\tconst prevText = vscode.window.activeTextEditor.document.getText(new vscode.Range(prevPositionAnchor, anchor));\n\t\tif (prevText === ' ' || prevText === '\\t') {\n\t\t\treturn fallbackTab();\n\t\t}\n\t}\n\n\targs = args || {};\n\tif (!args['language']) {\n\t\targs['language'] = vscode.window.activeTextEditor.document.languageId;\n\t} else {\n\t\tconst excludedLanguages = vscode.workspace.getConfiguration('emmet')['excludeLanguages'] ? vscode.workspace.getConfiguration('emmet')['excludeLanguages'] : [];\n\t\tif (excludedLanguages.includes(vscode.window.activeTextEditor.document.languageId)) {\n\t\t\treturn fallbackTab();\n\t\t}\n\t}\n\tconst syntax = getSyntaxFromArgs(args);\n\tif (!syntax) {\n\t\treturn fallbackTab();\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\n\t// When tabbed on a non empty selection, do not treat it as an emmet abbreviation, and fallback to tab instead\n\tif (vscode.workspace.getConfiguration('emmet')['triggerExpansionOnTab'] === true && editor.selections.find(x => !x.isEmpty)) {\n\t\treturn fallbackTab();\n\t}\n\n\tconst abbreviationList: ExpandAbbreviationInput[] = [];\n\tlet firstAbbreviation: string;\n\tlet allAbbreviationsSame: boolean = true;\n\tconst helper = getEmmetHelper();\n\n\tconst getAbbreviation = (document: vscode.TextDocument, selection: vscode.Selection, position: vscode.Position, syntax: string): [vscode.Range | null, string, string | undefined] => {\n\t\tposition = document.validatePosition(position);\n\t\tlet rangeToReplace: vscode.Range = selection;\n\t\tlet abbr = document.getText(rangeToReplace);\n\t\tif (!rangeToReplace.isEmpty) {\n\t\t\tconst extractedResults = helper.extractAbbreviationFromText(abbr, syntax);\n\t\t\tif (extractedResults) {\n\t\t\t\treturn [rangeToReplace, extractedResults.abbreviation, extractedResults.filter];\n\t\t\t}\n\t\t\treturn [null, '', ''];\n\t\t}\n\n\t\tconst currentLine = editor.document.lineAt(position.line).text;\n\t\tconst textTillPosition = currentLine.substr(0, position.character);\n\n\t\t// Expand cases like <div to <div></div> explicitly\n\t\t// else we will end up with <<div></div>\n\t\tif (syntax === 'html') {\n\t\t\tconst matches = textTillPosition.match(/<(\\w+)$/);\n\t\t\tif (matches) {\n\t\t\t\tabbr = matches[1];\n\t\t\t\trangeToReplace = new vscode.Range(position.translate(0, -(abbr.length + 1)), position);\n\t\t\t\treturn [rangeToReplace, abbr, ''];\n\t\t\t}\n\t\t}\n\t\tconst extractedResults = helper.extractAbbreviation(toLSTextDocument(editor.document), position, { lookAhead: false });\n\t\tif (!extractedResults) {\n\t\t\treturn [null, '', ''];\n\t\t}\n\n\t\tconst { abbreviationRange, abbreviation, filter } = extractedResults;\n\t\treturn [new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character), abbreviation, filter];\n\t};\n\n\tconst selectionsInReverseOrder = editor.selections.slice(0);\n\tselectionsInReverseOrder.sort((a, b) => {\n\t\tconst posA = a.isReversed ? a.anchor : a.active;\n\t\tconst posB = b.isReversed ? b.anchor : b.active;\n\t\treturn posA.compareTo(posB) * -1;\n\t});\n\n\tlet rootNode: Node | undefined;\n\tfunction getRootNode() {\n\t\tif (rootNode) {\n\t\t\treturn rootNode;\n\t\t}\n\n\t\tconst usePartialParsing = vscode.workspace.getConfiguration('emmet')['optimizeStylesheetParsing'] === true;\n\t\tif (editor.selections.length === 1 && isStyleSheet(editor.document.languageId) && usePartialParsing && editor.document.lineCount > 1000) {\n\t\t\trootNode = parsePartialStylesheet(editor.document, editor.selection.isReversed ? editor.selection.anchor : editor.selection.active);\n\t\t} else {\n\t\t\trootNode = parseDocument(editor.document, true);\n\t\t}\n\n\t\treturn rootNode;\n\t}\n\n\tselectionsInReverseOrder.forEach(selection => {\n\t\tconst position = selection.isReversed ? selection.anchor : selection.active;\n\t\tconst [rangeToReplace, abbreviation, filter] = getAbbreviation(editor.document, selection, position, syntax);\n\t\tif (!rangeToReplace) {\n\t\t\treturn;\n\t\t}\n\t\tif (!helper.isAbbreviationValid(syntax, abbreviation)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isStyleSheet(syntax) && abbreviation.endsWith(':')) {\n\t\t\t// Fix for https://github.com/Microsoft/vscode/issues/1623\n\t\t\treturn;\n\t\t}\n\n\t\tconst offset = editor.document.offsetAt(position);\n\t\tlet currentNode = getFlatNode(getRootNode(), offset, true);\n\t\tlet validateLocation = true;\n\t\tlet syntaxToUse = syntax;\n\n\t\tif (editor.document.languageId === 'html') {\n\t\t\tif (isStyleAttribute(currentNode, offset)) {\n\t\t\t\tsyntaxToUse = 'css';\n\t\t\t\tvalidateLocation = false;\n\t\t\t} else {\n\t\t\t\tconst embeddedCssNode = getEmbeddedCssNodeIfAny(editor.document, currentNode, position);\n\t\t\t\tif (embeddedCssNode) {\n\t\t\t\t\tcurrentNode = getFlatNode(embeddedCssNode, offset, true);\n\t\t\t\t\tsyntaxToUse = 'css';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (validateLocation && !isValidLocationForEmmetAbbreviation(editor.document, getRootNode(), currentNode, syntaxToUse, offset, rangeToReplace)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!firstAbbreviation) {\n\t\t\tfirstAbbreviation = abbreviation;\n\t\t} else if (allAbbreviationsSame && firstAbbreviation !== abbreviation) {\n\t\t\tallAbbreviationsSame = false;\n\t\t}\n\n\t\tabbreviationList.push({ syntax: syntaxToUse, abbreviation, rangeToReplace, filter });\n\t});\n\n\treturn expandAbbreviationInRange(editor, abbreviationList, allAbbreviationsSame).then(success => {\n\t\treturn success ? Promise.resolve(undefined) : fallbackTab();\n\t});\n}\n\nfunction fallbackTab(): Thenable<boolean | undefined> {\n\tif (vscode.workspace.getConfiguration('emmet')['triggerExpansionOnTab'] === true) {\n\t\treturn vscode.commands.executeCommand('tab');\n\t}\n\treturn Promise.resolve(true);\n}\n/**\n * Checks if given position is a valid location to expand emmet abbreviation.\n * Works only on html and css/less/scss syntax\n * @param document current Text Document\n * @param rootNode parsed document\n * @param currentNode current node in the parsed document\n * @param syntax syntax of the abbreviation\n * @param position position to validate\n * @param abbreviationRange The range of the abbreviation for which given position is being validated\n */\nexport function isValidLocationForEmmetAbbreviation(document: vscode.TextDocument, rootNode: Node | undefined, currentNode: Node | undefined, syntax: string, offset: number, abbreviationRange: vscode.Range): boolean {\n\tif (isStyleSheet(syntax)) {\n\t\tconst stylesheet = <Stylesheet>rootNode;\n\t\tif (stylesheet && (stylesheet.comments || []).some(x => offset >= x.start && offset <= x.end)) {\n\t\t\treturn false;\n\t\t}\n\t\t// Continue validation only if the file was parse-able and the currentNode has been found\n\t\tif (!currentNode) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Get the abbreviation right now\n\t\t// Fixes https://github.com/microsoft/vscode/issues/74505\n\t\t// Stylesheet abbreviations starting with @ should bring up suggestions\n\t\t// even at outer-most level\n\t\tconst abbreviation = document.getText(new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character));\n\t\tif (abbreviation.startsWith('@')) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/34162\n\t\t// Other than sass, stylus, we can make use of the terminator tokens to validate position\n\t\tif (syntax !== 'sass' && syntax !== 'stylus' && currentNode.type === 'property') {\n\t\t\t// Fix for upstream issue https://github.com/emmetio/css-parser/issues/3\n\t\t\tif (currentNode.parent\n\t\t\t\t&& currentNode.parent.type !== 'rule'\n\t\t\t\t&& currentNode.parent.type !== 'at-rule') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst propertyNode = <Property>currentNode;\n\t\t\tif (propertyNode.terminatorToken\n\t\t\t\t&& propertyNode.separator\n\t\t\t\t&& offset >= propertyNode.separatorToken.end\n\t\t\t\t&& offset <= propertyNode.terminatorToken.start\n\t\t\t\t&& !abbreviation.includes(':')) {\n\t\t\t\treturn hexColorRegex.test(abbreviation) || abbreviation === '!';\n\t\t\t}\n\t\t\tif (!propertyNode.terminatorToken\n\t\t\t\t&& propertyNode.separator\n\t\t\t\t&& offset >= propertyNode.separatorToken.end\n\t\t\t\t&& !abbreviation.includes(':')) {\n\t\t\t\treturn hexColorRegex.test(abbreviation) || abbreviation === '!';\n\t\t\t}\n\t\t\tif (hexColorRegex.test(abbreviation) || abbreviation === '!') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// If current node is a rule or at-rule, then perform additional checks to ensure\n\t\t// emmet suggestions are not provided in the rule selector\n\t\tif (currentNode.type !== 'rule' && currentNode.type !== 'at-rule') {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst currentCssNode = <Rule>currentNode;\n\n\t\t// Position is valid if it occurs after the `{` that marks beginning of rule contents\n\t\tif (offset > currentCssNode.contentStartToken.end) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Workaround for https://github.com/microsoft/vscode/30188\n\t\t// The line above the rule selector is considered as part of the selector by the css-parser\n\t\t// But we should assume it is a valid location for css properties under the parent rule\n\t\tif (currentCssNode.parent\n\t\t\t&& (currentCssNode.parent.type === 'rule' || currentCssNode.parent.type === 'at-rule')\n\t\t\t&& currentCssNode.selectorToken) {\n\t\t\tconst position = document.positionAt(offset);\n\t\t\tconst tokenStartPos = document.positionAt(currentCssNode.selectorToken.start);\n\t\t\tconst tokenEndPos = document.positionAt(currentCssNode.selectorToken.end);\n\t\t\tif (position.line !== tokenEndPos.line\n\t\t\t\t&& tokenStartPos.character === abbreviationRange.start.character\n\t\t\t\t&& tokenStartPos.line === abbreviationRange.start.line\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tconst startAngle = '<';\n\tconst endAngle = '>';\n\tconst escape = '\\\\';\n\tconst question = '?';\n\tconst currentHtmlNode = <HtmlNode>currentNode;\n\tlet start = 0;\n\n\tif (currentHtmlNode) {\n\t\tif (currentHtmlNode.name === 'script') {\n\t\t\tconst typeAttribute = (currentHtmlNode.attributes || []).filter(x => x.name.toString() === 'type')[0];\n\t\t\tconst typeValue = typeAttribute ? typeAttribute.value.toString() : '';\n\n\t\t\tif (allowedMimeTypesInScriptTag.includes(typeValue)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst isScriptJavascriptType = !typeValue || typeValue === 'application/javascript' || typeValue === 'text/javascript';\n\t\t\tif (isScriptJavascriptType) {\n\t\t\t\treturn !!getSyntaxFromArgs({ language: 'javascript' });\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/28829\n\t\tif (!currentHtmlNode.open || !currentHtmlNode.close ||\n\t\t\t!(currentHtmlNode.open.end <= offset && offset <= currentHtmlNode.close.start)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/35128\n\t\t// Find the position up till where we will backtrack looking for unescaped < or >\n\t\t// to decide if current position is valid for emmet expansion\n\t\tstart = currentHtmlNode.open.end;\n\t\tlet lastChildBeforePosition = currentHtmlNode.firstChild;\n\t\twhile (lastChildBeforePosition) {\n\t\t\tif (lastChildBeforePosition.end > offset) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstart = lastChildBeforePosition.end;\n\t\t\tlastChildBeforePosition = lastChildBeforePosition.nextSibling;\n\t\t}\n\t}\n\tconst startPos = document.positionAt(start);\n\tlet textToBackTrack = document.getText(new vscode.Range(startPos.line, startPos.character, abbreviationRange.start.line, abbreviationRange.start.character));\n\n\t// Worse case scenario is when cursor is inside a big chunk of text which needs to backtracked\n\t// Backtrack only 500 offsets to ensure we dont waste time doing this\n\tif (textToBackTrack.length > 500) {\n\t\ttextToBackTrack = textToBackTrack.substr(textToBackTrack.length - 500);\n\t}\n\n\tif (!textToBackTrack.trim()) {\n\t\treturn true;\n\t}\n\n\tlet valid = true;\n\tlet foundSpace = false; // If < is found before finding whitespace, then its valid abbreviation. E.g.: <div|\n\tlet i = textToBackTrack.length - 1;\n\tif (textToBackTrack[i] === startAngle) {\n\t\treturn false;\n\t}\n\n\twhile (i >= 0) {\n\t\tconst char = textToBackTrack[i];\n\t\ti--;\n\t\tif (!foundSpace && /\\s/.test(char)) {\n\t\t\tfoundSpace = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === question && textToBackTrack[i] === startAngle) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\t// Fix for https://github.com/microsoft/vscode/issues/55411\n\t\t// A space is not a valid character right after < in a tag name.\n\t\tif (/\\s/.test(char) && textToBackTrack[i] === startAngle) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char !== startAngle && char !== endAngle) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (i >= 0 && textToBackTrack[i] === escape) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === endAngle) {\n\t\t\tif (i >= 0 && textToBackTrack[i] === '=') {\n\t\t\t\tcontinue; // False alarm of cases like =>\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (char === startAngle) {\n\t\t\tvalid = !foundSpace;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn valid;\n}\n\n/**\n * Expands abbreviations as detailed in expandAbbrList in the editor\n *\n * @returns false if no snippet can be inserted.\n */\nasync function expandAbbreviationInRange(editor: vscode.TextEditor, expandAbbrList: ExpandAbbreviationInput[], insertSameSnippet: boolean): Promise<boolean> {\n\tif (!expandAbbrList || expandAbbrList.length === 0) {\n\t\treturn false;\n\t}\n\n\t// Snippet to replace at multiple cursors are not the same\n\t// `editor.insertSnippet` will have to be called for each instance separately\n\t// We will not be able to maintain multiple cursors after snippet insertion\n\tlet insertedSnippetsCount = 0;\n\tif (!insertSameSnippet) {\n\t\texpandAbbrList.sort((a: ExpandAbbreviationInput, b: ExpandAbbreviationInput) => { return b.rangeToReplace.start.compareTo(a.rangeToReplace.start); });\n\t\tfor (const expandAbbrInput of expandAbbrList) {\n\t\t\tconst expandedText = expandAbbr(expandAbbrInput);\n\t\t\tif (expandedText) {\n\t\t\t\tawait editor.insertSnippet(new vscode.SnippetString(expandedText), expandAbbrInput.rangeToReplace, { undoStopBefore: false, undoStopAfter: false });\n\t\t\t\tinsertedSnippetsCount++;\n\t\t\t}\n\t\t}\n\t\treturn insertedSnippetsCount > 0;\n\t}\n\n\t// Snippet to replace at all cursors are the same\n\t// We can pass all ranges to `editor.insertSnippet` in a single call so that\n\t// all cursors are maintained after snippet insertion\n\tconst anyExpandAbbrInput = expandAbbrList[0];\n\tconst expandedText = expandAbbr(anyExpandAbbrInput);\n\tconst allRanges = expandAbbrList.map(value => value.rangeToReplace);\n\tif (expandedText) {\n\t\treturn editor.insertSnippet(new vscode.SnippetString(expandedText), allRanges);\n\t}\n\treturn false;\n}\n\n/**\n * Expands abbreviation as detailed in given input.\n */\nfunction expandAbbr(input: ExpandAbbreviationInput): string | undefined {\n\tconst helper = getEmmetHelper();\n\tconst expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter);\n\n\tif (input.textToWrap) {\n\t\t// escape ${ sections, fixes #122231\n\t\tinput.textToWrap = input.textToWrap.map(e => e.replace(/\\$\\{/g, '\\\\\\$\\{'));\n\t\tif (input.filter && input.filter.includes('t')) {\n\t\t\tinput.textToWrap = input.textToWrap.map(line => {\n\t\t\t\treturn line.replace(trimRegex, '').trim();\n\t\t\t});\n\t\t}\n\t\texpandOptions['text'] = input.textToWrap;\n\n\t\tif (expandOptions.options) {\n\t\t\t// Below fixes https://github.com/microsoft/vscode/issues/29898\n\t\t\t// With this, Emmet formats inline elements as block elements\n\t\t\t// ensuring the wrapped multi line text does not get merged to a single line\n\t\t\tif (!input.rangeToReplace.isSingleLine) {\n\t\t\t\texpandOptions.options['output.inlineBreak'] = 1;\n\t\t\t}\n\n\t\t\tif (input.indent) {\n\t\t\t\texpandOptions.options['output.indent'] = input.indent;\n\t\t\t}\n\t\t\tif (input.baseIndent) {\n\t\t\t\texpandOptions.options['output.baseIndent'] = input.baseIndent;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet expandedText: string | undefined;\n\ttry {\n\t\texpandedText = helper.expandAbbreviation(input.abbreviation, expandOptions);\n\t} catch (e) {\n\t\tvoid vscode.window.showErrorMessage('Failed to expand abbreviation');\n\t}\n\n\treturn expandedText;\n}\n\nexport function getSyntaxFromArgs(args: { [x: string]: string }): string | undefined {\n\tconst mappedModes = getMappingForIncludedLanguages();\n\tconst language: string = args['language'];\n\tconst parentMode: string = args['parentMode'];\n\tconst excludedLanguages = vscode.workspace.getConfiguration('emmet')['excludeLanguages'] ? vscode.workspace.getConfiguration('emmet')['excludeLanguages'] : [];\n\tif (excludedLanguages.includes(language)) {\n\t\treturn;\n\t}\n\n\tlet syntax = getEmmetMode(mappedModes[language] ?? language, mappedModes, excludedLanguages);\n\tif (!syntax) {\n\t\tsyntax = getEmmetMode(mappedModes[parentMode] ?? parentMode, mappedModes, excludedLanguages);\n\t}\n\n\treturn syntax;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport parse from '@emmetio/html-matcher';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { Node as FlatNode, HtmlNode as HtmlFlatNode, Property as FlatProperty, Rule as FlatRule, CssToken as FlatCssToken, Stylesheet as FlatStylesheet } from 'EmmetFlatNode';\nimport { DocumentStreamReader } from './bufferStream';\nimport * as EmmetHelper from '@vscode/emmet-helper';\nimport { TextDocument as LSTextDocument } from 'vscode-languageserver-textdocument';\nimport { getRootNode } from './parseDocument';\n\nlet _emmetHelper: typeof EmmetHelper;\nlet _currentExtensionsPath: string[] | undefined;\n\nlet _homeDir: vscode.Uri | undefined;\n\n\nexport function setHomeDir(homeDir: vscode.Uri) {\n\t_homeDir = homeDir;\n}\n\nexport function getEmmetHelper() {\n\t// Lazy load vscode-emmet-helper instead of importing it\n\t// directly to reduce the start-up time of the extension\n\tif (!_emmetHelper) {\n\t\t_emmetHelper = require('@vscode/emmet-helper');\n\t}\n\treturn _emmetHelper;\n}\n\n/**\n * Update Emmet Helper to use user snippets from the extensionsPath setting\n */\nexport function updateEmmetExtensionsPath(forceRefresh: boolean = false) {\n\tconst helper = getEmmetHelper();\n\tlet extensionsPath = vscode.workspace.getConfiguration('emmet').get<string[]>('extensionsPath');\n\tif (!extensionsPath) {\n\t\textensionsPath = [];\n\t}\n\tif (forceRefresh || _currentExtensionsPath !== extensionsPath) {\n\t\t_currentExtensionsPath = extensionsPath;\n\t\tconst rootPaths = vscode.workspace.workspaceFolders?.length ? vscode.workspace.workspaceFolders.map(f => f.uri) : undefined;\n\t\tconst fileSystem = vscode.workspace.fs;\n\t\thelper.updateExtensionsPath(extensionsPath, fileSystem, rootPaths, _homeDir).catch(err => {\n\t\t\tif (Array.isArray(extensionsPath) && extensionsPath.length) {\n\t\t\t\tvscode.window.showErrorMessage(err.message);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Migrate old configuration(string) for extensionsPath to new type(string[])\n * https://github.com/microsoft/vscode/issues/117517\n */\nexport function migrateEmmetExtensionsPath() {\n\t// Get the detail info of emmet.extensionsPath setting\n\tconst config = vscode.workspace.getConfiguration().inspect('emmet.extensionsPath');\n\n\t// Update Global setting if the value type is string or the value is null\n\tif (typeof config?.globalValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.globalValue], true);\n\t} else if (config?.globalValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [], true);\n\t}\n\t// Update Workspace setting if the value type is string or the value is null\n\tif (typeof config?.workspaceValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceValue], false);\n\t} else if (config?.workspaceValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [], false);\n\t}\n\t// Update WorkspaceFolder setting if the value type is string or the value is null\n\tif (typeof config?.workspaceFolderValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceFolderValue]);\n\t} else if (config?.workspaceFolderValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', []);\n\t}\n}\n\n/**\n * Mapping between languages that support Emmet and completion trigger characters\n */\nexport const LANGUAGE_MODES: { [id: string]: string[] } = {\n\t'html': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'jade': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'slim': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'haml': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'xml': ['.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'xsl': ['!', '.', '}', '*', '$', '/', ']', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'css': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'scss': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'sass': [':', '!', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'less': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'stylus': [':', '!', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'javascriptreact': ['!', '.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'typescriptreact': ['!', '.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n};\n\nexport function isStyleSheet(syntax: string): boolean {\n\tconst stylesheetSyntaxes = ['css', 'scss', 'sass', 'less', 'stylus'];\n\treturn stylesheetSyntaxes.includes(syntax);\n}\n\nexport function validate(allowStylesheet: boolean = true): boolean {\n\tconst editor = vscode.window.activeTextEditor;\n\tif (!editor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn false;\n\t}\n\tif (!allowStylesheet && isStyleSheet(editor.document.languageId)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function getMappingForIncludedLanguages(): Record<string, string> {\n\t// Explicitly map languages that have built-in grammar in VS Code to their parent language\n\t// to get emmet completion support\n\t// For other languages, users will have to use `emmet.includeLanguages` or\n\t// language specific extensions can provide emmet completion support\n\tconst MAPPED_MODES: Record<string, string> = {\n\t\t'handlebars': 'html',\n\t\t'php': 'html'\n\t};\n\n\tconst finalMappedModes: Record<string, string> = {};\n\tconst includeLanguagesConfig = vscode.workspace.getConfiguration('emmet').get<Record<string, string>>('includeLanguages');\n\tconst includeLanguages = Object.assign({}, MAPPED_MODES, includeLanguagesConfig ?? {});\n\tObject.keys(includeLanguages).forEach(syntax => {\n\t\tif (typeof includeLanguages[syntax] === 'string' && LANGUAGE_MODES[includeLanguages[syntax]]) {\n\t\t\tfinalMappedModes[syntax] = includeLanguages[syntax];\n\t\t}\n\t});\n\treturn finalMappedModes;\n}\n\n/**\n* Get the corresponding emmet mode for given vscode language mode\n* E.g.: jsx for typescriptreact/javascriptreact or pug for jade\n* If the language is not supported by emmet or has been excluded via `excludeLanguages` setting,\n* then nothing is returned\n*\n* @param excludedLanguages Array of language ids that user has chosen to exclude for emmet\n*/\nexport function getEmmetMode(language: string, mappedModes: Record<string, string>, excludedLanguages: string[]): string | undefined {\n\tif (!language || excludedLanguages.includes(language)) {\n\t\treturn;\n\t}\n\n\tif (language === 'jsx-tags') {\n\t\tlanguage = 'javascriptreact';\n\t}\n\n\tif (mappedModes[language]) {\n\t\tlanguage = mappedModes[language];\n\t}\n\n\tif (/\\b(typescriptreact|javascriptreact|jsx-tags)\\b/.test(language)) { // treat tsx like jsx\n\t\tlanguage = 'jsx';\n\t}\n\telse if (language === 'sass-indented') { // map sass-indented to sass\n\t\tlanguage = 'sass';\n\t}\n\telse if (language === 'jade' || language === 'pug') {\n\t\tlanguage = 'pug';\n\t}\n\n\tconst syntaxes = getSyntaxes();\n\tif (syntaxes.markup.includes(language) || syntaxes.stylesheet.includes(language)) {\n\t\treturn language;\n\t}\n\treturn;\n}\n\nconst closeBrace = 125;\nconst openBrace = 123;\nconst slash = 47;\nconst star = 42;\n\n/**\n * Traverse the given document backward & forward from given position\n * to find a complete ruleset, then parse just that to return a Stylesheet\n * @param document vscode.TextDocument\n * @param position vscode.Position\n */\nexport function parsePartialStylesheet(document: vscode.TextDocument, position: vscode.Position): FlatStylesheet | undefined {\n\tconst isCSS = document.languageId === 'css';\n\tconst positionOffset = document.offsetAt(position);\n\tlet startOffset = 0;\n\tlet endOffset = document.getText().length;\n\tconst limitCharacter = positionOffset - 5000;\n\tconst limitOffset = limitCharacter > 0 ? limitCharacter : startOffset;\n\tconst stream = new DocumentStreamReader(document, positionOffset);\n\n\tfunction findOpeningCommentBeforePosition(pos: number): number | undefined {\n\t\tconst text = document.getText().substring(0, pos);\n\t\tconst offset = text.lastIndexOf('/*');\n\t\tif (offset === -1) {\n\t\t\treturn;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tfunction findClosingCommentAfterPosition(pos: number): number | undefined {\n\t\tconst text = document.getText().substring(pos);\n\t\tlet offset = text.indexOf('*/');\n\t\tif (offset === -1) {\n\t\t\treturn;\n\t\t}\n\t\toffset += 2 + pos;\n\t\treturn offset;\n\t}\n\n\tfunction consumeLineCommentBackwards() {\n\t\tconst posLineNumber = document.positionAt(stream.pos).line;\n\t\tif (!isCSS && currentLine !== posLineNumber) {\n\t\t\tcurrentLine = posLineNumber;\n\t\t\tconst startLineComment = document.lineAt(currentLine).text.indexOf('//');\n\t\t\tif (startLineComment > -1) {\n\t\t\t\tstream.pos = document.offsetAt(new vscode.Position(currentLine, startLineComment));\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction consumeBlockCommentBackwards() {\n\t\tif (!stream.sof() && stream.peek() === slash) {\n\t\t\tif (stream.backUp(1) === star) {\n\t\t\t\tstream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset;\n\t\t\t} else {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction consumeCommentForwards() {\n\t\tif (stream.eat(slash)) {\n\t\t\tif (stream.eat(slash) && !isCSS) {\n\t\t\t\tconst posLineNumber = document.positionAt(stream.pos).line;\n\t\t\t\tstream.pos = document.offsetAt(new vscode.Position(posLineNumber + 1, 0));\n\t\t\t} else if (stream.eat(star)) {\n\t\t\t\tstream.pos = findClosingCommentAfterPosition(stream.pos) ?? endOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Go forward until we find a closing brace.\n\twhile (!stream.eof() && !stream.eat(closeBrace)) {\n\t\tif (stream.peek() === slash) {\n\t\t\tconsumeCommentForwards();\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\tif (!stream.eof()) {\n\t\tendOffset = stream.pos;\n\t}\n\n\tstream.pos = positionOffset;\n\tlet openBracesToFind = 1;\n\tlet currentLine = position.line;\n\tlet exit = false;\n\n\t// Go back until we found an opening brace. If we find a closing one, consume its pair and continue.\n\twhile (!exit && openBracesToFind > 0 && !stream.sof()) {\n\t\tconsumeLineCommentBackwards();\n\n\t\tswitch (stream.backUp(1)) {\n\t\t\tcase openBrace:\n\t\t\t\topenBracesToFind--;\n\t\t\t\tbreak;\n\t\t\tcase closeBrace:\n\t\t\t\tif (isCSS) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\tstartOffset = stream.pos;\n\t\t\t\t\texit = true;\n\t\t\t\t} else {\n\t\t\t\t\topenBracesToFind++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase slash:\n\t\t\t\tconsumeBlockCommentBackwards();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (position.line - document.positionAt(stream.pos).line > 100\n\t\t\t|| stream.pos <= limitOffset) {\n\t\t\texit = true;\n\t\t}\n\t}\n\n\t// We are at an opening brace. We need to include its selector.\n\tcurrentLine = document.positionAt(stream.pos).line;\n\topenBracesToFind = 0;\n\tlet foundSelector = false;\n\twhile (!exit && !stream.sof() && !foundSelector && openBracesToFind >= 0) {\n\t\tconsumeLineCommentBackwards();\n\n\t\tconst ch = stream.backUp(1);\n\t\tif (/\\s/.test(String.fromCharCode(ch))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tswitch (ch) {\n\t\t\tcase slash:\n\t\t\t\tconsumeBlockCommentBackwards();\n\t\t\t\tbreak;\n\t\t\tcase closeBrace:\n\t\t\t\topenBracesToFind++;\n\t\t\t\tbreak;\n\t\t\tcase openBrace:\n\t\t\t\topenBracesToFind--;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (!openBracesToFind) {\n\t\t\t\t\tfoundSelector = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!stream.sof() && foundSelector) {\n\t\t\tstartOffset = stream.pos;\n\t\t}\n\t}\n\n\ttry {\n\t\tconst buffer = ' '.repeat(startOffset) + document.getText().substring(startOffset, endOffset);\n\t\treturn parseStylesheet(buffer);\n\t} catch (e) {\n\t\treturn;\n\t}\n}\n\n/**\n * Returns node corresponding to given position in the given root node\n */\nexport function getFlatNode(root: FlatNode | undefined, offset: number, includeNodeBoundary: boolean): FlatNode | undefined {\n\tif (!root) {\n\t\treturn;\n\t}\n\n\tfunction getFlatNodeChild(child: FlatNode | undefined): FlatNode | undefined {\n\t\tif (!child) {\n\t\t\treturn;\n\t\t}\n\t\tconst nodeStart = child.start;\n\t\tconst nodeEnd = child.end;\n\t\tif ((nodeStart < offset && nodeEnd > offset)\n\t\t\t|| (includeNodeBoundary && nodeStart <= offset && nodeEnd >= offset)) {\n\t\t\treturn getFlatNodeChildren(child.children) ?? child;\n\t\t}\n\t\telse if ('close' in child) {\n\t\t\t// We have an HTML node in this case.\n\t\t\t// In case this node is an invalid unpaired HTML node,\n\t\t\t// we still want to search its children\n\t\t\tconst htmlChild = <HtmlFlatNode>child;\n\t\t\tif (htmlChild.open && !htmlChild.close) {\n\t\t\t\treturn getFlatNodeChildren(htmlChild.children);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tfunction getFlatNodeChildren(children: FlatNode[]): FlatNode | undefined {\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst foundChild = getFlatNodeChild(children[i]);\n\t\t\tif (foundChild) {\n\t\t\t\treturn foundChild;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\treturn getFlatNodeChildren(root.children);\n}\n\nexport const allowedMimeTypesInScriptTag = ['text/html', 'text/plain', 'text/x-template', 'text/template', 'text/ng-template'];\n\n/**\n * Finds the HTML node within an HTML document at a given position\n * If position is inside a script tag of type template, then it will be parsed to find the inner HTML node as well\n */\nexport function getHtmlFlatNode(documentText: string, root: FlatNode | undefined, offset: number, includeNodeBoundary: boolean): HtmlFlatNode | undefined {\n\tlet currentNode: HtmlFlatNode | undefined = <HtmlFlatNode | undefined>getFlatNode(root, offset, includeNodeBoundary);\n\tif (!currentNode) { return; }\n\n\t// If the currentNode is a script one, first set up its subtree and then find HTML node.\n\tif (currentNode.name === 'script' && currentNode.children.length === 0) {\n\t\tconst scriptNodeBody = setupScriptNodeSubtree(documentText, currentNode);\n\t\tif (scriptNodeBody) {\n\t\t\tcurrentNode = getHtmlFlatNode(scriptNodeBody, currentNode, offset, includeNodeBoundary) ?? currentNode;\n\t\t}\n\t}\n\telse if (currentNode.type === 'cdata') {\n\t\tconst cdataBody = setupCdataNodeSubtree(documentText, currentNode);\n\t\tcurrentNode = getHtmlFlatNode(cdataBody, currentNode, offset, includeNodeBoundary) ?? currentNode;\n\t}\n\treturn currentNode;\n}\n\nexport function setupScriptNodeSubtree(documentText: string, scriptNode: HtmlFlatNode): string {\n\tconst isTemplateScript = scriptNode.name === 'script' &&\n\t\t(scriptNode.attributes &&\n\t\t\tscriptNode.attributes.some(x => x.name.toString() === 'type'\n\t\t\t\t&& allowedMimeTypesInScriptTag.includes(x.value.toString())));\n\tif (isTemplateScript\n\t\t&& scriptNode.open) {\n\t\t// blank out the rest of the document and generate the subtree.\n\t\tconst beforePadding = ' '.repeat(scriptNode.open.end);\n\t\tconst endToUse = scriptNode.close ? scriptNode.close.start : scriptNode.end;\n\t\tconst scriptBodyText = beforePadding + documentText.substring(scriptNode.open.end, endToUse);\n\t\tconst innerRoot: HtmlFlatNode = parse(scriptBodyText);\n\t\tinnerRoot.children.forEach(child => {\n\t\t\tscriptNode.children.push(child);\n\t\t\tchild.parent = scriptNode;\n\t\t});\n\t\treturn scriptBodyText;\n\t}\n\treturn '';\n}\n\nexport function setupCdataNodeSubtree(documentText: string, cdataNode: HtmlFlatNode): string {\n\t// blank out the rest of the document and generate the subtree.\n\tconst cdataStart = '<![CDATA[';\n\tconst cdataEnd = ']]>';\n\tconst startToUse = cdataNode.start + cdataStart.length;\n\tconst endToUse = cdataNode.end - cdataEnd.length;\n\tconst beforePadding = ' '.repeat(startToUse);\n\tconst cdataBody = beforePadding + documentText.substring(startToUse, endToUse);\n\tconst innerRoot: HtmlFlatNode = parse(cdataBody);\n\tinnerRoot.children.forEach(child => {\n\t\tcdataNode.children.push(child);\n\t\tchild.parent = cdataNode;\n\t});\n\treturn cdataBody;\n}\n\nexport function isOffsetInsideOpenOrCloseTag(node: FlatNode, offset: number): boolean {\n\tconst htmlNode = node as HtmlFlatNode;\n\tif ((htmlNode.open && offset > htmlNode.open.start && offset < htmlNode.open.end)\n\t\t|| (htmlNode.close && offset > htmlNode.close.start && offset < htmlNode.close.end)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function offsetRangeToSelection(document: vscode.TextDocument, start: number, end: number): vscode.Selection {\n\tconst startPos = document.positionAt(start);\n\tconst endPos = document.positionAt(end);\n\treturn new vscode.Selection(startPos, endPos);\n}\n\nexport function offsetRangeToVsRange(document: vscode.TextDocument, start: number, end: number): vscode.Range {\n\tconst startPos = document.positionAt(start);\n\tconst endPos = document.positionAt(end);\n\treturn new vscode.Range(startPos, endPos);\n}\n\n/**\n * Returns the deepest non comment node under given node\n */\nexport function getDeepestFlatNode(node: FlatNode | undefined): FlatNode | undefined {\n\tif (!node || !node.children || node.children.length === 0 || !node.children.find(x => x.type !== 'comment')) {\n\t\treturn node;\n\t}\n\tfor (let i = node.children.length - 1; i >= 0; i--) {\n\t\tif (node.children[i].type !== 'comment') {\n\t\t\treturn getDeepestFlatNode(node.children[i]);\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function findNextWord(propertyValue: string, pos: number): [number | undefined, number | undefined] {\n\n\tlet foundSpace = pos === -1;\n\tlet foundStart = false;\n\tlet foundEnd = false;\n\n\tlet newSelectionStart;\n\tlet newSelectionEnd;\n\twhile (pos < propertyValue.length - 1) {\n\t\tpos++;\n\t\tif (!foundSpace) {\n\t\t\tif (propertyValue[pos] === ' ') {\n\t\t\t\tfoundSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (foundSpace && !foundStart && propertyValue[pos] === ' ') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foundStart) {\n\t\t\tnewSelectionStart = pos;\n\t\t\tfoundStart = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (propertyValue[pos] === ' ') {\n\t\t\tnewSelectionEnd = pos;\n\t\t\tfoundEnd = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (foundStart && !foundEnd) {\n\t\tnewSelectionEnd = propertyValue.length;\n\t}\n\n\treturn [newSelectionStart, newSelectionEnd];\n}\n\nexport function findPrevWord(propertyValue: string, pos: number): [number | undefined, number | undefined] {\n\n\tlet foundSpace = pos === propertyValue.length;\n\tlet foundStart = false;\n\tlet foundEnd = false;\n\n\tlet newSelectionStart;\n\tlet newSelectionEnd;\n\twhile (pos > -1) {\n\t\tpos--;\n\t\tif (!foundSpace) {\n\t\t\tif (propertyValue[pos] === ' ') {\n\t\t\t\tfoundSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (foundSpace && !foundEnd && propertyValue[pos] === ' ') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foundEnd) {\n\t\t\tnewSelectionEnd = pos + 1;\n\t\t\tfoundEnd = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (propertyValue[pos] === ' ') {\n\t\t\tnewSelectionStart = pos + 1;\n\t\t\tfoundStart = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (foundEnd && !foundStart) {\n\t\tnewSelectionStart = 0;\n\t}\n\n\treturn [newSelectionStart, newSelectionEnd];\n}\n\nexport function getNodesInBetween(node1: FlatNode, node2: FlatNode): FlatNode[] {\n\t// Same node\n\tif (sameNodes(node1, node2)) {\n\t\treturn [node1];\n\t}\n\n\t// Not siblings\n\tif (!sameNodes(node1.parent, node2.parent)) {\n\t\t// node2 is ancestor of node1\n\t\tif (node2.start < node1.start) {\n\t\t\treturn [node2];\n\t\t}\n\n\t\t// node1 is ancestor of node2\n\t\tif (node2.start < node1.end) {\n\t\t\treturn [node1];\n\t\t}\n\n\t\t// Get the highest ancestor of node1 that should be commented\n\t\twhile (node1.parent && node1.parent.end < node2.start) {\n\t\t\tnode1 = node1.parent;\n\t\t}\n\n\t\t// Get the highest ancestor of node2 that should be commented\n\t\twhile (node2.parent && node2.parent.start > node1.start) {\n\t\t\tnode2 = node2.parent;\n\t\t}\n\t}\n\n\tconst siblings: FlatNode[] = [];\n\tlet currentNode: FlatNode | undefined = node1;\n\tconst position = node2.end;\n\twhile (currentNode && position > currentNode.start) {\n\t\tsiblings.push(currentNode);\n\t\tcurrentNode = currentNode.nextSibling;\n\t}\n\treturn siblings;\n}\n\nexport function sameNodes(node1: FlatNode | undefined, node2: FlatNode | undefined): boolean {\n\t// return true if they're both undefined\n\tif (!node1 && !node2) {\n\t\treturn true;\n\t}\n\t// return false if only one of them is undefined\n\tif (!node1 || !node2) {\n\t\treturn false;\n\t}\n\treturn node1.start === node2.start && node1.end === node2.end;\n}\n\nexport function getEmmetConfiguration(syntax: string) {\n\tconst emmetConfig = vscode.workspace.getConfiguration('emmet');\n\tconst syntaxProfiles = Object.assign({}, emmetConfig['syntaxProfiles'] || {});\n\tconst preferences = Object.assign({}, emmetConfig['preferences'] || {});\n\t// jsx, xml and xsl syntaxes need to have self closing tags unless otherwise configured by user\n\tif (syntax === 'jsx' || syntax === 'xml' || syntax === 'xsl') {\n\t\tsyntaxProfiles[syntax] = syntaxProfiles[syntax] || {};\n\t\tif (typeof syntaxProfiles[syntax] === 'object'\n\t\t\t&& !syntaxProfiles[syntax].hasOwnProperty('self_closing_tag') // Old Emmet format\n\t\t\t&& !syntaxProfiles[syntax].hasOwnProperty('selfClosingStyle') // Emmet 2.0 format\n\t\t) {\n\t\t\tsyntaxProfiles[syntax] = {\n\t\t\t\t...syntaxProfiles[syntax],\n\t\t\t\tselfClosingStyle: syntax === 'jsx' ? 'xhtml' : 'xml'\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tpreferences,\n\t\tshowExpandedAbbreviation: emmetConfig['showExpandedAbbreviation'],\n\t\tshowAbbreviationSuggestions: emmetConfig['showAbbreviationSuggestions'],\n\t\tsyntaxProfiles,\n\t\tvariables: emmetConfig['variables'],\n\t\texcludeLanguages: emmetConfig['excludeLanguages'],\n\t\tshowSuggestionsAsSnippets: emmetConfig['showSuggestionsAsSnippets']\n\t};\n}\n\n/**\n * Itereates by each child, as well as nested child's children, in their order\n * and invokes `fn` for each. If `fn` function returns `false`, iteration stops\n */\nexport function iterateCSSToken(token: FlatCssToken, fn: (x: any) => any): boolean {\n\tfor (let i = 0, il = token.size; i < il; i++) {\n\t\tif (fn(token.item(i)) === false || iterateCSSToken(token.item(i), fn) === false) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns `name` CSS property from given `rule`\n */\nexport function getCssPropertyFromRule(rule: FlatRule, name: string): FlatProperty | undefined {\n\treturn rule.children.find(node => node.type === 'property' && node.name === name) as FlatProperty;\n}\n\n/**\n * Returns css property under caret in given editor or `null` if such node cannot\n * be found\n */\nexport function getCssPropertyFromDocument(editor: vscode.TextEditor, position: vscode.Position): FlatProperty | null {\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tconst offset = document.offsetAt(position);\n\tconst node = getFlatNode(rootNode, offset, true);\n\n\tif (isStyleSheet(editor.document.languageId)) {\n\t\treturn node && node.type === 'property' ? <FlatProperty>node : null;\n\t}\n\n\tconst htmlNode = <HtmlFlatNode>node;\n\tif (htmlNode\n\t\t&& htmlNode.name === 'style'\n\t\t&& htmlNode.open && htmlNode.close\n\t\t&& htmlNode.open.end < offset\n\t\t&& htmlNode.close.start > offset) {\n\t\tconst buffer = ' '.repeat(htmlNode.start) +\n\t\t\tdocument.getText().substring(htmlNode.start, htmlNode.end);\n\t\tconst innerRootNode = parseStylesheet(buffer);\n\t\tconst innerNode = getFlatNode(innerRootNode, offset, true);\n\t\treturn (innerNode && innerNode.type === 'property') ? <FlatProperty>innerNode : null;\n\t}\n\n\treturn null;\n}\n\n\nexport function getEmbeddedCssNodeIfAny(document: vscode.TextDocument, currentNode: FlatNode | undefined, position: vscode.Position): FlatNode | undefined {\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\tconst currentHtmlNode = <HtmlFlatNode>currentNode;\n\tif (currentHtmlNode && currentHtmlNode.open && currentHtmlNode.close) {\n\t\tconst offset = document.offsetAt(position);\n\t\tif (currentHtmlNode.open.end < offset && offset <= currentHtmlNode.close.start) {\n\t\t\tif (currentHtmlNode.name === 'style') {\n\t\t\t\tconst buffer = ' '.repeat(currentHtmlNode.open.end) + document.getText().substring(currentHtmlNode.open.end, currentHtmlNode.close.start);\n\t\t\t\treturn parseStylesheet(buffer);\n\t\t\t}\n\t\t}\n\t}\n\treturn;\n}\n\nexport function isStyleAttribute(currentNode: FlatNode | undefined, offset: number): boolean {\n\tif (!currentNode) {\n\t\treturn false;\n\t}\n\tconst currentHtmlNode = <HtmlFlatNode>currentNode;\n\tconst index = (currentHtmlNode.attributes || []).findIndex(x => x.name.toString() === 'style');\n\tif (index === -1) {\n\t\treturn false;\n\t}\n\tconst styleAttribute = currentHtmlNode.attributes[index];\n\treturn offset >= styleAttribute.value.start && offset <= styleAttribute.value.end;\n}\n\nexport function isNumber(obj: any): obj is number {\n\treturn typeof obj === 'number';\n}\n\nexport function toLSTextDocument(doc: vscode.TextDocument): LSTextDocument {\n\treturn LSTextDocument.create(doc.uri.toString(), doc.languageId, doc.version, doc.getText());\n}\n\nexport function getPathBaseName(path: string): string {\n\tconst pathAfterSlashSplit = path.split('/').pop();\n\tconst pathAfterBackslashSplit = pathAfterSlashSplit ? pathAfterSlashSplit.split('\\\\').pop() : '';\n\treturn pathAfterBackslashSplit ?? '';\n}\n\nexport function getSyntaxes() {\n\t/**\n\t * List of all known syntaxes, from emmetio/emmet\n\t */\n\treturn {\n\t\tmarkup: ['html', 'xml', 'xsl', 'jsx', 'js', 'pug', 'slim', 'haml'],\n\t\tstylesheet: ['css', 'sass', 'scss', 'less', 'sss', 'stylus']\n\t};\n}\n", "import StreamReader from '@emmetio/stream-reader';\nimport { eatPair, eatQuoted, isAlphaNumeric, isQuote, isSpace } from '@emmetio/stream-reader-utils';\n\nclass Node {\n\tconstructor(stream, type, open, close) {\n\t\tthis.stream = stream;\n\t\tthis.type = type;\n\t\tthis.open = open;\n\t\tthis.close = close;\n\n\t\tthis.children = [];\n\t\tthis.parent = null;\n\t}\n\n\t/**\n\t * Returns node name\n\t * @return {String}\n\t */\n\tget name() {\n\t\tif (this.type === 'tag' && this.open) {\n\t\t\treturn this.open && this.open.name && this.open.name.value;\n\t\t}\n\n\t\treturn '#' + this.type;\n\t}\n\n\t/**\n\t * Returns attributes of current node\n\t * @return {Array}\n\t */\n\tget attributes() {\n\t\treturn this.open && this.open.attributes;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\treturn this.open && this.open.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\treturn this.close ? this.close.end : this.open && this.open.end;\n\t}\n\n\tget firstChild() {\n\t\treturn this.children[0];\n\t}\n\n\tget nextSibling() {\n\t\tconst ix = this.getIndex();\n\t\treturn ix !== -1 ? this.parent.children[ix + 1] : null;\n\t}\n\n\tget previousSibling() {\n\t\tconst ix = this.getIndex();\n\t\treturn ix !== -1 ? this.parent.children[ix - 1] : null;\n\t}\n\n\t/**\n\t * Returns current element\u2019s index in parent list of child nodes\n\t * @return {Number}\n\t */\n\tgetIndex() {\n\t\treturn this.parent ? this.parent.children.indexOf(this) : -1;\n\t}\n\n\t/**\n\t * Adds given node as a child\n\t * @param {Node} node\n\t * @return {Node} Current node\n\t */\n\taddChild(node) {\n\t\tthis.removeChild(node);\n\t\tthis.children.push(node);\n\t\tnode.parent = this;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes given node from current node\u2019s child list\n\t * @param {Node} node\n\t * @return {Node} Current node\n\t */\n\tremoveChild(node) {\n\t\tconst ix = this.children.indexOf(node);\n\t\tif (ix !== -1) {\n\t\t\tthis.children.splice(ix, 1);\n\t\t\tnode.parent = null;\n\t\t}\n\n\t\treturn this;\n\t}\n}\n\n/**\n * A token factory method\n * @param {StreamReader} stream\n * @param {Point|Function} start Tokens\u2019 start location or stream consumer\n * @param {Point} [end] Tokens\u2019 end location\n * @return {Token}\n */\nvar token = function(stream, start, end) {\n\treturn typeof start === 'function'\n\t\t? eatToken(stream, start)\n\t\t: new Token(stream, start, end);\n};\n\n/**\n * Consumes characters from given stream that matches `fn` call and returns it\n * as token, if consumed\n * @param {StreamReader} stream\n * @param {Function} test\n * @return {Token}\n */\nfunction eatToken(stream, test) {\n\tconst start = stream.pos;\n\tif (stream.eatWhile(test)) {\n\t\treturn new Token(stream, start, stream.pos);\n\t}\n\n\tstream.pos = start;\n}\n\n/**\n * A structure describing text fragment in content stream\n */\nclass Token {\n\t/**\n\t * @param {ContentStreamReader} stream\n\t * @param {Point} start Tokens\u2019 start location in content stream\n\t * @param {Point} end Tokens\u2019 end location in content stream\n\t */\n\tconstructor(stream, start, end) {\n\t\tthis.stream = stream;\n\t\tthis.start = start != null ? start : stream.start;\n\t\tthis.end = end != null ? end : stream.pos;\n\t\tthis._value = null;\n\t}\n\n\t/**\n\t * Returns token textual value\n\t * NB implemented as getter to reduce unnecessary memory allocations for\n\t * strings that not required\n\t * @return {String}\n\t */\n\tget value() {\n\t\tif (this._value === null) {\n\t\t\tconst start = this.stream.start;\n\t\t\tconst end = this.stream.pos;\n\n\t\t\tthis.stream.start = this.start;\n\t\t\tthis.stream.pos = this.end;\n\t\t\tthis._value = this.stream.current();\n\n\t\t\tthis.stream.start = start;\n\t\t\tthis.stream.pos = end;\n\t\t}\n\n\t\treturn this._value;\n\t}\n\n\ttoString() {\n\t\treturn this.value;\n\t}\n\n\tvalueOf() {\n\t\treturn `${this.value} [${this.start}; ${this.end}]`;\n\t}\n}\n\nconst LANGLE = 60;\nconst RANGLE = 62; // < and >\nconst LSQUARE = 91;\nconst RSQUARE = 93; // [ and ]\nconst LROUND = 40;\nconst RROUND = 41; // ( and )\nconst LCURLY = 123;\nconst RCURLY = 125; // { and }\n\nconst opt = { throws: true };\n\n/**\n * Consumes paired tokens (like `[` and `]`) with respect of nesting and embedded\n * quoted values\n * @param {StreamReader} stream\n * @return {Token} A token with consumed paired character\n */\nvar eatPaired = function(stream) {\n\tconst start = stream.pos;\n\tconst consumed = eatPair(stream, LANGLE, RANGLE, opt)\n\t\t|| eatPair(stream, LSQUARE, RSQUARE, opt)\n\t\t|| eatPair(stream, LROUND, RROUND, opt)\n\t\t|| eatPair(stream, LCURLY, RCURLY, opt);\n\n\tif (consumed) {\n\t\treturn token(stream, start);\n\t}\n};\n\nconst SLASH$1 = 47; // /\nconst EQUALS = 61; // =\nconst RIGHT_ANGLE$1 = 62; // >\n\n/**\n * Consumes attributes from given stream\n * @param {StreamReader} stream\n * @return {Array} Array of consumed attributes\n */\nvar eatAttributes = function(stream) {\n\tconst result = [];\n\tlet name, value, attr;\n\n\twhile (!stream.eof()) {\n\t\tstream.eatWhile(isSpace);\n\t\tattr = { start: stream.pos };\n\n\t\t// A name could be a regular name or expression:\n\t\t// React-style \u2013 <div {...props}>\n\t\t// Angular-style \u2013 <div [ng-for]>\n\t\tif (attr.name = eatAttributeName(stream)) {\n\t\t\t// Consumed attribute name. Can be an attribute with name\n\t\t\t// or boolean attribute. The value can be React-like expression\n\t\t\tif (stream.eat(EQUALS)) {\n\t\t\t\tattr.value = eatAttributeValue(stream);\n\t\t\t} else {\n\t\t\t\tattr.boolean = true;\n\t\t\t}\n\t\t\tattr.end = stream.pos;\n\t\t\tresult.push(attr);\n\t\t} else if (isTerminator(stream.peek())) {\n\t\t\t// look for tag terminator in order to skip any other possible characters\n\t\t\t// (maybe junk)\n\t\t\tbreak;\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\treturn result;\n};\n\n/**\n * Consumes attribute name from current location\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatAttributeName(stream) {\n\treturn eatPaired(stream) || token(stream, isAttributeName);\n}\n\n/**\n * Consumes attribute value from given location\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatAttributeValue(stream) {\n\tconst start = stream.pos;\n\tif (eatQuoted(stream)) {\n\t\t// Should return token that points to unquoted value.\n\t\t// Use stream readers\u2019 public API to traverse instead of direct\n\t\t// manipulation\n\t\tconst current = stream.pos;\n\t\tlet valueStart, valueEnd;\n\n\t\tstream.pos = start;\n\t\tstream.next();\n\t\tvalueStart = stream.start = stream.pos;\n\n\t\tstream.pos = current;\n\t\tstream.backUp(1);\n\t\tvalueEnd = stream.pos;\n\n\t\tconst result = token(stream, valueStart, valueEnd);\n\t\tstream.pos = current;\n\t\treturn result;\n\t}\n\n\treturn eatPaired(stream) || eatUnquoted(stream);\n}\n\n/**\n * Check if given code belongs to attribute name.\n * NB some custom HTML variations allow non-default values in name, like `*ngFor`\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isAttributeName(code) {\n\treturn code !== EQUALS && !isTerminator(code) && !isSpace(code);\n}\n\n/**\n * Check if given code is tag terminator\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isTerminator(code) {\n\treturn code === RIGHT_ANGLE$1 || code === SLASH$1;\n}\n\n/**\n * Eats unquoted value from stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatUnquoted(stream) {\n\treturn token(stream, isUnquoted);\n}\n\n/**\n * Check if given character code is valid unquoted value\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isUnquoted(code) {\n\treturn !isNaN(code) && !isQuote(code) && !isSpace(code) && !isTerminator(code);\n}\n\nconst DASH = 45; // -\nconst DOT = 46; // .\nconst SLASH = 47; // /\nconst COLON = 58; // :\nconst LEFT_ANGLE = 60; // <\nconst RIGHT_ANGLE = 62; // >\nconst UNDERSCORE = 95; // _\n\n/**\n * Parses tag definition (open or close tag) from given stream state\n * @param {StreamReader} stream Content stream reader\n * @return {Object}\n */\nvar tag = function(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(LEFT_ANGLE)) {\n\t\tconst model = { type: stream.eat(SLASH) ? 'close' : 'open' };\n\n\t\tif (model.name = eatTagName(stream)) {\n\t\t\tif (model.type !== 'close') {\n\t\t\t\tmodel.attributes = eatAttributes(stream);\n\t\t\t\tstream.eatWhile(isSpace);\n\t\t\t\tmodel.selfClosing = stream.eat(SLASH);\n\t\t\t}\n\n\t\t\tif (stream.eat(RIGHT_ANGLE)) {\n\t\t\t\t// tag properly closed\n\t\t\t\treturn Object.assign(token(stream, start), model);\n\t\t\t}\n\t\t}\n\t}\n\n\t// invalid tag, revert to original position\n\tstream.pos = start;\n\treturn null;\n};\n\n/**\n * Eats HTML identifier (tag or attribute name) from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatTagName(stream) {\n\treturn token(stream, isTagName);\n}\n\n/**\n * Check if given character code can be used as HTML/XML tag name\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isTagName(code) {\n\treturn isAlphaNumeric(code)\n\t\t|| code === COLON // colon is used for namespaces\n\t\t|| code === DOT // in rare cases declarative tag names may have dots in names\n\t\t|| code === DASH\n\t\t|| code === UNDERSCORE;\n}\n\n/**\n * Eats array of character codes from given stream\n * @param {StreamReader} stream\n * @param {Number[]} codes Array of character codes\n * @return {Boolean}\n */\nfunction eatArray(stream, codes) {\n\tconst start = stream.pos;\n\n\tfor (let i = 0; i < codes.length; i++) {\n\t\tif (!stream.eat(codes[i])) {\n\t\t\tstream.pos = start;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tstream.start = start;\n\treturn true;\n}\n\n/**\n * Consumes section from given string which starts with `open` character codes\n * and ends with `close` character codes\n * @param {StreamReader} stream\n * @param {Number[]} open\n * @param {Number[]} close\n * @return {Boolean} Returns `true` if section was consumed\n */\nfunction eatSection(stream, open, close, allowUnclosed) {\n\tconst start = stream.pos;\n\tif (eatArray(stream, open)) {\n\t\t// consumed `<!--`, read next until we find ending part or reach the end of input\n\t\twhile (!stream.eof()) {\n\t\t\tif (eatArray(stream, close)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tstream.next();\n\t\t}\n\n\t\t// unclosed section is allowed\n\t\tif (allowUnclosed) {\n\t\t\treturn true;\n\t\t}\n\n\t\tstream.pos = start;\n\t\treturn false;\n\t}\n\n\t// unable to find section, revert to initial position\n\tstream.pos = start;\n\treturn null;\n}\n\n/**\n * Converts given string into array of character codes\n * @param {String} str\n * @return {Number[]}\n */\nfunction toCharCodes(str) {\n\treturn str.split('').map(ch => ch.charCodeAt(0));\n}\n\nconst open = toCharCodes('<!--');\nconst close = toCharCodes('-->');\n\n/**\n * Consumes HTML comment from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nvar comment = function(stream) {\n\tconst start = stream.pos;\n\tif (eatSection(stream, open, close, true)) {\n\t\tconst result = token(stream, start);\n\t\tresult.type = 'comment';\n\t\treturn result;\n\t}\n\n\treturn null;\n};\n\nconst open$1 = toCharCodes('<![CDATA[');\nconst close$1 = toCharCodes(']]>');\n\n/**\n * Consumes CDATA from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nvar cdata = function(stream) {\n\tconst start = stream.pos;\n\tif (eatSection(stream, open$1, close$1, true)) {\n\t\tconst result = token(stream, start);\n\t\tresult.type = 'cdata';\n\t\treturn result;\n\t}\n\n\treturn null;\n};\n\nconst defaultOptions = {\n\t/**\n\t * Expect XML content in searching content. It alters how should-be-empty\n\t * elements are treated: for example, in XML mode parser will try to locate\n\t * closing pair for `<br>` tag\n\t * @type {Boolean}\n\t */\n\txml: false,\n\n\tspecial: ['script', 'style'],\n\n\t/**\n\t * List of elements that should be treated as empty (e.g. without closing tag)\n\t * in non-XML syntax\n\t * @type {Array}\n\t */\n\tempty: ['img', 'meta', 'link', 'br', 'base', 'hr', 'area', 'wbr','col', 'embed', 'input', 'param', 'source', 'track']\n};\n\n/**\n * Parses given content into a DOM-like structure\n * @param {String|StreamReader} content\n * @param {Object} options\n * @return {Node}\n */\nfunction parse(content, options) {\n\toptions = Object.assign({}, defaultOptions, options);\n\tconst stream = typeof content === 'string'\n\t\t? new StreamReader(content)\n\t\t: content;\n\n\tconst root = new Node(stream, 'root');\n\tconst empty = new Set(options.empty);\n\tconst special = options.special.reduce(\n\t\t(map, name) => map.set(name, toCharCodes(`</${name}>`)), new Map());\n\tconst isEmpty = (token, name) =>\n\t\ttoken.selfClosing || (!options.xml && empty.has(name));\n\n\tlet m, node, name, stack = [root];\n\n\twhile (!stream.eof()) {\n\t\tif (m = match(stream)) {\n\t\t\tname = getName(m);\n\n\t\t\tif (m.type === 'open') {\n\t\t\t\t// opening tag\n\t\t\t\tnode = new Node(stream, 'tag', m);\n\t\t\t\tlast(stack).addChild(node);\n\t\t\t\tif (special.has(name)) {\n\t\t\t\t\tnode.close = consumeSpecial(stream, special.get(name));\n\t\t\t\t} else if (!isEmpty(m, name)) {\n\t\t\t\t\tstack.push(node);\n\t\t\t\t}\n\t\t\t} else if (m.type === 'close') {\n\t\t\t\t// closing tag, find it\u2019s matching opening tag\n\t\t\t\tfor (let i = stack.length - 1; i > 0; i--) {\n\t\t\t\t\tif (stack[i].name.toLowerCase() === name) {\n\t\t\t\t\t\tstack[i].close = m;\n\t\t\t\t\t\tstack = stack.slice(0, i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlast(stack).addChild(new Node(stream, m.type, m));\n\t\t\t}\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\treturn root;\n}\n\n/**\n * Matches known token in current state of given stream\n * @param {ContentStreamReader} stream\n * @return {Token}\n */\nfunction match(stream) {\n\t// fast-path optimization: check for `<` code\n\tif (stream.peek() === 60 /* < */) {\n\t\treturn comment(stream) || cdata(stream) || tag(stream);\n\t}\n}\n\n/**\n * @param {StreamReader} stream\n * @param {Number[]} codes\n * @return {Token}\n */\nfunction consumeSpecial(stream, codes) {\n\tconst start = stream.pos;\n\tlet m;\n\n\twhile (!stream.eof()) {\n\t\tif (eatArray(stream, codes)) {\n\t\t\tstream.pos = stream.start;\n\t\t\treturn tag(stream);\n\t\t}\n\t\tstream.next();\n\t}\n\n\tstream.pos = start;\n\treturn null;\n}\n\n/**\n * Returns name of given matched token\n * @param {Token} tag\n * @return {String}\n */\nfunction getName(tag$$1) {\n\treturn tag$$1.name ? tag$$1.name.value.toLowerCase() : `#${tag$$1.type}`;\n}\n\nfunction last(arr) {\n\treturn arr[arr.length - 1];\n}\n\nexport { defaultOptions, match };export default parse;\n", "/**\n * A streaming, character code-based string reader\n */\nclass StreamReader {\n\tconstructor(string, start, end) {\n\t\tif (end == null && typeof string === 'string') {\n\t\t\tend = string.length;\n\t\t}\n\n\t\tthis.string = string;\n\t\tthis.pos = this.start = start || 0;\n\t\tthis.end = end;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the end of the file.\n\t * @returns {Boolean}\n\t */\n\teof() {\n\t\treturn this.pos >= this.end;\n\t}\n\n\t/**\n\t * Creates a new stream instance which is limited to given `start` and `end`\n\t * range. E.g. its `eof()` method will look at `end` property, not actual\n\t * stream end\n\t * @param {Point} start\n\t * @param {Point} end\n\t * @return {StreamReader}\n\t */\n\tlimit(start, end) {\n\t\treturn new this.constructor(this.string, start, end);\n\t}\n\n\t/**\n\t * Returns the next character code in the stream without advancing it.\n\t * Will return NaN at the end of the file.\n\t * @returns {Number}\n\t */\n\tpeek() {\n\t\treturn this.string.charCodeAt(this.pos);\n\t}\n\n\t/**\n\t * Returns the next character in the stream and advances it.\n\t * Also returns <code>undefined</code> when no more characters are available.\n\t * @returns {Number}\n\t */\n\tnext() {\n\t\tif (this.pos < this.string.length) {\n\t\t\treturn this.string.charCodeAt(this.pos++);\n\t\t}\n\t}\n\n\t/**\n\t * `match` can be a character code or a function that takes a character code\n\t * and returns a boolean. If the next character in the stream 'matches'\n\t * the given argument, it is consumed and returned.\n\t * Otherwise, `false` is returned.\n\t * @param {Number|Function} match\n\t * @returns {Boolean}\n\t */\n\teat(match) {\n\t\tconst ch = this.peek();\n\t\tconst ok = typeof match === 'function' ? match(ch) : ch === match;\n\n\t\tif (ok) {\n\t\t\tthis.next();\n\t\t}\n\n\t\treturn ok;\n\t}\n\n\t/**\n\t * Repeatedly calls <code>eat</code> with the given argument, until it\n\t * fails. Returns <code>true</code> if any characters were eaten.\n\t * @param {Object} match\n\t * @returns {Boolean}\n\t */\n\teatWhile(match) {\n\t\tconst start = this.pos;\n\t\twhile (!this.eof() && this.eat(match)) {}\n\t\treturn this.pos !== start;\n\t}\n\n\t/**\n\t * Backs up the stream n characters. Backing it up further than the\n\t * start of the current token will cause things to break, so be careful.\n\t * @param {Number} n\n\t */\n\tbackUp(n) {\n\t\tthis.pos -= (n || 1);\n\t}\n\n\t/**\n\t * Get the string between the start of the current token and the\n\t * current stream position.\n\t * @returns {String}\n\t */\n\tcurrent() {\n\t\treturn this.substring(this.start, this.pos);\n\t}\n\n\t/**\n\t * Returns substring for given range\n\t * @param {Number} start\n\t * @param {Number} [end]\n\t * @return {String}\n\t */\n\tsubstring(start, end) {\n\t\treturn this.string.slice(start, end);\n\t}\n\n\t/**\n\t * Creates error object with current stream state\n\t * @param {String} message\n\t * @return {Error}\n\t */\n\terror(message) {\n\t\tconst err = new Error(`${message} at char ${this.pos + 1}`);\n\t\terr.originalMessage = message;\n\t\terr.pos = this.pos;\n\t\terr.string = this.string;\n\t\treturn err;\n\t}\n}\n\nexport default StreamReader;\n", "/**\n * Methods for consuming quoted values\n */\n\nconst SINGLE_QUOTE = 39; // '\nconst DOUBLE_QUOTE = 34; // \"\n\nconst defaultOptions = {\n\tescape: 92, // \\ character\n\tthrows: false\n};\n\n/**\n * Consumes 'single' or \"double\"-quoted string from given string, if possible\n * @param {StreamReader} stream\n * @param {Number} options.escape A character code of quote-escape symbol\n * @param {Boolean} options.throws Throw error if quotes string can\u2019t be properly consumed\n * @return {Boolean} `true` if quoted string was consumed. The contents\n * of quoted string will be availabe as `stream.current()`\n */\nvar eatQuoted = function(stream, options) {\n\toptions = options ? Object.assign({}, defaultOptions, options) : defaultOptions;\n\tconst start = stream.pos;\n\tconst quote = stream.peek();\n\n\tif (stream.eat(isQuote)) {\n\t\twhile (!stream.eof()) {\n\t\t\tswitch (stream.next()) {\n\t\t\t\tcase quote:\n\t\t\t\t\tstream.start = start;\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase options.escape:\n\t\t\t\t\tstream.next();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// If we\u2019re here then stream wasn\u2019t properly consumed.\n\t\t// Revert stream and decide what to do\n\t\tstream.pos = start;\n\n\t\tif (options.throws) {\n\t\t\tthrow stream.error('Unable to consume quoted string');\n\t\t}\n\t}\n\n\treturn false;\n};\n\nfunction isQuote(code) {\n\treturn code === SINGLE_QUOTE || code === DOUBLE_QUOTE;\n}\n\n/**\n * Check if given code is a number\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isNumber(code) {\n\treturn code > 47 && code < 58;\n}\n\n/**\n * Check if given character code is alpha code (letter through A to Z)\n * @param {Number} code\n * @param {Number} [from]\n * @param {Number} [to]\n * @return {Boolean}\n */\nfunction isAlpha(code, from, to) {\n\tfrom = from || 65; // A\n\tto = to || 90; // Z\n\tcode &= ~32; // quick hack to convert any char code to uppercase char code\n\n\treturn code >= from && code <= to;\n}\n\n/**\n * Check if given character code is alpha-numeric (letter through A to Z or number)\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isAlphaNumeric(code) {\n\treturn isNumber(code) || isAlpha(code);\n}\n\nfunction isWhiteSpace(code) {\n\treturn code === 32 /* space */\n\t\t|| code === 9 /* tab */\n\t\t|| code === 160; /* non-breaking space */\n}\n\n/**\n * Check if given character code is a space\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isSpace(code) {\n\treturn isWhiteSpace(code)\n\t\t|| code === 10 /* LF */\n\t\t|| code === 13; /* CR */\n}\n\nconst defaultOptions$1 = {\n\tescape: 92, // \\ character\n\tthrows: false\n};\n\n/**\n * Eats paired characters substring, for example `(foo)` or `[bar]`\n * @param {StreamReader} stream\n * @param {Number} open Character code of pair openinig\n * @param {Number} close Character code of pair closing\n * @param {Object} [options]\n * @return {Boolean} Returns `true` if chacarter pair was successfully\n * consumed, it\u2019s content will be available as `stream.current()`\n */\nfunction eatPair(stream, open, close, options) {\n\toptions = options ? Object.assign({}, defaultOptions$1, options) : defaultOptions$1;\n\tconst start = stream.pos;\n\n\tif (stream.eat(open)) {\n\t\tlet stack = 1, ch;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (eatQuoted(stream, options)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tch = stream.next();\n\t\t\tif (ch === open) {\n\t\t\t\tstack++;\n\t\t\t} else if (ch === close) {\n\t\t\t\tstack--;\n\t\t\t\tif (!stack) {\n\t\t\t\t\tstream.start = start;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (ch === options.escape) {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\n\t\t// If we\u2019re here then paired character can\u2019t be consumed\n\t\tstream.pos = start;\n\n\t\tif (options.throws) {\n\t\t\tthrow stream.error(`Unable to find matching pair for ${String.fromCharCode(open)}`);\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport { eatQuoted, isQuote, isAlpha, isNumber, isAlphaNumeric, isSpace, isWhiteSpace, eatPair };\n", "import StreamReader from '@emmetio/stream-reader';\nimport { eatPair, isAlpha, isNumber, isQuote, isSpace } from '@emmetio/stream-reader-utils';\n\n/**\n * Abstract container that contains nested nodes or other containers\n */\nclass Node {\n\tconstructor(type) {\n\t\tthis.type = type;\n\t\tthis.children = [];\n\t\tthis.parent = null;\n\t}\n\n\tget firstChild() {\n\t\treturn this.children[0];\n\t}\n\n\tget nextSibling() {\n\t\tconst ix = this.index();\n\t\treturn ix !== -1 ? this.parent.children[ix + 1] : null;\n\t}\n\n\tget previousSibling() {\n\t\tconst ix = this.index();\n\t\treturn ix !== -1 ? this.parent.children[ix - 1] : null;\n\t}\n\n\t/**\n\t * Returns current element\u2019s index in parent list of child nodes\n\t * @return {Number}\n\t */\n\tindex() {\n\t\treturn this.parent ? this.parent.children.indexOf(this) : -1;\n\t}\n\n\t/**\n\t * Adds given node as a child\n\t * @param {Node} node\n\t * @return {Node} Current node\n\t */\n\tadd(node) {\n\t\tif (node) {\n\t\t\tnode.remove();\n\t\t\tthis.children.push(node);\n\t\t\tnode.parent = this;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes current node from its parent\n\t * @return {Node} Current node\n\t */\n\tremove() {\n\t\tif (this.parent) {\n\t\t\tconst ix = this.index();\n\t\t\tif (ix !== -1) {\n\t\t\t\tthis.parent.children.splice(ix, 1);\n\t\t\t\tthis.parent = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n}\n\nclass Stylesheet extends Node {\n\tconstructor() {\n\t\tsuper('stylesheet');\n\t\tthis.comments = [];\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\tconst node = this.firstChild;\n\t\treturn node && node.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s end position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\tconst node = this.children[this.children.length - 1];\n\t\treturn node && node.end;\n\t}\n\n\t/**\n\t * Adds comment token into a list.\n\t * This somewhat awkward feature is required to properly detect comment\n\t * ranges. Specifically, in Atom: it\u2019s API provides scopes limited to current\n\t * line only\n\t * @param {Token} token\n\t */\n\taddComment(token) {\n\t\tthis.comments.push(token);\n\t}\n}\n\n/**\n * Removes tokens that matches given criteria from start and end of given list\n * @param {Token[]} tokens\n * @return {Token[]}\n */\nfunction trimTokens(tokens) {\n\ttokens = tokens.slice();\n\tlet len;\n\twhile (len !== tokens.length) {\n\t\tlen = tokens.length;\n\t\tif (isFormattingToken(tokens[0])) {\n\t\t\ttokens.shift();\n\t\t}\n\n\t\tif (isFormattingToken(last(tokens))) {\n\t\t\ttokens.pop();\n\t\t}\n\t}\n\n\treturn tokens;\n}\n\n/**\n * Trims formatting tokens (whitespace and comments) from the beginning and end\n * of given token list\n * @param {Token[]} tokens\n * @return {Token[]}\n */\nfunction trimFormatting(tokens) {\n\treturn trimTokens(tokens, isFormattingToken);\n}\n\n/**\n * Check if given token is a formatting one (whitespace or comment)\n * @param {Token} token\n * @return {Boolean}\n */\nfunction isFormattingToken(token) {\n\tconst type = token && token.type;\n\treturn type === 'whitespace' || type === 'comment';\n}\n\n/**\n * Consumes string char-by-char from given stream\n * @param {StreamReader} stream\n * @param {String} string\n * @return {Boolean} Returns `true` if string was completely consumed\n */\nfunction eatString(stream, string) {\n\tconst start = stream.pos;\n\n\tfor (let i = 0, il = string.length; i < il; i++) {\n\t\tif (!stream.eat(string.charCodeAt(i))) {\n\t\t\tstream.pos = start;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction consume(stream, match) {\n\tconst start = stream.pos;\n\tif (stream.eat(match)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction consumeWhile(stream, match) {\n\tconst start = stream.pos;\n\tif (stream.eatWhile(match)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction last(arr) {\n\treturn arr[arr.length - 1];\n}\n\nfunction valueOf(token) {\n\treturn token && token.valueOf();\n}\n\n/**\n * A structure describing text fragment in content stream. It may contain\n * other sub-fragments (also tokens) that represent current fragments\u2019 logical\n * parts\n */\nclass Token {\n\t/**\n\t * @param {StreamReader} stream\n\t * @param {String} type Token type\n\t * @param {Object} [start] Tokens\u2019 start position in `stream`\n\t * @param {Object} [end] Tokens\u2019 end position in `stream`\n\t */\n\tconstructor(stream, type, start, end) {\n\t\tthis.stream = stream;\n\t\tthis.start = start != null ? start : stream.start;\n\t\tthis.end = end != null ? end : stream.pos;\n\t\tthis.type = type;\n\n\t\tthis._props = null;\n\t\tthis._value = null;\n\t\tthis._items = null;\n\t}\n\n\tget size() {\n\t\treturn this._items ? this._items.length : 0;\n\t}\n\n\tget items() {\n\t\treturn this._items;\n\t}\n\n\tclone(start, end) {\n\t\treturn new this.constructor(this.stream, this.type,\n\t\t\tstart != null ? start : this.start,\n\t\t\tend != null ? end : this.end);\n\t}\n\n\tadd(item) {\n\t\tif (Array.isArray(item)) {\n\t\t\tfor (let i = 0, il = item.length; i < il; i++) {\n\t\t\t\tthis.add(item[i]);\n\t\t\t}\n\t\t} else if (item) {\n\t\t\tif (!this._items) {\n\t\t\t\tthis._items = [item];\n\t\t\t} else {\n\t\t\t\tthis._items.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tremove(item) {\n\t\tif (this._items) {\n\t\t\tconst ix = this._items.indexOf(item);\n\t\t\tif (ix !== -1 ) {\n\t\t\t\tthis._items.splice(ix, 1);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\titem(i) {\n\t\tconst size = this.size;\n\t\treturn this._items && this._items[(size + i) % size];\n\t}\n\n\tlimit() {\n\t\treturn this.stream.limit(this.start, this.end);\n\t}\n\n\tslice(from, to) {\n\t\tconst token = this.clone();\n\t\tconst items = this._items && this._items.slice(from, to);\n\t\tif (items && items.length) {\n\t\t\ttoken.start = items[0].start;\n\t\t\ttoken.end = items[items.length - 1].end;\n\t\t\ttoken.add(items);\n\t\t} else if (items) {\n\t\t\t// Empty token\n\t\t\ttoken.start = token.end;\n\t\t}\n\n\t\treturn token;\n\t}\n\n\tproperty(name, value) {\n\t\tif (typeof value !== 'undefined') {\n\t\t\t// set property value\n\t\t\tif (!this._props) {\n\t\t\t\tthis._props = {};\n\t\t\t}\n\n\t\t\tthis._props[name] = value;\n\t\t}\n\n\t\treturn this._props && this._props[name];\n\t}\n\n\t/**\n\t * Returns token textual representation\n\t * @return {String}\n\t */\n\ttoString() {\n\t\treturn `${this.valueOf()} [${this.start}, ${this.end}] (${this.type})`;\n\t}\n\n\tvalueOf() {\n\t\tif (this._value === null) {\n\t\t\tthis._value = this.stream.substring(this.start, this.end);\n\t\t}\n\n\t\treturn this._value;\n\t}\n}\n\nconst COMMA = 44; // ,\nconst PROP_DELIMITER$1 = 58; // :\nconst PROP_TERMINATOR$1 = 59; // ;\nconst RULE_START$1 = 123; // {\nconst RULE_END$1 = 125; // }\n\nconst types = new Map()\n\t.set(COMMA, 'comma')\n\t.set(PROP_DELIMITER$1, 'propertyDelimiter')\n\t.set(PROP_TERMINATOR$1, 'propertyTerminator')\n\t.set(RULE_START$1, 'ruleStart')\n\t.set(RULE_END$1, 'ruleEnd');\n\n/**\n * Consumes separator token from given string\n */\nfunction separator(stream) {\n\tif (isSeparator(stream.peek())) {\n\t\tconst start = stream.pos;\n\t\tconst type = types.get(stream.next());\n\t\tconst token = new Token(stream, 'separator', start);\n\n\t\ttoken.property('type', type);\n\t\treturn token;\n\t}\n}\n\n\n\nfunction isSeparator(code) {\n\treturn code === COMMA\n\t\t|| code === PROP_DELIMITER$1 || code === PROP_TERMINATOR$1\n\t\t|| code === RULE_START$1 || code === RULE_END$1;\n}\n\nconst ARGUMENTS_START = 40; // (\nconst ARGUMENTS_END = 41; // )\n\nvar args = function(stream, tokenConsumer) {\n\tif (stream.peek() === ARGUMENTS_START) {\n\t\tconst start = stream.pos;\n\t\tstream.next();\n\n\t\tconst tokens = [];\n\t\tlet t;\n\t\t// in LESS, it\u2019s possible to separate arguments list either by `;` or `,`.\n\t\t// In first case, we should keep comma-separated item as a single argument\n\t\tlet usePropTerminator = false;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (isUnexpectedTerminator(stream.peek()) || stream.eat(ARGUMENTS_END)) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tt = tokenConsumer(stream);\n\t\t\tif (!t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (isSemicolonSeparator(t)) {\n\t\t\t\tusePropTerminator = true;\n\t\t\t}\n\n\t\t\ttokens.push(t);\n\t\t}\n\n\t\tstream.start = start;\n\t\treturn createArgumentList(stream, tokens, usePropTerminator);\n\t}\n};\n\nfunction isUnexpectedTerminator(code) {\n\treturn code === RULE_START$1 || code === RULE_END$1;\n}\n\nfunction createArgumentList(stream, tokens, usePropTerminator) {\n\tconst argsToken = new Token(stream, 'arguments');\n\tconst isSeparator = usePropTerminator ? isSemicolonSeparator : isCommaSeparator;\n\tlet arg = [];\n\n\tfor (let i = 0, il = tokens.length, token; i < il; i++) {\n\t\ttoken = tokens[i];\n\t\tif (isSeparator(token)) {\n\t\t\targsToken.add(createArgument(stream, arg) || createEmptyArgument(stream, token.start));\n\t\t\targ.length = 0;\n\t\t} else {\n\t\t\targ.push(token);\n\t\t}\n\t}\n\n\tif (arg.length) {\n\t\targsToken.add(createArgument(stream, arg));\n\t}\n\n\treturn argsToken;\n}\n\nfunction createArgument(stream, tokens) {\n\ttokens = trimFormatting(tokens);\n\n\tif (tokens.length) {\n\t\tconst arg = new Token(stream, 'argument', tokens[0].start, last(tokens).end);\n\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\targ.add(tokens[i]);\n\t\t}\n\n\t\treturn arg;\n\t}\n}\n\nfunction createEmptyArgument(stream, pos) {\n\tconst token = new Token(stream, 'argument', pos, pos);\n\ttoken.property('empty', true);\n\treturn token;\n}\n\nfunction isCommaSeparator(token) {\n\treturn token.property('type') === 'comma';\n}\n\nfunction isSemicolonSeparator(token) {\n\treturn token.property('type') === 'propertyTerminator';\n}\n\nconst HYPHEN = 45;\nconst UNDERSCORE = 95;\n\nfunction ident(stream) {\n\treturn eatIdent(stream) && new Token(stream, 'ident');\n}\n\nfunction eatIdent(stream) {\n\tconst start = stream.pos;\n\n\tstream.eat(HYPHEN);\n\tif (stream.eat(isIdentStart)) {\n\t\tstream.eatWhile(isIdent);\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction isIdentStart(code) {\n\treturn code === UNDERSCORE || code === HYPHEN || isAlpha(code) || code >= 128;\n}\n\nfunction isIdent(code) {\n\treturn isNumber(code) || isIdentStart(code);\n}\n\nfunction prefixed(stream, tokenType, prefix, body, allowEmptyBody) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(prefix)) {\n\t\tconst bodyToken = body(stream, start);\n\t\tif (bodyToken || allowEmptyBody) {\n\t\t\tstream.start = start;\n\t\t\treturn new Token(stream, tokenType, start).add(bodyToken);\n\t\t}\n\t}\n\n\tstream.pos = start;\n}\n\nconst AT = 64; // @\n\n/**\n * Consumes at-keyword from given stream\n */\nfunction atKeyword(stream) {\n\treturn prefixed(stream, 'at-keyword', AT, ident);\n}\n\nconst HASH = 35; // #\nconst AT$1 = 64; // @\n\n/**\n * Consumes interpolation token, e.g. `#{expression}`\n * @param {StreamReader} stream\n * @param {Function} tokenConsumer\n * @return {Token}\n */\nfunction interpolation(stream, tokenConsumer) {\n\tconst start = stream.pos;\n\ttokenConsumer = tokenConsumer || defaultTokenConsumer;\n\n\tif ((stream.eat(HASH) || stream.eat(AT$1)) && stream.eat(RULE_START$1)) {\n\t\tconst container = new Token(stream, 'interpolation', start);\n\t\tlet stack = 1, token;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (stream.eat(RULE_START$1)) {\n\t\t\t\tstack++;\n\t\t\t} else if (stream.eat(RULE_END$1)) {\n\t\t\t\tstack--;\n\t\t\t\tif (!stack) {\n\t\t\t\t\tcontainer.end = stream.pos;\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\t\t\t} else if (token = tokenConsumer(stream)) {\n\t\t\t\tcontainer.add(token);\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tstream.pos = start;\n}\n\nfunction eatInterpolation(stream) {\n\tconst start = stream.pos;\n\n\tif ((stream.eat(HASH) || stream.eat(AT$1)) && eatPair(stream, RULE_START$1, RULE_END$1)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction defaultTokenConsumer(stream) {\n\tconst start = stream.pos;\n\n\twhile (!stream.eof()) {\n\t\tif (stream.peek() === RULE_END$1) {\n\t\t\tbreak;\n\t\t}\n\n\t\teatString$1(stream) || stream.next();\n\t}\n\n\tif (start !== stream.pos) {\n\t\treturn new Token(stream, 'expression', start);\n\t}\n}\n\n/**\n * Consumes quoted string from current string and returns token with consumed\n * data or `null`, if string wasn\u2019t consumed\n * @param {StreamReader} stream\n * @return {StringToken}\n */\nfunction string(stream) {\n\treturn eatString$1(stream, true);\n}\n\nfunction eatString$1(stream, asToken) {\n\tlet ch = stream.peek(), pos, tokens, token;\n\n\tif (isQuote(ch)) {\n\t\tstream.start = stream.pos;\n\t\tstream.next();\n\t\tconst quote = ch;\n\t\tconst valueStart = stream.pos;\n\n\t\twhile (!stream.eof()) {\n\t\t\tpos = stream.pos;\n\t\t\tif (stream.eat(quote) || stream.eat(isNewline)) {\n\t\t\t\t// found end of string or newline without preceding '\\',\n\t\t\t\t// which is not allowed (don\u2019t throw error, for now)\n\t\t\t\tbreak;\n\t\t\t} else if (stream.eat(92 /* \\ */)) {\n\t\t\t\t// backslash allows newline in string\n\t\t\t\tstream.eat(isNewline);\n\t\t\t} else if (asToken && (token = interpolation(stream))) {\n\t\t\t\tif (!tokens) {\n\t\t\t\t\ttokens = [token];\n\t\t\t\t} else {\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstream.next();\n\t\t}\n\n\t\t// Either reached EOF or explicitly stopped at string end\n\t\t// NB use extra `asToken` param to return boolean instead of token to reduce\n\t\t// memory allocations and improve performance\n\t\tif (asToken) {\n\t\t\tconst token = new Token(stream, 'string');\n\t\t\tconst inner = new Token(stream, 'unquoted', valueStart, pos);\n\t\t\tinner.add(tokens);\n\t\t\ttoken.add(inner);\n\t\t\ttoken.property('quote', quote);\n\t\t\treturn token;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isNewline(code) {\n\treturn code === 10 /* LF */ || code === 13 /* CR */;\n}\n\nconst ASTERISK = 42;\nconst SLASH = 47;\n\n/**\n * Consumes comment from given stream: either multi-line or single-line\n * @param {StreamReader} stream\n * @return {CommentToken}\n */\nvar comment = function(stream) {\n\treturn singleLineComment(stream) || multiLineComment(stream);\n};\n\nfunction singleLineComment(stream) {\n\tif (eatSingleLineComment(stream)) {\n\t\tconst token = new Token(stream, 'comment');\n\t\ttoken.property('type', 'single-line');\n\t\treturn token;\n\t}\n}\n\nfunction multiLineComment(stream) {\n\tif (eatMultiLineComment(stream)) {\n\t\tconst token = new Token(stream, 'comment');\n\t\ttoken.property('type', 'multiline');\n\t\treturn token;\n\t}\n}\n\nfunction eatComment(stream) {\n\treturn eatSingleLineComment(stream) || eatMultiLineComment(stream);\n}\n\nfunction eatSingleLineComment(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(SLASH) && stream.eat(SLASH)) {\n\t\t// single-line comment, consume till the end of line\n\t\tstream.start = start;\n\t\twhile (!stream.eof()) {\n\t\t\tif (isLineBreak(stream.next())) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction eatMultiLineComment(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(SLASH) && stream.eat(ASTERISK)) {\n\t\twhile (!stream.eof()) {\n\t\t\tif (stream.next() === ASTERISK && stream.eat(SLASH)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction isLineBreak(code) {\n\treturn code === 10 /* LF */ || code === 13 /* CR */;\n}\n\n/**\n * Consumes white-space tokens from given stream\n */\nfunction whitespace(stream) {\n\treturn eatWhitespace(stream) && new Token(stream, 'whitespace');\n}\n\nfunction eatWhitespace(stream) {\n\treturn consumeWhile(stream, isSpace);\n}\n\nconst ATTR_START = 91; // [\nconst ATTR_END = 93; // ]\n\n/**\n * Consumes attribute from given string, e.g. value between [ and ]\n * @param {StreamReader} stream\n * @return {AttributeToken}\n */\nfunction eatAttribuite(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(ATTR_START)) {\n\t\tskip(stream);\n\t\tconst name = ident(stream);\n\n\t\tskip(stream);\n\t\tconst op = operator(stream);\n\n\t\tskip(stream);\n\t\tconst value = string(stream) || ident(stream);\n\n\t\tskip(stream);\n\t\tstream.eat(ATTR_END);\n\n\t\treturn new Token(stream, 'attribute', start).add(name).add(op).add(value);\n\t}\n}\n\nfunction skip(stream) {\n\twhile (!stream.eof()) {\n\t\tif (!eatWhitespace(stream) && !eatComment(stream)) {\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\nfunction operator(stream) {\n\treturn consumeWhile(stream, isOperator) && new Token(stream, 'operator');\n}\n\nfunction isOperator(code) {\n\treturn code === 126 /* ~ */\n\t\t|| code === 124 /* | */\n\t\t|| code === 94 /* ^ */\n\t\t|| code === 36 /* $ */\n\t\t|| code === 42 /* * */\n\t\t|| code === 61; /* = */\n}\n\nconst BACKTICK = 96; // `\n\n/**\n * Consumes backtick token, e.g. `...`\n * @param {StreamReader} stream\n * @param {Function} tokenConsumer\n * @return {Token}\n */\nfunction backtick(stream) {\n\tif (eatBacktick(stream)) {\n\t\treturn new Token(stream, 'backtick');\n\t}\n}\n\nfunction eatBacktick(stream) {\n\tconst start = stream.pos;\n\n\tif (eatPair(stream, BACKTICK, BACKTICK)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nconst CLASS = 46; // .\n\n/**\n * Consumes class fragment from given stream, e.g. `.foo`\n * @param {StreamReader} stream\n * @return {ClassToken}\n */\nfunction className(stream) {\n\treturn prefixed(stream, 'class', CLASS, ident);\n}\n\nconst ADJACENT_SIBLING = 43; // +\nconst GENERAL_SIBLING = 126; // ~\nconst CHILD = 62; // >\nconst NESTING = 38; // &\n\nconst types$1 = {\n\t[ADJACENT_SIBLING]: 'adjacentSibling',\n\t[GENERAL_SIBLING]: 'generalSibling',\n\t[CHILD]: 'child',\n\t[NESTING]: 'nesting'\n};\n\n/**\n * Consumes combinator token from given string\n */\nvar combinator = function(stream) {\n\tif (isCombinator(stream.peek())) {\n\t\tconst start = stream.pos;\n\t\tconst type = types$1[stream.next()];\n\t\tconst token = new Token(stream, 'combinator', start);\n\n\t\ttoken.property('type', type);\n\t\treturn token;\n\t}\n};\n\n\n\nfunction isCombinator(code) {\n\treturn code === ADJACENT_SIBLING || code === GENERAL_SIBLING\n\t\t|| code === NESTING || code === CHILD;\n}\n\nconst HASH$1 = 35;\n\nfunction hash(stream) {\n\treturn prefixed(stream, 'hash', HASH$1, hashValue, true);\n}\n\n\n\nfunction hashValue(stream) {\n\tif (eatHashValue(stream)) {\n\t\treturn new Token(stream, 'hash-value');\n\t}\n}\n\nfunction eatHashValue(stream) {\n\treturn consumeWhile(stream, isHashValue);\n}\n\nfunction isHashValue(code) {\n\treturn isNumber(code) || isAlpha(code, 65 /* A */, 70 /* F */)\n\t\t|| code === 95 /* _ */ || code === 45 /* - */\n\t\t|| code > 128; /* non-ASCII */\n}\n\nconst ID = 35; // #\n\n/**\n * Consumes id fragment from given stream, e.g. `#foo`\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction id(stream) {\n\treturn prefixed(stream, 'id', ID, ident);\n}\n\nconst IMPORTANT = 33; // !\n\n/**\n * Consumes !important token\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction important(stream) {\n\treturn prefixed(stream, 'important', IMPORTANT, ident);\n}\n\nconst DOT = 46; // .\n\n/**\n * Consumes number from given string, e.g. `10px`\n * @param {StreamReader} stream\n * @return {NumberToken}\n */\nfunction number(stream) {\n\tif (eatNumericPart(stream)) {\n\t\tconst start = stream.start;\n\t\tconst num = new Token(stream, 'value');\n\t\tconst unit = eatUnitPart(stream) ? new Token(stream, 'unit') : null;\n\n\t\treturn new Token(stream, 'number', start).add(num).add(unit);\n\t}\n}\n\n\n\nfunction eatNumericPart(stream) {\n\tconst start = stream.pos;\n\n\tstream.eat(isOperator$1);\n\tif (stream.eatWhile(isNumber)) {\n\t\tstream.start = start;\n\t\tconst decimalEnd = stream.pos;\n\n\t\tif (!(stream.eat(DOT) && stream.eatWhile(isNumber))) {\n\t\t\tstream.pos = decimalEnd;\n\t\t}\n\n\t\treturn true;\n\t} else if (stream.eat(DOT) && stream.eatWhile(isNumber)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\t// TODO eat exponent part\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction eatUnitPart(stream) {\n\treturn eatIdent(stream) || eatPercent(stream);\n}\n\nfunction eatPercent(stream) {\n\treturn consume(stream, 37 /* % */);\n}\n\nfunction isOperator$1(code) {\n\treturn code === 45 /* - */ || code === 43 /* + */;\n}\n\nconst NOT = 33; // !\nconst MULTIPLY = 42; // *\nconst PLUS = 43; // +\nconst MINUS = 45; // -\nconst DIVIDE = 47; // /\nconst LESS_THAN = 60; // <\nconst EQUALS = 61; // =\nconst GREATER_THAN = 62; // <\n\nfunction operator$1(stream) {\n\treturn eatOperator(stream) && new Token(stream, 'operator');\n}\n\nfunction eatOperator(stream) {\n\tif (consume(stream, isEquality)) {\n\t\tstream.eatWhile(EQUALS);\n\t\treturn true;\n\t} else if (consume(stream, isOperator$2)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isEquality(code) {\n\treturn code === NOT || code === LESS_THAN || code === EQUALS || code === GREATER_THAN;\n}\n\nfunction isOperator$2(code) {\n\treturn code === MULTIPLY || code === PLUS || code === MINUS || code === DIVIDE\n\t\t|| isEquality(code);\n}\n\nconst PSEUDO = 58; // :\n\n/**\n * Consumes pseudo-selector from given stream\n */\nvar pseudo = function(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eatWhile(PSEUDO)) {\n\t\tconst name = ident(stream);\n\t\tif (name) {\n\t\t\treturn new Token(stream, 'pseudo', start).add(name);\n\t\t}\n\t}\n\n\tstream.pos = start;\n};\n\n/**\n * Consumes unquoted value from given stream\n * @param {StreamReader} stream\n * @return {UnquotedToken}\n */\nvar unquoted = function(stream) {\n\treturn eatUnquoted(stream) && new Token(stream, 'unquoted');\n};\n\nfunction eatUnquoted(stream) {\n\treturn consumeWhile(stream, isUnquoted);\n}\n\nfunction isUnquoted(code) {\n\treturn !isNaN(code) && !isQuote(code) && !isSpace(code)\n\t\t&& code !== 40 /* ( */ && code !== 41 /* ) */ && code !== 92 /* \\ */\n\t\t&& !isNonPrintable(code);\n}\n\nfunction isNonPrintable(code) {\n\treturn (code >= 0 && code <= 8) || code === 11\n\t|| (code >= 14 && code <= 31) || code === 127;\n}\n\n/**\n * Consumes URL token from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction url(stream) {\n\tconst start = stream.pos;\n\n\tif (eatString(stream, 'url(')) {\n\t\teatWhitespace(stream);\n\t\tconst value = string(stream) || unquoted(stream);\n\t\teatWhitespace(stream);\n\t\tstream.eat(41); // )\n\n\t\treturn new Token(stream, 'url', start).add(value);\n\t}\n\n\tstream.pos = start;\n}\n\nfunction eatUrl(stream) {\n\tconst start = stream.pos;\n\n\tif (eatString(stream, 'url(')) {\n\t\teatWhitespace(stream);\n\t\teatString$1(stream) || eatUnquoted(stream);\n\t\teatWhitespace(stream);\n\t\tstream.eat(41); // )\n\t\tstream.start = start;\n\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nconst VARIABLE = 36; // $\n\n/**\n * Consumes SCSS variable from given stream\n */\nfunction variable(stream) {\n\treturn prefixed(stream, 'variable', VARIABLE, variableName);\n}\n\n\n\nfunction variableName(stream) {\n\tif (eatVariableName(stream)) {\n\t\treturn new Token(stream, 'name');\n\t}\n}\n\nfunction eatVariableName(stream) {\n\treturn consumeWhile(stream, isVariableName);\n}\n\nfunction isVariableName(code) {\n\treturn code === VARIABLE || isIdent(code);\n}\n\n/**\n * Group tokens by commonly used context\n */\n\nfunction consumeToken(stream) {\n\tconst _token = any(stream) || args(stream, consumeToken);\n\tif (_token && _token.type === 'ident') {\n\t\tconst _args = args(stream, consumeToken);\n\t\tif (_args) {\n\t\t\t// An identifier followed by arguments \u2013 function call\n\t\t\treturn new Token(stream, 'function', _token.start, _args.end).add(_token).add(_args);\n\t\t}\n\t}\n\n\treturn _token || unknown(stream);\n}\n\nfunction any(stream) {\n\treturn formatting(stream) || url(stream) || selector(stream) || value(stream)\n\t\t|| separator(stream);\n}\n\nfunction selector(stream) {\n\treturn interpolation(stream) || backtick(stream) || ident(stream) || atKeyword(stream)\n\t\t|| className(stream) || id(stream) || pseudo(stream) || eatAttribuite(stream)\n\t\t|| combinator(stream);\n}\n\nfunction value(stream) {\n\treturn url(stream) || string(stream) || interpolation(stream) || backtick(stream) \n\t\t|| number(stream) || hash(stream) || keyword(stream) || important(stream) \n\t\t|| operator$1(stream);\n}\n\nfunction keyword(stream) {\n\treturn backtick(stream) || variable(stream) || atKeyword(stream) || ident(stream);\n}\n\nfunction formatting(stream) {\n\treturn comment(stream) || whitespace(stream);\n}\n\nfunction unknown(stream) {\n\tstream.start = stream.pos;\n\tconst ch = stream.next();\n\tif (ch != null) {\n\t\treturn new Token(stream, 'unknown');\n\t}\n}\n\n/**\n * Parses CSS rule selector\n * @param {String|StreamReader} source\n * @return {Token[]}\n */\nfunction parseSelector(source) {\n\treturn parseList(source, 'selector');\n}\n\n/**\n * Parses CSS property name. Mostly used for LESS where\n * property-like entry might be used as a mixin call\n * @param {String|StreamReader} source\n * @return {Token}\n */\nfunction parsePropertyName(source) {\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst items = [];\n\n\twhile (!stream.eof()) {\n\t\titems.push(consumeToken(stream));\n\t}\n\n\tlet token;\n\tif (items.length === 1) {\n\t\ttoken = items[0];\n\t} else {\n\t\ttoken = new Token(stream, 'property-name', stream.start, stream.end);\n\t\tfor (let i = 0, il = items.length; i < il; i++) {\n\t\t\ttoken.add(items[i]);\n\t\t}\n\t}\n\n\treturn token;\n}\n\n/**\n * Parses CSS property value\n * @param {String|StreamReader} source\n * @return {Token[]}\n */\nfunction parsePropertyValue(source) {\n\treturn parseList(source);\n}\n\n/**\n * Parses @media CSS rule expression\n * @param {String|StreamReader} source\n * @return {Token[]}\n */\nfunction parseMediaExpression(source) {\n\treturn parseList(source);\n}\n\n/**\n * Parses given source into a set of tokens, separated by comma. Each token contains\n * parsed sub-items as independent tokens and so on. Mostly used to parse\n * selectors and property values\n * @param {String|StreamReader} source Source to parse\n * @param {String} [tokenType] Type of first-level tokens.\n * Default is `item`\n * @return {Token[]}\n */\nfunction parseList(source, tokenType) {\n\ttokenType = tokenType || 'item';\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst items = [];\n\tconst fragments = [];\n\tconst flush = () => {\n\t\tconst clean = trimFormatting(fragments);\n\n\t\tif (clean.length) {\n\t\t\tconst item = new Token(stream, tokenType, clean[0].start, last(clean).end);\n\t\t\tfor (let i = 0; i < clean.length; i++) {\n\t\t\t\titem.add(clean[i]);\n\t\t\t}\n\t\t\titems.push(item);\n\t\t}\n\n\t\tfragments.length = 0;\n\t};\n\n\tlet token;\n\twhile (!stream.eof()) {\n\t\tif (stream.eat(44 /* , */)) {\n\t\t\tflush();\n\t\t} else if (token = consumeToken(stream)) {\n\t\t\tif (token.type !== 'comment') {\n\t\t\t\tfragments.push(token);\n\t\t\t}\n\t\t} else {\n\t\t\tthrow stream.error('Unexpected character');\n\t\t}\n\t}\n\n\tflush();\n\treturn items;\n}\n\n/**\n * Creates CSS rule from given tokens\n * @param {StreamReader} stream\n * @param {Token[]} tokens\n * @param {Token} [content]\n * @return {Rule}\n */\nfunction createRule(stream, tokens, contentStart, contentEnd) {\n\tif (!tokens.length) {\n\t\treturn null;\n\t}\n\n\tconst name = tokens[0];\n\tname.end = last(tokens).end;\n\n\treturn new Rule(stream, name, contentStart, contentEnd);\n}\n\n/**\n * Represents CSS rule\n * @type {Node}\n */\nclass Rule extends Node {\n\t/**\n\t * @param {StreamReader} stream\n\t * @param {Token} name Rule\u2019s name token\n\t * @param {Token} contentStart Rule\u2019s content start token\n\t * @param {Token} [contentEnd] Rule\u2019s content end token\n\t */\n\tconstructor(stream, name, contentStart, contentEnd) {\n\t\tsuper('rule');\n\t\tthis.stream = stream;\n\t\tthis.selectorToken = name;\n\t\tthis.contentStartToken = contentStart;\n\t\tthis.contentEndToken = contentEnd || contentStart;\n\t\tthis._parsedSelector = null;\n\t}\n\n\t/**\n\t * Returns rule selector\n\t * @return {String}\n\t */\n\tget selector() {\n\t\treturn valueOf(this.selectorToken);\n\t}\n\n\tget parsedSelector() {\n\t\tif (!this._parsedSelector) {\n\t\t\tthis._parsedSelector = parseSelector(this.selectorToken.limit());\n\t\t}\n\n\t\treturn this._parsedSelector;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\treturn this.selectorToken && this.selectorToken.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s end position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\tconst token = this.contentEndToken || this.contentStartToken || this.nameToken;\n\t\treturn token && token.end;\n\t}\n}\n\n/**\n * Creates CSS rule from given tokens\n * @param {StreamReader} stream\n * @param {Token[]} tokens\n * @param {Token} [content]\n * @return {Rule}\n */\nfunction createAtRule(stream, tokens, contentStart, contentEnd) {\n\tif (!tokens.length) {\n\t\treturn null;\n\t}\n\n\tlet ix = 0, expression;\n\tconst name = tokens[ix++];\n \n\tif (ix < tokens.length) {\n\t\texpression = tokens[ix++];\n\t\texpression.type = 'expression';\n\t\texpression.end = last(tokens).end;\n\t} else {\n\t\texpression = new Token(stream, 'expression', name.end, name.end);\n\t}\n\n\treturn new AtRule(stream, name, expression, contentStart, contentEnd);\n}\n\nclass AtRule extends Node {\n\tconstructor(stream, name, expression, contentStart, contentEnd) {\n\t\tsuper('at-rule');\n\t\tthis.stream = stream;\n\t\tthis.nameToken = name;\n\t\tthis.expressionToken = expression;\n\t\tthis.contentStartToken = contentStart;\n\t\tthis.contentEndToken = contentEnd || contentStart;\n\t\tthis._parsedExpression = null;\n\t}\n\n\t/**\n\t * Returns at-rule name\n\t * @return {String}\n\t */\n\tget name() {\n\t\treturn valueOf(this.nameToken && this.nameToken.item(0));\n\t}\n\n\tget expression() {\n\t\treturn valueOf(this.expressionToken);\n\t}\n\n\tget parsedExpression() {\n\t\tif (!this._parsedExpression) {\n\t\t\tthis._parsedExpression = parseMediaExpression(this.expressionToken.limit());\n\t\t}\n\n\t\treturn this._parsedExpression;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\treturn this.nameToken && this.nameToken.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s end position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\tconst token = this.contentEndToken || this.contentStartToken || this.nameToken;\n\t\treturn token && token.end;\n\t}\n}\n\n/**\n * Factory method that creates property node from given tokens\n * @param {StreamReader} stream\n * @param {Token[]} tokens\n * @param {Token} terminator\n * @return {Property}\n */\nfunction createProperty(stream, tokens, terminator) {\n\t// NB in LESS, fragmented properties without value like `.foo.bar;` must be\n\t// treated like mixin call\n\tif (!tokens.length) {\n\t\treturn null;\n\t}\n\n\tlet separator, value, ix = 0;\n\tconst name = tokens[ix++];\n\n\tif (ix < tokens.length) {\n\t\tvalue = tokens[ix++];\n\t\tvalue.type = 'value';\n\t\tvalue.end = last(tokens).end;\n\t}\n\n\tif (name && value) {\n\t\tseparator = new Token(stream, 'separator', name.end, value.start);\n\t}\n\n\treturn new Property(\n\t\tstream,\n\t\tname,\n\t\tvalue,\n\t\tseparator,\n\t\tterminator\n\t);\n}\n\nclass Property extends Node {\n\tconstructor(stream, name, value, separator, terminator) {\n\t\tsuper('property');\n\t\tthis.stream = stream;\n\t\tthis.nameToken = name;\n\t\tthis.valueToken = value;\n\t\tthis._parsedName = null;\n\t\tthis._parsedValue = null;\n\n\t\tthis.separatorToken = separator;\n\t\tthis.terminatorToken = terminator;\n\t}\n\n\t/**\n\t * Property name\n\t * @return {String}\n\t */\n\tget name() {\n\t\treturn valueOf(this.nameToken);\n\t}\n\n\t/**\n\t * Returns parsed sub-tokens of current property name\n\t * @return {Token[]}\n\t */\n\tget parsedName() {\n\t\tif (!this._parsedName) {\n\t\t\tthis._parsedName = parsePropertyName(this.nameToken.limit());\n\t\t}\n\n\t\treturn this._parsedName;\n\t}\n\n\t/**\n\t * Property value\n\t * @return {String}\n\t */\n\tget value() {\n\t\treturn valueOf(this.valueToken);\n\t}\n\n\t/**\n\t * Parsed value parts: a list of tokens, separated by comma. Each token may\n\t * contains parsed sub-tokens and so on\n\t * @return {Token[]}\n\t */\n\tget parsedValue() {\n\t\tif (!this._parsedValue) {\n\t\t\tthis._parsedValue = parsePropertyValue(this.valueToken.limit());\n\t\t}\n\n\t\treturn this._parsedValue;\n\t}\n\n\tget separator() {\n\t\treturn valueOf(this.separatorToken);\n\t}\n\n\tget terminator() {\n\t\treturn valueOf(this.terminatorToken);\n\t}\n\n\tget start() {\n\t\tconst token = this.nameToken || this.separatorToken || this.valueToken\n\t\t\t|| this.terminatorToken;\n\t\treturn token && token.start;\n\t}\n\n\tget end() {\n\t\tconst token = this.terminatorToken || this.valueToken\n\t\t\t|| this.separatorToken || this.nameToken;\n\t\treturn token && token.end;\n\t}\n}\n\nconst LBRACE = 40; // (\nconst RBRACE = 41; // )\nconst PROP_DELIMITER = 58; // :\nconst PROP_TERMINATOR = 59; // ;\nconst RULE_START = 123; // {\nconst RULE_END = 125; // }\n\nfunction parseStylesheet(source) {\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst root = new Stylesheet();\n\tlet ctx = root, child, accum, token;\n\tlet tokens = [];\n\tconst flush = () => {\n\t\tif (accum) {\n\t\t\ttokens.push(accum);\n\t\t\taccum = null;\n\t\t}\n\t};\n\n\twhile (!stream.eof()) {\n\t\tif (eatWhitespace(stream)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token = comment(stream)) {\n\t\t\troot.addComment(token);\n\t\t\tcontinue;\n\t\t}\n\n\t\tstream.start = stream.pos;\n\n\t\tif (stream.eatWhile(PROP_DELIMITER)) {\n\t\t\t// Property delimiter can be either a real property delimiter or a\n\t\t\t// part of pseudo-selector.\n\t\t\tif (!tokens.length) {\n\t\t\t\tif (accum) {\n\t\t\t\t\t// No consumed tokens yet but pending token: most likely it\u2019s\n\t\t\t\t\t// a CSS property\n\t\t\t\t\tflush();\n\t\t\t\t} else {\n\t\t\t\t\t// No consumend or accumulated token, seems like a start of\n\t\t\t\t\t// pseudo-selector, e.g. `::slotted`\n\t\t\t\t\taccum = new Token(stream, 'preparse');\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Skip delimiter if there are already consumend tokens: most likely\n\t\t\t// it\u2019s a part of pseudo-selector\n\t\t} else if (stream.eat(PROP_TERMINATOR)) {\n\t\t\tflush();\n\t\t\tctx.add(createProperty(stream, tokens, new Token(stream, 'termintator')));\n\t\t\ttokens.length = 0;\n\t\t} else if (stream.eat(RULE_START)) {\n\t\t\tflush();\n\t\t\tif (tokens.length > 0) {\n\t\t\t\tchild = tokens[0].type === 'at-keyword'\n\t\t\t\t? createAtRule(stream, tokens, new Token(stream, 'body-start'))\n\t\t\t\t: createRule(stream, tokens, new Token(stream, 'body-start'));\n\t\t\t\tctx.add(child);\n\t\t\t\tctx = child;\n\t\t\t\ttokens.length = 0;\n\t\t\t}\n\t\t\t\n\t\t} else if (stream.eat(RULE_END)) {\n\t\t\tflush();\n\n\t\t\t// Finalize context section\n\t\t\tctx.add(createProperty(stream, tokens));\n\n\t\t\tif (ctx.type !== 'stylesheet') {\n\t\t\t\t// In case of invalid stylesheet with redundant `}`,\n\t\t\t\t// don\u2019t modify root section.\n\t\t\t\tctx.contentEndToken = new Token(stream, 'body-end');\n\t\t\t\tctx = ctx.parent;\n\t\t\t}\n\n\t\t\ttokens.length = 0;\n\t\t} else if (token = atKeyword(stream)) {\n\t\t\t// Explictly consume @-tokens since it defines how rule or property\n\t\t\t// should be pre-parsed\n\t\t\tflush();\n\t\t\ttokens.push(token);\n\t\t} else if (eatUrl(stream) || eatInterpolation(stream) || eatBacktick(stream) \n\t\t\t\t|| eatBraces(stream, root) || eatString$1(stream) || stream.next()) {\n\t\t\t// NB explicitly consume `url()` token since it may contain\n\t\t\t// an unquoted url like `http://example.com` which interferes\n\t\t\t// with single-line comment\n\t\t\taccum = accum || new Token(stream, 'preparse');\n\t\t\taccum.end = stream.pos;\n\t\t} else {\n\t\t\tthrow new Error(`Unexpected end-of-stream at ${stream.pos}`);\n\t\t}\n\t}\n\n\tif (accum) {\n\t\ttokens.push(accum);\n\t}\n\n\t// Finalize all the rest properties\n\tctx.add(createProperty(stream, tokens));\n\n\t// Finalize unterminated rules\n\tstream.start = stream.pos;\n\twhile (ctx && ctx !== root) {\n\t\tctx.contentEndToken = new Token(stream, 'body-end');\n\t\tctx = ctx.parent;\n\t}\n\n\treturn root;\n}\n\n/**\n * Parses given source into tokens\n * @param {String|StreamReader} source\n * @param {Function} [consumer] Token consumer function, for example, `selector`,\n * `value` etc. from `lib/tokens` module. Default is generic `consumeToken`\n * @return {Token[]}\n */\nfunction lexer(source, consumer) {\n\tconsumer = consumer || consumeToken;\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst result = [];\n\tlet token;\n\n\twhile (!stream.eof() && (token = consumer(stream))) {\n\t\tresult.push(token);\n\t}\n\n\treturn result;\n}\n\n/**\n * Consumes content inside round braces. Mostly used to skip `;` token inside\n * expressions since in LESS it is also used to separate function arguments\n * @param {StringReader} stream\n * @param {Stylesheet} root A stylesheet root. Used to accumulate comments\n * @return {Boolean}\n */\nfunction eatBraces(stream, root) {\n\tif (stream.eat(LBRACE)) {\n\t\tlet stack = 1, token;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (stream.eat(RBRACE)) {\n\t\t\t\tstack--;\n\t\t\t\tif (!stack) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (stream.eat(LBRACE)) {\n\t\t\t\tstack++;\n\t\t\t} else if (eatUrl(stream) || eatString$1(stream)) {\n\t\t\t\tcontinue;\n\t\t\t} else if (token = comment(stream)) {\n\t\t\t\troot.addComment(token);\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport { lexer, Token, any, selector, value, keyword, variable, formatting, comment, whitespace, ident, string, url, interpolation, backtick, parseMediaExpression, parsePropertyName, parsePropertyValue, parseSelector, createProperty, createRule, createAtRule };export default parseStylesheet;\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport { TextDocument } from 'vscode';\n\n/**\n * A stream reader for VSCode's `TextDocument`\n * Based on @emmetio/stream-reader and @emmetio/atom-plugin\n */\nexport class DocumentStreamReader {\n\tprivate document: TextDocument;\n\tprivate start: number;\n\tprivate _eof: number;\n\tprivate _sof: number;\n\tpublic pos: number;\n\n\tconstructor(document: TextDocument, pos?: number, limit?: [number, number]) {\n\t\tthis.document = document;\n\t\tthis.start = this.pos = pos ? pos : 0;\n\t\tthis._sof = limit ? limit[0] : 0;\n\t\tthis._eof = limit ? limit[1] : document.getText().length;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the start of the file.\n\t */\n\tsof(): boolean {\n\t\treturn this.pos <= this._sof;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the end of the file.\n\t */\n\teof(): boolean {\n\t\treturn this.pos >= this._eof;\n\t}\n\n\t/**\n\t * Creates a new stream instance which is limited to given range for given document\n\t */\n\tlimit(start: number, end: number): DocumentStreamReader {\n\t\treturn new DocumentStreamReader(this.document, start, [start, end]);\n\t}\n\n\t/**\n\t * Returns the next character code in the stream without advancing it.\n\t * Will return NaN at the end of the file.\n\t */\n\tpeek(): number {\n\t\tif (this.eof()) {\n\t\t\treturn NaN;\n\t\t}\n\t\treturn this.document.getText().charCodeAt(this.pos);\n\t}\n\n\t/**\n\t * Returns the next character in the stream and advances it.\n\t * Also returns NaN when no more characters are available.\n\t */\n\tnext(): number {\n\t\tif (this.eof()) {\n\t\t\treturn NaN;\n\t\t}\n\n\t\tconst code = this.document.getText().charCodeAt(this.pos);\n\t\tthis.pos++;\n\n\t\tif (this.eof()) {\n\t\t\t// restrict pos to eof, if in case it got moved beyond eof\n\t\t\tthis.pos = this._eof;\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Backs up the stream n characters. Backing it up further than the\n\t * start of the current token will cause things to break, so be careful.\n\t */\n\tbackUp(n: number): number {\n\t\tthis.pos -= n;\n\t\tif (this.pos < 0) {\n\t\t\tthis.pos = 0;\n\t\t}\n\t\treturn this.peek();\n\t}\n\n\t/**\n\t * Get the string between the start of the current token and the\n\t * current stream position.\n\t */\n\tcurrent(): string {\n\t\treturn this.substring(this.start, this.pos);\n\t}\n\n\t/**\n\t * Returns contents for given range\n\t */\n\tsubstring(from: number, to: number): string {\n\t\treturn this.document.getText().substring(from, to);\n\t}\n\n\t/**\n\t * Creates error object with current stream state\n\t */\n\terror(message: string): Error {\n\t\tconst err = new Error(`${message} at offset ${this.pos}`);\n\t\treturn err;\n\t}\n\n\t/**\n\t * `match` can be a character code or a function that takes a character code\n\t * and returns a boolean. If the next character in the stream 'matches'\n\t * the given argument, it is consumed and returned.\n\t * Otherwise, `false` is returned.\n\t */\n\teat(match: number | Function): boolean {\n\t\tconst ch = this.peek();\n\t\tconst ok = typeof match === 'function' ? match(ch) : ch === match;\n\n\t\tif (ok) {\n\t\t\tthis.next();\n\t\t}\n\n\t\treturn ok;\n\t}\n\n\t/**\n\t * Repeatedly calls <code>eat</code> with the given argument, until it\n\t * fails. Returns <code>true</code> if any characters were eaten.\n\t */\n\teatWhile(match: number | Function): boolean {\n\t\tconst start = this.pos;\n\t\twhile (!this.eof() && this.eat(match)) { }\n\t\treturn this.pos !== start;\n\t}\n}\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (const change of changes) {\n if (FullTextDocument.isIncremental(change)) {\n // makes sure start is before end\n const range = getWellformedRange(change.range);\n // update content\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n // update the offsets\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n }\n else {\n if (addedLineOffsets.length < 10000) {\n lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n }\n else { // avoid too many arguments for splice\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n }\n else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = undefined;\n }\n else {\n throw new Error('Unknown change event received');\n }\n }\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n const lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n const line = low - 1;\n offset = this.ensureBeforeEOL(offset, lineOffsets[line]);\n return { line, character: offset - lineOffsets[line] };\n }\n offsetAt(position) {\n const lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n const lineOffset = lineOffsets[position.line];\n if (position.character <= 0) {\n return lineOffset;\n }\n const nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n const offset = Math.min(lineOffset + position.character, nextLineOffset);\n return this.ensureBeforeEOL(offset, lineOffset);\n }\n ensureBeforeEOL(offset, lineOffset) {\n while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {\n offset--;\n }\n return offset;\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range !== undefined &&\n (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n }\n static isFull(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n }\n}\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n }\n else {\n throw new Error('TextDocument.update: document must be created by TextDocument.create');\n }\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n const text = document.getText();\n const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n const diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n const startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error('Overlapping edit');\n }\n else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join('');\n }\n TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n const ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n if (isEOL(ch)) {\n if (ch === 13 /* CharCode.CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction isEOL(char) {\n return char === 13 /* CharCode.CarriageReturn */ || char === 10 /* CharCode.LineFeed */;\n}\nfunction getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range };\n }\n return textEdit;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode';\nimport { Node as FlatNode } from 'EmmetFlatNode';\nimport parse from '@emmetio/html-matcher';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { isStyleSheet } from './util';\n\ntype Pair<K, V> = {\n\tkey: K;\n\tvalue: V;\n};\n\n// Map(filename, Pair(fileVersion, rootNodeOfParsedContent))\nconst _parseCache = new Map<string, Pair<number, FlatNode> | undefined>();\n\nexport function getRootNode(document: TextDocument, useCache: boolean): FlatNode {\n\tconst key = document.uri.toString();\n\tconst result = _parseCache.get(key);\n\tconst documentVersion = document.version;\n\tif (useCache && result) {\n\t\tif (documentVersion === result.key) {\n\t\t\treturn result.value;\n\t\t}\n\t}\n\n\tconst parseContent = isStyleSheet(document.languageId) ? parseStylesheet : parse;\n\tconst rootNode = parseContent(document.getText());\n\tif (useCache) {\n\t\t_parseCache.set(key, { key: documentVersion, value: rootNode });\n\t}\n\treturn rootNode;\n}\n\nexport function addFileToParseCache(document: TextDocument) {\n\tconst filename = document.uri.toString();\n\t_parseCache.set(filename, undefined);\n}\n\nexport function removeFileFromParseCache(document: TextDocument) {\n\tconst filename = document.uri.toString();\n\t_parseCache.delete(filename);\n}\n\nexport function clearParseCache() {\n\t_parseCache.clear();\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getRootNode } from './parseDocument';\nimport { validate, getHtmlFlatNode, offsetRangeToVsRange } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nexport function removeTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst finalRangesToRemove = Array.from(editor.selections).reverse()\n\t\t.reduce<vscode.Range[]>((prev, selection) =>\n\t\t\tprev.concat(getRangesToRemove(editor.document, rootNode, selection)), []);\n\n\treturn editor.edit(editBuilder => {\n\t\tfinalRangesToRemove.forEach(range => {\n\t\t\teditBuilder.delete(range);\n\t\t});\n\t});\n}\n\n/**\n * Calculates the ranges to remove, along with what to replace those ranges with.\n * It finds the node to remove based on the selection's start position\n * and then removes that node, reindenting the content in between.\n */\nfunction getRangesToRemove(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Range[] {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToUpdate = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!nodeToUpdate) {\n\t\treturn [];\n\t}\n\n\tlet openTagRange: vscode.Range | undefined;\n\tif (nodeToUpdate.open) {\n\t\topenTagRange = offsetRangeToVsRange(document, nodeToUpdate.open.start, nodeToUpdate.open.end);\n\t}\n\tlet closeTagRange: vscode.Range | undefined;\n\tif (nodeToUpdate.close) {\n\t\tcloseTagRange = offsetRangeToVsRange(document, nodeToUpdate.close.start, nodeToUpdate.close.end);\n\t}\n\n\tif (openTagRange && closeTagRange) {\n\t\tconst innerCombinedRange = new vscode.Range(\n\t\t\topenTagRange.end.line,\n\t\t\topenTagRange.end.character,\n\t\t\tcloseTagRange.start.line,\n\t\t\tcloseTagRange.start.character);\n\t\tconst outerCombinedRange = new vscode.Range(\n\t\t\topenTagRange.start.line,\n\t\t\topenTagRange.start.character,\n\t\t\tcloseTagRange.end.line,\n\t\t\tcloseTagRange.end.character);\n\t\t// Special case: there is only whitespace in between.\n\t\tif (document.getText(innerCombinedRange).trim() === '' && nodeToUpdate.name !== 'pre') {\n\t\t\treturn [outerCombinedRange];\n\t\t}\n\t}\n\n\tconst rangesToRemove = [];\n\tif (openTagRange) {\n\t\trangesToRemove.push(openTagRange);\n\t\tif (closeTagRange) {\n\t\t\tconst indentAmountToRemove = calculateIndentAmountToRemove(document, openTagRange, closeTagRange);\n\t\t\tlet firstInnerNonEmptyLine: number | undefined;\n\t\t\tlet lastInnerNonEmptyLine: number | undefined;\n\t\t\tfor (let i = openTagRange.start.line + 1; i < closeTagRange.start.line; i++) {\n\t\t\t\tif (!document.lineAt(i).isEmptyOrWhitespace) {\n\t\t\t\t\trangesToRemove.push(new vscode.Range(i, 0, i, indentAmountToRemove));\n\t\t\t\t\tif (firstInnerNonEmptyLine === undefined) {\n\t\t\t\t\t\t// We found the first non-empty inner line.\n\t\t\t\t\t\tfirstInnerNonEmptyLine = i;\n\t\t\t\t\t}\n\t\t\t\t\tlastInnerNonEmptyLine = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the entire last line + empty lines preceding it\n\t\t\t// if it is just the tag, otherwise remove just the tag.\n\t\t\tif (entireLineIsTag(document, closeTagRange) && lastInnerNonEmptyLine) {\n\t\t\t\trangesToRemove.push(new vscode.Range(\n\t\t\t\t\tlastInnerNonEmptyLine,\n\t\t\t\t\tdocument.lineAt(lastInnerNonEmptyLine).range.end.character,\n\t\t\t\t\tcloseTagRange.end.line,\n\t\t\t\t\tcloseTagRange.end.character));\n\t\t\t} else {\n\t\t\t\trangesToRemove.push(closeTagRange);\n\t\t\t}\n\n\t\t\t// Remove the entire first line + empty lines proceding it\n\t\t\t// if it is just the tag, otherwise keep on removing just the tag.\n\t\t\tif (entireLineIsTag(document, openTagRange) && firstInnerNonEmptyLine) {\n\t\t\t\trangesToRemove[1] = new vscode.Range(\n\t\t\t\t\topenTagRange.start.line,\n\t\t\t\t\topenTagRange.start.character,\n\t\t\t\t\tfirstInnerNonEmptyLine,\n\t\t\t\t\tdocument.lineAt(firstInnerNonEmptyLine).firstNonWhitespaceCharacterIndex);\n\t\t\t\trangesToRemove.shift();\n\t\t\t}\n\t\t}\n\t}\n\treturn rangesToRemove;\n}\n\nfunction entireLineIsTag(document: vscode.TextDocument, range: vscode.Range): boolean {\n\tif (range.start.line === range.end.line) {\n\t\tconst lineText = document.lineAt(range.start).text;\n\t\tconst tagText = document.getText(range);\n\t\tif (lineText.trim() === tagText) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Calculates the amount of indent to remove for getRangesToRemove.\n */\nfunction calculateIndentAmountToRemove(document: vscode.TextDocument, openRange: vscode.Range, closeRange: vscode.Range): number {\n\tconst startLine = openRange.start.line;\n\tconst endLine = closeRange.start.line;\n\n\tconst startLineIndent = document.lineAt(startLine).firstNonWhitespaceCharacterIndex;\n\tconst endLineIndent = document.lineAt(endLine).firstNonWhitespaceCharacterIndex;\n\n\tlet contentIndent: number | undefined;\n\tfor (let i = startLine + 1; i < endLine; i++) {\n\t\tconst line = document.lineAt(i);\n\t\tif (!line.isEmptyOrWhitespace) {\n\t\t\tconst lineIndent = line.firstNonWhitespaceCharacterIndex;\n\t\t\tcontentIndent = !contentIndent ? lineIndent : Math.min(contentIndent, lineIndent);\n\t\t}\n\t}\n\n\tlet indentAmount = 0;\n\tif (contentIndent) {\n\t\tif (contentIndent < startLineIndent || contentIndent < endLineIndent) {\n\t\t\tindentAmount = 0;\n\t\t}\n\t\telse {\n\t\t\tindentAmount = Math.min(contentIndent - startLineIndent, contentIndent - endLineIndent);\n\t\t}\n\t}\n\treturn indentAmount;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getHtmlFlatNode, validate } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\ninterface TagRange {\n\tname: string;\n\trange: vscode.Range;\n}\n\nexport async function updateTag(tagName: string | undefined): Promise<boolean | undefined> {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst rangesToUpdate = editor.selections\n\t\t.reduceRight<TagRange[]>((prev, selection) =>\n\t\t\tprev.concat(getRangesToUpdate(document, selection, rootNode)), []);\n\tif (!rangesToUpdate.length) {\n\t\treturn;\n\t}\n\tconst firstTagName = rangesToUpdate[0].name;\n\tconst tagNamesAreEqual = rangesToUpdate.every(range => range.name === firstTagName);\n\n\tif (tagName === undefined) {\n\t\ttagName = await vscode.window.showInputBox({\n\t\t\tprompt: 'Enter Tag',\n\t\t\tvalue: tagNamesAreEqual ? firstTagName : undefined\n\t\t});\n\n\t\t// TODO: Accept fragments for JSX and TSX\n\t\tif (!tagName) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\trangesToUpdate.forEach(tagRange => {\n\t\t\teditBuilder.replace(tagRange.range, tagName!);\n\t\t});\n\t});\n}\n\nfunction getRangesFromNode(node: HtmlFlatNode, document: vscode.TextDocument): TagRange[] {\n\tconst ranges: TagRange[] = [];\n\tif (node.open) {\n\t\tconst start = document.positionAt(node.open.start);\n\t\tranges.push({\n\t\t\tname: node.name,\n\t\t\trange: new vscode.Range(start.translate(0, 1), start.translate(0, 1).translate(0, node.name.length))\n\t\t});\n\t}\n\tif (node.close) {\n\t\tconst endTagStart = document.positionAt(node.close.start);\n\t\tconst end = document.positionAt(node.close.end);\n\t\tranges.push({\n\t\t\tname: node.name,\n\t\t\trange: new vscode.Range(endTagStart.translate(0, 2), end.translate(0, -1))\n\t\t});\n\t}\n\treturn ranges;\n}\n\nfunction getRangesToUpdate(document: vscode.TextDocument, selection: vscode.Selection, rootNode: HtmlFlatNode): TagRange[] {\n\tconst documentText = document.getText();\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToUpdate = getHtmlFlatNode(documentText, rootNode, offset, true);\n\tif (!nodeToUpdate) {\n\t\treturn [];\n\t}\n\treturn getRangesFromNode(nodeToUpdate, document);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, getHtmlFlatNode, offsetRangeToSelection } from './util';\nimport { getRootNode } from './parseDocument';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nexport function matchTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst updatedSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst updatedSelection = getUpdatedSelections(document, rootNode, selection.start);\n\t\tif (updatedSelection) {\n\t\t\tupdatedSelections.push(updatedSelection);\n\t\t}\n\t});\n\tif (updatedSelections.length) {\n\t\teditor.selections = updatedSelections;\n\t\teditor.revealRange(editor.selections[updatedSelections.length - 1]);\n\t}\n}\n\nfunction getUpdatedSelections(document: vscode.TextDocument, rootNode: HtmlFlatNode, position: vscode.Position): vscode.Selection | undefined {\n\tconst offset = document.offsetAt(position);\n\tconst currentNode = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\t// If no opening/closing tag or cursor is between open and close tag, then no-op\n\tif (!currentNode.open\n\t\t|| !currentNode.close\n\t\t|| (offset > currentNode.open.end && offset < currentNode.close.start)) {\n\t\treturn;\n\t}\n\n\t// Place cursor inside the close tag if cursor is inside the open tag, else place it inside the open tag\n\tconst finalOffset = (offset <= currentNode.open.end) ? currentNode.close.start + 2 : currentNode.start + 1;\n\treturn offsetRangeToSelection(document, finalOffset, finalOffset);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getHtmlFlatNode, offsetRangeToSelection, validate } from './util';\nimport { getRootNode } from './parseDocument';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nlet balanceOutStack: Array<readonly vscode.Selection[]> = [];\nlet lastBalancedSelections: readonly vscode.Selection[] = [];\n\nexport function balanceOut() {\n\tbalance(true);\n}\n\nexport function balanceIn() {\n\tbalance(false);\n}\n\nfunction balance(out: boolean) {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst rangeFn = out ? getRangeToBalanceOut : getRangeToBalanceIn;\n\tlet newSelections: readonly vscode.Selection[] = editor.selections.map(selection => {\n\t\treturn rangeFn(document, rootNode, selection);\n\t});\n\n\t// check whether we are starting a balance elsewhere\n\tif (areSameSelections(lastBalancedSelections, editor.selections)) {\n\t\t// we are not starting elsewhere, so use the stack as-is\n\t\tif (out) {\n\t\t\t// make sure we are able to expand outwards\n\t\t\tif (!areSameSelections(editor.selections, newSelections)) {\n\t\t\t\tbalanceOutStack.push(editor.selections);\n\t\t\t}\n\t\t} else if (balanceOutStack.length) {\n\t\t\tnewSelections = balanceOutStack.pop()!;\n\t\t}\n\t} else {\n\t\t// we are starting elsewhere, so reset the stack\n\t\tbalanceOutStack = out ? [editor.selections] : [];\n\t}\n\n\teditor.selections = newSelections;\n\tlastBalancedSelections = editor.selections;\n}\n\nfunction getRangeToBalanceOut(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Selection {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToBalance = getHtmlFlatNode(document.getText(), rootNode, offset, false);\n\tif (!nodeToBalance) {\n\t\treturn selection;\n\t}\n\tif (!nodeToBalance.open || !nodeToBalance.close) {\n\t\treturn offsetRangeToSelection(document, nodeToBalance.start, nodeToBalance.end);\n\t}\n\n\t// Set reverse direction if we were in the end tag\n\tlet innerSelection: vscode.Selection;\n\tlet outerSelection: vscode.Selection;\n\tif (nodeToBalance.close.start <= offset && nodeToBalance.close.end > offset) {\n\t\tinnerSelection = offsetRangeToSelection(document, nodeToBalance.close.start, nodeToBalance.open.end);\n\t\touterSelection = offsetRangeToSelection(document, nodeToBalance.close.end, nodeToBalance.open.start);\n\t}\n\telse {\n\t\tinnerSelection = offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);\n\t\touterSelection = offsetRangeToSelection(document, nodeToBalance.open.start, nodeToBalance.close.end);\n\t}\n\n\tif (innerSelection.contains(selection) && !innerSelection.isEqual(selection)) {\n\t\treturn innerSelection;\n\t}\n\tif (outerSelection.contains(selection) && !outerSelection.isEqual(selection)) {\n\t\treturn outerSelection;\n\t}\n\treturn selection;\n}\n\nfunction getRangeToBalanceIn(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Selection {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToBalance = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!nodeToBalance) {\n\t\treturn selection;\n\t}\n\n\tconst selectionStart = document.offsetAt(selection.start);\n\tconst selectionEnd = document.offsetAt(selection.end);\n\tif (nodeToBalance.open && nodeToBalance.close) {\n\t\tconst entireNodeSelected = selectionStart === nodeToBalance.start && selectionEnd === nodeToBalance.end;\n\t\tconst startInOpenTag = selectionStart > nodeToBalance.open.start && selectionStart < nodeToBalance.open.end;\n\t\tconst startInCloseTag = selectionStart > nodeToBalance.close.start && selectionStart < nodeToBalance.close.end;\n\n\t\tif (entireNodeSelected || startInOpenTag || startInCloseTag) {\n\t\t\treturn offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);\n\t\t}\n\t}\n\n\tif (!nodeToBalance.firstChild) {\n\t\treturn selection;\n\t}\n\n\tconst firstChild = nodeToBalance.firstChild;\n\tif (selectionStart === firstChild.start\n\t\t&& selectionEnd === firstChild.end\n\t\t&& firstChild.open\n\t\t&& firstChild.close) {\n\t\treturn offsetRangeToSelection(document, firstChild.open.end, firstChild.close.start);\n\t}\n\n\treturn offsetRangeToSelection(document, firstChild.start, firstChild.end);\n}\n\nfunction areSameSelections(a: readonly vscode.Selection[], b: readonly vscode.Selection[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (!a[i].isEqual(b[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, getEmmetMode, getEmmetConfiguration, getHtmlFlatNode, offsetRangeToVsRange } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\nexport function splitJoinTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst documentText = document.getText();\n\t\t\tconst offset = document.offsetAt(selection.start);\n\t\t\tconst nodeToUpdate = getHtmlFlatNode(documentText, rootNode, offset, true);\n\t\t\tif (nodeToUpdate) {\n\t\t\t\tconst textEdit = getRangesToReplace(document, nodeToUpdate);\n\t\t\t\teditBuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction getRangesToReplace(document: vscode.TextDocument, nodeToUpdate: HtmlFlatNode): vscode.TextEdit {\n\tlet rangeToReplace: vscode.Range;\n\tlet textToReplaceWith: string;\n\n\tif (!nodeToUpdate.open || !nodeToUpdate.close) {\n\t\t// Split Tag\n\t\tconst nodeText = document.getText().substring(nodeToUpdate.start, nodeToUpdate.end);\n\t\tconst m = nodeText.match(/(\\s*\\/)?>$/);\n\t\tconst end = nodeToUpdate.end;\n\t\tconst start = m ? end - m[0].length : end;\n\n\t\trangeToReplace = offsetRangeToVsRange(document, start, end);\n\t\ttextToReplaceWith = `></${nodeToUpdate.name}>`;\n\t} else {\n\t\t// Join Tag\n\t\tconst start = nodeToUpdate.open.end - 1;\n\t\tconst end = nodeToUpdate.end;\n\t\trangeToReplace = offsetRangeToVsRange(document, start, end);\n\t\ttextToReplaceWith = '/>';\n\n\t\tconst emmetMode = getEmmetMode(document.languageId, {}, []) ?? '';\n\t\tconst emmetConfig = getEmmetConfiguration(emmetMode);\n\t\tif (emmetMode && emmetConfig.syntaxProfiles[emmetMode] &&\n\t\t\t(emmetConfig.syntaxProfiles[emmetMode]['selfClosingStyle'] === 'xhtml' || emmetConfig.syntaxProfiles[emmetMode]['self_closing_tag'] === 'xhtml')) {\n\t\t\ttextToReplaceWith = ' ' + textToReplaceWith;\n\t\t}\n\t}\n\n\treturn new vscode.TextEdit(rangeToReplace, textToReplaceWith);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node } from 'EmmetFlatNode';\nimport { getFlatNode, offsetRangeToVsRange, validate } from './util';\nimport { getRootNode } from './parseDocument';\n\nexport function mergeLines() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\n\tconst rootNode = getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst textEdit = getRangesToReplace(editor.document, selection, rootNode);\n\t\t\tif (textEdit) {\n\t\t\t\teditBuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction getRangesToReplace(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): vscode.TextEdit | undefined {\n\tlet startNodeToUpdate: Node | undefined;\n\tlet endNodeToUpdate: Node | undefined;\n\n\tconst selectionStart = document.offsetAt(selection.start);\n\tconst selectionEnd = document.offsetAt(selection.end);\n\tif (selection.isEmpty) {\n\t\tstartNodeToUpdate = endNodeToUpdate = getFlatNode(rootNode, selectionStart, true);\n\t} else {\n\t\tstartNodeToUpdate = getFlatNode(rootNode, selectionStart, true);\n\t\tendNodeToUpdate = getFlatNode(rootNode, selectionEnd, true);\n\t}\n\n\tif (!startNodeToUpdate || !endNodeToUpdate) {\n\t\treturn;\n\t}\n\n\tconst startPos = document.positionAt(startNodeToUpdate.start);\n\tconst startLine = startPos.line;\n\tconst startChar = startPos.character;\n\tconst endPos = document.positionAt(endNodeToUpdate.end);\n\tconst endLine = endPos.line;\n\tif (startLine === endLine) {\n\t\treturn;\n\t}\n\n\tconst rangeToReplace = offsetRangeToVsRange(document, startNodeToUpdate.start, endNodeToUpdate.end);\n\tlet textToReplaceWith = document.lineAt(startLine).text.substr(startChar);\n\tfor (let i = startLine + 1; i <= endLine; i++) {\n\t\ttextToReplaceWith += document.lineAt(i).text.trim();\n\t}\n\n\treturn new vscode.TextEdit(rangeToReplace, textToReplaceWith);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getNodesInBetween, getFlatNode, getHtmlFlatNode, sameNodes, isStyleSheet, validate, offsetRangeToVsRange, offsetRangeToSelection } from './util';\nimport { Node, Stylesheet, Rule } from 'EmmetFlatNode';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { getRootNode } from './parseDocument';\n\nlet startCommentStylesheet: string;\nlet endCommentStylesheet: string;\nlet startCommentHTML: string;\nlet endCommentHTML: string;\n\nexport function toggleComment(): Thenable<boolean> | undefined {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tsetupCommentSpacing();\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst rootNode = getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tconst allEdits: vscode.TextEdit[][] = [];\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst edits = isStyleSheet(editor.document.languageId) ? toggleCommentStylesheet(editor.document, selection, <Stylesheet>rootNode) : toggleCommentHTML(editor.document, selection, rootNode!);\n\t\t\tif (edits.length > 0) {\n\t\t\t\tallEdits.push(edits);\n\t\t\t}\n\t\t});\n\n\t\t// Apply edits in order so we can skip nested ones.\n\t\tallEdits.sort((arr1, arr2) => {\n\t\t\tconst result = arr1[0].range.start.line - arr2[0].range.start.line;\n\t\t\treturn result === 0 ? arr1[0].range.start.character - arr2[0].range.start.character : result;\n\t\t});\n\t\tlet lastEditPosition = new vscode.Position(0, 0);\n\t\tfor (const edits of allEdits) {\n\t\t\tif (edits[0].range.end.isAfterOrEqual(lastEditPosition)) {\n\t\t\t\tedits.forEach(x => {\n\t\t\t\t\teditBuilder.replace(x.range, x.newText);\n\t\t\t\t\tlastEditPosition = x.range.end;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction toggleCommentHTML(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): vscode.TextEdit[] {\n\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tconst documentText = document.getText();\n\n\tconst startNode = getHtmlFlatNode(documentText, rootNode, selectionStartOffset, true);\n\tconst endNode = getHtmlFlatNode(documentText, rootNode, selectionEndOffset, true);\n\n\tif (!startNode || !endNode) {\n\t\treturn [];\n\t}\n\n\tif (sameNodes(startNode, endNode) && startNode.name === 'style'\n\t\t&& startNode.open && startNode.close\n\t\t&& startNode.open.end < selectionStartOffset\n\t\t&& startNode.close.start > selectionEndOffset) {\n\t\tconst buffer = ' '.repeat(startNode.open.end) +\n\t\t\tdocumentText.substring(startNode.open.end, startNode.close.start);\n\t\tconst cssRootNode = parseStylesheet(buffer);\n\t\treturn toggleCommentStylesheet(document, selection, cssRootNode);\n\t}\n\n\tconst allNodes: Node[] = getNodesInBetween(startNode, endNode);\n\tlet edits: vscode.TextEdit[] = [];\n\n\tallNodes.forEach(node => {\n\t\tedits = edits.concat(getRangesToUnCommentHTML(node, document));\n\t});\n\n\tif (startNode.type === 'comment') {\n\t\treturn edits;\n\t}\n\n\n\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, allNodes[0].start, allNodes[0].start), startCommentHTML));\n\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, allNodes[allNodes.length - 1].end, allNodes[allNodes.length - 1].end), endCommentHTML));\n\n\treturn edits;\n}\n\nfunction getRangesToUnCommentHTML(node: Node, document: vscode.TextDocument): vscode.TextEdit[] {\n\tlet unCommentTextEdits: vscode.TextEdit[] = [];\n\n\t// If current node is commented, then uncomment and return\n\tif (node.type === 'comment') {\n\t\tunCommentTextEdits.push(new vscode.TextEdit(offsetRangeToVsRange(document, node.start, node.start + startCommentHTML.length), ''));\n\t\tunCommentTextEdits.push(new vscode.TextEdit(offsetRangeToVsRange(document, node.end - endCommentHTML.length, node.end), ''));\n\t\treturn unCommentTextEdits;\n\t}\n\n\t// All children of current node should be uncommented\n\tnode.children.forEach(childNode => {\n\t\tunCommentTextEdits = unCommentTextEdits.concat(getRangesToUnCommentHTML(childNode, document));\n\t});\n\n\treturn unCommentTextEdits;\n}\n\nfunction toggleCommentStylesheet(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Stylesheet): vscode.TextEdit[] {\n\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\tlet selectionStartOffset = document.offsetAt(selectionStart);\n\tlet selectionEndOffset = document.offsetAt(selectionEnd);\n\n\tconst startNode = getFlatNode(rootNode, selectionStartOffset, true);\n\tconst endNode = getFlatNode(rootNode, selectionEndOffset, true);\n\n\tif (!selection.isEmpty) {\n\t\tselectionStartOffset = adjustStartNodeCss(startNode, selectionStartOffset, rootNode);\n\t\tselectionEndOffset = adjustEndNodeCss(endNode, selectionEndOffset, rootNode);\n\t\tselection = offsetRangeToSelection(document, selectionStartOffset, selectionEndOffset);\n\t} else if (startNode) {\n\t\tselectionStartOffset = startNode.start;\n\t\tselectionEndOffset = startNode.end;\n\t\tselection = offsetRangeToSelection(document, selectionStartOffset, selectionEndOffset);\n\t}\n\n\t// Uncomment the comments that intersect with the selection.\n\tconst rangesToUnComment: vscode.Range[] = [];\n\tconst edits: vscode.TextEdit[] = [];\n\trootNode.comments.forEach(comment => {\n\t\tconst commentRange = offsetRangeToVsRange(document, comment.start, comment.end);\n\t\tif (selection.intersection(commentRange)) {\n\t\t\trangesToUnComment.push(commentRange);\n\t\t\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, comment.start, comment.start + startCommentStylesheet.length), ''));\n\t\t\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, comment.end - endCommentStylesheet.length, comment.end), ''));\n\t\t}\n\t});\n\n\tif (edits.length > 0) {\n\t\treturn edits;\n\t}\n\n\treturn [\n\t\tnew vscode.TextEdit(new vscode.Range(selection.start, selection.start), startCommentStylesheet),\n\t\tnew vscode.TextEdit(new vscode.Range(selection.end, selection.end), endCommentStylesheet)\n\t];\n}\n\nfunction setupCommentSpacing() {\n\tconst config: boolean | undefined = vscode.workspace.getConfiguration('editor.comments').get('insertSpace');\n\tif (config) {\n\t\tstartCommentStylesheet = '/* ';\n\t\tendCommentStylesheet = ' */';\n\t\tstartCommentHTML = '<!-- ';\n\t\tendCommentHTML = ' -->';\n\t} else {\n\t\tstartCommentStylesheet = '/*';\n\t\tendCommentStylesheet = '*/';\n\t\tstartCommentHTML = '<!--';\n\t\tendCommentHTML = '-->';\n\t}\n}\n\nfunction adjustStartNodeCss(node: Node | undefined, offset: number, rootNode: Stylesheet): number {\n\tfor (const comment of rootNode.comments) {\n\t\tif (comment.start <= offset && offset <= comment.end) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\tif (!node) {\n\t\treturn offset;\n\t}\n\n\tif (node.type === 'property') {\n\t\treturn node.start;\n\t}\n\n\tconst rule = <Rule>node;\n\tif (offset < rule.contentStartToken.end || !rule.firstChild) {\n\t\treturn rule.start;\n\t}\n\n\tif (offset < rule.firstChild.start) {\n\t\treturn offset;\n\t}\n\n\tlet newStartNode = rule.firstChild;\n\twhile (newStartNode.nextSibling && offset > newStartNode.end) {\n\t\tnewStartNode = newStartNode.nextSibling;\n\t}\n\n\treturn newStartNode.start;\n}\n\nfunction adjustEndNodeCss(node: Node | undefined, offset: number, rootNode: Stylesheet): number {\n\tfor (const comment of rootNode.comments) {\n\t\tif (comment.start <= offset && offset <= comment.end) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\tif (!node) {\n\t\treturn offset;\n\t}\n\n\tif (node.type === 'property') {\n\t\treturn node.end;\n\t}\n\n\tconst rule = <Rule>node;\n\tif (offset === rule.contentEndToken.end || !rule.firstChild) {\n\t\treturn rule.end;\n\t}\n\n\tif (offset > rule.children[rule.children.length - 1].end) {\n\t\treturn offset;\n\t}\n\n\tlet newEndNode = rule.children[rule.children.length - 1];\n\twhile (newEndNode.previousSibling && offset < newEndNode.start) {\n\t\tnewEndNode = newEndNode.previousSibling;\n\t}\n\n\treturn newEndNode.end;\n}\n\n\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate } from './util';\n\nexport function fetchEditPoint(direction: string): void {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\n\tconst newSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst updatedSelection = direction === 'next' ? nextEditPoint(selection, editor) : prevEditPoint(selection, editor);\n\t\tnewSelections.push(updatedSelection);\n\t});\n\teditor.selections = newSelections;\n\teditor.revealRange(editor.selections[editor.selections.length - 1]);\n}\n\nfunction nextEditPoint(selection: vscode.Selection, editor: vscode.TextEditor): vscode.Selection {\n\tfor (let lineNum = selection.anchor.line; lineNum < editor.document.lineCount; lineNum++) {\n\t\tconst updatedSelection = findEditPoint(lineNum, editor, selection.anchor, 'next');\n\t\tif (updatedSelection) {\n\t\t\treturn updatedSelection;\n\t\t}\n\t}\n\treturn selection;\n}\n\nfunction prevEditPoint(selection: vscode.Selection, editor: vscode.TextEditor): vscode.Selection {\n\tfor (let lineNum = selection.anchor.line; lineNum >= 0; lineNum--) {\n\t\tconst updatedSelection = findEditPoint(lineNum, editor, selection.anchor, 'prev');\n\t\tif (updatedSelection) {\n\t\t\treturn updatedSelection;\n\t\t}\n\t}\n\treturn selection;\n}\n\n\nfunction findEditPoint(lineNum: number, editor: vscode.TextEditor, position: vscode.Position, direction: string): vscode.Selection | undefined {\n\tconst line = editor.document.lineAt(lineNum);\n\tlet lineContent = line.text;\n\n\tif (lineNum !== position.line && line.isEmptyOrWhitespace && lineContent.length) {\n\t\treturn new vscode.Selection(lineNum, lineContent.length, lineNum, lineContent.length);\n\t}\n\n\tif (lineNum === position.line && direction === 'prev') {\n\t\tlineContent = lineContent.substr(0, position.character);\n\t}\n\tconst emptyAttrIndex = direction === 'next' ? lineContent.indexOf('\"\"', lineNum === position.line ? position.character : 0) : lineContent.lastIndexOf('\"\"');\n\tconst emptyTagIndex = direction === 'next' ? lineContent.indexOf('><', lineNum === position.line ? position.character : 0) : lineContent.lastIndexOf('><');\n\n\tlet winner = -1;\n\n\tif (emptyAttrIndex > -1 && emptyTagIndex > -1) {\n\t\twinner = direction === 'next' ? Math.min(emptyAttrIndex, emptyTagIndex) : Math.max(emptyAttrIndex, emptyTagIndex);\n\t} else if (emptyAttrIndex > -1) {\n\t\twinner = emptyAttrIndex;\n\t} else {\n\t\twinner = emptyTagIndex;\n\t}\n\n\tif (winner > -1) {\n\t\treturn new vscode.Selection(lineNum, winner + 1, lineNum, winner + 1);\n\t}\n\treturn;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, isStyleSheet } from './util';\nimport { nextItemHTML, prevItemHTML } from './selectItemHTML';\nimport { nextItemStylesheet, prevItemStylesheet } from './selectItemStylesheet';\nimport { HtmlNode, CssNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\nexport function fetchSelectItem(direction: string): void {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst newSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\t\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\n\t\tlet updatedSelection;\n\t\tif (isStyleSheet(editor.document.languageId)) {\n\t\t\tupdatedSelection = direction === 'next' ?\n\t\t\t\tnextItemStylesheet(document, selectionStart, selectionEnd, <CssNode>rootNode) :\n\t\t\t\tprevItemStylesheet(document, selectionStart, selectionEnd, <CssNode>rootNode);\n\t\t} else {\n\t\t\tupdatedSelection = direction === 'next' ?\n\t\t\t\tnextItemHTML(document, selectionStart, selectionEnd, <HtmlNode>rootNode) :\n\t\t\t\tprevItemHTML(document, selectionStart, selectionEnd, <HtmlNode>rootNode);\n\t\t}\n\t\tnewSelections.push(updatedSelection ? updatedSelection : selection);\n\t});\n\teditor.selections = newSelections;\n\teditor.revealRange(editor.selections[editor.selections.length - 1]);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getDeepestFlatNode, findNextWord, findPrevWord, getHtmlFlatNode, offsetRangeToSelection } from './util';\nimport { HtmlNode } from 'EmmetFlatNode';\n\nexport function nextItemHTML(document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, rootNode: HtmlNode): vscode.Selection | undefined {\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tlet currentNode = getHtmlFlatNode(document.getText(), rootNode, selectionEndOffset, false);\n\tlet nextNode: HtmlNode | undefined = undefined;\n\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\tif (currentNode.type !== 'comment') {\n\t\t// If cursor is in the tag name, select tag\n\t\tif (currentNode.open &&\n\t\t\tselectionEndOffset <= currentNode.open.start + currentNode.name.length) {\n\t\t\treturn getSelectionFromNode(document, currentNode);\n\t\t}\n\n\t\t// If cursor is in the open tag, look for attributes\n\t\tif (currentNode.open &&\n\t\t\tselectionEndOffset < currentNode.open.end) {\n\t\t\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\t\t\tconst attrSelection = getNextAttribute(document, selectionStartOffset, selectionEndOffset, currentNode);\n\t\t\tif (attrSelection) {\n\t\t\t\treturn attrSelection;\n\t\t\t}\n\t\t}\n\n\t\t// Get the first child of current node which is right after the cursor and is not a comment\n\t\tnextNode = currentNode.firstChild;\n\t\twhile (nextNode && (selectionEndOffset >= nextNode.end || nextNode.type === 'comment')) {\n\t\t\tnextNode = nextNode.nextSibling;\n\t\t}\n\t}\n\n\t// Get next sibling of current node which is not a comment. If none is found try the same on the parent\n\twhile (!nextNode && currentNode) {\n\t\tif (currentNode.nextSibling) {\n\t\t\tif (currentNode.nextSibling.type !== 'comment') {\n\t\t\t\tnextNode = currentNode.nextSibling;\n\t\t\t} else {\n\t\t\t\tcurrentNode = currentNode.nextSibling;\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentNode = currentNode.parent;\n\t\t}\n\t}\n\n\treturn nextNode && getSelectionFromNode(document, nextNode);\n}\n\nexport function prevItemHTML(document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, rootNode: HtmlNode): vscode.Selection | undefined {\n\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\tlet currentNode = getHtmlFlatNode(document.getText(), rootNode, selectionStartOffset, false);\n\tlet prevNode: HtmlNode | undefined = undefined;\n\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tif (currentNode.open &&\n\t\tcurrentNode.type !== 'comment' &&\n\t\tselectionStartOffset - 1 > currentNode.open.start) {\n\t\tif (selectionStartOffset < currentNode.open.end || !currentNode.firstChild || selectionEndOffset <= currentNode.firstChild.start) {\n\t\t\tprevNode = currentNode;\n\t\t} else {\n\t\t\t// Select the child that appears just before the cursor and is not a comment\n\t\t\tprevNode = currentNode.firstChild;\n\t\t\tlet oldOption: HtmlNode | undefined = undefined;\n\t\t\twhile (prevNode.nextSibling && selectionStartOffset >= prevNode.nextSibling.end) {\n\t\t\t\tif (prevNode && prevNode.type !== 'comment') {\n\t\t\t\t\toldOption = prevNode;\n\t\t\t\t}\n\t\t\t\tprevNode = prevNode.nextSibling;\n\t\t\t}\n\n\t\t\tprevNode = <HtmlNode>getDeepestFlatNode((prevNode && prevNode.type !== 'comment') ? prevNode : oldOption);\n\t\t}\n\t}\n\n\t// Select previous sibling which is not a comment. If none found, then select parent\n\twhile (!prevNode && currentNode) {\n\t\tif (currentNode.previousSibling) {\n\t\t\tif (currentNode.previousSibling.type !== 'comment') {\n\t\t\t\tprevNode = <HtmlNode>getDeepestFlatNode(currentNode.previousSibling);\n\t\t\t} else {\n\t\t\t\tcurrentNode = currentNode.previousSibling;\n\t\t\t}\n\t\t} else {\n\t\t\tprevNode = currentNode.parent;\n\t\t}\n\n\t}\n\n\tif (!prevNode) {\n\t\treturn undefined;\n\t}\n\n\tconst attrSelection = getPrevAttribute(document, selectionStartOffset, selectionEndOffset, prevNode);\n\treturn attrSelection ? attrSelection : getSelectionFromNode(document, prevNode);\n}\n\nfunction getSelectionFromNode(document: vscode.TextDocument, node: HtmlNode): vscode.Selection | undefined {\n\tif (node && node.open) {\n\t\tconst selectionStart = node.open.start + 1;\n\t\tconst selectionEnd = selectionStart + node.name.length;\n\t\treturn offsetRangeToSelection(document, selectionStart, selectionEnd);\n\t}\n\treturn undefined;\n}\n\nfunction getNextAttribute(document: vscode.TextDocument, selectionStart: number, selectionEnd: number, node: HtmlNode): vscode.Selection | undefined {\n\tif (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {\n\t\treturn;\n\t}\n\n\tfor (const attr of node.attributes) {\n\t\tif (selectionEnd < attr.start) {\n\t\t\t// select full attr\n\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t}\n\n\t\tif (!attr.value || attr.value.start === attr.value.end) {\n\t\t\t// No attr value to select\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ((selectionStart === attr.start && selectionEnd === attr.end) ||\n\t\t\tselectionEnd < attr.value.start) {\n\t\t\t// cursor is in attr name, so select full attr value\n\t\t\treturn offsetRangeToSelection(document, attr.value.start, attr.value.end);\n\t\t}\n\n\t\t// Fetch the next word in the attr value\n\t\tif (!attr.value.toString().includes(' ')) {\n\t\t\t// attr value does not have space, so no next word to find\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet pos: number | undefined = undefined;\n\t\tif (selectionStart === attr.value.start && selectionEnd === attr.value.end) {\n\t\t\tpos = -1;\n\t\t}\n\t\tif (pos === undefined && selectionEnd < attr.end) {\n\t\t\tconst selectionEndCharacter = document.positionAt(selectionEnd).character;\n\t\t\tconst attrValueStartCharacter = document.positionAt(attr.value.start).character;\n\t\t\tpos = selectionEndCharacter - attrValueStartCharacter - 1;\n\t\t}\n\n\t\tif (pos !== undefined) {\n\t\t\tconst [newSelectionStartOffset, newSelectionEndOffset] = findNextWord(attr.value.toString(), pos);\n\t\t\tif (newSelectionStartOffset === undefined || newSelectionEndOffset === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {\n\t\t\t\tconst newSelectionStart = attr.value.start + newSelectionStartOffset;\n\t\t\t\tconst newSelectionEnd = attr.value.start + newSelectionEndOffset;\n\t\t\t\treturn offsetRangeToSelection(document, newSelectionStart, newSelectionEnd);\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn;\n}\n\nfunction getPrevAttribute(document: vscode.TextDocument, selectionStart: number, selectionEnd: number, node: HtmlNode): vscode.Selection | undefined {\n\tif (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {\n\t\treturn;\n\t}\n\n\tfor (let i = node.attributes.length - 1; i >= 0; i--) {\n\t\tconst attr = node.attributes[i];\n\t\tif (selectionStart <= attr.start) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!attr.value || attr.value.start === attr.value.end || selectionStart < attr.value.start) {\n\t\t\t// select full attr\n\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t}\n\n\t\tif (selectionStart === attr.value.start) {\n\t\t\tif (selectionEnd >= attr.value.end) {\n\t\t\t\t// select full attr\n\t\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t\t}\n\t\t\t// select attr value\n\t\t\treturn offsetRangeToSelection(document, attr.value.start, attr.value.end);\n\t\t}\n\n\t\t// Fetch the prev word in the attr value\n\t\tconst selectionStartCharacter = document.positionAt(selectionStart).character;\n\t\tconst attrValueStartCharacter = document.positionAt(attr.value.start).character;\n\t\tconst pos = selectionStart > attr.value.end ? attr.value.toString().length :\n\t\t\tselectionStartCharacter - attrValueStartCharacter;\n\t\tconst [newSelectionStartOffset, newSelectionEndOffset] = findPrevWord(attr.value.toString(), pos);\n\t\tif (newSelectionStartOffset === undefined || newSelectionEndOffset === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tif (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {\n\t\t\tconst newSelectionStart = attr.value.start + newSelectionStartOffset;\n\t\t\tconst newSelectionEnd = attr.value.start + newSelectionEndOffset;\n\t\t\treturn offsetRangeToSelection(document, newSelectionStart, newSelectionEnd);\n\t\t}\n\t}\n\n\treturn;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getDeepestFlatNode, findNextWord, findPrevWord, getFlatNode, offsetRangeToSelection } from './util';\nimport { Node, CssNode, Rule, Property } from 'EmmetFlatNode';\n\nexport function nextItemStylesheet(document: vscode.TextDocument, startPosition: vscode.Position, endPosition: vscode.Position, rootNode: Node): vscode.Selection | undefined {\n\tconst startOffset = document.offsetAt(startPosition);\n\tconst endOffset = document.offsetAt(endPosition);\n\tlet currentNode: CssNode | undefined = <CssNode>getFlatNode(rootNode, endOffset, true);\n\tif (!currentNode) {\n\t\tcurrentNode = <CssNode>rootNode;\n\t}\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\t// Full property is selected, so select full property value next\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset === currentNode.start &&\n\t\tendOffset === currentNode.end) {\n\t\treturn getSelectionFromProperty(document, currentNode, startOffset, endOffset, true, 'next');\n\t}\n\n\t// Part or whole of propertyValue is selected, so select the next word in the propertyValue\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset >= (<Property>currentNode).valueToken.start &&\n\t\tendOffset <= (<Property>currentNode).valueToken.end) {\n\t\tconst singlePropertyValue = getSelectionFromProperty(document, currentNode, startOffset, endOffset, false, 'next');\n\t\tif (singlePropertyValue) {\n\t\t\treturn singlePropertyValue;\n\t\t}\n\t}\n\n\t// Cursor is in the selector or in a property\n\tif ((currentNode.type === 'rule' && endOffset < (<Rule>currentNode).selectorToken.end)\n\t\t|| (currentNode.type === 'property' && endOffset < (<Property>currentNode).valueToken.end)) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Get the first child of current node which is right after the cursor\n\tlet nextNode = currentNode.firstChild;\n\twhile (nextNode && endOffset >= nextNode.end) {\n\t\tnextNode = nextNode.nextSibling;\n\t}\n\n\t// Get next sibling of current node or the parent\n\twhile (!nextNode && currentNode) {\n\t\tnextNode = currentNode.nextSibling;\n\t\tcurrentNode = currentNode.parent;\n\t}\n\n\treturn nextNode ? getSelectionFromNode(document, nextNode) : undefined;\n}\n\nexport function prevItemStylesheet(document: vscode.TextDocument, startPosition: vscode.Position, endPosition: vscode.Position, rootNode: CssNode): vscode.Selection | undefined {\n\tconst startOffset = document.offsetAt(startPosition);\n\tconst endOffset = document.offsetAt(endPosition);\n\tlet currentNode = <CssNode>getFlatNode(rootNode, startOffset, false);\n\tif (!currentNode) {\n\t\tcurrentNode = rootNode;\n\t}\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\t// Full property value is selected, so select the whole property next\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset === (<Property>currentNode).valueToken.start &&\n\t\tendOffset === (<Property>currentNode).valueToken.end) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Part of propertyValue is selected, so select the prev word in the propertyValue\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset >= (<Property>currentNode).valueToken.start &&\n\t\tendOffset <= (<Property>currentNode).valueToken.end) {\n\t\tconst singlePropertyValue = getSelectionFromProperty(document, currentNode, startOffset, endOffset, false, 'prev');\n\t\tif (singlePropertyValue) {\n\t\t\treturn singlePropertyValue;\n\t\t}\n\t}\n\n\tif (currentNode.type === 'property' || !currentNode.firstChild ||\n\t\t(currentNode.type === 'rule' && startOffset <= currentNode.firstChild.start)) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Select the child that appears just before the cursor\n\tlet prevNode: CssNode | undefined = currentNode.firstChild;\n\twhile (prevNode.nextSibling && startOffset >= prevNode.nextSibling.end) {\n\t\tprevNode = prevNode.nextSibling;\n\t}\n\tprevNode = <CssNode | undefined>getDeepestFlatNode(prevNode);\n\n\treturn getSelectionFromProperty(document, prevNode, startOffset, endOffset, false, 'prev');\n}\n\n\nfunction getSelectionFromNode(document: vscode.TextDocument, node: Node | undefined): vscode.Selection | undefined {\n\tif (!node) {\n\t\treturn;\n\t}\n\n\tconst nodeToSelect = node.type === 'rule' ? (<Rule>node).selectorToken : node;\n\treturn offsetRangeToSelection(document, nodeToSelect.start, nodeToSelect.end);\n}\n\n\nfunction getSelectionFromProperty(document: vscode.TextDocument, node: Node | undefined, selectionStart: number, selectionEnd: number, selectFullValue: boolean, direction: string): vscode.Selection | undefined {\n\tif (!node || node.type !== 'property') {\n\t\treturn;\n\t}\n\tconst propertyNode = <Property>node;\n\n\tconst propertyValue = propertyNode.valueToken.stream.substring(propertyNode.valueToken.start, propertyNode.valueToken.end);\n\tselectFullValue = selectFullValue ||\n\t\t(direction === 'prev' && selectionStart === propertyNode.valueToken.start && selectionEnd < propertyNode.valueToken.end);\n\n\tif (selectFullValue) {\n\t\treturn offsetRangeToSelection(document, propertyNode.valueToken.start, propertyNode.valueToken.end);\n\t}\n\n\tlet pos: number = -1;\n\tif (direction === 'prev') {\n\t\tif (selectionStart === propertyNode.valueToken.start) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionStartChar = document.positionAt(selectionStart).character;\n\t\tconst tokenStartChar = document.positionAt(propertyNode.valueToken.start).character;\n\t\tpos = selectionStart > propertyNode.valueToken.end ? propertyValue.length :\n\t\t\tselectionStartChar - tokenStartChar;\n\t} else if (direction === 'next') {\n\t\tif (selectionEnd === propertyNode.valueToken.end &&\n\t\t\t(selectionStart > propertyNode.valueToken.start || !propertyValue.includes(' '))) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndChar = document.positionAt(selectionEnd).character;\n\t\tconst tokenStartChar = document.positionAt(propertyNode.valueToken.start).character;\n\t\tpos = selectionEnd === propertyNode.valueToken.end ? -1 :\n\t\t\tselectionEndChar - tokenStartChar - 1;\n\t}\n\n\n\tconst [newSelectionStartOffset, newSelectionEndOffset] = direction === 'prev' ? findPrevWord(propertyValue, pos) : findNextWord(propertyValue, pos);\n\tif (!newSelectionStartOffset && !newSelectionEndOffset) {\n\t\treturn;\n\t}\n\n\tconst tokenStart = document.positionAt(propertyNode.valueToken.start);\n\tconst newSelectionStart = tokenStart.translate(0, newSelectionStartOffset);\n\tconst newSelectionEnd = tokenStart.translate(0, newSelectionEndOffset);\n\n\treturn new vscode.Selection(newSelectionStart, newSelectionEnd);\n}\n\n\n\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport * as vscode from 'vscode';\nimport evaluate, { extract } from '@emmetio/math-expression';\n\nexport function evaluateMathExpression(): Thenable<boolean> {\n\tif (!vscode.window.activeTextEditor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn Promise.resolve(false);\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\treturn editor.edit(editBuilder => {\n\t\teditor.selections.forEach(selection => {\n\t\t\t// startpos always comes before endpos\n\t\t\tconst startpos = selection.isReversed ? selection.active : selection.anchor;\n\t\t\tconst endpos = selection.isReversed ? selection.anchor : selection.active;\n\t\t\tconst selectionText = editor.document.getText(new vscode.Range(startpos, endpos));\n\n\t\t\ttry {\n\t\t\t\tif (selectionText) {\n\t\t\t\t\t// respect selections\n\t\t\t\t\tconst result = String(evaluate(selectionText));\n\t\t\t\t\teditBuilder.replace(new vscode.Range(startpos, endpos), result);\n\t\t\t\t} else {\n\t\t\t\t\t// no selection made, extract expression from line\n\t\t\t\t\tconst lineToSelectionEnd = editor.document.getText(new vscode.Range(new vscode.Position(selection.end.line, 0), endpos));\n\t\t\t\t\tconst extractedIndices = extract(lineToSelectionEnd);\n\t\t\t\t\tif (!extractedIndices) {\n\t\t\t\t\t\tthrow new Error('Invalid extracted indices');\n\t\t\t\t\t}\n\t\t\t\t\tconst result = String(evaluate(lineToSelectionEnd.substr(extractedIndices[0], extractedIndices[1])));\n\t\t\t\t\tconst rangeToReplace = new vscode.Range(\n\t\t\t\t\t\tnew vscode.Position(selection.end.line, extractedIndices[0]),\n\t\t\t\t\t\tnew vscode.Position(selection.end.line, extractedIndices[1])\n\t\t\t\t\t);\n\t\t\t\t\teditBuilder.replace(rangeToReplace, result);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tvscode.window.showErrorMessage('Could not evaluate expression');\n\t\t\t\t// Ignore error since most likely it's because of non-math expression\n\t\t\t\tconsole.warn('Math evaluation error', err);\n\t\t\t}\n\t\t});\n\t});\n}\n", null, null, "import Scanner, { isWhiteSpace, isNumber } from '@emmetio/scanner';\n\nexport const enum TokenType {\n Number = 'num',\n Op1 = 'op1',\n Op2 = 'op2',\n Null = 'null'\n}\n\nexport const enum Operator {\n Plus = 43, // +\n Minus = 45, // -\n Multiply = 42, // *\n Divide = 47, // /\n IntDivide = 92, // \\\n LeftParenthesis = 40, // (\n RightParenthesis = 41, // )\n Dot = 46, // .\n}\n\nconst enum ParserState {\n Primary = 1 << 0,\n Operator = 1 << 1,\n LParen = 1 << 2,\n RParen = 1 << 3,\n Sign = 1 << 4,\n NullaryCall = 1 << 5,\n}\n\nexport interface Token {\n type: TokenType;\n value: number;\n priority: number;\n}\n\nexport const nullary = token(TokenType.Null, 0);\n\n/**\n * Parses given expression in forward direction\n */\nexport default function parse(expr: string | Scanner): Token[] | null {\n const scanner = typeof expr === 'string' ? new Scanner(expr) : expr;\n let ch: number;\n let priority = 0;\n let expected: ParserState = (ParserState.Primary | ParserState.LParen | ParserState.Sign);\n const tokens: Token[] = [];\n\n while (!scanner.eof()) {\n scanner.eatWhile(isWhiteSpace);\n scanner.start = scanner.pos;\n\n if (consumeNumber(scanner)) {\n if ((expected & ParserState.Primary) === 0) {\n error('Unexpected number', scanner);\n }\n\n tokens.push(number(scanner.current()));\n expected = (ParserState.Operator | ParserState.RParen);\n } else if (isOperator(scanner.peek())) {\n ch = scanner.next()!;\n if (isSign(ch) && (expected & ParserState.Sign)) {\n if (isNegativeSign(ch)) {\n tokens.push(op1(ch, priority));\n }\n expected = (ParserState.Primary | ParserState.LParen | ParserState.Sign);\n } else {\n if ((expected & ParserState.Operator) === 0) {\n error('Unexpected operator', scanner);\n }\n tokens.push(op2(ch, priority));\n expected = (ParserState.Primary | ParserState.LParen | ParserState.Sign);\n }\n } else if (scanner.eat(Operator.LeftParenthesis)) {\n if ((expected & ParserState.LParen) === 0) {\n error('Unexpected \"(\"', scanner);\n }\n\n priority += 10;\n expected = (ParserState.Primary | ParserState.LParen | ParserState.Sign | ParserState.NullaryCall);\n } else if (scanner.eat(Operator.RightParenthesis)) {\n priority -= 10;\n\n if (expected & ParserState.NullaryCall) {\n tokens.push(nullary);\n } else if ((expected & ParserState.RParen) === 0) {\n error('Unexpected \")\"', scanner);\n }\n\n expected = (ParserState.Operator | ParserState.RParen | ParserState.LParen);\n } else {\n error('Unknown character', scanner);\n }\n }\n\n if (priority < 0 || priority >= 10) {\n error('Unmatched \"()\"', scanner);\n }\n\n const result = orderTokens(tokens);\n\n if (result === null) {\n error('Parity', scanner);\n }\n\n return result;\n}\n\n/**\n * Consumes number from given stream\n * @return Returns `true` if number was consumed\n */\nfunction consumeNumber(scanner: Scanner): boolean {\n const start = scanner.pos;\n if (scanner.eat(Operator.Dot) && scanner.eatWhile(isNumber)) {\n // short decimal notation: .025\n return true;\n }\n\n if (scanner.eatWhile(isNumber) && (!scanner.eat(Operator.Dot) || scanner.eatWhile(isNumber))) {\n // either integer or decimal: 10, 10.25\n return true;\n }\n\n scanner.pos = start;\n return false;\n}\n\n/**\n * Orders parsed tokens (operands and operators) in given array so that they are\n * laid off in order of execution\n */\nfunction orderTokens(tokens: Token[]): Token[] | null {\n const operators: Token[] = [];\n const operands: Token[] = [];\n let nOperators = 0;\n\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n\n if (t.type === TokenType.Number) {\n operands.push(t);\n } else {\n nOperators += t.type === TokenType.Op1 ? 1 : 2;\n\n while (operators.length) {\n if (t.priority <= operators[operators.length - 1].priority) {\n operands.push(operators.pop()!);\n } else {\n break;\n }\n }\n\n operators.push(t);\n }\n }\n\n return nOperators + 1 === operands.length + operators.length\n ? operands.concat(operators.reverse())\n : null /* parity */;\n}\n\n/**\n * Number token factory\n */\nfunction number(value: string, priority?: number): Token {\n return token(TokenType.Number, parseFloat(value), priority);\n}\n\n/**\n * Unary operator factory\n * @param value Operator character code\n * @param priority Operator execution priority\n */\nfunction op1(value: number, priority = 0) {\n if (value === Operator.Minus) {\n priority += 2;\n }\n return token(TokenType.Op1, value, priority);\n}\n\n/**\n * Binary operator factory\n * @param value Operator character code\n * @param priority Operator execution priority\n */\nfunction op2(value: number, priority = 0): Token {\n if (value === Operator.Multiply) {\n priority += 1;\n } else if (value === Operator.Divide || value === Operator.IntDivide) {\n priority += 2;\n }\n\n return token(TokenType.Op2, value, priority);\n}\n\nfunction error(name: string, scanner?: Scanner) {\n if (scanner) {\n name += ` at column ${scanner.pos} of expression`;\n }\n throw new Error(name);\n}\n\nexport function isSign(ch: number): boolean {\n return isPositiveSign(ch) || isNegativeSign(ch);\n}\n\nfunction isPositiveSign(ch: number) {\n return ch === Operator.Plus;\n}\n\nfunction isNegativeSign(ch: number) {\n return ch === Operator.Minus;\n}\n\nexport function isOperator(ch: number): ch is Operator {\n return ch === Operator.Plus || ch === Operator.Minus || ch === Operator.Multiply\n || ch === Operator.Divide || ch === Operator.IntDivide;\n}\n\nexport function token(type: TokenType, value: number, priority: number = 0): Token {\n return { type, value, priority };\n}\n", "import { Operator, isSign, isOperator } from './parser';\nimport { isSpace, isNumber } from '@emmetio/scanner';\n\nexport interface ExtractOptions {\n /**\n * Allow capturing extra expression characters right after start position.\n * Useful for extracting expressions from text editor source which inserts\n * paired characters like `(` and `)` to properly extract expression past\n * caret position\n */\n lookAhead: boolean;\n\n /**\n * Allow whitespace in extracted expressions\n */\n whitespace: boolean;\n}\n\ninterface BackwardScanner {\n text: string;\n pos: number;\n}\n\nconst defaultOptions: ExtractOptions = {\n lookAhead: true,\n whitespace: true\n};\n\nexport default function extract(text: string, pos = text.length, options?: Partial<ExtractOptions>): [number, number] | null {\n const opt = { ...defaultOptions, ...options };\n const scanner: BackwardScanner = { text, pos };\n let ch: number;\n\n if (opt.lookAhead && cur(scanner) === Operator.RightParenthesis) {\n // Basically, we should consume right parenthesis only with optional whitespace\n scanner.pos++;\n const len = text.length;\n while (scanner.pos < len) {\n ch = cur(scanner);\n if (ch !== Operator.RightParenthesis && !(opt.whitespace && isSpace(ch))) {\n break;\n }\n scanner.pos++;\n }\n }\n\n const end = scanner.pos;\n let braces = 0;\n while (scanner.pos >= 0) {\n if (number(scanner)) {\n continue;\n }\n\n ch = prev(scanner);\n if (ch === Operator.RightParenthesis) {\n braces++;\n } else if (ch === Operator.LeftParenthesis) {\n if (!braces) {\n break;\n }\n braces--;\n } else if (!((opt.whitespace && isSpace(ch)) || isSign(ch) || isOperator(ch))) {\n break;\n }\n\n scanner.pos--;\n }\n\n if (scanner.pos !== end && !braces) {\n // Trim whitespace\n while (isSpace(cur(scanner))) {\n scanner.pos++;\n }\n\n return [scanner.pos, end];\n }\n\n return null;\n}\n\n/**\n * Backward-consumes number from given scanner, if possible\n */\nfunction number(scanner: BackwardScanner): boolean {\n if (isNumber(prev(scanner))) {\n scanner.pos--;\n let dot = false;\n let ch: number;\n\n while (scanner.pos >= 0) {\n ch = prev(scanner);\n if (ch === 46 /* . */) {\n if (dot) {\n // Decimal delimiter already consumed, abort\n break;\n }\n dot = true;\n } else if (!isNumber(ch)) {\n break;\n }\n scanner.pos--;\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction prev(scanner: BackwardScanner): number {\n return scanner.text.charCodeAt(scanner.pos - 1);\n}\n\nfunction cur(scanner: BackwardScanner): number {\n return scanner.text.charCodeAt(scanner.pos);\n}\n", "import Scanner from '@emmetio/scanner';\nimport parse, { TokenType, Operator, Token } from './parser';\n\nexport { default as extract, ExtractOptions } from './extract';\n\ntype UnaryAction = { [op in Operator]?: (n: number) => number };\ntype BinaryAction = { [op in Operator]?: (n1: number, n2: number) => number };\n\nconst ops1: UnaryAction = {\n [Operator.Minus]: num => -num\n};\n\nconst ops2: BinaryAction = {\n [Operator.Plus]: (a, b) => a + b,\n [Operator.Minus]: (a, b) => a - b,\n [Operator.Multiply]: (a, b) => a * b,\n [Operator.Divide]: (a, b) => a / b,\n [Operator.IntDivide]: (a, b) => Math.floor(a / b)\n};\n\n/**\n * Evaluates given math expression\n * @param expr Expression to evaluate\n */\nexport default function evaluate(expr: string | Scanner | Token[]): number | null {\n if (!Array.isArray(expr)) {\n expr = parse(expr)!;\n }\n\n if (!expr || !expr.length) {\n return null;\n }\n\n const nStack: number[] = [];\n let n1: number;\n let n2: number;\n let f: (n1: number, n2?: number) => number;\n\n for (let i = 0, il = expr.length; i < il; i++) {\n const token = expr[i];\n if (token.type === TokenType.Number) {\n nStack.push(token.value);\n } else if (token.type === TokenType.Op2) {\n n2 = nStack.pop()!;\n n1 = nStack.pop()!;\n f = ops2[token.value];\n nStack.push(f(n1, n2));\n } else if (token.type === TokenType.Op1) {\n n1 = nStack.pop()!;\n f = ops1[token.value];\n nStack.push(f(n1));\n } else {\n throw new Error('Invalid expression');\n }\n }\n\n if (nStack.length > 1) {\n throw new Error('Invalid Expression (parity)');\n }\n\n return nStack[0];\n}\n\nexport { parse, Token };\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport * as vscode from 'vscode';\n\nconst reNumber = /[0-9]/;\n\n/**\n * Incerement number under caret of given editor\n */\nexport function incrementDecrement(delta: number): Thenable<boolean> | undefined {\n\tif (!vscode.window.activeTextEditor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\n\treturn editor.edit(editBuilder => {\n\t\teditor.selections.forEach(selection => {\n\t\t\tconst rangeToReplace = locate(editor.document, selection.isReversed ? selection.anchor : selection.active);\n\t\t\tif (!rangeToReplace) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = editor.document.getText(rangeToReplace);\n\t\t\tif (isValidNumber(text)) {\n\t\t\t\teditBuilder.replace(rangeToReplace, update(text, delta));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Updates given number with `delta` and returns string formatted according\n * to original string format\n */\nexport function update(numString: string, delta: number): string {\n\tlet m: RegExpMatchArray | null;\n\tconst decimals = (m = numString.match(/\\.(\\d+)$/)) ? m[1].length : 1;\n\tlet output = String((parseFloat(numString) + delta).toFixed(decimals)).replace(/\\.0+$/, '');\n\n\tif (m = numString.match(/^\\-?(0\\d+)/)) {\n\t\t// padded number: preserve padding\n\t\toutput = output.replace(/^(\\-?)(\\d+)/, (_, minus, prefix) =>\n\t\t\tminus + '0'.repeat(Math.max(0, (m ? m[1].length : 0) - prefix.length)) + prefix);\n\t}\n\n\tif (/^\\-?\\./.test(numString)) {\n\t\t// omit integer part\n\t\toutput = output.replace(/^(\\-?)0+/, '$1');\n\t}\n\n\treturn output;\n}\n\n/**\n * Locates number from given position in the document\n *\n * @return Range of number or `undefined` if not found\n */\nexport function locate(document: vscode.TextDocument, pos: vscode.Position): vscode.Range | undefined {\n\n\tconst line = document.lineAt(pos.line).text;\n\tlet start = pos.character;\n\tlet end = pos.character;\n\tlet hadDot = false, hadMinus = false;\n\tlet ch;\n\n\twhile (start > 0) {\n\t\tch = line[--start];\n\t\tif (ch === '-') {\n\t\t\thadMinus = true;\n\t\t\tbreak;\n\t\t} else if (ch === '.' && !hadDot) {\n\t\t\thadDot = true;\n\t\t} else if (!reNumber.test(ch)) {\n\t\t\tstart++;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (line[end] === '-' && !hadMinus) {\n\t\tend++;\n\t}\n\n\twhile (end < line.length) {\n\t\tch = line[end++];\n\t\tif (ch === '.' && !hadDot && reNumber.test(line[end])) {\n\t\t\t// A dot must be followed by a number. Otherwise stop parsing\n\t\t\thadDot = true;\n\t\t} else if (!reNumber.test(ch)) {\n\t\t\tend--;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// ensure that found range contains valid number\n\tif (start !== end && isValidNumber(line.slice(start, end))) {\n\t\treturn new vscode.Range(pos.line, start, pos.line, end);\n\t}\n\n\treturn;\n}\n\n/**\n * Check if given string contains valid number\n */\nfunction isValidNumber(str: string): boolean {\n\treturn str ? !isNaN(parseFloat(str)) : false;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { window, TextEditor } from 'vscode';\nimport { getCssPropertyFromRule, getCssPropertyFromDocument, offsetRangeToVsRange } from './util';\nimport { Property, Rule } from 'EmmetFlatNode';\n\nconst vendorPrefixes = ['-webkit-', '-moz-', '-ms-', '-o-', ''];\n\nexport function reflectCssValue(): Thenable<boolean> | undefined {\n\tconst editor = window.activeTextEditor;\n\tif (!editor) {\n\t\twindow.showInformationMessage('No editor is active.');\n\t\treturn;\n\t}\n\n\tconst node = getCssPropertyFromDocument(editor, editor.selection.active);\n\tif (!node) {\n\t\treturn;\n\t}\n\n\treturn updateCSSNode(editor, node);\n}\n\nfunction updateCSSNode(editor: TextEditor, property: Property): Thenable<boolean> {\n\tconst rule: Rule = property.parent;\n\tlet currentPrefix = '';\n\n\t// Find vendor prefix of given property node\n\tfor (const prefix of vendorPrefixes) {\n\t\tif (property.name.startsWith(prefix)) {\n\t\t\tcurrentPrefix = prefix;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst propertyName = property.name.substr(currentPrefix.length);\n\tconst propertyValue = property.value;\n\n\treturn editor.edit(builder => {\n\t\t// Find properties with vendor prefixes, update each\n\t\tvendorPrefixes.forEach(prefix => {\n\t\t\tif (prefix === currentPrefix) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst vendorProperty = getCssPropertyFromRule(rule, prefix + propertyName);\n\t\t\tif (vendorProperty) {\n\t\t\t\tconst rangeToReplace = offsetRangeToVsRange(editor.document, vendorProperty.valueToken.start, vendorProperty.valueToken.end);\n\t\t\t\tbuilder.replace(rangeToReplace, propertyValue);\n\t\t\t}\n\t\t});\n\t});\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["{}", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport function createScanner(text, ignoreTrivia) {\n if (ignoreTrivia === void 0) { ignoreTrivia = false; }\n var len = text.length;\n var pos = 0, value = '', tokenOffset = 0, token = 16 /* Unknown */, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0 /* None */;\n function scanHexDigits(count, exact) {\n var digits = 0;\n var value = 0;\n while (digits < count || !exact) {\n var ch = text.charCodeAt(pos);\n if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {\n value = value * 16 + ch - 48 /* _0 */;\n }\n else if (ch >= 65 /* A */ && ch <= 70 /* F */) {\n value = value * 16 + ch - 65 /* A */ + 10;\n }\n else if (ch >= 97 /* a */ && ch <= 102 /* f */) {\n value = value * 16 + ch - 97 /* a */ + 10;\n }\n else {\n break;\n }\n pos++;\n digits++;\n }\n if (digits < count) {\n value = -1;\n }\n return value;\n }\n function setPosition(newPosition) {\n pos = newPosition;\n value = '';\n tokenOffset = 0;\n token = 16 /* Unknown */;\n scanError = 0 /* None */;\n }\n function scanNumber() {\n var start = pos;\n if (text.charCodeAt(pos) === 48 /* _0 */) {\n pos++;\n }\n else {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n if (pos < text.length && text.charCodeAt(pos) === 46 /* dot */) {\n pos++;\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n }\n else {\n scanError = 3 /* UnexpectedEndOfNumber */;\n return text.substring(start, pos);\n }\n }\n var end = pos;\n if (pos < text.length && (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */)) {\n pos++;\n if (pos < text.length && text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) {\n pos++;\n }\n if (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n while (pos < text.length && isDigit(text.charCodeAt(pos))) {\n pos++;\n }\n end = pos;\n }\n else {\n scanError = 3 /* UnexpectedEndOfNumber */;\n }\n }\n return text.substring(start, end);\n }\n function scanString() {\n var result = '', start = pos;\n while (true) {\n if (pos >= len) {\n result += text.substring(start, pos);\n scanError = 2 /* UnexpectedEndOfString */;\n break;\n }\n var ch = text.charCodeAt(pos);\n if (ch === 34 /* doubleQuote */) {\n result += text.substring(start, pos);\n pos++;\n break;\n }\n if (ch === 92 /* backslash */) {\n result += text.substring(start, pos);\n pos++;\n if (pos >= len) {\n scanError = 2 /* UnexpectedEndOfString */;\n break;\n }\n var ch2 = text.charCodeAt(pos++);\n switch (ch2) {\n case 34 /* doubleQuote */:\n result += '\\\"';\n break;\n case 92 /* backslash */:\n result += '\\\\';\n break;\n case 47 /* slash */:\n result += '/';\n break;\n case 98 /* b */:\n result += '\\b';\n break;\n case 102 /* f */:\n result += '\\f';\n break;\n case 110 /* n */:\n result += '\\n';\n break;\n case 114 /* r */:\n result += '\\r';\n break;\n case 116 /* t */:\n result += '\\t';\n break;\n case 117 /* u */:\n var ch3 = scanHexDigits(4, true);\n if (ch3 >= 0) {\n result += String.fromCharCode(ch3);\n }\n else {\n scanError = 4 /* InvalidUnicode */;\n }\n break;\n default:\n scanError = 5 /* InvalidEscapeCharacter */;\n }\n start = pos;\n continue;\n }\n if (ch >= 0 && ch <= 0x1f) {\n if (isLineBreak(ch)) {\n result += text.substring(start, pos);\n scanError = 2 /* UnexpectedEndOfString */;\n break;\n }\n else {\n scanError = 6 /* InvalidCharacter */;\n // mark as error but continue with string\n }\n }\n pos++;\n }\n return result;\n }\n function scanNext() {\n value = '';\n scanError = 0 /* None */;\n tokenOffset = pos;\n lineStartOffset = lineNumber;\n prevTokenLineStartOffset = tokenLineStartOffset;\n if (pos >= len) {\n // at the end\n tokenOffset = len;\n return token = 17 /* EOF */;\n }\n var code = text.charCodeAt(pos);\n // trivia: whitespace\n if (isWhiteSpace(code)) {\n do {\n pos++;\n value += String.fromCharCode(code);\n code = text.charCodeAt(pos);\n } while (isWhiteSpace(code));\n return token = 15 /* Trivia */;\n }\n // trivia: newlines\n if (isLineBreak(code)) {\n pos++;\n value += String.fromCharCode(code);\n if (code === 13 /* carriageReturn */ && text.charCodeAt(pos) === 10 /* lineFeed */) {\n pos++;\n value += '\\n';\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n return token = 14 /* LineBreakTrivia */;\n }\n switch (code) {\n // tokens: []{}:,\n case 123 /* openBrace */:\n pos++;\n return token = 1 /* OpenBraceToken */;\n case 125 /* closeBrace */:\n pos++;\n return token = 2 /* CloseBraceToken */;\n case 91 /* openBracket */:\n pos++;\n return token = 3 /* OpenBracketToken */;\n case 93 /* closeBracket */:\n pos++;\n return token = 4 /* CloseBracketToken */;\n case 58 /* colon */:\n pos++;\n return token = 6 /* ColonToken */;\n case 44 /* comma */:\n pos++;\n return token = 5 /* CommaToken */;\n // strings\n case 34 /* doubleQuote */:\n pos++;\n value = scanString();\n return token = 10 /* StringLiteral */;\n // comments\n case 47 /* slash */:\n var start = pos - 1;\n // Single-line comment\n if (text.charCodeAt(pos + 1) === 47 /* slash */) {\n pos += 2;\n while (pos < len) {\n if (isLineBreak(text.charCodeAt(pos))) {\n break;\n }\n pos++;\n }\n value = text.substring(start, pos);\n return token = 12 /* LineCommentTrivia */;\n }\n // Multi-line comment\n if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {\n pos += 2;\n var safeLength = len - 1; // For lookahead.\n var commentClosed = false;\n while (pos < safeLength) {\n var ch = text.charCodeAt(pos);\n if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {\n pos += 2;\n commentClosed = true;\n break;\n }\n pos++;\n if (isLineBreak(ch)) {\n if (ch === 13 /* carriageReturn */ && text.charCodeAt(pos) === 10 /* lineFeed */) {\n pos++;\n }\n lineNumber++;\n tokenLineStartOffset = pos;\n }\n }\n if (!commentClosed) {\n pos++;\n scanError = 1 /* UnexpectedEndOfComment */;\n }\n value = text.substring(start, pos);\n return token = 13 /* BlockCommentTrivia */;\n }\n // just a single slash\n value += String.fromCharCode(code);\n pos++;\n return token = 16 /* Unknown */;\n // numbers\n case 45 /* minus */:\n value += String.fromCharCode(code);\n pos++;\n if (pos === len || !isDigit(text.charCodeAt(pos))) {\n return token = 16 /* Unknown */;\n }\n // found a minus, followed by a number so\n // we fall through to proceed with scanning\n // numbers\n case 48 /* _0 */:\n case 49 /* _1 */:\n case 50 /* _2 */:\n case 51 /* _3 */:\n case 52 /* _4 */:\n case 53 /* _5 */:\n case 54 /* _6 */:\n case 55 /* _7 */:\n case 56 /* _8 */:\n case 57 /* _9 */:\n value += scanNumber();\n return token = 11 /* NumericLiteral */;\n // literals and unknown symbols\n default:\n // is a literal? Read the full word.\n while (pos < len && isUnknownContentCharacter(code)) {\n pos++;\n code = text.charCodeAt(pos);\n }\n if (tokenOffset !== pos) {\n value = text.substring(tokenOffset, pos);\n // keywords: true, false, null\n switch (value) {\n case 'true': return token = 8 /* TrueKeyword */;\n case 'false': return token = 9 /* FalseKeyword */;\n case 'null': return token = 7 /* NullKeyword */;\n }\n return token = 16 /* Unknown */;\n }\n // some\n value += String.fromCharCode(code);\n pos++;\n return token = 16 /* Unknown */;\n }\n }\n function isUnknownContentCharacter(code) {\n if (isWhiteSpace(code) || isLineBreak(code)) {\n return false;\n }\n switch (code) {\n case 125 /* closeBrace */:\n case 93 /* closeBracket */:\n case 123 /* openBrace */:\n case 91 /* openBracket */:\n case 34 /* doubleQuote */:\n case 58 /* colon */:\n case 44 /* comma */:\n case 47 /* slash */:\n return false;\n }\n return true;\n }\n function scanNextNonTrivia() {\n var result;\n do {\n result = scanNext();\n } while (result >= 12 /* LineCommentTrivia */ && result <= 15 /* Trivia */);\n return result;\n }\n return {\n setPosition: setPosition,\n getPosition: function () { return pos; },\n scan: ignoreTrivia ? scanNextNonTrivia : scanNext,\n getToken: function () { return token; },\n getTokenValue: function () { return value; },\n getTokenOffset: function () { return tokenOffset; },\n getTokenLength: function () { return pos - tokenOffset; },\n getTokenStartLine: function () { return lineStartOffset; },\n getTokenStartCharacter: function () { return tokenOffset - prevTokenLineStartOffset; },\n getTokenError: function () { return scanError; },\n };\n}\nfunction isWhiteSpace(ch) {\n return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ ||\n ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ ||\n ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */;\n}\nfunction isLineBreak(ch) {\n return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */;\n}\nfunction isDigit(ch) {\n return ch >= 48 /* _0 */ && ch <= 57 /* _9 */;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nexport function format(documentText, range, options) {\n var initialIndentLevel;\n var formatText;\n var formatTextStart;\n var rangeStart;\n var rangeEnd;\n if (range) {\n rangeStart = range.offset;\n rangeEnd = rangeStart + range.length;\n formatTextStart = rangeStart;\n while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {\n formatTextStart--;\n }\n var endOffset = rangeEnd;\n while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {\n endOffset++;\n }\n formatText = documentText.substring(formatTextStart, endOffset);\n initialIndentLevel = computeIndentLevel(formatText, options);\n }\n else {\n formatText = documentText;\n initialIndentLevel = 0;\n formatTextStart = 0;\n rangeStart = 0;\n rangeEnd = documentText.length;\n }\n var eol = getEOL(options, documentText);\n var lineBreak = false;\n var indentLevel = 0;\n var indentValue;\n if (options.insertSpaces) {\n indentValue = repeat(' ', options.tabSize || 4);\n }\n else {\n indentValue = '\\t';\n }\n var scanner = createScanner(formatText, false);\n var hasError = false;\n function newLineAndIndent() {\n return eol + repeat(indentValue, initialIndentLevel + indentLevel);\n }\n function scanNext() {\n var token = scanner.scan();\n lineBreak = false;\n while (token === 15 /* Trivia */ || token === 14 /* LineBreakTrivia */) {\n lineBreak = lineBreak || (token === 14 /* LineBreakTrivia */);\n token = scanner.scan();\n }\n hasError = token === 16 /* Unknown */ || scanner.getTokenError() !== 0 /* None */;\n return token;\n }\n var editOperations = [];\n function addEdit(text, startOffset, endOffset) {\n if (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {\n editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });\n }\n }\n var firstToken = scanNext();\n if (firstToken !== 17 /* EOF */) {\n var firstTokenStart = scanner.getTokenOffset() + formatTextStart;\n var initialIndent = repeat(indentValue, initialIndentLevel);\n addEdit(initialIndent, formatTextStart, firstTokenStart);\n }\n while (firstToken !== 17 /* EOF */) {\n var firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n var secondToken = scanNext();\n var replaceContent = '';\n while (!lineBreak && (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */)) {\n // comments on the same line: keep them on the same line, but ignore them otherwise\n var commentTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(' ', firstTokenEnd, commentTokenStart);\n firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;\n replaceContent = secondToken === 12 /* LineCommentTrivia */ ? newLineAndIndent() : '';\n secondToken = scanNext();\n }\n if (secondToken === 2 /* CloseBraceToken */) {\n if (firstToken !== 1 /* OpenBraceToken */) {\n indentLevel--;\n replaceContent = newLineAndIndent();\n }\n }\n else if (secondToken === 4 /* CloseBracketToken */) {\n if (firstToken !== 3 /* OpenBracketToken */) {\n indentLevel--;\n replaceContent = newLineAndIndent();\n }\n }\n else {\n switch (firstToken) {\n case 3 /* OpenBracketToken */:\n case 1 /* OpenBraceToken */:\n indentLevel++;\n replaceContent = newLineAndIndent();\n break;\n case 5 /* CommaToken */:\n case 12 /* LineCommentTrivia */:\n replaceContent = newLineAndIndent();\n break;\n case 13 /* BlockCommentTrivia */:\n if (lineBreak) {\n replaceContent = newLineAndIndent();\n }\n else {\n // symbol following comment on the same line: keep on same line, separate with ' '\n replaceContent = ' ';\n }\n break;\n case 6 /* ColonToken */:\n replaceContent = ' ';\n break;\n case 10 /* StringLiteral */:\n if (secondToken === 6 /* ColonToken */) {\n replaceContent = '';\n break;\n }\n // fall through\n case 7 /* NullKeyword */:\n case 8 /* TrueKeyword */:\n case 9 /* FalseKeyword */:\n case 11 /* NumericLiteral */:\n case 2 /* CloseBraceToken */:\n case 4 /* CloseBracketToken */:\n if (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */) {\n replaceContent = ' ';\n }\n else if (secondToken !== 5 /* CommaToken */ && secondToken !== 17 /* EOF */) {\n hasError = true;\n }\n break;\n case 16 /* Unknown */:\n hasError = true;\n break;\n }\n if (lineBreak && (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */)) {\n replaceContent = newLineAndIndent();\n }\n }\n var secondTokenStart = scanner.getTokenOffset() + formatTextStart;\n addEdit(replaceContent, firstTokenEnd, secondTokenStart);\n firstToken = secondToken;\n }\n return editOperations;\n}\nfunction repeat(s, count) {\n var result = '';\n for (var i = 0; i < count; i++) {\n result += s;\n }\n return result;\n}\nfunction computeIndentLevel(content, options) {\n var i = 0;\n var nChars = 0;\n var tabSize = options.tabSize || 4;\n while (i < content.length) {\n var ch = content.charAt(i);\n if (ch === ' ') {\n nChars++;\n }\n else if (ch === '\\t') {\n nChars += tabSize;\n }\n else {\n break;\n }\n i++;\n }\n return Math.floor(nChars / tabSize);\n}\nfunction getEOL(options, text) {\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch === '\\r') {\n if (i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n return '\\r\\n';\n }\n return '\\r';\n }\n else if (ch === '\\n') {\n return '\\n';\n }\n }\n return (options && options.eol) || '\\n';\n}\nexport function isEOL(text, offset) {\n return '\\r\\n'.indexOf(text.charAt(offset)) !== -1;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { createScanner } from './scanner';\nvar ParseOptions;\n(function (ParseOptions) {\n ParseOptions.DEFAULT = {\n allowTrailingComma: false\n };\n})(ParseOptions || (ParseOptions = {}));\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport function getLocation(text, position) {\n var segments = []; // strings or numbers\n var earlyReturnException = new Object();\n var previousNode = undefined;\n var previousNodeInst = {\n value: {},\n offset: 0,\n length: 0,\n type: 'object',\n parent: undefined\n };\n var isAtPropertyKey = false;\n function setPreviousNode(value, offset, length, type) {\n previousNodeInst.value = value;\n previousNodeInst.offset = offset;\n previousNodeInst.length = length;\n previousNodeInst.type = type;\n previousNodeInst.colonOffset = undefined;\n previousNode = previousNodeInst;\n }\n try {\n visit(text, {\n onObjectBegin: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n isAtPropertyKey = position > offset;\n segments.push(''); // push a placeholder (will be replaced)\n },\n onObjectProperty: function (name, offset, length) {\n if (position < offset) {\n throw earlyReturnException;\n }\n setPreviousNode(name, offset, length, 'property');\n segments[segments.length - 1] = name;\n if (position <= offset + length) {\n throw earlyReturnException;\n }\n },\n onObjectEnd: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.pop();\n },\n onArrayBegin: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.push(0);\n },\n onArrayEnd: function (offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n previousNode = undefined;\n segments.pop();\n },\n onLiteralValue: function (value, offset, length) {\n if (position < offset) {\n throw earlyReturnException;\n }\n setPreviousNode(value, offset, length, getNodeType(value));\n if (position <= offset + length) {\n throw earlyReturnException;\n }\n },\n onSeparator: function (sep, offset, length) {\n if (position <= offset) {\n throw earlyReturnException;\n }\n if (sep === ':' && previousNode && previousNode.type === 'property') {\n previousNode.colonOffset = offset;\n isAtPropertyKey = false;\n previousNode = undefined;\n }\n else if (sep === ',') {\n var last = segments[segments.length - 1];\n if (typeof last === 'number') {\n segments[segments.length - 1] = last + 1;\n }\n else {\n isAtPropertyKey = true;\n segments[segments.length - 1] = '';\n }\n previousNode = undefined;\n }\n }\n });\n }\n catch (e) {\n if (e !== earlyReturnException) {\n throw e;\n }\n }\n return {\n path: segments,\n previousNode: previousNode,\n isAtPropertyKey: isAtPropertyKey,\n matches: function (pattern) {\n var k = 0;\n for (var i = 0; k < pattern.length && i < segments.length; i++) {\n if (pattern[k] === segments[i] || pattern[k] === '*') {\n k++;\n }\n else if (pattern[k] !== '**') {\n return false;\n }\n }\n return k === pattern.length;\n }\n };\n}\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore always check the errors list to find out if the input was valid.\n */\nexport function parse(text, errors, options) {\n if (errors === void 0) { errors = []; }\n if (options === void 0) { options = ParseOptions.DEFAULT; }\n var currentProperty = null;\n var currentParent = [];\n var previousParents = [];\n function onValue(value) {\n if (Array.isArray(currentParent)) {\n currentParent.push(value);\n }\n else if (currentProperty !== null) {\n currentParent[currentProperty] = value;\n }\n }\n var visitor = {\n onObjectBegin: function () {\n var object = {};\n onValue(object);\n previousParents.push(currentParent);\n currentParent = object;\n currentProperty = null;\n },\n onObjectProperty: function (name) {\n currentProperty = name;\n },\n onObjectEnd: function () {\n currentParent = previousParents.pop();\n },\n onArrayBegin: function () {\n var array = [];\n onValue(array);\n previousParents.push(currentParent);\n currentParent = array;\n currentProperty = null;\n },\n onArrayEnd: function () {\n currentParent = previousParents.pop();\n },\n onLiteralValue: onValue,\n onError: function (error, offset, length) {\n errors.push({ error: error, offset: offset, length: length });\n }\n };\n visit(text, visitor, options);\n return currentParent[0];\n}\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport function parseTree(text, errors, options) {\n if (errors === void 0) { errors = []; }\n if (options === void 0) { options = ParseOptions.DEFAULT; }\n var currentParent = { type: 'array', offset: -1, length: -1, children: [], parent: undefined }; // artificial root\n function ensurePropertyComplete(endOffset) {\n if (currentParent.type === 'property') {\n currentParent.length = endOffset - currentParent.offset;\n currentParent = currentParent.parent;\n }\n }\n function onValue(valueNode) {\n currentParent.children.push(valueNode);\n return valueNode;\n }\n var visitor = {\n onObjectBegin: function (offset) {\n currentParent = onValue({ type: 'object', offset: offset, length: -1, parent: currentParent, children: [] });\n },\n onObjectProperty: function (name, offset, length) {\n currentParent = onValue({ type: 'property', offset: offset, length: -1, parent: currentParent, children: [] });\n currentParent.children.push({ type: 'string', value: name, offset: offset, length: length, parent: currentParent });\n },\n onObjectEnd: function (offset, length) {\n ensurePropertyComplete(offset + length); // in case of a missing value for a property: make sure property is complete\n currentParent.length = offset + length - currentParent.offset;\n currentParent = currentParent.parent;\n ensurePropertyComplete(offset + length);\n },\n onArrayBegin: function (offset, length) {\n currentParent = onValue({ type: 'array', offset: offset, length: -1, parent: currentParent, children: [] });\n },\n onArrayEnd: function (offset, length) {\n currentParent.length = offset + length - currentParent.offset;\n currentParent = currentParent.parent;\n ensurePropertyComplete(offset + length);\n },\n onLiteralValue: function (value, offset, length) {\n onValue({ type: getNodeType(value), offset: offset, length: length, parent: currentParent, value: value });\n ensurePropertyComplete(offset + length);\n },\n onSeparator: function (sep, offset, length) {\n if (currentParent.type === 'property') {\n if (sep === ':') {\n currentParent.colonOffset = offset;\n }\n else if (sep === ',') {\n ensurePropertyComplete(offset);\n }\n }\n },\n onError: function (error, offset, length) {\n errors.push({ error: error, offset: offset, length: length });\n }\n };\n visit(text, visitor, options);\n var result = currentParent.children[0];\n if (result) {\n delete result.parent;\n }\n return result;\n}\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport function findNodeAtLocation(root, path) {\n if (!root) {\n return undefined;\n }\n var node = root;\n for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {\n var segment = path_1[_i];\n if (typeof segment === 'string') {\n if (node.type !== 'object' || !Array.isArray(node.children)) {\n return undefined;\n }\n var found = false;\n for (var _a = 0, _b = node.children; _a < _b.length; _a++) {\n var propertyNode = _b[_a];\n if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment) {\n node = propertyNode.children[1];\n found = true;\n break;\n }\n }\n if (!found) {\n return undefined;\n }\n }\n else {\n var index = segment;\n if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {\n return undefined;\n }\n node = node.children[index];\n }\n }\n return node;\n}\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport function getNodePath(node) {\n if (!node.parent || !node.parent.children) {\n return [];\n }\n var path = getNodePath(node.parent);\n if (node.parent.type === 'property') {\n var key = node.parent.children[0].value;\n path.push(key);\n }\n else if (node.parent.type === 'array') {\n var index = node.parent.children.indexOf(node);\n if (index !== -1) {\n path.push(index);\n }\n }\n return path;\n}\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport function getNodeValue(node) {\n switch (node.type) {\n case 'array':\n return node.children.map(getNodeValue);\n case 'object':\n var obj = Object.create(null);\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var prop = _a[_i];\n var valueNode = prop.children[1];\n if (valueNode) {\n obj[prop.children[0].value] = getNodeValue(valueNode);\n }\n }\n return obj;\n case 'null':\n case 'string':\n case 'number':\n case 'boolean':\n return node.value;\n default:\n return undefined;\n }\n}\nexport function contains(node, offset, includeRightBound) {\n if (includeRightBound === void 0) { includeRightBound = false; }\n return (offset >= node.offset && offset < (node.offset + node.length)) || includeRightBound && (offset === (node.offset + node.length));\n}\n/**\n * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport function findNodeAtOffset(node, offset, includeRightBound) {\n if (includeRightBound === void 0) { includeRightBound = false; }\n if (contains(node, offset, includeRightBound)) {\n var children = node.children;\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length && children[i].offset <= offset; i++) {\n var item = findNodeAtOffset(children[i], offset, includeRightBound);\n if (item) {\n return item;\n }\n }\n }\n return node;\n }\n return undefined;\n}\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport function visit(text, visitor, options) {\n if (options === void 0) { options = ParseOptions.DEFAULT; }\n var _scanner = createScanner(text, false);\n function toNoArgVisit(visitFunction) {\n return visitFunction ? function () { return visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()); } : function () { return true; };\n }\n function toOneArgVisit(visitFunction) {\n return visitFunction ? function (arg) { return visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()); } : function () { return true; };\n }\n var onObjectBegin = toNoArgVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisit(visitor.onObjectProperty), onObjectEnd = toNoArgVisit(visitor.onObjectEnd), onArrayBegin = toNoArgVisit(visitor.onArrayBegin), onArrayEnd = toNoArgVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisit(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);\n var disallowComments = options && options.disallowComments;\n var allowTrailingComma = options && options.allowTrailingComma;\n function scanNext() {\n while (true) {\n var token = _scanner.scan();\n switch (_scanner.getTokenError()) {\n case 4 /* InvalidUnicode */:\n handleError(14 /* InvalidUnicode */);\n break;\n case 5 /* InvalidEscapeCharacter */:\n handleError(15 /* InvalidEscapeCharacter */);\n break;\n case 3 /* UnexpectedEndOfNumber */:\n handleError(13 /* UnexpectedEndOfNumber */);\n break;\n case 1 /* UnexpectedEndOfComment */:\n if (!disallowComments) {\n handleError(11 /* UnexpectedEndOfComment */);\n }\n break;\n case 2 /* UnexpectedEndOfString */:\n handleError(12 /* UnexpectedEndOfString */);\n break;\n case 6 /* InvalidCharacter */:\n handleError(16 /* InvalidCharacter */);\n break;\n }\n switch (token) {\n case 12 /* LineCommentTrivia */:\n case 13 /* BlockCommentTrivia */:\n if (disallowComments) {\n handleError(10 /* InvalidCommentToken */);\n }\n else {\n onComment();\n }\n break;\n case 16 /* Unknown */:\n handleError(1 /* InvalidSymbol */);\n break;\n case 15 /* Trivia */:\n case 14 /* LineBreakTrivia */:\n break;\n default:\n return token;\n }\n }\n }\n function handleError(error, skipUntilAfter, skipUntil) {\n if (skipUntilAfter === void 0) { skipUntilAfter = []; }\n if (skipUntil === void 0) { skipUntil = []; }\n onError(error);\n if (skipUntilAfter.length + skipUntil.length > 0) {\n var token = _scanner.getToken();\n while (token !== 17 /* EOF */) {\n if (skipUntilAfter.indexOf(token) !== -1) {\n scanNext();\n break;\n }\n else if (skipUntil.indexOf(token) !== -1) {\n break;\n }\n token = scanNext();\n }\n }\n }\n function parseString(isValue) {\n var value = _scanner.getTokenValue();\n if (isValue) {\n onLiteralValue(value);\n }\n else {\n onObjectProperty(value);\n }\n scanNext();\n return true;\n }\n function parseLiteral() {\n switch (_scanner.getToken()) {\n case 11 /* NumericLiteral */:\n var tokenValue = _scanner.getTokenValue();\n var value = Number(tokenValue);\n if (isNaN(value)) {\n handleError(2 /* InvalidNumberFormat */);\n value = 0;\n }\n onLiteralValue(value);\n break;\n case 7 /* NullKeyword */:\n onLiteralValue(null);\n break;\n case 8 /* TrueKeyword */:\n onLiteralValue(true);\n break;\n case 9 /* FalseKeyword */:\n onLiteralValue(false);\n break;\n default:\n return false;\n }\n scanNext();\n return true;\n }\n function parseProperty() {\n if (_scanner.getToken() !== 10 /* StringLiteral */) {\n handleError(3 /* PropertyNameExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n return false;\n }\n parseString(false);\n if (_scanner.getToken() === 6 /* ColonToken */) {\n onSeparator(':');\n scanNext(); // consume colon\n if (!parseValue()) {\n handleError(4 /* ValueExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n }\n }\n else {\n handleError(5 /* ColonExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n }\n return true;\n }\n function parseObject() {\n onObjectBegin();\n scanNext(); // consume open brace\n var needsComma = false;\n while (_scanner.getToken() !== 2 /* CloseBraceToken */ && _scanner.getToken() !== 17 /* EOF */) {\n if (_scanner.getToken() === 5 /* CommaToken */) {\n if (!needsComma) {\n handleError(4 /* ValueExpected */, [], []);\n }\n onSeparator(',');\n scanNext(); // consume comma\n if (_scanner.getToken() === 2 /* CloseBraceToken */ && allowTrailingComma) {\n break;\n }\n }\n else if (needsComma) {\n handleError(6 /* CommaExpected */, [], []);\n }\n if (!parseProperty()) {\n handleError(4 /* ValueExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);\n }\n needsComma = true;\n }\n onObjectEnd();\n if (_scanner.getToken() !== 2 /* CloseBraceToken */) {\n handleError(7 /* CloseBraceExpected */, [2 /* CloseBraceToken */], []);\n }\n else {\n scanNext(); // consume close brace\n }\n return true;\n }\n function parseArray() {\n onArrayBegin();\n scanNext(); // consume open bracket\n var needsComma = false;\n while (_scanner.getToken() !== 4 /* CloseBracketToken */ && _scanner.getToken() !== 17 /* EOF */) {\n if (_scanner.getToken() === 5 /* CommaToken */) {\n if (!needsComma) {\n handleError(4 /* ValueExpected */, [], []);\n }\n onSeparator(',');\n scanNext(); // consume comma\n if (_scanner.getToken() === 4 /* CloseBracketToken */ && allowTrailingComma) {\n break;\n }\n }\n else if (needsComma) {\n handleError(6 /* CommaExpected */, [], []);\n }\n if (!parseValue()) {\n handleError(4 /* ValueExpected */, [], [4 /* CloseBracketToken */, 5 /* CommaToken */]);\n }\n needsComma = true;\n }\n onArrayEnd();\n if (_scanner.getToken() !== 4 /* CloseBracketToken */) {\n handleError(8 /* CloseBracketExpected */, [4 /* CloseBracketToken */], []);\n }\n else {\n scanNext(); // consume close bracket\n }\n return true;\n }\n function parseValue() {\n switch (_scanner.getToken()) {\n case 3 /* OpenBracketToken */:\n return parseArray();\n case 1 /* OpenBraceToken */:\n return parseObject();\n case 10 /* StringLiteral */:\n return parseString(true);\n default:\n return parseLiteral();\n }\n }\n scanNext();\n if (_scanner.getToken() === 17 /* EOF */) {\n if (options.allowEmptyContent) {\n return true;\n }\n handleError(4 /* ValueExpected */, [], []);\n return false;\n }\n if (!parseValue()) {\n handleError(4 /* ValueExpected */, [], []);\n return false;\n }\n if (_scanner.getToken() !== 17 /* EOF */) {\n handleError(9 /* EndOfFileExpected */, [], []);\n }\n return true;\n}\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport function stripComments(text, replaceCh) {\n var _scanner = createScanner(text), parts = [], kind, offset = 0, pos;\n do {\n pos = _scanner.getPosition();\n kind = _scanner.scan();\n switch (kind) {\n case 12 /* LineCommentTrivia */:\n case 13 /* BlockCommentTrivia */:\n case 17 /* EOF */:\n if (offset !== pos) {\n parts.push(text.substring(offset, pos));\n }\n if (replaceCh !== undefined) {\n parts.push(_scanner.getTokenValue().replace(/[^\\r\\n]/g, replaceCh));\n }\n offset = _scanner.getPosition();\n break;\n }\n } while (kind !== 17 /* EOF */);\n return parts.join('');\n}\nexport function getNodeType(value) {\n switch (typeof value) {\n case 'boolean': return 'boolean';\n case 'number': return 'number';\n case 'string': return 'string';\n case 'object': {\n if (!value) {\n return 'null';\n }\n else if (Array.isArray(value)) {\n return 'array';\n }\n return 'object';\n }\n default: return 'null';\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport { format, isEOL } from './format';\nimport { parseTree, findNodeAtLocation } from './parser';\nexport function removeProperty(text, path, options) {\n return setProperty(text, path, void 0, options);\n}\nexport function setProperty(text, originalPath, value, options) {\n var _a;\n var path = originalPath.slice();\n var errors = [];\n var root = parseTree(text, errors);\n var parent = void 0;\n var lastSegment = void 0;\n while (path.length > 0) {\n lastSegment = path.pop();\n parent = findNodeAtLocation(root, path);\n if (parent === void 0 && value !== void 0) {\n if (typeof lastSegment === 'string') {\n value = (_a = {}, _a[lastSegment] = value, _a);\n }\n else {\n value = [value];\n }\n }\n else {\n break;\n }\n }\n if (!parent) {\n // empty document\n if (value === void 0) { // delete\n throw new Error('Can not delete in empty document');\n }\n return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, options);\n }\n else if (parent.type === 'object' && typeof lastSegment === 'string' && Array.isArray(parent.children)) {\n var existing = findNodeAtLocation(parent, [lastSegment]);\n if (existing !== void 0) {\n if (value === void 0) { // delete\n if (!existing.parent) {\n throw new Error('Malformed AST');\n }\n var propertyIndex = parent.children.indexOf(existing.parent);\n var removeBegin = void 0;\n var removeEnd = existing.parent.offset + existing.parent.length;\n if (propertyIndex > 0) {\n // remove the comma of the previous node\n var previous = parent.children[propertyIndex - 1];\n removeBegin = previous.offset + previous.length;\n }\n else {\n removeBegin = parent.offset + 1;\n if (parent.children.length > 1) {\n // remove the comma of the next node\n var next = parent.children[1];\n removeEnd = next.offset;\n }\n }\n return withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: '' }, options);\n }\n else {\n // set value of existing property\n return withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, options);\n }\n }\n else {\n if (value === void 0) { // delete\n return []; // property does not exist, nothing to do\n }\n var newProperty = JSON.stringify(lastSegment) + \": \" + JSON.stringify(value);\n var index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map(function (p) { return p.children[0].value; })) : parent.children.length;\n var edit = void 0;\n if (index > 0) {\n var previous = parent.children[index - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n else if (parent.children.length === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n }\n else {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty + ',' };\n }\n return withFormatting(text, edit, options);\n }\n }\n else if (parent.type === 'array' && typeof lastSegment === 'number' && Array.isArray(parent.children)) {\n var insertIndex = lastSegment;\n if (insertIndex === -1) {\n // Insert\n var newProperty = \"\" + JSON.stringify(value);\n var edit = void 0;\n if (parent.children.length === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: newProperty };\n }\n else {\n var previous = parent.children[parent.children.length - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n return withFormatting(text, edit, options);\n }\n else if (value === void 0 && parent.children.length >= 0) {\n // Removal\n var removalIndex = lastSegment;\n var toRemove = parent.children[removalIndex];\n var edit = void 0;\n if (parent.children.length === 1) {\n // only item\n edit = { offset: parent.offset + 1, length: parent.length - 2, content: '' };\n }\n else if (parent.children.length - 1 === removalIndex) {\n // last item\n var previous = parent.children[removalIndex - 1];\n var offset = previous.offset + previous.length;\n var parentEndOffset = parent.offset + parent.length;\n edit = { offset: offset, length: parentEndOffset - 2 - offset, content: '' };\n }\n else {\n edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: '' };\n }\n return withFormatting(text, edit, options);\n }\n else if (value !== void 0) {\n var edit = void 0;\n var newProperty = \"\" + JSON.stringify(value);\n if (!options.isArrayInsertion && parent.children.length > lastSegment) {\n var toModify = parent.children[lastSegment];\n edit = { offset: toModify.offset, length: toModify.length, content: newProperty };\n }\n else if (parent.children.length === 0 || lastSegment === 0) {\n edit = { offset: parent.offset + 1, length: 0, content: parent.children.length === 0 ? newProperty : newProperty + ',' };\n }\n else {\n var index = lastSegment > parent.children.length ? parent.children.length : lastSegment;\n var previous = parent.children[index - 1];\n edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };\n }\n return withFormatting(text, edit, options);\n }\n else {\n throw new Error(\"Can not \" + (value === void 0 ? 'remove' : (options.isArrayInsertion ? 'insert' : 'modify')) + \" Array index \" + insertIndex + \" as length is not sufficient\");\n }\n }\n else {\n throw new Error(\"Can not add \" + (typeof lastSegment !== 'number' ? 'index' : 'property') + \" to parent of type \" + parent.type);\n }\n}\nfunction withFormatting(text, edit, options) {\n if (!options.formattingOptions) {\n return [edit];\n }\n // apply the edit\n var newText = applyEdit(text, edit);\n // format the new text\n var begin = edit.offset;\n var end = edit.offset + edit.content.length;\n if (edit.length === 0 || edit.content.length === 0) { // insert or remove\n while (begin > 0 && !isEOL(newText, begin - 1)) {\n begin--;\n }\n while (end < newText.length && !isEOL(newText, end)) {\n end++;\n }\n }\n var edits = format(newText, { offset: begin, length: end - begin }, options.formattingOptions);\n // apply the formatting edits and track the begin and end offsets of the changes\n for (var i = edits.length - 1; i >= 0; i--) {\n var edit_1 = edits[i];\n newText = applyEdit(newText, edit_1);\n begin = Math.min(begin, edit_1.offset);\n end = Math.max(end, edit_1.offset + edit_1.length);\n end += edit_1.content.length - edit_1.length;\n }\n // create a single edit with all changes\n var editLength = text.length - (newText.length - end) - begin;\n return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];\n}\nexport function applyEdit(text, edit) {\n return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);\n}\nexport function isWS(text, offset) {\n return '\\r\\n \\t'.indexOf(text.charAt(offset)) !== -1;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nimport * as formatter from './impl/format';\nimport * as edit from './impl/edit';\nimport * as scanner from './impl/scanner';\nimport * as parser from './impl/parser';\n/**\n * Creates a JSON scanner on the given text.\n * If ignoreTrivia is set, whitespaces or comments are ignored.\n */\nexport var createScanner = scanner.createScanner;\n/**\n * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.\n */\nexport var getLocation = parser.getLocation;\n/**\n * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n * Therefore, always check the errors list to find out if the input was valid.\n */\nexport var parse = parser.parse;\n/**\n * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.\n */\nexport var parseTree = parser.parseTree;\n/**\n * Finds the node at the given path in a JSON DOM.\n */\nexport var findNodeAtLocation = parser.findNodeAtLocation;\n/**\n * Finds the innermost node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.\n */\nexport var findNodeAtOffset = parser.findNodeAtOffset;\n/**\n * Gets the JSON path of the given JSON DOM node\n */\nexport var getNodePath = parser.getNodePath;\n/**\n * Evaluates the JavaScript object of the given JSON DOM node\n */\nexport var getNodeValue = parser.getNodeValue;\n/**\n * Parses the given text and invokes the visitor functions for each object, array and literal reached.\n */\nexport var visit = parser.visit;\n/**\n * Takes JSON with JavaScript-style comments and remove\n * them. Optionally replaces every none-newline character\n * of comments with a replaceCharacter\n */\nexport var stripComments = parser.stripComments;\nexport function printParseErrorCode(code) {\n switch (code) {\n case 1 /* InvalidSymbol */: return 'InvalidSymbol';\n case 2 /* InvalidNumberFormat */: return 'InvalidNumberFormat';\n case 3 /* PropertyNameExpected */: return 'PropertyNameExpected';\n case 4 /* ValueExpected */: return 'ValueExpected';\n case 5 /* ColonExpected */: return 'ColonExpected';\n case 6 /* CommaExpected */: return 'CommaExpected';\n case 7 /* CloseBraceExpected */: return 'CloseBraceExpected';\n case 8 /* CloseBracketExpected */: return 'CloseBracketExpected';\n case 9 /* EndOfFileExpected */: return 'EndOfFileExpected';\n case 10 /* InvalidCommentToken */: return 'InvalidCommentToken';\n case 11 /* UnexpectedEndOfComment */: return 'UnexpectedEndOfComment';\n case 12 /* UnexpectedEndOfString */: return 'UnexpectedEndOfString';\n case 13 /* UnexpectedEndOfNumber */: return 'UnexpectedEndOfNumber';\n case 14 /* InvalidUnicode */: return 'InvalidUnicode';\n case 15 /* InvalidEscapeCharacter */: return 'InvalidEscapeCharacter';\n case 16 /* InvalidCharacter */: return 'InvalidCharacter';\n }\n return '<unknown ParseErrorCode>';\n}\n/**\n * Computes the edits needed to format a JSON document.\n *\n * @param documentText The input text\n * @param range The range to format or `undefined` to format the full content\n * @param options The formatting options\n * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or\n * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of\n * text in the original document. However, multiple edits can have\n * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.\n * To apply edits to an input, you can use `applyEdits`.\n */\nexport function format(documentText, range, options) {\n return formatter.format(documentText, range, options);\n}\n/**\n * Computes the edits needed to modify a value in the JSON document.\n *\n * @param documentText The input text\n * @param path The path of the value to change. The path represents either to the document root, a property or an array item.\n * If the path points to an non-existing property or item, it will be created.\n * @param value The new value for the specified property or item. If the value is undefined,\n * the property or item will be removed.\n * @param options Options\n * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or\n * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of\n * text in the original document. However, multiple edits can have\n * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.\n * To apply edits to an input, you can use `applyEdits`.\n */\nexport function modify(text, path, value, options) {\n return edit.setProperty(text, path, value, options);\n}\n/**\n * Applies edits to a input string.\n */\nexport function applyEdits(text, edits) {\n for (var i = edits.length - 1; i >= 0; i--) {\n text = edit.applyEdit(text, edits[i]);\n }\n return text;\n}\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n", "'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = 1 + originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\tadjustedLength > 0 ? adjustedLength : 0,\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar gOPD = require('gopd');\n\n/** @type {import('.')} */\nvar fn;\n\nif (hasToStringTag) {\n\t/** @type {(receiver: ThisParameterType<typeof RegExp.prototype.exec>, ...args: Parameters<typeof RegExp.prototype.exec>) => ReturnType<typeof RegExp.prototype.exec>} */\n\tvar $exec = callBound('RegExp.prototype.exec');\n\t/** @type {object} */\n\tvar isRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\t/** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */\n\tvar badStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n\n\t/** @type {import('.')} */\n\t// @ts-expect-error TS can't figure out that the $exec call always throws\n\t// eslint-disable-next-line consistent-return\n\tfn = function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {NonNullable<typeof gOPD>} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t$exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier)));\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t};\n} else {\n\t/** @type {(receiver: ThisParameterType<typeof Object.prototype.toString>, ...args: Parameters<typeof Object.prototype.toString>) => ReturnType<typeof Object.prototype.toString>} */\n\tvar $toString = callBound('Object.prototype.toString');\n\t/** @const @type {'[object RegExp]'} */\n\tvar regexClass = '[object RegExp]';\n\n\t/** @type {import('.')} */\n\tfn = function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n}\n\nmodule.exports = fn;\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar isRegex = require('is-regex');\n\nvar $exec = callBound('RegExp.prototype.exec');\nvar $TypeError = require('es-errors/type');\n\n/** @type {import('.')} */\nmodule.exports = function regexTester(regex) {\n\tif (!isRegex(regex)) {\n\t\tthrow new $TypeError('`regex` must be a RegExp');\n\t}\n\treturn function test(s) {\n\t\treturn $exec(regex, s) !== null;\n\t};\n};\n", "'use strict';\n\n// eslint-disable-next-line no-extra-parens, no-empty-function\nconst cached = /** @type {GeneratorFunctionConstructor} */ (function* () {}.constructor);\n\n/** @type {import('.')} */\nmodule.exports = () => cached;\n\n", "'use strict';\n\nvar callBound = require('call-bound');\nvar safeRegexTest = require('safe-regex-test');\nvar isFnRegex = safeRegexTest(/^\\s*(?:function)?\\*/);\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = require('get-proto');\n\nvar toStr = callBound('Object.prototype.toString');\nvar fnToStr = callBound('Function.prototype.toString');\n\nvar getGeneratorFunction = require('generator-function');\n\n/** @type {import('.')} */\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex(fnToStr(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tvar GeneratorFunction = getGeneratorFunction();\n\treturn GeneratorFunction && getProto(fn) === GeneratorFunction.prototype;\n};\n", "'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n", "'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/** @type {<This, A extends readonly unknown[]>(arr: A, iterator: (this: This | void, value: A[number], index: number, arr: A) => void, receiver: This | undefined) => void} */\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\n/** @type {<This, S extends string>(string: S, iterator: (this: This | void, value: S[number], index: number, string: S) => void, receiver: This | undefined) => void} */\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\n/** @type {<This, O>(obj: O, iterator: (this: This | void, value: O[keyof O], index: keyof O, obj: O) => void, receiver: This | undefined) => void} */\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\n/** @type {(x: unknown) => x is readonly unknown[]} */\nfunction isArray(x) {\n return toStr.call(x) === '[object Array]';\n}\n\n/** @type {import('.')._internal} */\nmodule.exports = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (isArray(list)) {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float16Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n", "'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType<typeof availableTypedArrays>} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n", "'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\nvar gOPD = require('gopd');\nvar getProto = require('get-proto');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\n\n/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {import('./types').Getter} Getter */\n/** @type {import('./types').Cache} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getProto) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr && getProto) {\n\t\t\tvar proto = getProto(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor && proto) {\n\t\t\t\tvar superProto = getProto(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\tif (descriptor && descriptor.get) {\n\t\t\t\tvar bound = callBind(descriptor.get);\n\t\t\t\tcache[\n\t\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t\t] = bound;\n\t\t\t}\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\tvar bound = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ (\n\t\t\t\t// @ts-expect-error TODO FIXME\n\t\t\t\tcallBind(fn)\n\t\t\t);\n\t\t\tcache[\n\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t] = bound;\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1));\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType<typeof tryAllSlices>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */(cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(name, 1));\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n", "'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n", "// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n", "module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nexport var DocumentUri;\n(function (DocumentUri) {\n function is(value) {\n return typeof value === 'string';\n }\n DocumentUri.is = is;\n})(DocumentUri || (DocumentUri = {}));\nexport var URI;\n(function (URI) {\n function is(value) {\n return typeof value === 'string';\n }\n URI.is = is;\n})(URI || (URI = {}));\nexport var integer;\n(function (integer) {\n integer.MIN_VALUE = -2147483648;\n integer.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;\n }\n integer.is = is;\n})(integer || (integer = {}));\nexport var uinteger;\n(function (uinteger) {\n uinteger.MIN_VALUE = 0;\n uinteger.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;\n }\n uinteger.is = is;\n})(uinteger || (uinteger = {}));\n/**\n * The Position namespace provides helper functions to work with\n * {@link Position} literals.\n */\nexport var Position;\n(function (Position) {\n /**\n * Creates a new Position literal from the given line and character.\n * @param line The position's line.\n * @param character The position's character.\n */\n function create(line, character) {\n if (line === Number.MAX_VALUE) {\n line = uinteger.MAX_VALUE;\n }\n if (character === Number.MAX_VALUE) {\n character = uinteger.MAX_VALUE;\n }\n return { line, character };\n }\n Position.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Position} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position.is = is;\n})(Position || (Position = {}));\n/**\n * The Range namespace provides helper functions to work with\n * {@link Range} literals.\n */\nexport var Range;\n(function (Range) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n return { start: Position.create(one, two), end: Position.create(three, four) };\n }\n else if (Position.is(one) && Position.is(two)) {\n return { start: one, end: two };\n }\n else {\n throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n }\n }\n Range.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Range} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range.is = is;\n})(Range || (Range = {}));\n/**\n * The Location namespace provides helper functions to work with\n * {@link Location} literals.\n */\nexport var Location;\n(function (Location) {\n /**\n * Creates a Location literal.\n * @param uri The location's uri.\n * @param range The location's range.\n */\n function create(uri, range) {\n return { uri, range };\n }\n Location.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Location} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location.is = is;\n})(Location || (Location = {}));\n/**\n * The LocationLink namespace provides helper functions to work with\n * {@link LocationLink} literals.\n */\nexport var LocationLink;\n(function (LocationLink) {\n /**\n * Creates a LocationLink literal.\n * @param targetUri The definition's uri.\n * @param targetRange The full range of the definition.\n * @param targetSelectionRange The span of the symbol definition at the target.\n * @param originSelectionRange The span of the symbol being defined in the originating source file.\n */\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return { targetUri, targetRange, targetSelectionRange, originSelectionRange };\n }\n LocationLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link LocationLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\n && Range.is(candidate.targetSelectionRange)\n && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink.is = is;\n})(LocationLink || (LocationLink = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link Color} literals.\n */\nexport var Color;\n(function (Color) {\n /**\n * Creates a new Color literal.\n */\n function create(red, green, blue, alpha) {\n return {\n red,\n green,\n blue,\n alpha,\n };\n }\n Color.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Color} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1)\n && Is.numberRange(candidate.green, 0, 1)\n && Is.numberRange(candidate.blue, 0, 1)\n && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color.is = is;\n})(Color || (Color = {}));\n/**\n * The ColorInformation namespace provides helper functions to work with\n * {@link ColorInformation} literals.\n */\nexport var ColorInformation;\n(function (ColorInformation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(range, color) {\n return {\n range,\n color,\n };\n }\n ColorInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation.is = is;\n})(ColorInformation || (ColorInformation = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link ColorPresentation} literals.\n */\nexport var ColorPresentation;\n(function (ColorPresentation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(label, textEdit, additionalTextEdits) {\n return {\n label,\n textEdit,\n additionalTextEdits,\n };\n }\n ColorPresentation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label)\n && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\n && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\n/**\n * A set of predefined range kinds.\n */\nexport var FoldingRangeKind;\n(function (FoldingRangeKind) {\n /**\n * Folding range for a comment\n */\n FoldingRangeKind.Comment = 'comment';\n /**\n * Folding range for an import or include\n */\n FoldingRangeKind.Imports = 'imports';\n /**\n * Folding range for a region (e.g. `#region`)\n */\n FoldingRangeKind.Region = 'region';\n})(FoldingRangeKind || (FoldingRangeKind = {}));\n/**\n * The folding range namespace provides helper functions to work with\n * {@link FoldingRange} literals.\n */\nexport var FoldingRange;\n(function (FoldingRange) {\n /**\n * Creates a new FoldingRange literal.\n */\n function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n const result = {\n startLine,\n endLine\n };\n if (Is.defined(startCharacter)) {\n result.startCharacter = startCharacter;\n }\n if (Is.defined(endCharacter)) {\n result.endCharacter = endCharacter;\n }\n if (Is.defined(kind)) {\n result.kind = kind;\n }\n if (Is.defined(collapsedText)) {\n result.collapsedText = collapsedText;\n }\n return result;\n }\n FoldingRange.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FoldingRange} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)\n && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))\n && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))\n && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange.is = is;\n})(FoldingRange || (FoldingRange = {}));\n/**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * {@link DiagnosticRelatedInformation} literals.\n */\nexport var DiagnosticRelatedInformation;\n(function (DiagnosticRelatedInformation) {\n /**\n * Creates a new DiagnosticRelatedInformation literal.\n */\n function create(location, message) {\n return {\n location,\n message\n };\n }\n DiagnosticRelatedInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n/**\n * The diagnostic's severity.\n */\nexport var DiagnosticSeverity;\n(function (DiagnosticSeverity) {\n /**\n * Reports an error.\n */\n DiagnosticSeverity.Error = 1;\n /**\n * Reports a warning.\n */\n DiagnosticSeverity.Warning = 2;\n /**\n * Reports an information.\n */\n DiagnosticSeverity.Information = 3;\n /**\n * Reports a hint.\n */\n DiagnosticSeverity.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\n/**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\nexport var DiagnosticTag;\n(function (DiagnosticTag) {\n /**\n * Unused or unnecessary code.\n *\n * Clients are allowed to render diagnostics with this tag faded out instead of having\n * an error squiggle.\n */\n DiagnosticTag.Unnecessary = 1;\n /**\n * Deprecated or obsolete code.\n *\n * Clients are allowed to rendered diagnostics with this tag strike through.\n */\n DiagnosticTag.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\n/**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\nexport var CodeDescription;\n(function (CodeDescription) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.href);\n }\n CodeDescription.is = is;\n})(CodeDescription || (CodeDescription = {}));\n/**\n * The Diagnostic namespace provides helper functions to work with\n * {@link Diagnostic} literals.\n */\nexport var Diagnostic;\n(function (Diagnostic) {\n /**\n * Creates a new Diagnostic literal.\n */\n function create(range, message, severity, code, source, relatedInformation) {\n let result = { range, message };\n if (Is.defined(severity)) {\n result.severity = severity;\n }\n if (Is.defined(code)) {\n result.code = code;\n }\n if (Is.defined(source)) {\n result.source = source;\n }\n if (Is.defined(relatedInformation)) {\n result.relatedInformation = relatedInformation;\n }\n return result;\n }\n Diagnostic.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Diagnostic} interface.\n */\n function is(value) {\n var _a;\n let candidate = value;\n return Is.defined(candidate)\n && Range.is(candidate.range)\n && Is.string(candidate.message)\n && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\n && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\n && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))\n && (Is.string(candidate.source) || Is.undefined(candidate.source))\n && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic.is = is;\n})(Diagnostic || (Diagnostic = {}));\n/**\n * The Command namespace provides helper functions to work with\n * {@link Command} literals.\n */\nexport var Command;\n(function (Command) {\n /**\n * Creates a new Command literal.\n */\n function create(title, command, ...args) {\n let result = { title, command };\n if (Is.defined(args) && args.length > 0) {\n result.arguments = args;\n }\n return result;\n }\n Command.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Command} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command.is = is;\n})(Command || (Command = {}));\n/**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\nexport var TextEdit;\n(function (TextEdit) {\n /**\n * Creates a replace text edit.\n * @param range The range of text to be replaced.\n * @param newText The new text.\n */\n function replace(range, newText) {\n return { range, newText };\n }\n TextEdit.replace = replace;\n /**\n * Creates an insert text edit.\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n */\n function insert(position, newText) {\n return { range: { start: position, end: position }, newText };\n }\n TextEdit.insert = insert;\n /**\n * Creates a delete text edit.\n * @param range The range of text to be deleted.\n */\n function del(range) {\n return { range, newText: '' };\n }\n TextEdit.del = del;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate)\n && Is.string(candidate.newText)\n && Range.is(candidate.range);\n }\n TextEdit.is = is;\n})(TextEdit || (TextEdit = {}));\nexport var ChangeAnnotation;\n(function (ChangeAnnotation) {\n function create(label, needsConfirmation, description) {\n const result = { label };\n if (needsConfirmation !== undefined) {\n result.needsConfirmation = needsConfirmation;\n }\n if (description !== undefined) {\n result.description = description;\n }\n return result;\n }\n ChangeAnnotation.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) &&\n (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n ChangeAnnotation.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nexport var ChangeAnnotationIdentifier;\n(function (ChangeAnnotationIdentifier) {\n function is(value) {\n const candidate = value;\n return Is.string(candidate);\n }\n ChangeAnnotationIdentifier.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nexport var AnnotatedTextEdit;\n(function (AnnotatedTextEdit) {\n /**\n * Creates an annotated replace text edit.\n *\n * @param range The range of text to be replaced.\n * @param newText The new text.\n * @param annotation The annotation.\n */\n function replace(range, newText, annotation) {\n return { range, newText, annotationId: annotation };\n }\n AnnotatedTextEdit.replace = replace;\n /**\n * Creates an annotated insert text edit.\n *\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n * @param annotation The annotation.\n */\n function insert(position, newText, annotation) {\n return { range: { start: position, end: position }, newText, annotationId: annotation };\n }\n AnnotatedTextEdit.insert = insert;\n /**\n * Creates an annotated delete text edit.\n *\n * @param range The range of text to be deleted.\n * @param annotation The annotation.\n */\n function del(range, annotation) {\n return { range, newText: '', annotationId: annotation };\n }\n AnnotatedTextEdit.del = del;\n function is(value) {\n const candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n/**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\nexport var TextDocumentEdit;\n(function (TextDocumentEdit) {\n /**\n * Creates a new `TextDocumentEdit`\n */\n function create(textDocument, edits) {\n return { textDocument, edits };\n }\n TextDocumentEdit.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate)\n && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n && Array.isArray(candidate.edits);\n }\n TextDocumentEdit.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nexport var CreateFile;\n(function (CreateFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: 'create',\n uri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n CreateFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile.is = is;\n})(CreateFile || (CreateFile = {}));\nexport var RenameFile;\n(function (RenameFile) {\n function create(oldUri, newUri, options, annotation) {\n let result = {\n kind: 'rename',\n oldUri,\n newUri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n RenameFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile.is = is;\n})(RenameFile || (RenameFile = {}));\nexport var DeleteFile;\n(function (DeleteFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: 'delete',\n uri\n };\n if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n DeleteFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile.is = is;\n})(DeleteFile || (DeleteFile = {}));\nexport var WorkspaceEdit;\n(function (WorkspaceEdit) {\n function is(value) {\n let candidate = value;\n return candidate &&\n (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n (candidate.documentChanges === undefined || candidate.documentChanges.every((change) => {\n if (Is.string(change.kind)) {\n return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n }\n else {\n return TextDocumentEdit.is(change);\n }\n }));\n }\n WorkspaceEdit.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nclass TextEditChangeImpl {\n constructor(edits, changeAnnotations) {\n this.edits = edits;\n this.changeAnnotations = changeAnnotations;\n }\n insert(position, newText, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.insert(position, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.insert(position, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.insert(position, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n replace(range, newText, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.replace(range, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.replace(range, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.replace(range, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n delete(range, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.del(range);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.del(range, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.del(range, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n add(edit) {\n this.edits.push(edit);\n }\n all() {\n return this.edits;\n }\n clear() {\n this.edits.splice(0, this.edits.length);\n }\n assertChangeAnnotations(value) {\n if (value === undefined) {\n throw new Error(`Text edit change is not configured to manage change annotations.`);\n }\n }\n}\n/**\n * A helper class\n */\nclass ChangeAnnotations {\n constructor(annotations) {\n this._annotations = annotations === undefined ? Object.create(null) : annotations;\n this._counter = 0;\n this._size = 0;\n }\n all() {\n return this._annotations;\n }\n get size() {\n return this._size;\n }\n manage(idOrAnnotation, annotation) {\n let id;\n if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {\n id = idOrAnnotation;\n }\n else {\n id = this.nextId();\n annotation = idOrAnnotation;\n }\n if (this._annotations[id] !== undefined) {\n throw new Error(`Id ${id} is already in use.`);\n }\n if (annotation === undefined) {\n throw new Error(`No annotation provided for id ${id}`);\n }\n this._annotations[id] = annotation;\n this._size++;\n return id;\n }\n nextId() {\n this._counter++;\n return this._counter.toString();\n }\n}\n/**\n * A workspace change helps constructing changes to a workspace.\n */\nexport class WorkspaceChange {\n constructor(workspaceEdit) {\n this._textEditChanges = Object.create(null);\n if (workspaceEdit !== undefined) {\n this._workspaceEdit = workspaceEdit;\n if (workspaceEdit.documentChanges) {\n this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);\n workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n workspaceEdit.documentChanges.forEach((change) => {\n if (TextDocumentEdit.is(change)) {\n const textEditChange = new TextEditChangeImpl(change.edits, this._changeAnnotations);\n this._textEditChanges[change.textDocument.uri] = textEditChange;\n }\n });\n }\n else if (workspaceEdit.changes) {\n Object.keys(workspaceEdit.changes).forEach((key) => {\n const textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n this._textEditChanges[key] = textEditChange;\n });\n }\n }\n else {\n this._workspaceEdit = {};\n }\n }\n /**\n * Returns the underlying {@link WorkspaceEdit} literal\n * use to be returned from a workspace edit operation like rename.\n */\n get edit() {\n this.initDocumentChanges();\n if (this._changeAnnotations !== undefined) {\n if (this._changeAnnotations.size === 0) {\n this._workspaceEdit.changeAnnotations = undefined;\n }\n else {\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n return this._workspaceEdit;\n }\n getTextEditChange(key) {\n if (OptionalVersionedTextDocumentIdentifier.is(key)) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n const textDocument = { uri: key.uri, version: key.version };\n let result = this._textEditChanges[textDocument.uri];\n if (!result) {\n const edits = [];\n const textDocumentEdit = {\n textDocument,\n edits\n };\n this._workspaceEdit.documentChanges.push(textDocumentEdit);\n result = new TextEditChangeImpl(edits, this._changeAnnotations);\n this._textEditChanges[textDocument.uri] = result;\n }\n return result;\n }\n else {\n this.initChanges();\n if (this._workspaceEdit.changes === undefined) {\n throw new Error('Workspace edit is not configured for normal text edit changes.');\n }\n let result = this._textEditChanges[key];\n if (!result) {\n let edits = [];\n this._workspaceEdit.changes[key] = edits;\n result = new TextEditChangeImpl(edits);\n this._textEditChanges[key] = result;\n }\n return result;\n }\n }\n initDocumentChanges() {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._changeAnnotations = new ChangeAnnotations();\n this._workspaceEdit.documentChanges = [];\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n initChanges() {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._workspaceEdit.changes = Object.create(null);\n }\n }\n createFile(uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = CreateFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = CreateFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n renameFile(oldUri, newUri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = RenameFile.create(oldUri, newUri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = RenameFile.create(oldUri, newUri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n deleteFile(uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = DeleteFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = DeleteFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n}\n/**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * {@link TextDocumentIdentifier} literals.\n */\nexport var TextDocumentIdentifier;\n(function (TextDocumentIdentifier) {\n /**\n * Creates a new TextDocumentIdentifier literal.\n * @param uri The document's uri.\n */\n function create(uri) {\n return { uri };\n }\n TextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n/**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link VersionedTextDocumentIdentifier} literals.\n */\nexport var VersionedTextDocumentIdentifier;\n(function (VersionedTextDocumentIdentifier) {\n /**\n * Creates a new VersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri, version };\n }\n VersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n/**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link OptionalVersionedTextDocumentIdentifier} literals.\n */\nexport var OptionalVersionedTextDocumentIdentifier;\n(function (OptionalVersionedTextDocumentIdentifier) {\n /**\n * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri, version };\n }\n OptionalVersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n/**\n * The TextDocumentItem namespace provides helper functions to work with\n * {@link TextDocumentItem} literals.\n */\nexport var TextDocumentItem;\n(function (TextDocumentItem) {\n /**\n * Creates a new TextDocumentItem literal.\n * @param uri The document's uri.\n * @param languageId The document's language identifier.\n * @param version The document's version number.\n * @param text The document's text.\n */\n function create(uri, languageId, version, text) {\n return { uri, languageId, version, text };\n }\n TextDocumentItem.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentItem} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\n/**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\nexport var MarkupKind;\n(function (MarkupKind) {\n /**\n * Plain text is supported as a content format\n */\n MarkupKind.PlainText = 'plaintext';\n /**\n * Markdown is supported as a content format\n */\n MarkupKind.Markdown = 'markdown';\n /**\n * Checks whether the given value is a value of the {@link MarkupKind} type.\n */\n function is(value) {\n const candidate = value;\n return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n }\n MarkupKind.is = is;\n})(MarkupKind || (MarkupKind = {}));\nexport var MarkupContent;\n(function (MarkupContent) {\n /**\n * Checks whether the given value conforms to the {@link MarkupContent} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent.is = is;\n})(MarkupContent || (MarkupContent = {}));\n/**\n * The kind of a completion entry.\n */\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind.Text = 1;\n CompletionItemKind.Method = 2;\n CompletionItemKind.Function = 3;\n CompletionItemKind.Constructor = 4;\n CompletionItemKind.Field = 5;\n CompletionItemKind.Variable = 6;\n CompletionItemKind.Class = 7;\n CompletionItemKind.Interface = 8;\n CompletionItemKind.Module = 9;\n CompletionItemKind.Property = 10;\n CompletionItemKind.Unit = 11;\n CompletionItemKind.Value = 12;\n CompletionItemKind.Enum = 13;\n CompletionItemKind.Keyword = 14;\n CompletionItemKind.Snippet = 15;\n CompletionItemKind.Color = 16;\n CompletionItemKind.File = 17;\n CompletionItemKind.Reference = 18;\n CompletionItemKind.Folder = 19;\n CompletionItemKind.EnumMember = 20;\n CompletionItemKind.Constant = 21;\n CompletionItemKind.Struct = 22;\n CompletionItemKind.Event = 23;\n CompletionItemKind.Operator = 24;\n CompletionItemKind.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\n/**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\nexport var InsertTextFormat;\n(function (InsertTextFormat) {\n /**\n * The primary text to be inserted is treated as a plain string.\n */\n InsertTextFormat.PlainText = 1;\n /**\n * The primary text to be inserted is treated as a snippet.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Placeholders with equal identifiers are linked,\n * that is typing in one will update others too.\n *\n * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n */\n InsertTextFormat.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\n/**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n /**\n * Render a completion as obsolete, usually using a strike-out.\n */\n CompletionItemTag.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\nexport var InsertReplaceEdit;\n(function (InsertReplaceEdit) {\n /**\n * Creates a new insert / replace edit\n */\n function create(newText, insert, replace) {\n return { newText, insert, replace };\n }\n InsertReplaceEdit.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.\n */\n function is(value) {\n const candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\n/**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\nexport var InsertTextMode;\n(function (InsertTextMode) {\n /**\n * The insertion or replace strings is taken as it is. If the\n * value is multi line the lines below the cursor will be\n * inserted using the indentation defined in the string value.\n * The client will not apply any kind of adjustments to the\n * string.\n */\n InsertTextMode.asIs = 1;\n /**\n * The editor adjusts leading whitespace of new lines so that\n * they match the indentation up to the cursor of the line for\n * which the item is accepted.\n *\n * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a\n * multi line completion item is indented using 2 tabs and all\n * following lines inserted will be indented using 2 tabs as well.\n */\n InsertTextMode.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nexport var CompletionItemLabelDetails;\n(function (CompletionItemLabelDetails) {\n function is(value) {\n const candidate = value;\n return candidate && (Is.string(candidate.detail) || candidate.detail === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n CompletionItemLabelDetails.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\n/**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\nexport var CompletionItem;\n(function (CompletionItem) {\n /**\n * Create a completion item and seed it with a label.\n * @param label The completion item's label\n */\n function create(label) {\n return { label };\n }\n CompletionItem.create = create;\n})(CompletionItem || (CompletionItem = {}));\n/**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\nexport var CompletionList;\n(function (CompletionList) {\n /**\n * Creates a new completion list.\n *\n * @param items The completion items.\n * @param isIncomplete The list is not complete.\n */\n function create(items, isIncomplete) {\n return { items: items ? items : [], isIncomplete: !!isIncomplete };\n }\n CompletionList.create = create;\n})(CompletionList || (CompletionList = {}));\nexport var MarkedString;\n(function (MarkedString) {\n /**\n * Creates a marked string from plain text.\n *\n * @param plainText The plain text.\n */\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n }\n MarkedString.fromPlainText = fromPlainText;\n /**\n * Checks whether the given value conforms to the {@link MarkedString} type.\n */\n function is(value) {\n const candidate = value;\n return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\n }\n MarkedString.is = is;\n})(MarkedString || (MarkedString = {}));\nexport var Hover;\n(function (Hover) {\n /**\n * Checks whether the given value conforms to the {@link Hover} interface.\n */\n function is(value) {\n let candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\n MarkedString.is(candidate.contents) ||\n Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));\n }\n Hover.is = is;\n})(Hover || (Hover = {}));\n/**\n * The ParameterInformation namespace provides helper functions to work with\n * {@link ParameterInformation} literals.\n */\nexport var ParameterInformation;\n(function (ParameterInformation) {\n /**\n * Creates a new parameter information literal.\n *\n * @param label A label string.\n * @param documentation A doc string.\n */\n function create(label, documentation) {\n return documentation ? { label, documentation } : { label };\n }\n ParameterInformation.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\n/**\n * The SignatureInformation namespace provides helper functions to work with\n * {@link SignatureInformation} literals.\n */\nexport var SignatureInformation;\n(function (SignatureInformation) {\n function create(label, documentation, ...parameters) {\n let result = { label };\n if (Is.defined(documentation)) {\n result.documentation = documentation;\n }\n if (Is.defined(parameters)) {\n result.parameters = parameters;\n }\n else {\n result.parameters = [];\n }\n return result;\n }\n SignatureInformation.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind.Text = 1;\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind.Read = 2;\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * DocumentHighlight namespace to provide helper functions to work with\n * {@link DocumentHighlight} literals.\n */\nexport var DocumentHighlight;\n(function (DocumentHighlight) {\n /**\n * Create a DocumentHighlight object.\n * @param range The range the highlight applies to.\n * @param kind The highlight kind\n */\n function create(range, kind) {\n let result = { range };\n if (Is.number(kind)) {\n result.kind = kind;\n }\n return result;\n }\n DocumentHighlight.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind.File = 1;\n SymbolKind.Module = 2;\n SymbolKind.Namespace = 3;\n SymbolKind.Package = 4;\n SymbolKind.Class = 5;\n SymbolKind.Method = 6;\n SymbolKind.Property = 7;\n SymbolKind.Field = 8;\n SymbolKind.Constructor = 9;\n SymbolKind.Enum = 10;\n SymbolKind.Interface = 11;\n SymbolKind.Function = 12;\n SymbolKind.Variable = 13;\n SymbolKind.Constant = 14;\n SymbolKind.String = 15;\n SymbolKind.Number = 16;\n SymbolKind.Boolean = 17;\n SymbolKind.Array = 18;\n SymbolKind.Object = 19;\n SymbolKind.Key = 20;\n SymbolKind.Null = 21;\n SymbolKind.EnumMember = 22;\n SymbolKind.Struct = 23;\n SymbolKind.Event = 24;\n SymbolKind.Operator = 25;\n SymbolKind.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\n/**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n *\n * @since 3.16\n */\nexport var SymbolTag;\n(function (SymbolTag) {\n /**\n * Render a symbol as obsolete, usually using a strike-out.\n */\n SymbolTag.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nexport var SymbolInformation;\n(function (SymbolInformation) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the location of the symbol.\n * @param uri The resource of the location of symbol.\n * @param containerName The name of the symbol containing the symbol.\n */\n function create(name, kind, range, uri, containerName) {\n let result = {\n name,\n kind,\n location: { uri, range }\n };\n if (containerName) {\n result.containerName = containerName;\n }\n return result;\n }\n SymbolInformation.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nexport var WorkspaceSymbol;\n(function (WorkspaceSymbol) {\n /**\n * Create a new workspace symbol.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param uri The resource of the location of the symbol.\n * @param range An options range of the location.\n * @returns A WorkspaceSymbol.\n */\n function create(name, kind, uri, range) {\n return range !== undefined\n ? { name, kind, location: { uri, range } }\n : { name, kind, location: { uri } };\n }\n WorkspaceSymbol.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nexport var DocumentSymbol;\n(function (DocumentSymbol) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param detail The detail of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the symbol.\n * @param selectionRange The selectionRange of the symbol.\n * @param children Children of the symbol.\n */\n function create(name, detail, kind, range, selectionRange, children) {\n let result = {\n name,\n detail,\n kind,\n range,\n selectionRange\n };\n if (children !== undefined) {\n result.children = children;\n }\n return result;\n }\n DocumentSymbol.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentSymbol} interface.\n */\n function is(value) {\n let candidate = value;\n return candidate &&\n Is.string(candidate.name) && Is.number(candidate.kind) &&\n Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\n (candidate.detail === undefined || Is.string(candidate.detail)) &&\n (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&\n (candidate.children === undefined || Array.isArray(candidate.children)) &&\n (candidate.tags === undefined || Array.isArray(candidate.tags));\n }\n DocumentSymbol.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\n/**\n * A set of predefined code action kinds\n */\nexport var CodeActionKind;\n(function (CodeActionKind) {\n /**\n * Empty kind.\n */\n CodeActionKind.Empty = '';\n /**\n * Base kind for quickfix actions: 'quickfix'\n */\n CodeActionKind.QuickFix = 'quickfix';\n /**\n * Base kind for refactoring actions: 'refactor'\n */\n CodeActionKind.Refactor = 'refactor';\n /**\n * Base kind for refactoring extraction actions: 'refactor.extract'\n *\n * Example extract actions:\n *\n * - Extract method\n * - Extract function\n * - Extract variable\n * - Extract interface from class\n * - ...\n */\n CodeActionKind.RefactorExtract = 'refactor.extract';\n /**\n * Base kind for refactoring inline actions: 'refactor.inline'\n *\n * Example inline actions:\n *\n * - Inline function\n * - Inline variable\n * - Inline constant\n * - ...\n */\n CodeActionKind.RefactorInline = 'refactor.inline';\n /**\n * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n *\n * Example rewrite actions:\n *\n * - Convert JavaScript function to class\n * - Add or remove parameter\n * - Encapsulate field\n * - Make method static\n * - Move method to base class\n * - ...\n */\n CodeActionKind.RefactorRewrite = 'refactor.rewrite';\n /**\n * Base kind for source actions: `source`\n *\n * Source code actions apply to the entire file.\n */\n CodeActionKind.Source = 'source';\n /**\n * Base kind for an organize imports source action: `source.organizeImports`\n */\n CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\n /**\n * Base kind for auto-fix source actions: `source.fixAll`.\n *\n * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n *\n * @since 3.15.0\n */\n CodeActionKind.SourceFixAll = 'source.fixAll';\n})(CodeActionKind || (CodeActionKind = {}));\n/**\n * The reason why code actions were requested.\n *\n * @since 3.17.0\n */\nexport var CodeActionTriggerKind;\n(function (CodeActionTriggerKind) {\n /**\n * Code actions were explicitly requested by the user or by an extension.\n */\n CodeActionTriggerKind.Invoked = 1;\n /**\n * Code actions were requested automatically.\n *\n * This typically happens when current selection in a file changes, but can\n * also be triggered when file content changes.\n */\n CodeActionTriggerKind.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\n/**\n * The CodeActionContext namespace provides helper functions to work with\n * {@link CodeActionContext} literals.\n */\nexport var CodeActionContext;\n(function (CodeActionContext) {\n /**\n * Creates a new CodeActionContext literal.\n */\n function create(diagnostics, only, triggerKind) {\n let result = { diagnostics };\n if (only !== undefined && only !== null) {\n result.only = only;\n }\n if (triggerKind !== undefined && triggerKind !== null) {\n result.triggerKind = triggerKind;\n }\n return result;\n }\n CodeActionContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeActionContext} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is)\n && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string))\n && (candidate.triggerKind === undefined || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n }\n CodeActionContext.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nexport var CodeAction;\n(function (CodeAction) {\n function create(title, kindOrCommandOrEdit, kind) {\n let result = { title };\n let checkKind = true;\n if (typeof kindOrCommandOrEdit === 'string') {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n }\n else if (Command.is(kindOrCommandOrEdit)) {\n result.command = kindOrCommandOrEdit;\n }\n else {\n result.edit = kindOrCommandOrEdit;\n }\n if (checkKind && kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n CodeAction.create = create;\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.title) &&\n (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\n (candidate.kind === undefined || Is.string(candidate.kind)) &&\n (candidate.edit !== undefined || candidate.command !== undefined) &&\n (candidate.command === undefined || Command.is(candidate.command)) &&\n (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&\n (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction.is = is;\n})(CodeAction || (CodeAction = {}));\n/**\n * The CodeLens namespace provides helper functions to work with\n * {@link CodeLens} literals.\n */\nexport var CodeLens;\n(function (CodeLens) {\n /**\n * Creates a new CodeLens literal.\n */\n function create(range, data) {\n let result = { range };\n if (Is.defined(data)) {\n result.data = data;\n }\n return result;\n }\n CodeLens.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeLens} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens.is = is;\n})(CodeLens || (CodeLens = {}));\n/**\n * The FormattingOptions namespace provides helper functions to work with\n * {@link FormattingOptions} literals.\n */\nexport var FormattingOptions;\n(function (FormattingOptions) {\n /**\n * Creates a new FormattingOptions literal.\n */\n function create(tabSize, insertSpaces) {\n return { tabSize, insertSpaces };\n }\n FormattingOptions.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FormattingOptions} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\n/**\n * The DocumentLink namespace provides helper functions to work with\n * {@link DocumentLink} literals.\n */\nexport var DocumentLink;\n(function (DocumentLink) {\n /**\n * Creates a new DocumentLink literal.\n */\n function create(range, target, data) {\n return { range, target, data };\n }\n DocumentLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink.is = is;\n})(DocumentLink || (DocumentLink = {}));\n/**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\nexport var SelectionRange;\n(function (SelectionRange) {\n /**\n * Creates a new SelectionRange\n * @param range the range.\n * @param parent an optional parent.\n */\n function create(range, parent) {\n return { range, parent };\n }\n SelectionRange.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\n }\n SelectionRange.is = is;\n})(SelectionRange || (SelectionRange = {}));\n/**\n * A set of predefined token types. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenTypes;\n(function (SemanticTokenTypes) {\n SemanticTokenTypes[\"namespace\"] = \"namespace\";\n /**\n * Represents a generic type. Acts as a fallback for types which can't be mapped to\n * a specific type like class or enum.\n */\n SemanticTokenTypes[\"type\"] = \"type\";\n SemanticTokenTypes[\"class\"] = \"class\";\n SemanticTokenTypes[\"enum\"] = \"enum\";\n SemanticTokenTypes[\"interface\"] = \"interface\";\n SemanticTokenTypes[\"struct\"] = \"struct\";\n SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\n SemanticTokenTypes[\"parameter\"] = \"parameter\";\n SemanticTokenTypes[\"variable\"] = \"variable\";\n SemanticTokenTypes[\"property\"] = \"property\";\n SemanticTokenTypes[\"enumMember\"] = \"enumMember\";\n SemanticTokenTypes[\"event\"] = \"event\";\n SemanticTokenTypes[\"function\"] = \"function\";\n SemanticTokenTypes[\"method\"] = \"method\";\n SemanticTokenTypes[\"macro\"] = \"macro\";\n SemanticTokenTypes[\"keyword\"] = \"keyword\";\n SemanticTokenTypes[\"modifier\"] = \"modifier\";\n SemanticTokenTypes[\"comment\"] = \"comment\";\n SemanticTokenTypes[\"string\"] = \"string\";\n SemanticTokenTypes[\"number\"] = \"number\";\n SemanticTokenTypes[\"regexp\"] = \"regexp\";\n SemanticTokenTypes[\"operator\"] = \"operator\";\n /**\n * @since 3.17.0\n */\n SemanticTokenTypes[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\n/**\n * A set of predefined token modifiers. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenModifiers;\n(function (SemanticTokenModifiers) {\n SemanticTokenModifiers[\"declaration\"] = \"declaration\";\n SemanticTokenModifiers[\"definition\"] = \"definition\";\n SemanticTokenModifiers[\"readonly\"] = \"readonly\";\n SemanticTokenModifiers[\"static\"] = \"static\";\n SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\n SemanticTokenModifiers[\"abstract\"] = \"abstract\";\n SemanticTokenModifiers[\"async\"] = \"async\";\n SemanticTokenModifiers[\"modification\"] = \"modification\";\n SemanticTokenModifiers[\"documentation\"] = \"documentation\";\n SemanticTokenModifiers[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\n/**\n * @since 3.16.0\n */\nexport var SemanticTokens;\n(function (SemanticTokens) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\n Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\n }\n SemanticTokens.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\n/**\n * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n *\n * @since 3.17.0\n */\nexport var InlineValueText;\n(function (InlineValueText) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, text) {\n return { range, text };\n }\n InlineValueText.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n }\n InlineValueText.is = is;\n})(InlineValueText || (InlineValueText = {}));\n/**\n * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n *\n * @since 3.17.0\n */\nexport var InlineValueVariableLookup;\n(function (InlineValueVariableLookup) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, variableName, caseSensitiveLookup) {\n return { range, variableName, caseSensitiveLookup };\n }\n InlineValueVariableLookup.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup)\n && (Is.string(candidate.variableName) || candidate.variableName === undefined);\n }\n InlineValueVariableLookup.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\n/**\n * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n *\n * @since 3.17.0\n */\nexport var InlineValueEvaluatableExpression;\n(function (InlineValueEvaluatableExpression) {\n /**\n * Creates a new InlineValueEvaluatableExpression literal.\n */\n function create(range, expression) {\n return { range, expression };\n }\n InlineValueEvaluatableExpression.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range)\n && (Is.string(candidate.expression) || candidate.expression === undefined);\n }\n InlineValueEvaluatableExpression.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\n/**\n * The InlineValueContext namespace provides helper functions to work with\n * {@link InlineValueContext} literals.\n *\n * @since 3.17.0\n */\nexport var InlineValueContext;\n(function (InlineValueContext) {\n /**\n * Creates a new InlineValueContext literal.\n */\n function create(frameId, stoppedLocation) {\n return { frameId, stoppedLocation };\n }\n InlineValueContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InlineValueContext} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.defined(candidate) && Range.is(value.stoppedLocation);\n }\n InlineValueContext.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\n/**\n * Inlay hint kinds.\n *\n * @since 3.17.0\n */\nexport var InlayHintKind;\n(function (InlayHintKind) {\n /**\n * An inlay hint that for a type annotation.\n */\n InlayHintKind.Type = 1;\n /**\n * An inlay hint that is for a parameter.\n */\n InlayHintKind.Parameter = 2;\n function is(value) {\n return value === 1 || value === 2;\n }\n InlayHintKind.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nexport var InlayHintLabelPart;\n(function (InlayHintLabelPart) {\n function create(value) {\n return { value };\n }\n InlayHintLabelPart.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.location === undefined || Location.is(candidate.location))\n && (candidate.command === undefined || Command.is(candidate.command));\n }\n InlayHintLabelPart.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nexport var InlayHint;\n(function (InlayHint) {\n function create(position, label, kind) {\n const result = { position, label };\n if (kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n InlayHint.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.position)\n && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is))\n && (candidate.kind === undefined || InlayHintKind.is(candidate.kind))\n && (candidate.textEdits === undefined) || Is.typedArray(candidate.textEdits, TextEdit.is)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft))\n && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight));\n }\n InlayHint.is = is;\n})(InlayHint || (InlayHint = {}));\nexport var StringValue;\n(function (StringValue) {\n function createSnippet(value) {\n return { kind: 'snippet', value };\n }\n StringValue.createSnippet = createSnippet;\n})(StringValue || (StringValue = {}));\nexport var InlineCompletionItem;\n(function (InlineCompletionItem) {\n function create(insertText, filterText, range, command) {\n return { insertText, filterText, range, command };\n }\n InlineCompletionItem.create = create;\n})(InlineCompletionItem || (InlineCompletionItem = {}));\nexport var InlineCompletionList;\n(function (InlineCompletionList) {\n function create(items) {\n return { items };\n }\n InlineCompletionList.create = create;\n})(InlineCompletionList || (InlineCompletionList = {}));\n/**\n * Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered.\n *\n * @since 3.18.0\n * @proposed\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n /**\n * Completion was triggered explicitly by a user gesture.\n */\n InlineCompletionTriggerKind.Invoked = 0;\n /**\n * Completion was triggered automatically while editing.\n */\n InlineCompletionTriggerKind.Automatic = 1;\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport var SelectedCompletionInfo;\n(function (SelectedCompletionInfo) {\n function create(range, text) {\n return { range, text };\n }\n SelectedCompletionInfo.create = create;\n})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\nexport var InlineCompletionContext;\n(function (InlineCompletionContext) {\n function create(triggerKind, selectedCompletionInfo) {\n return { triggerKind, selectedCompletionInfo };\n }\n InlineCompletionContext.create = create;\n})(InlineCompletionContext || (InlineCompletionContext = {}));\nexport var WorkspaceFolder;\n(function (WorkspaceFolder) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n }\n WorkspaceFolder.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nexport const EOL = ['\\n', '\\r\\n', '\\r'];\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new ITextDocument literal from the given uri and content.\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's version.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ITextDocument} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)\n && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument.is = is;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort(edits, (a, b) => {\n let diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = text.length;\n for (let i = sortedEdits.length - 1; i >= 0; i--) {\n let e = sortedEdits[i];\n let startOffset = document.offsetAt(e.range.start);\n let endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) {\n text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n }\n else {\n throw new Error('Overlapping edit');\n }\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument.applyEdits = applyEdits;\n function mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n let ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n }\n})(TextDocument || (TextDocument = {}));\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n let start = this.offsetAt(range.start);\n let end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = undefined;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n let lineOffsets = [];\n let text = this._content;\n let isLineStart = true;\n for (let i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n let ch = text.charAt(i);\n isLineStart = (ch === '\\r' || ch === '\\n');\n if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n i++;\n }\n }\n if (isLineStart && text.length > 0) {\n lineOffsets.push(text.length);\n }\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return Position.create(0, offset);\n }\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n let line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n}\nvar Is;\n(function (Is) {\n const toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== 'undefined';\n }\n Is.defined = defined;\n function undefined(value) {\n return typeof value === 'undefined';\n }\n Is.undefined = undefined;\n function boolean(value) {\n return value === true || value === false;\n }\n Is.boolean = boolean;\n function string(value) {\n return toString.call(value) === '[object String]';\n }\n Is.string = string;\n function number(value) {\n return toString.call(value) === '[object Number]';\n }\n Is.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === '[object Number]' && min <= value && value <= max;\n }\n Is.numberRange = numberRange;\n function integer(value) {\n return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;\n }\n Is.integer = integer;\n function uinteger(value) {\n return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;\n }\n Is.uinteger = uinteger;\n function func(value) {\n return toString.call(value) === '[object Function]';\n }\n Is.func = func;\n function objectLiteral(value) {\n // Strictly speaking class instances pass this check as well. Since the LSP\n // doesn't use classes we ignore this for now. If we do we need to add something\n // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\n return value !== null && typeof value === 'object';\n }\n Is.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is.typedArray = typedArray;\n})(Is || (Is = {}));\n", "// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n", "// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};", "__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))", "// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n// !!!!!\n// SEE https://github.com/microsoft/vscode/blob/master/src/vs/base/common/platform.ts\n// !!!!!\n\ndeclare const process: { platform: 'win32' };\ndeclare const navigator: { userAgent: string };\n\nexport let isWindows: boolean;\n\nif (typeof process === 'object') {\n\tisWindows = process.platform === 'win32';\n} else if (typeof navigator === 'object') {\n\tlet userAgent = navigator.userAgent;\n\tisWindows = userAgent.indexOf('Windows') >= 0;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { CharCode } from './charCode'\nimport { isWindows } from './platform';\n\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\n\nfunction _validateUri(ret: URI, _strict?: boolean): void {\n\n\t// scheme, must be set\n\tif (!ret.scheme && _strict) {\n\t\tthrow new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n\t}\n\n\t// scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n\t// ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n\tif (ret.scheme && !_schemePattern.test(ret.scheme)) {\n\t\tthrow new Error('[UriError]: Scheme contains illegal characters.');\n\t}\n\n\t// path, http://tools.ietf.org/html/rfc3986#section-3.3\n\t// If a URI contains an authority component, then the path component\n\t// must either be empty or begin with a slash (\"/\") character. If a URI\n\t// does not contain an authority component, then the path cannot begin\n\t// with two slash characters (\"//\").\n\tif (ret.path) {\n\t\tif (ret.authority) {\n\t\t\tif (!_singleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n\t\t\t}\n\t\t} else {\n\t\t\tif (_doubleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n\t\t\t}\n\t\t}\n\t}\n}\n\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme: string, _strict: boolean): string {\n\tif (!scheme && !_strict) {\n\t\treturn 'file';\n\t}\n\treturn scheme;\n}\n\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme: string, path: string): string {\n\n\t// the slash-character is our 'default base' as we don't\n\t// support constructing URIs relative to other URIs. This\n\t// also means that we alter and potentially break paths.\n\t// see https://tools.ietf.org/html/rfc3986#section-5.1.4\n\tswitch (scheme) {\n\t\tcase 'https':\n\t\tcase 'http':\n\t\tcase 'file':\n\t\t\tif (!path) {\n\t\t\t\tpath = _slash;\n\t\t\t} else if (path[0] !== _slash) {\n\t\t\t\tpath = _slash + path;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn path;\n}\n\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\nexport class URI implements UriComponents {\n\n\tstatic isUri(thing: any): thing is URI {\n\t\tif (thing instanceof URI) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!thing) {\n\t\t\treturn false;\n\t\t}\n\t\treturn typeof (<URI>thing).authority === 'string'\n\t\t\t&& typeof (<URI>thing).fragment === 'string'\n\t\t\t&& typeof (<URI>thing).path === 'string'\n\t\t\t&& typeof (<URI>thing).query === 'string'\n\t\t\t&& typeof (<URI>thing).scheme === 'string'\n\t\t\t&& typeof (<URI>thing).fsPath === 'string'\n\t\t\t&& typeof (<URI>thing).with === 'function'\n\t\t\t&& typeof (<URI>thing).toString === 'function';\n\t}\n\n\t/**\n\t * scheme is the 'http' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part before the first colon.\n\t */\n\treadonly scheme: string;\n\n\t/**\n\t * authority is the 'www.example.com' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part between the first double slashes and the next slash.\n\t */\n\treadonly authority: string;\n\n\t/**\n\t * path is the '/some/path' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly path: string;\n\n\t/**\n\t * query is the 'query' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly query: string;\n\n\t/**\n\t * fragment is the 'fragment' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly fragment: string;\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(scheme: string, authority?: string, path?: string, query?: string, fragment?: string, _strict?: boolean);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(components: UriComponents);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(schemeOrData: string | UriComponents, authority?: string, path?: string, query?: string, fragment?: string, _strict: boolean = false) {\n\n\t\tif (typeof schemeOrData === 'object') {\n\t\t\tthis.scheme = schemeOrData.scheme || _empty;\n\t\t\tthis.authority = schemeOrData.authority || _empty;\n\t\t\tthis.path = schemeOrData.path || _empty;\n\t\t\tthis.query = schemeOrData.query || _empty;\n\t\t\tthis.fragment = schemeOrData.fragment || _empty;\n\t\t\t// no validation because it's this URI\n\t\t\t// that creates uri components.\n\t\t\t// _validateUri(this);\n\t\t} else {\n\t\t\tthis.scheme = _schemeFix(schemeOrData, _strict);\n\t\t\tthis.authority = authority || _empty;\n\t\t\tthis.path = _referenceResolution(this.scheme, path || _empty);\n\t\t\tthis.query = query || _empty;\n\t\t\tthis.fragment = fragment || _empty;\n\n\t\t\t_validateUri(this, _strict);\n\t\t}\n\t}\n\n\t// ---- filesystem path -----------------------\n\n\t/**\n\t * Returns a string representing the corresponding file system path of this URI.\n\t * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n\t * platform specific path separator.\n\t *\n\t * * Will *not* validate the path for invalid characters and semantics.\n\t * * Will *not* look at the scheme of this URI.\n\t * * The result shall *not* be used for display purposes but for accessing a file on disk.\n\t *\n\t *\n\t * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n\t * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n\t *\n\t * ```ts\n\t\tconst u = URI.parse('file://server/c$/folder/file.txt')\n\t\tu.authority === 'server'\n\t\tu.path === '/shares/c$/file.txt'\n\t\tu.fsPath === '\\\\server\\c$\\folder\\file.txt'\n\t```\n\t *\n\t * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n\t * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n\t * with URIs that represent files on disk (`file` scheme).\n\t */\n\tget fsPath(): string {\n\t\t// if (this.scheme !== 'file') {\n\t\t// \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n\t\t// }\n\t\treturn uriToFsPath(this, false);\n\t}\n\n\t// ---- modify to new -------------------------\n\n\twith(change: { scheme?: string; authority?: string | null; path?: string | null; query?: string | null; fragment?: string | null }): URI {\n\n\t\tif (!change) {\n\t\t\treturn this;\n\t\t}\n\n\t\tlet { scheme, authority, path, query, fragment } = change;\n\t\tif (scheme === undefined) {\n\t\t\tscheme = this.scheme;\n\t\t} else if (scheme === null) {\n\t\t\tscheme = _empty;\n\t\t}\n\t\tif (authority === undefined) {\n\t\t\tauthority = this.authority;\n\t\t} else if (authority === null) {\n\t\t\tauthority = _empty;\n\t\t}\n\t\tif (path === undefined) {\n\t\t\tpath = this.path;\n\t\t} else if (path === null) {\n\t\t\tpath = _empty;\n\t\t}\n\t\tif (query === undefined) {\n\t\t\tquery = this.query;\n\t\t} else if (query === null) {\n\t\t\tquery = _empty;\n\t\t}\n\t\tif (fragment === undefined) {\n\t\t\tfragment = this.fragment;\n\t\t} else if (fragment === null) {\n\t\t\tfragment = _empty;\n\t\t}\n\n\t\tif (scheme === this.scheme\n\t\t\t&& authority === this.authority\n\t\t\t&& path === this.path\n\t\t\t&& query === this.query\n\t\t\t&& fragment === this.fragment) {\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new Uri(scheme, authority, path, query, fragment);\n\t}\n\n\t// ---- parse & validate ------------------------\n\n\t/**\n\t * Creates a new URI from a string, e.g. `http://www.example.com/some/path`,\n\t * `file:///usr/home`, or `scheme:with/path`.\n\t *\n\t * @param value A string which represents an URI (see `URI#toString`).\n\t */\n\tstatic parse(value: string, _strict: boolean = false): URI {\n\t\tconst match = _regexp.exec(value);\n\t\tif (!match) {\n\t\t\treturn new Uri(_empty, _empty, _empty, _empty, _empty);\n\t\t}\n\t\treturn new Uri(\n\t\t\tmatch[2] || _empty,\n\t\t\tpercentDecode(match[4] || _empty),\n\t\t\tpercentDecode(match[5] || _empty),\n\t\t\tpercentDecode(match[7] || _empty),\n\t\t\tpercentDecode(match[9] || _empty),\n\t\t\t_strict\n\t\t);\n\t}\n\n\t/**\n\t * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n\t * `/usr/home`, or `\\\\server\\share\\some\\path`.\n\t *\n\t * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n\t * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n\t * `URI.parse('file://' + path)` because the path might contain characters that are\n\t * interpreted (# and ?). See the following sample:\n\t * ```ts\n\tconst good = URI.file('/coding/c#/project1');\n\tgood.scheme === 'file';\n\tgood.path === '/coding/c#/project1';\n\tgood.fragment === '';\n\tconst bad = URI.parse('file://' + '/coding/c#/project1');\n\tbad.scheme === 'file';\n\tbad.path === '/coding/c'; // path is now broken\n\tbad.fragment === '/project1';\n\t```\n\t *\n\t * @param path A file system path (see `URI#fsPath`)\n\t */\n\tstatic file(path: string): URI {\n\n\t\tlet authority = _empty;\n\n\t\t// normalize to fwd-slashes on windows,\n\t\t// on other systems bwd-slashes are valid\n\t\t// filename character, eg /f\\oo/ba\\r.txt\n\t\tif (isWindows) {\n\t\t\tpath = path.replace(/\\\\/g, _slash);\n\t\t}\n\n\t\t// check for authority as used in UNC shares\n\t\t// or use the path as given\n\t\tif (path[0] === _slash && path[1] === _slash) {\n\t\t\tconst idx = path.indexOf(_slash, 2);\n\t\t\tif (idx === -1) {\n\t\t\t\tauthority = path.substring(2);\n\t\t\t\tpath = _slash;\n\t\t\t} else {\n\t\t\t\tauthority = path.substring(2, idx);\n\t\t\t\tpath = path.substring(idx) || _slash;\n\t\t\t}\n\t\t}\n\n\t\treturn new Uri('file', authority, path, _empty, _empty);\n\t}\n\n\tstatic from(components: { scheme: string; authority?: string; path?: string; query?: string; fragment?: string }): URI {\n\t\tconst result = new Uri(\n\t\t\tcomponents.scheme,\n\t\t\tcomponents.authority,\n\t\t\tcomponents.path,\n\t\t\tcomponents.query,\n\t\t\tcomponents.fragment,\n\t\t);\n\t\t_validateUri(result, true);\n\t\treturn result;\n\t}\n\n\t// ---- printing/externalize ---------------------------\n\n\t/**\n\t * Creates a string representation for this URI. It's guaranteed that calling\n\t * `URI.parse` with the result of this function creates an URI which is equal\n\t * to this URI.\n\t *\n\t * * The result shall *not* be used for display purposes but for externalization or transport.\n\t * * The result will be encoded using the percentage encoding and encoding happens mostly\n\t * ignore the scheme-specific encoding rules.\n\t *\n\t * @param skipEncoding Do not encode the result, default is `false`\n\t */\n\ttoString(skipEncoding: boolean = false): string {\n\t\treturn _asFormatted(this, skipEncoding);\n\t}\n\n\ttoJSON(): UriComponents {\n\t\treturn this;\n\t}\n\n\tstatic revive(data: UriComponents | URI): URI;\n\tstatic revive(data: UriComponents | URI | undefined): URI | undefined;\n\tstatic revive(data: UriComponents | URI | null): URI | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null {\n\t\tif (!data) {\n\t\t\treturn <any>data;\n\t\t} else if (data instanceof URI) {\n\t\t\treturn data;\n\t\t} else {\n\t\t\tconst result = new Uri(data);\n\t\t\tresult._formatted = (<UriState>data).external;\n\t\t\tresult._fsPath = (<UriState>data)._sep === _pathSepMarker ? (<UriState>data).fsPath : null;\n\t\t\treturn result;\n\t\t}\n\t}\n}\n\nexport interface UriComponents {\n\tscheme: string;\n\tauthority: string;\n\tpath: string;\n\tquery: string;\n\tfragment: string;\n}\n\ninterface UriState extends UriComponents {\n\t$mid: number;\n\texternal: string;\n\tfsPath: string;\n\t_sep: 1 | undefined;\n}\n\nconst _pathSepMarker = isWindows ? 1 : undefined;\n\n// This class exists so that URI is compatible with vscode.Uri (API).\nclass Uri extends URI {\n\n\t_formatted: string | null = null;\n\t_fsPath: string | null = null;\n\n\toverride get fsPath(): string {\n\t\tif (!this._fsPath) {\n\t\t\tthis._fsPath = uriToFsPath(this, false);\n\t\t}\n\t\treturn this._fsPath;\n\t}\n\n\toverride toString(skipEncoding: boolean = false): string {\n\t\tif (!skipEncoding) {\n\t\t\tif (!this._formatted) {\n\t\t\t\tthis._formatted = _asFormatted(this, false);\n\t\t\t}\n\t\t\treturn this._formatted;\n\t\t} else {\n\t\t\t// we don't cache that\n\t\t\treturn _asFormatted(this, true);\n\t\t}\n\t}\n\n\toverride toJSON(): UriComponents {\n\t\tconst res = <UriState>{\n\t\t\t$mid: 1\n\t\t};\n\t\t// cached state\n\t\tif (this._fsPath) {\n\t\t\tres.fsPath = this._fsPath;\n\t\t\tres._sep = _pathSepMarker;\n\t\t}\n\t\tif (this._formatted) {\n\t\t\tres.external = this._formatted;\n\t\t}\n\t\t// uri components\n\t\tif (this.path) {\n\t\t\tres.path = this.path;\n\t\t}\n\t\tif (this.scheme) {\n\t\t\tres.scheme = this.scheme;\n\t\t}\n\t\tif (this.authority) {\n\t\t\tres.authority = this.authority;\n\t\t}\n\t\tif (this.query) {\n\t\t\tres.query = this.query;\n\t\t}\n\t\tif (this.fragment) {\n\t\t\tres.fragment = this.fragment;\n\t\t}\n\t\treturn res;\n\t}\n}\n\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable: { [ch: number]: string } = {\n\t[CharCode.Colon]: '%3A', // gen-delims\n\t[CharCode.Slash]: '%2F',\n\t[CharCode.QuestionMark]: '%3F',\n\t[CharCode.Hash]: '%23',\n\t[CharCode.OpenSquareBracket]: '%5B',\n\t[CharCode.CloseSquareBracket]: '%5D',\n\t[CharCode.AtSign]: '%40',\n\n\t[CharCode.ExclamationMark]: '%21', // sub-delims\n\t[CharCode.DollarSign]: '%24',\n\t[CharCode.Ampersand]: '%26',\n\t[CharCode.SingleQuote]: '%27',\n\t[CharCode.OpenParen]: '%28',\n\t[CharCode.CloseParen]: '%29',\n\t[CharCode.Asterisk]: '%2A',\n\t[CharCode.Plus]: '%2B',\n\t[CharCode.Comma]: '%2C',\n\t[CharCode.Semicolon]: '%3B',\n\t[CharCode.Equals]: '%3D',\n\n\t[CharCode.Space]: '%20',\n};\n\nfunction encodeURIComponentFast(uriComponent: string, isPath: boolean, isAuthority: boolean): string {\n\tlet res: string | undefined = undefined;\n\tlet nativeEncodePos = -1;\n\n\tfor (let pos = 0; pos < uriComponent.length; pos++) {\n\t\tconst code = uriComponent.charCodeAt(pos);\n\n\t\t// unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n\t\tif (\n\t\t\t(code >= CharCode.a && code <= CharCode.z)\n\t\t\t|| (code >= CharCode.A && code <= CharCode.Z)\n\t\t\t|| (code >= CharCode.Digit0 && code <= CharCode.Digit9)\n\t\t\t|| code === CharCode.Dash\n\t\t\t|| code === CharCode.Period\n\t\t\t|| code === CharCode.Underline\n\t\t\t|| code === CharCode.Tilde\n\t\t\t|| (isPath && code === CharCode.Slash)\n\t\t\t|| (isAuthority && code === CharCode.OpenSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.CloseSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.Colon)\n\t\t) {\n\t\t\t// check if we are delaying native encode\n\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\tnativeEncodePos = -1;\n\t\t\t}\n\t\t\t// check if we write into a new string (by default we try to return the param)\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += uriComponent.charAt(pos);\n\t\t\t}\n\n\t\t} else {\n\t\t\t// encoding needed, we need to allocate a new string\n\t\t\tif (res === undefined) {\n\t\t\t\tres = uriComponent.substr(0, pos);\n\t\t\t}\n\n\t\t\t// check with default table first\n\t\t\tconst escaped = encodeTable[code];\n\t\t\tif (escaped !== undefined) {\n\n\t\t\t\t// check if we are delaying native encode\n\t\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\t\tnativeEncodePos = -1;\n\t\t\t\t}\n\n\t\t\t\t// append escaped variant to result\n\t\t\t\tres += escaped;\n\n\t\t\t} else if (nativeEncodePos === -1) {\n\t\t\t\t// use native encode only when needed\n\t\t\t\tnativeEncodePos = pos;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (nativeEncodePos !== -1) {\n\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n\t}\n\n\treturn res !== undefined ? res : uriComponent;\n}\n\nfunction encodeURIComponentMinimal(path: string): string {\n\tlet res: string | undefined = undefined;\n\tfor (let pos = 0; pos < path.length; pos++) {\n\t\tconst code = path.charCodeAt(pos);\n\t\tif (code === CharCode.Hash || code === CharCode.QuestionMark) {\n\t\t\tif (res === undefined) {\n\t\t\t\tres = path.substr(0, pos);\n\t\t\t}\n\t\t\tres += encodeTable[code];\n\t\t} else {\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += path[pos];\n\t\t\t}\n\t\t}\n\t}\n\treturn res !== undefined ? res : path;\n}\n\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri: URI, keepDriveLetterCasing: boolean): string {\n\n\tlet value: string;\n\tif (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n\t\t// unc path: file://shares/c$/far/boo\n\t\tvalue = `//${uri.authority}${uri.path}`;\n\t} else if (\n\t\turi.path.charCodeAt(0) === CharCode.Slash\n\t\t&& (uri.path.charCodeAt(1) >= CharCode.A && uri.path.charCodeAt(1) <= CharCode.Z || uri.path.charCodeAt(1) >= CharCode.a && uri.path.charCodeAt(1) <= CharCode.z)\n\t\t&& uri.path.charCodeAt(2) === CharCode.Colon\n\t) {\n\t\tif (!keepDriveLetterCasing) {\n\t\t\t// windows drive letter: file:///c:/far/boo\n\t\t\tvalue = uri.path[1].toLowerCase() + uri.path.substr(2);\n\t\t} else {\n\t\t\tvalue = uri.path.substr(1);\n\t\t}\n\t} else {\n\t\t// other path\n\t\tvalue = uri.path;\n\t}\n\tif (isWindows) {\n\t\tvalue = value.replace(/\\//g, '\\\\');\n\t}\n\treturn value;\n}\n\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri: URI, skipEncoding: boolean): string {\n\n\tconst encoder = !skipEncoding\n\t\t? encodeURIComponentFast\n\t\t: encodeURIComponentMinimal;\n\n\tlet res = '';\n\tlet { scheme, authority, path, query, fragment } = uri;\n\tif (scheme) {\n\t\tres += scheme;\n\t\tres += ':';\n\t}\n\tif (authority || scheme === 'file') {\n\t\tres += _slash;\n\t\tres += _slash;\n\t}\n\tif (authority) {\n\t\tlet idx = authority.indexOf('@');\n\t\tif (idx !== -1) {\n\t\t\t// <user>@<auth>\n\t\t\tconst userinfo = authority.substr(0, idx);\n\t\t\tauthority = authority.substr(idx + 1);\n\t\t\tidx = userinfo.lastIndexOf(':');\n\t\t\tif (idx === -1) {\n\t\t\t\tres += encoder(userinfo, false, false);\n\t\t\t} else {\n\t\t\t\t// <user>:<pass>@<auth>\n\t\t\t\tres += encoder(userinfo.substr(0, idx), false, false);\n\t\t\t\tres += ':';\n\t\t\t\tres += encoder(userinfo.substr(idx + 1), false, true);\n\t\t\t}\n\t\t\tres += '@';\n\t\t}\n\t\tauthority = authority.toLowerCase();\n\t\tidx = authority.lastIndexOf(':');\n\t\tif (idx === -1) {\n\t\t\tres += encoder(authority, false, true);\n\t\t} else {\n\t\t\t// <auth>:<port>\n\t\t\tres += encoder(authority.substr(0, idx), false, true);\n\t\t\tres += authority.substr(idx);\n\t\t}\n\t}\n\tif (path) {\n\t\t// lower-case windows drive letters in /C:/fff or C:/fff\n\t\tif (path.length >= 3 && path.charCodeAt(0) === CharCode.Slash && path.charCodeAt(2) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(1);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t} else if (path.length >= 2 && path.charCodeAt(1) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(0);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t}\n\t\t// encode the rest of the path\n\t\tres += encoder(path, true, false);\n\t}\n\tif (query) {\n\t\tres += '?';\n\t\tres += encoder(query, false, false);\n\t}\n\tif (fragment) {\n\t\tres += '#';\n\t\tres += !skipEncoding ? encodeURIComponentFast(fragment, false, false) : fragment;\n\t}\n\treturn res;\n}\n\n// --- decode\n\nfunction decodeURIComponentGraceful(str: string): string {\n\ttry {\n\t\treturn decodeURIComponent(str);\n\t} catch {\n\t\tif (str.length > 3) {\n\t\t\treturn str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n\t\t} else {\n\t\t\treturn str;\n\t\t}\n\t}\n}\n\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n\nfunction percentDecode(str: string): string {\n\tif (!str.match(_rEncodedAsHex)) {\n\t\treturn str;\n\t}\n\treturn str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n}\n\n/**\n * Mapped-type that replaces all occurrences of URI with UriComponents\n */\nexport type UriDto<T> = { [K in keyof T]: T[K] extends URI\n\t? UriComponents\n\t: UriDto<T[K]> };\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { CharCode } from './charCode';\nimport { URI } from './uri';\nimport * as nodePath from 'path';\n\nconst posixPath = nodePath.posix || nodePath;\nconst slash = '/';\n\nexport namespace Utils {\n\n /**\n * Joins one or more input paths to the path of URI. \n * '/' is used as the directory separation character. \n * \n * The resolved path will be normalized. That means:\n * - all '..' and '.' segments are resolved.\n * - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n * - trailing separators are preserved.\n * \n * @param uri The input URI.\n * @param paths The paths to be joined with the path of URI.\n * @returns A URI with the joined path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n */\n export function joinPath(uri: URI, ...paths: string[]): URI {\n return uri.with({ path: posixPath.join(uri.path, ...paths) });\n }\n\n\n /**\n * Resolves one or more paths against the path of a URI. \n * '/' is used as the directory separation character. \n * \n * The resolved path will be normalized. That means:\n * - all '..' and '.' segments are resolved. \n * - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n * - trailing separators are removed.\n * \n * @param uri The input URI.\n * @param paths The paths to resolve against the path of URI.\n * @returns A URI with the resolved path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n */\n export function resolvePath(uri: URI, ...paths: string[]): URI {\n let path = uri.path; \n let slashAdded = false;\n if (path[0] !== slash) {\n path = slash + path; // make the path abstract: for posixPath.resolve the first segments has to be absolute or cwd is used.\n slashAdded = true;\n }\n let resolvedPath = posixPath.resolve(path, ...paths);\n if (slashAdded && resolvedPath[0] === slash && !uri.authority) {\n resolvedPath = resolvedPath.substring(1);\n }\n return uri.with({ path: resolvedPath });\n }\n\n /**\n * Returns a URI where the path is the directory name of the input uri, similar to the Unix dirname command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The orignal URI is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The last segment of the URIs path.\n */\n export function dirname(uri: URI): URI {\n if (uri.path.length === 0 || uri.path === slash) {\n return uri;\n }\n let path = posixPath.dirname(uri.path);\n if (path.length === 1 && path.charCodeAt(0) === CharCode.Period) {\n path = '';\n }\n return uri.with({ path });\n }\n\n /**\n * Returns the last segment of the path of a URI, similar to the Unix basename command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The empty string is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The base name of the URIs path.\n */\n export function basename(uri: URI): string {\n return posixPath.basename(uri.path);\n }\n\n /**\n * Returns the extension name of the path of a URI, similar to the Unix extname command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The empty string is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The extension name of the URIs path.\n */\n export function extname(uri: URI): string {\n return posixPath.extname(uri.path);\n }\n}", null, null, "const defaultQuotedOptions = {\n escape: 92, // \\ character\n throws: false\n};\n/**\n * Check if given code is a number\n */\nfunction isNumber(code) {\n return code > 47 && code < 58;\n}\n/**\n * Check if given character code is alpha code (letter through A to Z)\n */\nfunction isAlpha(code, from, to) {\n from = from || 65; // A\n to = to || 90; // Z\n code &= ~32; // quick hack to convert any char code to uppercase char code\n return code >= from && code <= to;\n}\n/**\n * Check if given character code is alpha-numeric (letter through A to Z or number)\n */\nfunction isAlphaNumeric(code) {\n return isNumber(code) || isAlpha(code);\n}\nfunction isAlphaNumericWord(code) {\n return isNumber(code) || isAlphaWord(code);\n}\nfunction isAlphaWord(code) {\n return code === 95 /* _ */ || isAlpha(code);\n}\n/**\n * Check for Umlauts i.e. ä, Ä, ö, Ö, ü and Ü\n */\nfunction isUmlaut(code) {\n return code === 196\n || code == 214\n || code === 220\n || code === 228\n || code === 246\n || code === 252;\n}\n/**\n * Check if given character code is a white-space character: a space character\n * or line breaks\n */\nfunction isWhiteSpace(code) {\n return code === 32 /* space */\n || code === 9 /* tab */\n || code === 160; /* non-breaking space */\n}\n/**\n * Check if given character code is a space character\n */\nfunction isSpace(code) {\n return isWhiteSpace(code)\n || code === 10 /* LF */\n || code === 13; /* CR */\n}\n/**\n * Consumes 'single' or \"double\"-quoted string from given string, if possible\n * @return `true` if quoted string was consumed. The contents of quoted string\n * will be available as `stream.current()`\n */\nfunction eatQuoted(stream, options) {\n options = Object.assign(Object.assign({}, defaultQuotedOptions), options);\n const start = stream.pos;\n const quote = stream.peek();\n if (stream.eat(isQuote)) {\n while (!stream.eof()) {\n switch (stream.next()) {\n case quote:\n stream.start = start;\n return true;\n case options.escape:\n stream.next();\n break;\n }\n }\n // If we’re here then stream wasn’t properly consumed.\n // Revert stream and decide what to do\n stream.pos = start;\n if (options.throws) {\n throw stream.error('Unable to consume quoted string');\n }\n }\n return false;\n}\n/**\n * Check if given character code is a quote character\n */\nfunction isQuote(code) {\n return code === 39 /* ' */ || code === 34 /* \" */;\n}\n/**\n * Eats paired characters substring, for example `(foo)` or `[bar]`\n * @param open Character code of pair opening\n * @param close Character code of pair closing\n * @return Returns `true` if character pair was successfully consumed, it’s\n * content will be available as `stream.current()`\n */\nfunction eatPair(stream, open, close, options) {\n options = Object.assign(Object.assign({}, defaultQuotedOptions), options);\n const start = stream.pos;\n if (stream.eat(open)) {\n let stack = 1;\n let ch;\n while (!stream.eof()) {\n if (eatQuoted(stream, options)) {\n continue;\n }\n ch = stream.next();\n if (ch === open) {\n stack++;\n }\n else if (ch === close) {\n stack--;\n if (!stack) {\n stream.start = start;\n return true;\n }\n }\n else if (ch === options.escape) {\n stream.next();\n }\n }\n // If we’re here then paired character can’t be consumed\n stream.pos = start;\n if (options.throws) {\n throw stream.error(`Unable to find matching pair for ${String.fromCharCode(open)}`);\n }\n }\n return false;\n}\n\n/**\n * A streaming, character code-based string reader\n */\nclass Scanner {\n constructor(str, start, end) {\n if (end == null && typeof str === 'string') {\n end = str.length;\n }\n this.string = str;\n this.pos = this.start = start || 0;\n this.end = end || 0;\n }\n /**\n * Returns true only if the stream is at the end of the file.\n */\n eof() {\n return this.pos >= this.end;\n }\n /**\n * Creates a new stream instance which is limited to given `start` and `end`\n * range. E.g. its `eof()` method will look at `end` property, not actual\n * stream end\n */\n limit(start, end) {\n return new Scanner(this.string, start, end);\n }\n /**\n * Returns the next character code in the stream without advancing it.\n * Will return NaN at the end of the file.\n */\n peek() {\n return this.string.charCodeAt(this.pos);\n }\n /**\n * Returns the next character in the stream and advances it.\n * Also returns <code>undefined</code> when no more characters are available.\n */\n next() {\n if (this.pos < this.string.length) {\n return this.string.charCodeAt(this.pos++);\n }\n }\n /**\n * `match` can be a character code or a function that takes a character code\n * and returns a boolean. If the next character in the stream 'matches'\n * the given argument, it is consumed and returned.\n * Otherwise, `false` is returned.\n */\n eat(match) {\n const ch = this.peek();\n const ok = typeof match === 'function' ? match(ch) : ch === match;\n if (ok) {\n this.next();\n }\n return ok;\n }\n /**\n * Repeatedly calls <code>eat</code> with the given argument, until it\n * fails. Returns <code>true</code> if any characters were eaten.\n */\n eatWhile(match) {\n const start = this.pos;\n while (!this.eof() && this.eat(match)) { /* */ }\n return this.pos !== start;\n }\n /**\n * Backs up the stream n characters. Backing it up further than the\n * start of the current token will cause things to break, so be careful.\n */\n backUp(n) {\n this.pos -= (n || 1);\n }\n /**\n * Get the string between the start of the current token and the\n * current stream position.\n */\n current() {\n return this.substring(this.start, this.pos);\n }\n /**\n * Returns substring for given range\n */\n substring(start, end) {\n return this.string.slice(start, end);\n }\n /**\n * Creates error object with current stream state\n */\n error(message, pos = this.pos) {\n return new ScannerError(`${message} at ${pos + 1}`, pos, this.string);\n }\n}\nclass ScannerError extends Error {\n constructor(message, pos, str) {\n super(message);\n this.pos = pos;\n this.string = str;\n }\n}\n\nexport { ScannerError, Scanner as default, eatPair, eatQuoted, isAlpha, isAlphaNumeric, isAlphaNumericWord, isAlphaWord, isNumber, isQuote, isSpace, isUmlaut, isWhiteSpace };\n//# sourceMappingURL=scanner.js.map\n", "import Scanner, { isNumber, isQuote as isQuote$1, isSpace, isAlpha, isAlphaNumericWord, isUmlaut, ScannerError } from '@emmetio/scanner';\n\nfunction tokenScanner(tokens) {\n return {\n tokens,\n start: 0,\n pos: 0,\n size: tokens.length\n };\n}\nfunction peek(scanner) {\n return scanner.tokens[scanner.pos];\n}\nfunction next(scanner) {\n return scanner.tokens[scanner.pos++];\n}\nfunction slice(scanner, from = scanner.start, to = scanner.pos) {\n return scanner.tokens.slice(from, to);\n}\nfunction readable(scanner) {\n return scanner.pos < scanner.size;\n}\nfunction consume(scanner, test) {\n const token = peek(scanner);\n if (token && test(token)) {\n scanner.pos++;\n return true;\n }\n return false;\n}\nfunction error(scanner, message, token = peek(scanner)) {\n if (token && token.start != null) {\n message += ` at ${token.start}`;\n }\n const err = new Error(message);\n err['pos'] = token && token.start;\n return err;\n}\n\nfunction abbreviation(abbr, options = {}) {\n const scanner = tokenScanner(abbr);\n const result = statements(scanner, options);\n if (readable(scanner)) {\n throw error(scanner, 'Unexpected character');\n }\n return result;\n}\nfunction statements(scanner, options) {\n const result = {\n type: 'TokenGroup',\n elements: []\n };\n let ctx = result;\n let node;\n const stack = [];\n while (readable(scanner)) {\n if (node = element(scanner, options) || group(scanner, options)) {\n ctx.elements.push(node);\n if (consume(scanner, isChildOperator)) {\n stack.push(ctx);\n ctx = node;\n }\n else if (consume(scanner, isSiblingOperator)) {\n continue;\n }\n else if (consume(scanner, isClimbOperator)) {\n do {\n if (stack.length) {\n ctx = stack.pop();\n }\n } while (consume(scanner, isClimbOperator));\n }\n }\n else {\n break;\n }\n }\n return result;\n}\n/**\n * Consumes group from given scanner\n */\nfunction group(scanner, options) {\n if (consume(scanner, isGroupStart)) {\n const result = statements(scanner, options);\n const token = next(scanner);\n if (isBracket(token, 'group', false)) {\n result.repeat = repeater$1(scanner);\n }\n return result;\n }\n}\n/**\n * Consumes single element from given scanner\n */\nfunction element(scanner, options) {\n let attr;\n const elem = {\n type: 'TokenElement',\n name: void 0,\n attributes: void 0,\n value: void 0,\n repeat: void 0,\n selfClose: false,\n elements: []\n };\n if (elementName(scanner, options)) {\n elem.name = slice(scanner);\n }\n while (readable(scanner)) {\n scanner.start = scanner.pos;\n if (!elem.repeat && !isEmpty(elem) && consume(scanner, isRepeater)) {\n elem.repeat = scanner.tokens[scanner.pos - 1];\n }\n else if (!elem.value && text(scanner)) {\n elem.value = getText(scanner);\n }\n else if (attr = shortAttribute(scanner, 'id', options) || shortAttribute(scanner, 'class', options) || attributeSet(scanner)) {\n if (!elem.attributes) {\n elem.attributes = Array.isArray(attr) ? attr.slice() : [attr];\n }\n else {\n elem.attributes = elem.attributes.concat(attr);\n }\n }\n else {\n if (!isEmpty(elem) && consume(scanner, isCloseOperator)) {\n elem.selfClose = true;\n if (!elem.repeat && consume(scanner, isRepeater)) {\n elem.repeat = scanner.tokens[scanner.pos - 1];\n }\n }\n break;\n }\n }\n return !isEmpty(elem) ? elem : void 0;\n}\n/**\n * Consumes attribute set from given scanner\n */\nfunction attributeSet(scanner) {\n if (consume(scanner, isAttributeSetStart)) {\n const attributes = [];\n let attr;\n while (readable(scanner)) {\n if (attr = attribute(scanner)) {\n attributes.push(attr);\n }\n else if (consume(scanner, isAttributeSetEnd)) {\n break;\n }\n else if (!consume(scanner, isWhiteSpace)) {\n throw error(scanner, `Unexpected \"${peek(scanner).type}\" token`);\n }\n }\n return attributes;\n }\n}\n/**\n * Consumes attribute shorthand (class or id) from given scanner\n */\nfunction shortAttribute(scanner, type, options) {\n if (isOperator(peek(scanner), type)) {\n scanner.pos++;\n // Consume multiple operators\n let count = 1;\n while (isOperator(peek(scanner), type)) {\n scanner.pos++;\n count++;\n }\n const attr = {\n name: [createLiteral(type)]\n };\n if (count > 1) {\n attr.multiple = true;\n }\n // Consume expression after shorthand start for React-like components\n if (options.jsx && text(scanner)) {\n attr.value = getText(scanner);\n attr.expression = true;\n }\n else {\n attr.value = literal$1(scanner) ? slice(scanner) : void 0;\n }\n return attr;\n }\n}\n/**\n * Consumes single attribute from given scanner\n */\nfunction attribute(scanner) {\n if (quoted(scanner)) {\n // Consumed quoted value: it’s a value for default attribute\n return {\n value: slice(scanner)\n };\n }\n if (literal$1(scanner, true)) {\n const name = slice(scanner);\n let value;\n if (consume(scanner, isEquals)) {\n if (quoted(scanner) || literal$1(scanner, true)) {\n value = slice(scanner);\n }\n }\n return { name, value };\n }\n}\nfunction repeater$1(scanner) {\n return isRepeater(peek(scanner))\n ? scanner.tokens[scanner.pos++]\n : void 0;\n}\n/**\n * Consumes quoted value from given scanner, if possible\n */\nfunction quoted(scanner) {\n const start = scanner.pos;\n const quote = peek(scanner);\n if (isQuote(quote)) {\n scanner.pos++;\n while (readable(scanner)) {\n if (isQuote(next(scanner), quote.single)) {\n scanner.start = start;\n return true;\n }\n }\n throw error(scanner, 'Unclosed quote', quote);\n }\n return false;\n}\n/**\n * Consumes literal (unquoted value) from given scanner\n */\nfunction literal$1(scanner, allowBrackets) {\n const start = scanner.pos;\n const brackets = {\n attribute: 0,\n expression: 0,\n group: 0\n };\n while (readable(scanner)) {\n const token = peek(scanner);\n if (brackets.expression) {\n // If we’re inside expression, we should consume all content in it\n if (isBracket(token, 'expression')) {\n brackets[token.context] += token.open ? 1 : -1;\n }\n }\n else if (isQuote(token) || isOperator(token) || isWhiteSpace(token) || isRepeater(token)) {\n break;\n }\n else if (isBracket(token)) {\n if (!allowBrackets) {\n break;\n }\n if (token.open) {\n brackets[token.context]++;\n }\n else if (!brackets[token.context]) {\n // Stop if found unmatched closing brace: it must be handled\n // by parent consumer\n break;\n }\n else {\n brackets[token.context]--;\n }\n }\n scanner.pos++;\n }\n if (start !== scanner.pos) {\n scanner.start = start;\n return true;\n }\n return false;\n}\n/**\n * Consumes element name from given scanner\n */\nfunction elementName(scanner, options) {\n const start = scanner.pos;\n if (options.jsx && consume(scanner, isCapitalizedLiteral)) {\n // Check for edge case: consume immediate capitalized class names\n // for React-like components, e.g. `Foo.Bar.Baz`\n while (readable(scanner)) {\n const { pos } = scanner;\n if (!consume(scanner, isClassNameOperator) || !consume(scanner, isCapitalizedLiteral)) {\n scanner.pos = pos;\n break;\n }\n }\n }\n while (readable(scanner) && consume(scanner, isElementName$1)) {\n // empty\n }\n if (scanner.pos !== start) {\n scanner.start = start;\n return true;\n }\n return false;\n}\n/**\n * Consumes text value from given scanner\n */\nfunction text(scanner) {\n const start = scanner.pos;\n if (consume(scanner, isTextStart)) {\n let brackets = 0;\n while (readable(scanner)) {\n const token = next(scanner);\n if (isBracket(token, 'expression')) {\n if (token.open) {\n brackets++;\n }\n else if (!brackets) {\n break;\n }\n else {\n brackets--;\n }\n }\n }\n scanner.start = start;\n return true;\n }\n return false;\n}\nfunction getText(scanner) {\n let from = scanner.start;\n let to = scanner.pos;\n if (isBracket(scanner.tokens[from], 'expression', true)) {\n from++;\n }\n if (isBracket(scanner.tokens[to - 1], 'expression', false)) {\n to--;\n }\n return slice(scanner, from, to);\n}\nfunction isBracket(token, context, isOpen) {\n return Boolean(token && token.type === 'Bracket'\n && (!context || token.context === context)\n && (isOpen == null || token.open === isOpen));\n}\nfunction isOperator(token, type) {\n return Boolean(token && token.type === 'Operator' && (!type || token.operator === type));\n}\nfunction isQuote(token, isSingle) {\n return Boolean(token && token.type === 'Quote' && (isSingle == null || token.single === isSingle));\n}\nfunction isWhiteSpace(token) {\n return Boolean(token && token.type === 'WhiteSpace');\n}\nfunction isEquals(token) {\n return isOperator(token, 'equal');\n}\nfunction isRepeater(token) {\n return Boolean(token && token.type === 'Repeater');\n}\nfunction isLiteral(token) {\n return token.type === 'Literal';\n}\nfunction isCapitalizedLiteral(token) {\n if (isLiteral(token)) {\n const ch = token.value.charCodeAt(0);\n return ch >= 65 && ch <= 90;\n }\n return false;\n}\nfunction isElementName$1(token) {\n return token.type === 'Literal' || token.type === 'RepeaterNumber' || token.type === 'RepeaterPlaceholder';\n}\nfunction isClassNameOperator(token) {\n return isOperator(token, 'class');\n}\nfunction isAttributeSetStart(token) {\n return isBracket(token, 'attribute', true);\n}\nfunction isAttributeSetEnd(token) {\n return isBracket(token, 'attribute', false);\n}\nfunction isTextStart(token) {\n return isBracket(token, 'expression', true);\n}\nfunction isGroupStart(token) {\n return isBracket(token, 'group', true);\n}\nfunction createLiteral(value) {\n return { type: 'Literal', value };\n}\nfunction isEmpty(elem) {\n return !elem.name && !elem.value && !elem.attributes;\n}\nfunction isChildOperator(token) {\n return isOperator(token, 'child');\n}\nfunction isSiblingOperator(token) {\n return isOperator(token, 'sibling');\n}\nfunction isClimbOperator(token) {\n return isOperator(token, 'climb');\n}\nfunction isCloseOperator(token) {\n return isOperator(token, 'close');\n}\n\nvar Chars;\n(function (Chars) {\n /** `{` character */\n Chars[Chars[\"CurlyBracketOpen\"] = 123] = \"CurlyBracketOpen\";\n /** `}` character */\n Chars[Chars[\"CurlyBracketClose\"] = 125] = \"CurlyBracketClose\";\n /** `\\\\` character */\n Chars[Chars[\"Escape\"] = 92] = \"Escape\";\n /** `=` character */\n Chars[Chars[\"Equals\"] = 61] = \"Equals\";\n /** `[` character */\n Chars[Chars[\"SquareBracketOpen\"] = 91] = \"SquareBracketOpen\";\n /** `]` character */\n Chars[Chars[\"SquareBracketClose\"] = 93] = \"SquareBracketClose\";\n /** `*` character */\n Chars[Chars[\"Asterisk\"] = 42] = \"Asterisk\";\n /** `#` character */\n Chars[Chars[\"Hash\"] = 35] = \"Hash\";\n /** `$` character */\n Chars[Chars[\"Dollar\"] = 36] = \"Dollar\";\n /** `-` character */\n Chars[Chars[\"Dash\"] = 45] = \"Dash\";\n /** `.` character */\n Chars[Chars[\"Dot\"] = 46] = \"Dot\";\n /** `/` character */\n Chars[Chars[\"Slash\"] = 47] = \"Slash\";\n /** `:` character */\n Chars[Chars[\"Colon\"] = 58] = \"Colon\";\n /** `!` character */\n Chars[Chars[\"Excl\"] = 33] = \"Excl\";\n /** `@` character */\n Chars[Chars[\"At\"] = 64] = \"At\";\n /** `_` character */\n Chars[Chars[\"Underscore\"] = 95] = \"Underscore\";\n /** `(` character */\n Chars[Chars[\"RoundBracketOpen\"] = 40] = \"RoundBracketOpen\";\n /** `)` character */\n Chars[Chars[\"RoundBracketClose\"] = 41] = \"RoundBracketClose\";\n /** `+` character */\n Chars[Chars[\"Sibling\"] = 43] = \"Sibling\";\n /** `>` character */\n Chars[Chars[\"Child\"] = 62] = \"Child\";\n /** `^` character */\n Chars[Chars[\"Climb\"] = 94] = \"Climb\";\n /** `'` character */\n Chars[Chars[\"SingleQuote\"] = 39] = \"SingleQuote\";\n /** `\"\"` character */\n Chars[Chars[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n})(Chars || (Chars = {}));\n/**\n * If consumes escape character, sets current stream range to escaped value\n */\nfunction escaped(scanner) {\n if (scanner.eat(Chars.Escape)) {\n scanner.start = scanner.pos;\n if (!scanner.eof()) {\n scanner.pos++;\n }\n return true;\n }\n return false;\n}\n\nfunction tokenize(source) {\n const scanner = new Scanner(source);\n const result = [];\n const ctx = {\n group: 0,\n attribute: 0,\n expression: 0,\n quote: 0\n };\n let ch = 0;\n let token;\n while (!scanner.eof()) {\n ch = scanner.peek();\n token = getToken(scanner, ctx);\n if (token) {\n result.push(token);\n if (token.type === 'Quote') {\n ctx.quote = ch === ctx.quote ? 0 : ch;\n }\n else if (token.type === 'Bracket') {\n ctx[token.context] += token.open ? 1 : -1;\n }\n }\n else {\n throw scanner.error('Unexpected character');\n }\n }\n return result;\n}\n/**\n * Returns next token from given scanner, if possible\n */\nfunction getToken(scanner, ctx) {\n return field(scanner, ctx)\n || repeaterPlaceholder(scanner)\n || repeaterNumber(scanner)\n || repeater(scanner)\n || whiteSpace(scanner)\n || literal(scanner, ctx)\n || operator(scanner)\n || quote(scanner)\n || bracket(scanner);\n}\n/**\n * Consumes literal from given scanner\n */\nfunction literal(scanner, ctx) {\n const start = scanner.pos;\n const expressionStart = ctx.expression;\n let value = '';\n while (!scanner.eof()) {\n // Consume escaped sequence no matter of context\n if (escaped(scanner)) {\n value += scanner.current();\n continue;\n }\n const ch = scanner.peek();\n if (ch === Chars.Slash && !ctx.quote && !ctx.expression && !ctx.attribute) {\n // Special case for `/` character between numbers in class names\n const prev = scanner.string.charCodeAt(scanner.pos - 1);\n const next = scanner.string.charCodeAt(scanner.pos + 1);\n if (isNumber(prev) && isNumber(next)) {\n value += scanner.string[scanner.pos++];\n continue;\n }\n }\n if (ch === ctx.quote || ch === Chars.Dollar || isAllowedOperator(ch, ctx)) {\n // 1. Found matching quote\n // 2. The `$` character has special meaning in every context\n // 3. Depending on context, some characters should be treated as operators\n break;\n }\n if (expressionStart) {\n // Consume nested expressions, e.g. span{{foo}}\n if (ch === Chars.CurlyBracketOpen) {\n ctx.expression++;\n }\n else if (ch === Chars.CurlyBracketClose) {\n if (ctx.expression > expressionStart) {\n ctx.expression--;\n }\n else {\n break;\n }\n }\n }\n else if (!ctx.quote) {\n // Consuming element name\n if (!ctx.attribute && !isElementName(ch)) {\n break;\n }\n if (isAllowedSpace(ch, ctx) || isAllowedRepeater(ch, ctx) || isQuote$1(ch) || bracketType(ch)) {\n // Stop for characters not allowed in unquoted literal\n break;\n }\n }\n value += scanner.string[scanner.pos++];\n }\n if (start !== scanner.pos) {\n scanner.start = start;\n return {\n type: 'Literal',\n value,\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes white space characters as string literal from given scanner\n */\nfunction whiteSpace(scanner) {\n const start = scanner.pos;\n if (scanner.eatWhile(isSpace)) {\n return {\n type: 'WhiteSpace',\n start,\n end: scanner.pos,\n value: scanner.substring(start, scanner.pos)\n };\n }\n}\n/**\n * Consumes quote from given scanner\n */\nfunction quote(scanner) {\n const ch = scanner.peek();\n if (isQuote$1(ch)) {\n return {\n type: 'Quote',\n single: ch === Chars.SingleQuote,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes bracket from given scanner\n */\nfunction bracket(scanner) {\n const ch = scanner.peek();\n const context = bracketType(ch);\n if (context) {\n return {\n type: 'Bracket',\n open: isOpenBracket(ch),\n context,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes operator from given scanner\n */\nfunction operator(scanner) {\n const op = operatorType(scanner.peek());\n if (op) {\n return {\n type: 'Operator',\n operator: op,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes node repeat token from current stream position and returns its\n * parsed value\n */\nfunction repeater(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Asterisk)) {\n scanner.start = scanner.pos;\n let count = 1;\n let implicit = false;\n if (scanner.eatWhile(isNumber)) {\n count = Number(scanner.current());\n }\n else {\n implicit = true;\n }\n return {\n type: 'Repeater',\n count,\n value: 0,\n implicit,\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes repeater placeholder `$#` from given scanner\n */\nfunction repeaterPlaceholder(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dollar) && scanner.eat(Chars.Hash)) {\n return {\n type: 'RepeaterPlaceholder',\n value: void 0,\n start,\n end: scanner.pos\n };\n }\n scanner.pos = start;\n}\n/**\n * Consumes numbering token like `$` from given scanner state\n */\nfunction repeaterNumber(scanner) {\n const start = scanner.pos;\n if (scanner.eatWhile(Chars.Dollar)) {\n const size = scanner.pos - start;\n let reverse = false;\n let base = 1;\n let parent = 0;\n if (scanner.eat(Chars.At)) {\n // Consume numbering modifiers\n while (scanner.eat(Chars.Climb)) {\n parent++;\n }\n reverse = scanner.eat(Chars.Dash);\n scanner.start = scanner.pos;\n if (scanner.eatWhile(isNumber)) {\n base = Number(scanner.current());\n }\n }\n scanner.start = start;\n return {\n type: 'RepeaterNumber',\n size,\n reverse,\n base,\n parent,\n start,\n end: scanner.pos\n };\n }\n}\nfunction field(scanner, ctx) {\n const start = scanner.pos;\n // Fields are allowed inside expressions and attributes\n if ((ctx.expression || ctx.attribute) && scanner.eat(Chars.Dollar) && scanner.eat(Chars.CurlyBracketOpen)) {\n scanner.start = scanner.pos;\n let index;\n let name = '';\n if (scanner.eatWhile(isNumber)) {\n // It’s a field\n index = Number(scanner.current());\n name = scanner.eat(Chars.Colon) ? consumePlaceholder(scanner) : '';\n }\n else if (isAlpha(scanner.peek())) {\n // It’s a variable\n name = consumePlaceholder(scanner);\n }\n if (scanner.eat(Chars.CurlyBracketClose)) {\n return {\n type: 'Field',\n index, name,\n start,\n end: scanner.pos\n };\n }\n throw scanner.error('Expecting }');\n }\n // If we reached here then there’s no valid field here, revert\n // back to starting position\n scanner.pos = start;\n}\n/**\n * Consumes a placeholder: value right after `:` in field. Could be empty\n */\nfunction consumePlaceholder(stream) {\n const stack = [];\n stream.start = stream.pos;\n while (!stream.eof()) {\n if (stream.eat(Chars.CurlyBracketOpen)) {\n stack.push(stream.pos);\n }\n else if (stream.eat(Chars.CurlyBracketClose)) {\n if (!stack.length) {\n stream.pos--;\n break;\n }\n stack.pop();\n }\n else {\n stream.pos++;\n }\n }\n if (stack.length) {\n stream.pos = stack.pop();\n throw stream.error(`Expecting }`);\n }\n return stream.current();\n}\n/**\n * Check if given character code is an operator and it’s allowed in current context\n */\nfunction isAllowedOperator(ch, ctx) {\n const op = operatorType(ch);\n if (!op || ctx.quote || ctx.expression) {\n // No operators inside quoted values or expressions\n return false;\n }\n // Inside attributes, only `equals` is allowed\n return !ctx.attribute || op === 'equal';\n}\n/**\n * Check if given character is a space character and is allowed to be consumed\n * as a space token in current context\n */\nfunction isAllowedSpace(ch, ctx) {\n return isSpace(ch) && !ctx.expression;\n}\n/**\n * Check if given character can be consumed as repeater in current context\n */\nfunction isAllowedRepeater(ch, ctx) {\n return ch === Chars.Asterisk && !ctx.attribute && !ctx.expression;\n}\n/**\n * If given character is a bracket, returns it’s type\n */\nfunction bracketType(ch) {\n if (ch === Chars.RoundBracketOpen || ch === Chars.RoundBracketClose) {\n return 'group';\n }\n if (ch === Chars.SquareBracketOpen || ch === Chars.SquareBracketClose) {\n return 'attribute';\n }\n if (ch === Chars.CurlyBracketOpen || ch === Chars.CurlyBracketClose) {\n return 'expression';\n }\n}\n/**\n * If given character is an operator, returns it’s type\n */\nfunction operatorType(ch) {\n return (ch === Chars.Child && 'child')\n || (ch === Chars.Sibling && 'sibling')\n || (ch === Chars.Climb && 'climb')\n || (ch === Chars.Dot && 'class')\n || (ch === Chars.Hash && 'id')\n || (ch === Chars.Slash && 'close')\n || (ch === Chars.Equals && 'equal')\n || void 0;\n}\n/**\n * Check if given character is an open bracket\n */\nfunction isOpenBracket(ch) {\n return ch === Chars.CurlyBracketOpen\n || ch === Chars.SquareBracketOpen\n || ch === Chars.RoundBracketOpen;\n}\n/**\n * Check if given character is allowed in element name\n */\nfunction isElementName(ch) {\n return isAlphaNumericWord(ch)\n || isUmlaut(ch)\n || ch === Chars.Dash\n || ch === Chars.Colon\n || ch === Chars.Excl;\n}\n\nconst operators = {\n child: '>',\n class: '.',\n climb: '^',\n id: '#',\n equal: '=',\n close: '/',\n sibling: '+'\n};\nconst tokenVisitor = {\n Literal(token) {\n return token.value;\n },\n Quote(token) {\n return token.single ? '\\'' : '\"';\n },\n Bracket(token) {\n if (token.context === 'attribute') {\n return token.open ? '[' : ']';\n }\n else if (token.context === 'expression') {\n return token.open ? '{' : '}';\n }\n else {\n return token.open ? '(' : '}';\n }\n },\n Operator(token) {\n return operators[token.operator];\n },\n Field(token, state) {\n if (token.index != null) {\n // It’s a field: by default, return TextMate-compatible field\n return token.name\n ? `\\${${token.index}:${token.name}}`\n : `\\${${token.index}`;\n }\n else if (token.name) {\n // It’s a variable\n return state.getVariable(token.name);\n }\n return '';\n },\n RepeaterPlaceholder(token, state) {\n // Find closest implicit repeater\n let repeater;\n for (let i = state.repeaters.length - 1; i >= 0; i--) {\n if (state.repeaters[i].implicit) {\n repeater = state.repeaters[i];\n break;\n }\n }\n state.inserted = true;\n return state.getText(repeater && repeater.value);\n },\n RepeaterNumber(token, state) {\n let value = 1;\n const lastIx = state.repeaters.length - 1;\n // const repeaterIx = Math.max(0, state.repeaters.length - 1 - token.parent);\n const repeater = state.repeaters[lastIx];\n if (repeater) {\n value = token.reverse\n ? token.base + repeater.count - repeater.value - 1\n : token.base + repeater.value;\n if (token.parent) {\n const parentIx = Math.max(0, lastIx - token.parent);\n if (parentIx !== lastIx) {\n const parentRepeater = state.repeaters[parentIx];\n value += repeater.count * parentRepeater.value;\n }\n }\n }\n let result = String(value);\n while (result.length < token.size) {\n result = '0' + result;\n }\n return result;\n },\n WhiteSpace(token) {\n return token.value;\n }\n};\n/**\n * Converts given value token to string\n */\nfunction stringify(token, state) {\n if (!tokenVisitor[token.type]) {\n throw new Error(`Unknown token ${token.type}`);\n }\n return tokenVisitor[token.type](token, state);\n}\n\nconst urlRegex = /^((https?:|ftp:|file:)?\\/\\/|(www|ftp)\\.)[^ ]*$/;\nconst emailRegex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,5}$/;\n/**\n * Converts given token-based abbreviation into simplified and unrolled node-based\n * abbreviation\n */\nfunction convert(abbr, options = {}) {\n let textInserted = false;\n let cleanText;\n if (options.text) {\n if (Array.isArray(options.text)) {\n cleanText = options.text.filter(s => s.trim());\n }\n else {\n cleanText = options.text;\n }\n }\n const result = {\n type: 'Abbreviation',\n children: convertGroup(abbr, {\n inserted: false,\n repeaters: [],\n text: options.text,\n cleanText,\n repeatGuard: options.maxRepeat || Number.POSITIVE_INFINITY,\n getText(pos) {\n var _a;\n textInserted = true;\n let value;\n if (Array.isArray(options.text)) {\n if (pos !== undefined && pos >= 0 && pos < cleanText.length) {\n return cleanText[pos];\n }\n value = pos !== undefined ? options.text[pos] : options.text.join('\\n');\n }\n else {\n value = (_a = options.text) !== null && _a !== void 0 ? _a : '';\n }\n return value;\n },\n getVariable(name) {\n const varValue = options.variables && options.variables[name];\n return varValue != null ? varValue : name;\n }\n })\n };\n if (options.text != null && !textInserted) {\n // Text given but no implicitly repeated elements: insert it into\n // deepest child\n const deepest = deepestNode(last(result.children));\n if (deepest) {\n const text = Array.isArray(options.text) ? options.text.join('\\n') : options.text;\n insertText(deepest, text);\n if (deepest.name === 'a' && options.href) {\n // Automatically update value of `<a>` element if inserting URL or email\n insertHref(deepest, text);\n }\n }\n }\n return result;\n}\n/**\n * Converts given statement to abbreviation nodes\n */\nfunction convertStatement(node, state) {\n let result = [];\n if (node.repeat) {\n // Node is repeated: we should create copies of given node\n // and supply context token with actual repeater state\n const original = node.repeat;\n const repeat = Object.assign({}, original);\n repeat.count = repeat.implicit && Array.isArray(state.text)\n ? state.cleanText.length\n : (repeat.count || 1);\n let items;\n state.repeaters.push(repeat);\n for (let i = 0; i < repeat.count; i++) {\n repeat.value = i;\n node.repeat = repeat;\n items = isGroup(node)\n ? convertGroup(node, state)\n : convertElement(node, state);\n if (repeat.implicit && !state.inserted) {\n // It’s an implicit repeater but no repeater placeholders found inside,\n // we should insert text into deepest node\n const target = last(items);\n const deepest = target && deepestNode(target);\n if (deepest) {\n insertText(deepest, state.getText(repeat.value));\n }\n }\n result = result.concat(items);\n // We should output at least one repeated item even if it’s reached\n // repeat limit\n if (--state.repeatGuard <= 0) {\n break;\n }\n }\n state.repeaters.pop();\n node.repeat = original;\n if (repeat.implicit) {\n state.inserted = true;\n }\n }\n else {\n result = result.concat(isGroup(node) ? convertGroup(node, state) : convertElement(node, state));\n }\n return result;\n}\nfunction convertElement(node, state) {\n let children = [];\n const elem = {\n type: 'AbbreviationNode',\n name: node.name && stringifyName(node.name, state),\n value: node.value && stringifyValue(node.value, state),\n attributes: void 0,\n children,\n repeat: node.repeat && Object.assign({}, node.repeat),\n selfClosing: node.selfClose,\n };\n let result = [elem];\n for (const child of node.elements) {\n children = children.concat(convertStatement(child, state));\n }\n if (node.attributes) {\n elem.attributes = [];\n for (const attr of node.attributes) {\n elem.attributes.push(convertAttribute(attr, state));\n }\n }\n // In case if current node is a text-only snippet without fields, we should\n // put all children as siblings\n if (!elem.name && !elem.attributes && elem.value && !elem.value.some(isField)) {\n // XXX it’s unclear that `children` is not bound to `elem`\n // due to concat operation\n result = result.concat(children);\n }\n else {\n elem.children = children;\n }\n return result;\n}\nfunction convertGroup(node, state) {\n let result = [];\n for (const child of node.elements) {\n result = result.concat(convertStatement(child, state));\n }\n if (node.repeat) {\n result = attachRepeater(result, node.repeat);\n }\n return result;\n}\nfunction convertAttribute(node, state) {\n let implied = false;\n let isBoolean = false;\n let valueType = node.expression ? 'expression' : 'raw';\n let value;\n const name = node.name && stringifyName(node.name, state);\n if (name && name[0] === '!') {\n implied = true;\n }\n if (name && name[name.length - 1] === '.') {\n isBoolean = true;\n }\n if (node.value) {\n const tokens = node.value.slice();\n if (isQuote(tokens[0])) {\n // It’s a quoted value: remove quotes from output but mark attribute\n // value as quoted\n const quote = tokens.shift();\n if (tokens.length && last(tokens).type === quote.type) {\n tokens.pop();\n }\n valueType = quote.single ? 'singleQuote' : 'doubleQuote';\n }\n else if (isBracket(tokens[0], 'expression', true)) {\n // Value is expression: remove brackets but mark value type\n valueType = 'expression';\n tokens.shift();\n if (isBracket(last(tokens), 'expression', false)) {\n tokens.pop();\n }\n }\n value = stringifyValue(tokens, state);\n }\n return {\n name: isBoolean || implied\n ? name.slice(implied ? 1 : 0, isBoolean ? -1 : void 0)\n : name,\n value,\n boolean: isBoolean,\n implied,\n valueType,\n multiple: node.multiple\n };\n}\n/**\n * Converts given token list to string\n */\nfunction stringifyName(tokens, state) {\n let str = '';\n for (let i = 0; i < tokens.length; i++) {\n str += stringify(tokens[i], state);\n }\n return str;\n}\n/**\n * Converts given token list to value list\n */\nfunction stringifyValue(tokens, state) {\n const result = [];\n let str = '';\n for (let i = 0, token; i < tokens.length; i++) {\n token = tokens[i];\n if (isField(token)) {\n // We should keep original fields in output since some editors has their\n // own syntax for field or doesn’t support fields at all so we should\n // capture actual field location in output stream\n if (str) {\n result.push(str);\n str = '';\n }\n result.push(token);\n }\n else {\n str += stringify(token, state);\n }\n }\n if (str) {\n result.push(str);\n }\n return result;\n}\nfunction isGroup(node) {\n return node.type === 'TokenGroup';\n}\nfunction isField(token) {\n return typeof token === 'object' && token.type === 'Field' && token.index != null;\n}\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nfunction deepestNode(node) {\n return node.children.length ? deepestNode(last(node.children)) : node;\n}\nfunction insertText(node, text) {\n if (node.value) {\n const lastToken = last(node.value);\n if (typeof lastToken === 'string') {\n node.value[node.value.length - 1] += text;\n }\n else {\n node.value.push(text);\n }\n }\n else {\n node.value = [text];\n }\n}\nfunction insertHref(node, text) {\n var _a;\n let href = '';\n if (urlRegex.test(text)) {\n href = text;\n if (!/\\w+:/.test(href) && !href.startsWith('//')) {\n href = `http://${href}`;\n }\n }\n else if (emailRegex.test(text)) {\n href = `mailto:${text}`;\n }\n const hrefAttribute = (_a = node.attributes) === null || _a === void 0 ? void 0 : _a.find(attr => attr.name === 'href');\n if (!hrefAttribute) {\n if (!node.attributes) {\n node.attributes = [];\n }\n node.attributes.push({ name: 'href', value: [href], valueType: 'doubleQuote' });\n }\n else if (!hrefAttribute.value) {\n hrefAttribute.value = [href];\n }\n}\nfunction attachRepeater(items, repeater) {\n for (const item of items) {\n if (!item.repeat) {\n item.repeat = Object.assign({}, repeater);\n }\n }\n return items;\n}\n\n/**\n * Parses given abbreviation into node tree\n */\nfunction parseAbbreviation(abbr, options) {\n try {\n const tokens = typeof abbr === 'string' ? tokenize(abbr) : abbr;\n return convert(abbreviation(tokens, options), options);\n }\n catch (err) {\n if (err instanceof ScannerError && typeof abbr === 'string') {\n err.message += `\\n${abbr}\\n${'-'.repeat(err.pos)}^`;\n }\n throw err;\n }\n}\n\nexport { convert, parseAbbreviation as default, getToken, abbreviation as parse, tokenize };\n//# sourceMappingURL=index.js.map\n", "import Scanner, { isNumber, isAlpha, isAlphaWord, isQuote, isSpace, isAlphaNumericWord, ScannerError } from '@emmetio/scanner';\n\nvar OperatorType;\n(function (OperatorType) {\n OperatorType[\"Sibling\"] = \"+\";\n OperatorType[\"Important\"] = \"!\";\n OperatorType[\"ArgumentDelimiter\"] = \",\";\n OperatorType[\"ValueDelimiter\"] = \"-\";\n OperatorType[\"PropertyDelimiter\"] = \":\";\n})(OperatorType || (OperatorType = {}));\n\nvar Chars;\n(function (Chars) {\n /** `#` character */\n Chars[Chars[\"Hash\"] = 35] = \"Hash\";\n /** `$` character */\n Chars[Chars[\"Dollar\"] = 36] = \"Dollar\";\n /** `-` character */\n Chars[Chars[\"Dash\"] = 45] = \"Dash\";\n /** `.` character */\n Chars[Chars[\"Dot\"] = 46] = \"Dot\";\n /** `:` character */\n Chars[Chars[\"Colon\"] = 58] = \"Colon\";\n /** `,` character */\n Chars[Chars[\"Comma\"] = 44] = \"Comma\";\n /** `!` character */\n Chars[Chars[\"Excl\"] = 33] = \"Excl\";\n /** `@` character */\n Chars[Chars[\"At\"] = 64] = \"At\";\n /** `%` character */\n Chars[Chars[\"Percent\"] = 37] = \"Percent\";\n /** `_` character */\n Chars[Chars[\"Underscore\"] = 95] = \"Underscore\";\n /** `(` character */\n Chars[Chars[\"RoundBracketOpen\"] = 40] = \"RoundBracketOpen\";\n /** `)` character */\n Chars[Chars[\"RoundBracketClose\"] = 41] = \"RoundBracketClose\";\n /** `{` character */\n Chars[Chars[\"CurlyBracketOpen\"] = 123] = \"CurlyBracketOpen\";\n /** `}` character */\n Chars[Chars[\"CurlyBracketClose\"] = 125] = \"CurlyBracketClose\";\n /** `+` character */\n Chars[Chars[\"Sibling\"] = 43] = \"Sibling\";\n /** `'` character */\n Chars[Chars[\"SingleQuote\"] = 39] = \"SingleQuote\";\n /** `\"` character */\n Chars[Chars[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n /** `t` character */\n Chars[Chars[\"Transparent\"] = 116] = \"Transparent\";\n /** `/` character */\n Chars[Chars[\"Slash\"] = 47] = \"Slash\";\n})(Chars || (Chars = {}));\n\nfunction tokenize(abbr, isValue) {\n let brackets = 0;\n let token;\n const scanner = new Scanner(abbr);\n const tokens = [];\n while (!scanner.eof()) {\n token = getToken(scanner, brackets === 0 && !isValue);\n if (!token) {\n throw scanner.error('Unexpected character');\n }\n if (token.type === 'Bracket') {\n if (!brackets && token.open) {\n mergeTokens(scanner, tokens);\n }\n brackets += token.open ? 1 : -1;\n if (brackets < 0) {\n throw scanner.error('Unexpected bracket', token.start);\n }\n }\n tokens.push(token);\n // Forcibly consume next operator after unit-less numeric value or color:\n // next dash `-` must be used as value delimiter\n if (shouldConsumeDashAfter(token) && (token = operator(scanner))) {\n tokens.push(token);\n }\n }\n return tokens;\n}\n/**\n * Returns next token from given scanner, if possible\n */\nfunction getToken(scanner, short) {\n return field(scanner)\n || customProperty(scanner)\n || numberValue(scanner)\n || colorValue(scanner)\n || stringValue(scanner)\n || bracket(scanner)\n || operator(scanner)\n || whiteSpace(scanner)\n || literal(scanner, short);\n}\nfunction field(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dollar) && scanner.eat(Chars.CurlyBracketOpen)) {\n scanner.start = scanner.pos;\n let index;\n let name = '';\n if (scanner.eatWhile(isNumber)) {\n // It’s a field\n index = Number(scanner.current());\n name = scanner.eat(Chars.Colon) ? consumePlaceholder(scanner) : '';\n }\n else if (isAlpha(scanner.peek())) {\n // It’s a variable\n name = consumePlaceholder(scanner);\n }\n if (scanner.eat(Chars.CurlyBracketClose)) {\n return {\n type: 'Field',\n index, name,\n start,\n end: scanner.pos\n };\n }\n throw scanner.error('Expecting }');\n }\n // If we reached here then there’s no valid field here, revert\n // back to starting position\n scanner.pos = start;\n}\n/**\n * Consumes a placeholder: value right after `:` in field. Could be empty\n */\nfunction consumePlaceholder(stream) {\n const stack = [];\n stream.start = stream.pos;\n while (!stream.eof()) {\n if (stream.eat(Chars.CurlyBracketOpen)) {\n stack.push(stream.pos);\n }\n else if (stream.eat(Chars.CurlyBracketClose)) {\n if (!stack.length) {\n stream.pos--;\n break;\n }\n stack.pop();\n }\n else {\n stream.pos++;\n }\n }\n if (stack.length) {\n stream.pos = stack.pop();\n throw stream.error(`Expecting }`);\n }\n return stream.current();\n}\n/**\n * Consumes literal from given scanner\n * @param short Use short notation for consuming value.\n * The difference between “short” and “full” notation is that first one uses\n * alpha characters only and used for extracting keywords from abbreviation,\n * while “full” notation also supports numbers and dashes\n */\nfunction literal(scanner, short) {\n const start = scanner.pos;\n if (scanner.eat(isIdentPrefix)) {\n // SCSS or LESS variable\n // NB a bit dirty hack: if abbreviation starts with identifier prefix,\n // consume alpha characters only to allow embedded variables\n scanner.eatWhile(start ? isKeyword : isLiteral$1);\n }\n else if (scanner.eat(isAlphaWord)) {\n scanner.eatWhile(short ? isLiteral$1 : isKeyword);\n }\n else {\n // Allow dots only at the beginning of literal\n scanner.eat(Chars.Dot);\n scanner.eatWhile(isLiteral$1);\n }\n if (start !== scanner.pos) {\n scanner.start = start;\n return createLiteral(scanner, scanner.start = start);\n }\n}\nfunction createLiteral(scanner, start = scanner.start, end = scanner.pos) {\n return {\n type: 'Literal',\n value: scanner.substring(start, end),\n start,\n end\n };\n}\n/**\n * Consumes numeric CSS value (number with optional unit) from current stream,\n * if possible\n */\nfunction numberValue(scanner) {\n const start = scanner.pos;\n if (consumeNumber(scanner)) {\n scanner.start = start;\n const rawValue = scanner.current();\n // eat unit, which can be a % or alpha word\n scanner.start = scanner.pos;\n scanner.eat(Chars.Percent) || scanner.eatWhile(isAlphaWord);\n return {\n type: 'NumberValue',\n value: Number(rawValue),\n rawValue,\n unit: scanner.current(),\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes quoted string value from given scanner\n */\nfunction stringValue(scanner) {\n const ch = scanner.peek();\n const start = scanner.pos;\n let finished = false;\n if (isQuote(ch)) {\n scanner.pos++;\n while (!scanner.eof()) {\n // Do not throw error on malformed string\n if (scanner.eat(ch)) {\n finished = true;\n break;\n }\n else {\n scanner.pos++;\n }\n }\n scanner.start = start;\n return {\n type: 'StringValue',\n value: scanner.substring(start + 1, scanner.pos - (finished ? 1 : 0)),\n quote: ch === Chars.SingleQuote ? 'single' : 'double',\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes a color token from given string\n */\nfunction colorValue(scanner) {\n // supported color variations:\n // #abc → #aabbccc\n // #0 → #000000\n // #fff.5 → rgba(255, 255, 255, 0.5)\n // #t → transparent\n const start = scanner.pos;\n if (scanner.eat(Chars.Hash)) {\n const valueStart = scanner.pos;\n let color = '';\n let alpha = '';\n if (scanner.eatWhile(isHex)) {\n color = scanner.substring(valueStart, scanner.pos);\n alpha = colorAlpha(scanner);\n }\n else if (scanner.eat(Chars.Transparent)) {\n color = '0';\n alpha = colorAlpha(scanner) || '0';\n }\n else {\n alpha = colorAlpha(scanner);\n }\n if (color || alpha || scanner.eof()) {\n const { r, g, b, a } = parseColor(color, alpha);\n return {\n type: 'ColorValue',\n r, g, b, a,\n raw: scanner.substring(start + 1, scanner.pos),\n start,\n end: scanner.pos\n };\n }\n else {\n // Consumed # but no actual value: invalid color value, treat it as literal\n return createLiteral(scanner, start);\n }\n }\n scanner.pos = start;\n}\n/**\n * Consumes alpha value of color: `.1`\n */\nfunction colorAlpha(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dot)) {\n scanner.start = start;\n if (scanner.eatWhile(isNumber)) {\n return scanner.current();\n }\n return '1';\n }\n return '';\n}\n/**\n * Consumes white space characters as string literal from given scanner\n */\nfunction whiteSpace(scanner) {\n const start = scanner.pos;\n if (scanner.eatWhile(isSpace)) {\n return {\n type: 'WhiteSpace',\n start,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes custom CSS property: --foo-bar\n */\nfunction customProperty(scanner) {\n const start = scanner.pos;\n if (scanner.eat(Chars.Dash) && scanner.eat(Chars.Dash)) {\n scanner.start = start;\n scanner.eatWhile(isKeyword);\n return {\n type: 'CustomProperty',\n value: scanner.current(),\n start,\n end: scanner.pos\n };\n }\n scanner.pos = start;\n}\n/**\n * Consumes bracket from given scanner\n */\nfunction bracket(scanner) {\n const ch = scanner.peek();\n if (isBracket$1(ch)) {\n return {\n type: 'Bracket',\n open: ch === Chars.RoundBracketOpen,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Consumes operator from given scanner\n */\nfunction operator(scanner) {\n const op = operatorType(scanner.peek());\n if (op) {\n return {\n type: 'Operator',\n operator: op,\n start: scanner.pos++,\n end: scanner.pos\n };\n }\n}\n/**\n * Eats number value from given stream\n * @return Returns `true` if number was consumed\n */\nfunction consumeNumber(stream) {\n const start = stream.pos;\n stream.eat(Chars.Dash);\n const afterNegative = stream.pos;\n const hasDecimal = stream.eatWhile(isNumber);\n const prevPos = stream.pos;\n if (stream.eat(Chars.Dot)) {\n // It’s perfectly valid to have numbers like `1.`, which enforces\n // value to float unit type\n const hasFloat = stream.eatWhile(isNumber);\n if (!hasDecimal && !hasFloat) {\n // Lone dot\n stream.pos = prevPos;\n }\n }\n // Edge case: consumed dash only: not a number, bail-out\n if (stream.pos === afterNegative) {\n stream.pos = start;\n }\n return stream.pos !== start;\n}\nfunction isIdentPrefix(code) {\n return code === Chars.At || code === Chars.Dollar;\n}\n/**\n * If given character is an operator, returns it’s type\n */\nfunction operatorType(ch) {\n return (ch === Chars.Sibling && OperatorType.Sibling)\n || (ch === Chars.Excl && OperatorType.Important)\n || (ch === Chars.Comma && OperatorType.ArgumentDelimiter)\n || (ch === Chars.Colon && OperatorType.PropertyDelimiter)\n || (ch === Chars.Dash && OperatorType.ValueDelimiter)\n || void 0;\n}\n/**\n * Check if given code is a hex value (/0-9a-f/)\n */\nfunction isHex(code) {\n return isNumber(code) || isAlpha(code, 65, 70); // A-F\n}\nfunction isKeyword(code) {\n return isAlphaNumericWord(code) || code === Chars.Dash;\n}\nfunction isBracket$1(code) {\n return code === Chars.RoundBracketOpen || code === Chars.RoundBracketClose;\n}\nfunction isLiteral$1(code) {\n return isAlphaWord(code) || code === Chars.Percent || code === Chars.Slash;\n}\n/**\n * Parses given color value from abbreviation into RGBA format\n */\nfunction parseColor(value, alpha) {\n let r = '0';\n let g = '0';\n let b = '0';\n let a = Number(alpha != null && alpha !== '' ? alpha : 1);\n if (value === 't') {\n a = 0;\n }\n else {\n switch (value.length) {\n case 0:\n break;\n case 1:\n r = g = b = value + value;\n break;\n case 2:\n r = g = b = value;\n break;\n case 3:\n r = value[0] + value[0];\n g = value[1] + value[1];\n b = value[2] + value[2];\n break;\n default:\n value += value;\n r = value.slice(0, 2);\n g = value.slice(2, 4);\n b = value.slice(4, 6);\n }\n }\n return {\n r: parseInt(r, 16),\n g: parseInt(g, 16),\n b: parseInt(b, 16),\n a\n };\n}\n/**\n * Check if scanner reader must consume dash after given token.\n * Used in cases where user must explicitly separate numeric values\n */\nfunction shouldConsumeDashAfter(token) {\n return token.type === 'ColorValue' || (token.type === 'NumberValue' && !token.unit);\n}\n/**\n * Merges last adjacent tokens into a single literal.\n * This function is used to overcome edge case when function name was parsed\n * as a list of separate tokens. For example, a `scale3d()` value will be\n * parsed as literal and number tokens (`scale` and `3d`) which is a perfectly\n * valid abbreviation but undesired result. This function will detect last adjacent\n * literal and number values and combine them into single literal\n */\nfunction mergeTokens(scanner, tokens) {\n let start = 0;\n let end = 0;\n while (tokens.length) {\n const token = last(tokens);\n if (token.type === 'Literal' || token.type === 'NumberValue') {\n start = token.start;\n if (!end) {\n end = token.end;\n }\n tokens.pop();\n }\n else {\n break;\n }\n }\n if (start !== end) {\n tokens.push(createLiteral(scanner, start, end));\n }\n}\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction tokenScanner(tokens) {\n return {\n tokens,\n start: 0,\n pos: 0,\n size: tokens.length\n };\n}\nfunction peek(scanner) {\n return scanner.tokens[scanner.pos];\n}\nfunction readable(scanner) {\n return scanner.pos < scanner.size;\n}\nfunction consume(scanner, test) {\n if (test(peek(scanner))) {\n scanner.pos++;\n return true;\n }\n return false;\n}\nfunction error(scanner, message, token = peek(scanner)) {\n if (token && token.start != null) {\n message += ` at ${token.start}`;\n }\n const err = new Error(message);\n err['pos'] = token && token.start;\n return err;\n}\n\nfunction parser(tokens, options = {}) {\n const scanner = tokenScanner(tokens);\n const result = [];\n let property;\n while (readable(scanner)) {\n if (property = consumeProperty(scanner, options)) {\n result.push(property);\n }\n else if (!consume(scanner, isSiblingOperator)) {\n throw error(scanner, 'Unexpected token');\n }\n }\n return result;\n}\n/**\n * Consumes single CSS property\n */\nfunction consumeProperty(scanner, options) {\n let name;\n let important = false;\n let valueFragment;\n const value = [];\n const token = peek(scanner);\n const valueMode = !!options.value;\n if (!valueMode && isLiteral(token) && !isFunctionStart(scanner)) {\n scanner.pos++;\n name = token.value;\n // Consume any following value delimiter after property name\n consume(scanner, isValueDelimiter);\n }\n // Skip whitespace right after property name, if any\n if (valueMode) {\n consume(scanner, isWhiteSpace);\n }\n while (readable(scanner)) {\n if (consume(scanner, isImportant)) {\n important = true;\n }\n else if (valueFragment = consumeValue(scanner, valueMode)) {\n value.push(valueFragment);\n }\n else if (!consume(scanner, isFragmentDelimiter)) {\n break;\n }\n }\n if (name || value.length || important) {\n return { name, value, important };\n }\n}\n/**\n * Consumes single value fragment, e.g. all value tokens before comma\n */\nfunction consumeValue(scanner, inArgument) {\n const result = [];\n let token;\n let args;\n while (readable(scanner)) {\n token = peek(scanner);\n if (isValue(token)) {\n scanner.pos++;\n if (isLiteral(token) && (args = consumeArguments(scanner))) {\n result.push({\n type: 'FunctionCall',\n name: token.value,\n arguments: args\n });\n }\n else {\n result.push(token);\n }\n }\n else if (isValueDelimiter(token) || (inArgument && isWhiteSpace(token))) {\n scanner.pos++;\n }\n else {\n break;\n }\n }\n return result.length\n ? { type: 'CSSValue', value: result }\n : void 0;\n}\nfunction consumeArguments(scanner) {\n const start = scanner.pos;\n if (consume(scanner, isOpenBracket)) {\n const args = [];\n let value;\n while (readable(scanner) && !consume(scanner, isCloseBracket)) {\n if (value = consumeValue(scanner, true)) {\n args.push(value);\n }\n else if (!consume(scanner, isWhiteSpace) && !consume(scanner, isArgumentDelimiter)) {\n throw error(scanner, 'Unexpected token');\n }\n }\n scanner.start = start;\n return args;\n }\n}\nfunction isLiteral(token) {\n return token && token.type === 'Literal';\n}\nfunction isBracket(token, open) {\n return token && token.type === 'Bracket' && (open == null || token.open === open);\n}\nfunction isOpenBracket(token) {\n return isBracket(token, true);\n}\nfunction isCloseBracket(token) {\n return isBracket(token, false);\n}\nfunction isWhiteSpace(token) {\n return token && token.type === 'WhiteSpace';\n}\nfunction isOperator(token, operator) {\n return token && token.type === 'Operator' && (!operator || token.operator === operator);\n}\nfunction isSiblingOperator(token) {\n return isOperator(token, OperatorType.Sibling);\n}\nfunction isArgumentDelimiter(token) {\n return isOperator(token, OperatorType.ArgumentDelimiter);\n}\nfunction isFragmentDelimiter(token) {\n return isArgumentDelimiter(token);\n}\nfunction isImportant(token) {\n return isOperator(token, OperatorType.Important);\n}\nfunction isValue(token) {\n return token.type === 'StringValue'\n || token.type === 'ColorValue'\n || token.type === 'NumberValue'\n || token.type === 'Literal'\n || token.type === 'Field'\n || token.type === 'CustomProperty';\n}\nfunction isValueDelimiter(token) {\n return isOperator(token, OperatorType.PropertyDelimiter)\n || isOperator(token, OperatorType.ValueDelimiter);\n}\nfunction isFunctionStart(scanner) {\n const t1 = scanner.tokens[scanner.pos];\n const t2 = scanner.tokens[scanner.pos + 1];\n return t1 && t2 && isLiteral(t1) && t2.type === 'Bracket';\n}\n\n/**\n * Parses given abbreviation into property set\n */\nfunction parse(abbr, options) {\n try {\n const tokens = typeof abbr === 'string' ? tokenize(abbr, options && options.value) : abbr;\n return parser(tokens, options);\n }\n catch (err) {\n if (err instanceof ScannerError && typeof abbr === 'string') {\n err.message += `\\n${abbr}\\n${'-'.repeat(err.pos)}^`;\n }\n throw err;\n }\n}\n\nexport { OperatorType, parse as default, getToken, parser, tokenize };\n//# sourceMappingURL=index.js.map\n", null, null, null, null, null, "{\n\t\"common\": [\"lorem\", \"ipsum\", \"dolor\", \"sit\", \"amet\", \"consectetur\", \"adipisicing\", \"elit\"],\n\t\"words\": [\"exercitationem\", \"perferendis\", \"perspiciatis\", \"laborum\", \"eveniet\",\n\t\t\"sunt\", \"iure\", \"nam\", \"nobis\", \"eum\", \"cum\", \"officiis\", \"excepturi\",\n\t\t\"odio\", \"consectetur\", \"quasi\", \"aut\", \"quisquam\", \"vel\", \"eligendi\",\n\t\t\"itaque\", \"non\", \"odit\", \"tempore\", \"quaerat\", \"dignissimos\",\n\t\t\"facilis\", \"neque\", \"nihil\", \"expedita\", \"vitae\", \"vero\", \"ipsum\",\n\t\t\"nisi\", \"animi\", \"cumque\", \"pariatur\", \"velit\", \"modi\", \"natus\",\n\t\t\"iusto\", \"eaque\", \"sequi\", \"illo\", \"sed\", \"ex\", \"et\", \"voluptatibus\",\n\t\t\"tempora\", \"veritatis\", \"ratione\", \"assumenda\", \"incidunt\", \"nostrum\",\n\t\t\"placeat\", \"aliquid\", \"fuga\", \"provident\", \"praesentium\", \"rem\",\n\t\t\"necessitatibus\", \"suscipit\", \"adipisci\", \"quidem\", \"possimus\",\n\t\t\"voluptas\", \"debitis\", \"sint\", \"accusantium\", \"unde\", \"sapiente\",\n\t\t\"voluptate\", \"qui\", \"aspernatur\", \"laudantium\", \"soluta\", \"amet\",\n\t\t\"quo\", \"aliquam\", \"saepe\", \"culpa\", \"libero\", \"ipsa\", \"dicta\",\n\t\t\"reiciendis\", \"nesciunt\", \"doloribus\", \"autem\", \"impedit\", \"minima\",\n\t\t\"maiores\", \"repudiandae\", \"ipsam\", \"obcaecati\", \"ullam\", \"enim\",\n\t\t\"totam\", \"delectus\", \"ducimus\", \"quis\", \"voluptates\", \"dolores\",\n\t\t\"molestiae\", \"harum\", \"dolorem\", \"quia\", \"voluptatem\", \"molestias\",\n\t\t\"magni\", \"distinctio\", \"omnis\", \"illum\", \"dolorum\", \"voluptatum\", \"ea\",\n\t\t\"quas\", \"quam\", \"corporis\", \"quae\", \"blanditiis\", \"atque\", \"deserunt\",\n\t\t\"laboriosam\", \"earum\", \"consequuntur\", \"hic\", \"cupiditate\",\n\t\t\"quibusdam\", \"accusamus\", \"ut\", \"rerum\", \"error\", \"minus\", \"eius\",\n\t\t\"ab\", \"ad\", \"nemo\", \"fugit\", \"officia\", \"at\", \"in\", \"id\", \"quos\",\n\t\t\"reprehenderit\", \"numquam\", \"iste\", \"fugiat\", \"sit\", \"inventore\",\n\t\t\"beatae\", \"repellendus\", \"magnam\", \"recusandae\", \"quod\", \"explicabo\",\n\t\t\"doloremque\", \"aperiam\", \"consequatur\", \"asperiores\", \"commodi\",\n\t\t\"optio\", \"dolor\", \"labore\", \"temporibus\", \"repellat\", \"veniam\",\n\t\t\"architecto\", \"est\", \"esse\", \"mollitia\", \"nulla\", \"a\", \"similique\",\n\t\t\"eos\", \"alias\", \"dolore\", \"tenetur\", \"deleniti\", \"porro\", \"facere\",\n\t\t\"maxime\", \"corrupti\"]\n}\n", "{\n\t\"common\": [\"далеко-далеко\", \"за\", \"словесными\", \"горами\", \"в стране\", \"гласных\", \"и согласных\", \"живут\", \"рыбные\", \"тексты\"],\n\t\"words\": [\"вдали\", \"от всех\", \"они\", \"буквенных\", \"домах\", \"на берегу\", \"семантика\",\n\t\t\"большого\", \"языкового\", \"океана\", \"маленький\", \"ручеек\", \"даль\",\n\t\t\"журчит\", \"по всей\", \"обеспечивает\", \"ее\",\"всеми\", \"необходимыми\",\n\t\t\"правилами\", \"эта\", \"парадигматическая\", \"страна\", \"которой\", \"жаренные\",\n\t\t\"предложения\", \"залетают\", \"прямо\", \"рот\", \"даже\", \"всемогущая\",\n\t\t\"пунктуация\", \"не\", \"имеет\", \"власти\", \"над\", \"рыбными\", \"текстами\",\n\t\t\"ведущими\", \"безорфографичный\", \"образ\", \"жизни\", \"однажды\", \"одна\",\n\t\t\"маленькая\", \"строчка\",\"рыбного\", \"текста\", \"имени\", \"lorem\", \"ipsum\",\n\t\t\"решила\", \"выйти\", \"большой\", \"мир\", \"грамматики\", \"великий\", \"оксмокс\",\n\t\t\"предупреждал\", \"о\", \"злых\", \"запятых\", \"диких\", \"знаках\", \"вопроса\",\n\t\t\"коварных\", \"точках\", \"запятой\", \"но\", \"текст\", \"дал\", \"сбить\",\n\t\t\"себя\", \"толку\", \"он\", \"собрал\", \"семь\", \"своих\", \"заглавных\", \"букв\",\n\t\t\"подпоясал\", \"инициал\", \"за\", \"пояс\", \"пустился\", \"дорогу\",\n\t\t\"взобравшись\", \"первую\", \"вершину\", \"курсивных\", \"гор\", \"бросил\",\n\t\t\"последний\", \"взгляд\", \"назад\", \"силуэт\", \"своего\", \"родного\", \"города\",\n\t\t\"буквоград\", \"заголовок\", \"деревни\", \"алфавит\", \"подзаголовок\", \"своего\",\n\t\t\"переулка\", \"грустный\", \"реторический\", \"вопрос\", \"скатился\", \"его\",\n\t\t\"щеке\", \"продолжил\", \"свой\", \"путь\", \"дороге\", \"встретил\", \"рукопись\",\n\t\t\"она\", \"предупредила\", \"моей\", \"все\", \"переписывается\", \"несколько\",\n\t\t\"раз\", \"единственное\", \"что\", \"меня\", \"осталось\", \"это\", \"приставка\",\n\t\t\"возвращайся\", \"ты\", \"лучше\", \"свою\", \"безопасную\", \"страну\", \"послушавшись\",\n\t\t\"рукописи\", \"наш\", \"продолжил\", \"свой\", \"путь\", \"вскоре\", \"ему\",\n\t\t\"повстречался\", \"коварный\", \"составитель\", \"рекламных\", \"текстов\",\n\t\t\"напоивший\", \"языком\", \"речью\", \"заманивший\", \"свое\", \"агентство\",\n\t\t\"которое\", \"использовало\", \"снова\", \"снова\", \"своих\", \"проектах\",\n\t\t\"если\", \"переписали\", \"то\", \"живет\", \"там\", \"до\", \"сих\", \"пор\"]\n}\n", "{\n\t\"common\": [\"mujer\", \"uno\", \"dolor\", \"más\", \"de\", \"poder\", \"mismo\", \"si\"],\n\t\"words\": [\"ejercicio\", \"preferencia\", \"perspicacia\", \"laboral\", \"paño\",\n\t\t\"suntuoso\", \"molde\", \"namibia\", \"planeador\", \"mirar\", \"demás\", \"oficinista\", \"excepción\",\n\t\t\"odio\", \"consecuencia\", \"casi\", \"auto\", \"chicharra\", \"velo\", \"elixir\",\n\t\t\"ataque\", \"no\", \"odio\", \"temporal\", \"cuórum\", \"dignísimo\",\n\t\t\"facilismo\", \"letra\", \"nihilista\", \"expedición\", \"alma\", \"alveolar\", \"aparte\",\n\t\t\"león\", \"animal\", \"como\", \"paria\", \"belleza\", \"modo\", \"natividad\",\n\t\t\"justo\", \"ataque\", \"séquito\", \"pillo\", \"sed\", \"ex\", \"y\", \"voluminoso\",\n\t\t\"temporalidad\", \"verdades\", \"racional\", \"asunción\", \"incidente\", \"marejada\",\n\t\t\"placenta\", \"amanecer\", \"fuga\", \"previsor\", \"presentación\", \"lejos\",\n\t\t\"necesariamente\", \"sospechoso\", \"adiposidad\", \"quindío\", \"pócima\",\n\t\t\"voluble\", \"débito\", \"sintió\", \"accesorio\", \"falda\", \"sapiencia\",\n\t\t\"volutas\", \"queso\", \"permacultura\", \"laudo\", \"soluciones\", \"entero\",\n\t\t\"pan\", \"litro\", \"tonelada\", \"culpa\", \"libertario\", \"mosca\", \"dictado\",\n\t\t\"reincidente\", \"nascimiento\", \"dolor\", \"escolar\", \"impedimento\", \"mínima\",\n\t\t\"mayores\", \"repugnante\", \"dulce\", \"obcecado\", \"montaña\", \"enigma\",\n\t\t\"total\", \"deletéreo\", \"décima\", \"cábala\", \"fotografía\", \"dolores\",\n\t\t\"molesto\", \"olvido\", \"paciencia\", \"resiliencia\", \"voluntad\", \"molestias\",\n\t\t\"magnífico\", \"distinción\", \"ovni\", \"marejada\", \"cerro\", \"torre\", \"y\",\n\t\t\"abogada\", \"manantial\", \"corporal\", \"agua\", \"crepúsculo\", \"ataque\", \"desierto\",\n\t\t\"laboriosamente\", \"angustia\", \"afortunado\", \"alma\", \"encefalograma\",\n\t\t\"materialidad\", \"cosas\", \"o\", \"renuncia\", \"error\", \"menos\", \"conejo\",\n\t\t\"abadía\", \"analfabeto\", \"remo\", \"fugacidad\", \"oficio\", \"en\", \"almácigo\", \"vos\", \"pan\",\n\t\t\"represión\", \"números\", \"triste\", \"refugiado\", \"trote\", \"inventor\",\n\t\t\"corchea\", \"repelente\", \"magma\", \"recusado\", \"patrón\", \"explícito\",\n\t\t\"paloma\", \"síndrome\", \"inmune\", \"autoinmune\", \"comodidad\",\n\t\t\"ley\", \"vietnamita\", \"demonio\", \"tasmania\", \"repeler\", \"apéndice\",\n\t\t\"arquitecto\", \"columna\", \"yugo\", \"computador\", \"mula\", \"a\", \"propósito\",\n\t\t\"fantasía\", \"alias\", \"rayo\", \"tenedor\", \"deleznable\", \"ventana\", \"cara\",\n\t\t\"anemia\", \"corrupto\"]\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "{\n\t\"a\": \"a[href]\",\n\t\"a:blank\": \"a[href='http://${0}' target='_blank' rel='noopener noreferrer']\",\n\t\"a:link\": \"a[href='http://${0}']\",\n\t\"a:mail\": \"a[href='mailto:${0}']\",\n\t\"a:tel\": \"a[href='tel:+${0}']\",\n\t\"abbr\": \"abbr[title]\",\n\t\"acr|acronym\": \"acronym[title]\",\n\t\"base\": \"base[href]/\",\n\t\"basefont\": \"basefont/\",\n\t\"br\": \"br/\",\n\t\"frame\": \"frame/\",\n\t\"hr\": \"hr/\",\n\t\"bdo\": \"bdo[dir]\",\n\t\"bdo:r\": \"bdo[dir=rtl]\",\n\t\"bdo:l\": \"bdo[dir=ltr]\",\n\t\"col\": \"col/\",\n\t\"link\": \"link[rel=stylesheet href]/\",\n\t\"link:css\": \"link[href='${1:style}.css']\",\n\t\"link:print\": \"link[href='${1:print}.css' media=print]\",\n\t\"link:favicon\": \"link[rel='shortcut icon' type=image/x-icon href='${1:favicon.ico}']\",\n\t\"link:mf|link:manifest\": \"link[rel='manifest' href='${1:manifest.json}']\",\n\t\"link:touch\": \"link[rel=apple-touch-icon href='${1:favicon.png}']\",\n\t\"link:rss\": \"link[rel=alternate type=application/rss+xml title=RSS href='${1:rss.xml}']\",\n\t\"link:atom\": \"link[rel=alternate type=application/atom+xml title=Atom href='${1:atom.xml}']\",\n\t\"link:im|link:import\": \"link[rel=import href='${1:component}.html']\",\n\t\"meta\": \"meta/\",\n\t\"meta:utf\": \"meta[http-equiv=Content-Type content='text/html;charset=UTF-8']\",\n\t\"meta:vp\": \"meta[name=viewport content='width=${1:device-width}, initial-scale=${2:1.0}']\",\n\t\"meta:compat\": \"meta[http-equiv=X-UA-Compatible content='${1:IE=7}']\",\n\t\"meta:edge\": \"meta:compat[content='${1:ie=edge}']\",\n\t\"meta:redirect\": \"meta[http-equiv=refresh content='0; url=${1:http://example.com}']\",\n\t\"meta:refresh\": \"meta[http-equiv=refresh content='${1:5}']\",\n\t\"meta:kw\": \"meta[name=keywords content]\",\n\t\"meta:desc\": \"meta[name=description content]\",\n\t\"style\": \"style\",\n\t\"script\": \"script\",\n\t\"script:src\": \"script[src]\",\n\t\"script:module\": \"script[type=module src]\",\n\t\"img\": \"img[src alt]/\",\n\t\"img:s|img:srcset\": \"img[srcset src alt]\",\n\t\"img:z|img:sizes\": \"img[sizes srcset src alt]\",\n\t\"picture\": \"picture\",\n\t\"src|source\": \"source/\",\n\t\"src:sc|source:src\": \"source[src type]\",\n\t\"src:s|source:srcset\": \"source[srcset]\",\n\t\"src:t|source:type\": \"source[srcset type='${1:image/}']\",\n\t\"src:z|source:sizes\": \"source[sizes srcset]\",\n\t\"src:m|source:media\": \"source[media='(${1:min-width: })' srcset]\",\n\t\"src:mt|source:media:type\": \"source:media[type='${2:image/}']\",\n\t\"src:mz|source:media:sizes\": \"source:media[sizes srcset]\",\n\t\"src:zt|source:sizes:type\": \"source[sizes srcset type='${1:image/}']\",\n\t\"iframe\": \"iframe[src frameborder=0]\",\n\t\"embed\": \"embed[src type]/\",\n\t\"object\": \"object[data type]\",\n\t\"param\": \"param[name value]/\",\n\t\"map\": \"map[name]\",\n\t\"area\": \"area[shape coords href alt]/\",\n\t\"area:d\": \"area[shape=default]\",\n\t\"area:c\": \"area[shape=circle]\",\n\t\"area:r\": \"area[shape=rect]\",\n\t\"area:p\": \"area[shape=poly]\",\n\t\"form\": \"form[action]\",\n\t\"form:get\": \"form[method=get]\",\n\t\"form:post\": \"form[method=post]\",\n\t\"label\": \"label[for]\",\n\t\"input\": \"input[type=${1:text}]/\",\n\t\"inp\": \"input[name=${1} id=${1}]\",\n\t\"input:h|input:hidden\": \"input[type=hidden name]\",\n\t\"input:t|input:text\": \"inp[type=text]\",\n\t\"input:search\": \"inp[type=search]\",\n\t\"input:email\": \"inp[type=email]\",\n\t\"input:url\": \"inp[type=url]\",\n\t\"input:p|input:password\": \"inp[type=password]\",\n\t\"input:datetime\": \"inp[type=datetime]\",\n\t\"input:date\": \"inp[type=date]\",\n\t\"input:datetime-local\": \"inp[type=datetime-local]\",\n\t\"input:month\": \"inp[type=month]\",\n\t\"input:week\": \"inp[type=week]\",\n\t\"input:time\": \"inp[type=time]\",\n\t\"input:tel\": \"inp[type=tel]\",\n\t\"input:number\": \"inp[type=number]\",\n\t\"input:color\": \"inp[type=color]\",\n\t\"input:c|input:checkbox\": \"inp[type=checkbox]\",\n\t\"input:r|input:radio\": \"inp[type=radio]\",\n\t\"input:range\": \"inp[type=range]\",\n\t\"input:f|input:file\": \"inp[type=file]\",\n\t\"input:s|input:submit\": \"input[type=submit value]\",\n\t\"input:i|input:image\": \"input[type=image src alt]\",\n\t\"input:b|input:btn|input:button\": \"input[type=button value]\",\n\t\"input:reset\": \"input:button[type=reset]\",\n\t\"isindex\": \"isindex/\",\n\t\"select\": \"select[name=${1} id=${1}]\",\n\t\"select:d|select:disabled\": \"select[disabled.]\",\n\t\"opt|option\": \"option[value]\",\n\t\"textarea\": \"textarea[name=${1} id=${1}]\",\n\t\"tarea:c|textarea:cols\":\"textarea[name=${1} id=${1} cols=${2:30}]\",\n\t\"tarea:r|textarea:rows\":\"textarea[name=${1} id=${1} rows=${3:10}]\",\n\t\"tarea:cr|textarea:cols:rows\":\"textarea[name=${1} id=${1} cols=${2:30} rows=${3:10}]\",\n\t\"marquee\": \"marquee[behavior direction]\",\n\t\"menu:c|menu:context\": \"menu[type=context]\",\n\t\"menu:t|menu:toolbar\": \"menu[type=toolbar]\",\n\t\"video\": \"video[src]\",\n\t\"audio\": \"audio[src]\",\n\t\"html:xml\": \"html[xmlns=http://www.w3.org/1999/xhtml]\",\n\t\"keygen\": \"keygen/\",\n\t\"command\": \"command/\",\n\t\"btn:s|button:s|button:submit\" : \"button[type=submit]\",\n\t\"btn:r|button:r|button:reset\" : \"button[type=reset]\",\n\t\"btn:b|button:b|button:button\" : \"button[type=button]\",\n\t\"btn:d|button:d|button:disabled\" : \"button[disabled.]\",\n\t\"fst:d|fset:d|fieldset:d|fieldset:disabled\" : \"fieldset[disabled.]\",\n\n\t\"bq\": \"blockquote\",\n\t\"fig\": \"figure\",\n\t\"figc\": \"figcaption\",\n\t\"pic\": \"picture\",\n\t\"ifr\": \"iframe\",\n\t\"emb\": \"embed\",\n\t\"obj\": \"object\",\n\t\"cap\": \"caption\",\n\t\"colg\": \"colgroup\",\n\t\"fst\": \"fieldset\",\n\t\"btn\": \"button\",\n\t\"optg\": \"optgroup\",\n\t\"tarea\": \"textarea\",\n\t\"leg\": \"legend\",\n\t\"sect\": \"section\",\n\t\"art\": \"article\",\n\t\"hdr\": \"header\",\n\t\"ftr\": \"footer\",\n\t\"adr\": \"address\",\n\t\"dlg\": \"dialog\",\n\t\"str\": \"strong\",\n\t\"prog\": \"progress\",\n\t\"mn\": \"main\",\n\t\"tem\": \"template\",\n\t\"fset\": \"fieldset\",\n\t\"datal\": \"datalist\",\n\t\"kg\": \"keygen\",\n\t\"out\": \"output\",\n\t\"det\": \"details\",\n\t\"sum\": \"summary\",\n\t\"cmd\": \"command\",\n\t\"data\": \"data[value]\",\n\t\"meter\": \"meter[value]\",\n\t\"time\": \"time[datetime]\",\n\n\t\"ri:d|ri:dpr\": \"img:s\",\n\t\"ri:v|ri:viewport\": \"img:z\",\n\t\"ri:a|ri:art\": \"pic>src:m+img\",\n\t\"ri:t|ri:type\": \"pic>src:t+img\",\n\n\t\"!!!\": \"{<!DOCTYPE html>}\",\n\t\"doc\": \"html[lang=${lang}]>(head>meta[charset=${charset}]+meta:vp+title{${1:Document}})+body\",\n\t\"!|html:5\": \"!!!+doc\",\n\n\t\"c\": \"{<!-- ${0} -->}\",\n\t\"cc:ie\": \"{<!--[if IE]>${0}<![endif]-->}\",\n\t\"cc:noie\": \"{<!--[if !IE]><!-->${0}<!--<![endif]-->}\"\n}\n", "{\n\t\"@f\": \"@font-face {\\n\\tfont-family: ${1};\\n\\tsrc: url(${2});\\n}\",\n\t\"@ff\": \"@font-face {\\n\\tfont-family: '${1:FontName}';\\n\\tsrc: url('${2:FileName}.eot');\\n\\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'),\\n\\t\\t url('${2:FileName}.woff') format('woff'),\\n\\t\\t url('${2:FileName}.ttf') format('truetype'),\\n\\t\\t url('${2:FileName}.svg#${1:FontName}') format('svg');\\n\\tfont-style: ${3:normal};\\n\\tfont-weight: ${4:normal};\\n}\",\n\t\"@i|@import\": \"@import url(${0});\",\n\t\"@kf\": \"@keyframes ${1:identifier} {\\n\\t${2}\\n}\",\n\t\"@m|@media\": \"@media ${1:screen} {\\n\\t${0}\\n}\",\n\t\"ac\": \"align-content:start|end|flex-start|flex-end|center|space-between|space-around|stretch|space-evenly\",\n\t\"ai\": \"align-items:start|end|flex-start|flex-end|center|baseline|stretch\",\n\t\"anim\": \"animation:${1:name} ${2:duration} ${3:timing-function} ${4:delay} ${5:iteration-count} ${6:direction} ${7:fill-mode}\",\n\t\"animdel\": \"animation-delay:time\",\n\t\"animdir\": \"animation-direction:normal|reverse|alternate|alternate-reverse\",\n\t\"animdur\": \"animation-duration:${1:0}s\",\n\t\"animfm\": \"animation-fill-mode:both|forwards|backwards\",\n\t\"animic\": \"animation-iteration-count:1|infinite\",\n\t\"animn\": \"animation-name\",\n\t\"animps\": \"animation-play-state:running|paused\",\n\t\"animtf\": \"animation-timing-function:linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(${1:0.1}, ${2:0.7}, ${3:1.0}, ${3:0.1})\",\n\t\"ap\": \"appearance:none\",\n\t\"as\": \"align-self:start|end|auto|flex-start|flex-end|center|baseline|stretch\",\n\t\"b\": \"bottom\",\n\t\"bd\": \"border:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdb\": \"border-bottom:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdbc\": \"border-bottom-color:${1:#000}\",\n\t\"bdbi\": \"border-bottom-image:url(${0})\",\n\t\"bdbk\": \"border-break:close\",\n\t\"bdbli\": \"border-bottom-left-image:url(${0})|continue\",\n\t\"bdblrs\": \"border-bottom-left-radius\",\n\t\"bdbri\": \"border-bottom-right-image:url(${0})|continue\",\n\t\"bdbrrs\": \"border-bottom-right-radius\",\n\t\"bdbs\": \"border-bottom-style\",\n\t\"bdbw\": \"border-bottom-width\",\n\t\"bdc\": \"border-color:${1:#000}\",\n\t\"bdci\": \"border-corner-image:url(${0})|continue\",\n\t\"bdcl\": \"border-collapse:collapse|separate\",\n\t\"bdf\": \"border-fit:repeat|clip|scale|stretch|overwrite|overflow|space\",\n\t\"bdi\": \"border-image:url(${0})\",\n\t\"bdl\": \"border-left:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdlc\": \"border-left-color:${1:#000}\",\n\t\"bdlen\": \"border-length\",\n\t\"bdli\": \"border-left-image:url(${0})\",\n\t\"bdls\": \"border-left-style\",\n\t\"bdlw\": \"border-left-width\",\n\t\"bdr\": \"border-right:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdrc\": \"border-right-color:${1:#000}\",\n\t\"bdri\": \"border-right-image:url(${0})\",\n\t\"bdrs\": \"border-radius\",\n\t\"bdrst\": \"border-right-style\",\n\t\"bdrw\": \"border-right-width\",\n\t\"bds\": \"border-style:none|hidden|dotted|dashed|solid|double|dot-dash|dot-dot-dash|wave|groove|ridge|inset|outset\",\n\t\"bdsp\": \"border-spacing\",\n\t\"bdt\": \"border-top:${1:1px} ${2:solid} ${3:#000}\",\n\t\"bdtc\": \"border-top-color:${1:#000}\",\n\t\"bdti\": \"border-top-image:url(${0})\",\n\t\"bdtli\": \"border-top-left-image:url(${0})|continue\",\n\t\"bdtlrs\": \"border-top-left-radius\",\n\t\"bdtri\": \"border-top-right-image:url(${0})|continue\",\n\t\"bdtrrs\": \"border-top-right-radius\",\n\t\"bdts\": \"border-top-style\",\n\t\"bdtw\": \"border-top-width\",\n\t\"bdw\": \"border-width\",\n \"bbs\": \"border-block-start\",\n \"bbe\": \"border-block-end\",\n \"bis\": \"border-inline-start\",\n \"bie\": \"border-inline-end\",\n\t\"bfv\": \"backface-visibility:hidden|visible\",\n\t\"bg\": \"background:${1:#000}\",\n\t\"bg:n\": \"background: none\",\n\t\"bga\": \"background-attachment:fixed|scroll\",\n\t\"bgbk\": \"background-break:bounding-box|each-box|continuous\",\n\t\"bgc\": \"background-color:${1:#fff}\",\n\t\"bgcp\": \"background-clip:padding-box|border-box|content-box|no-clip\",\n\t\"bgi\": \"background-image:url(${0})\",\n\t\"bgo\": \"background-origin:padding-box|border-box|content-box\",\n\t\"bgp\": \"background-position:${1:0} ${2:0}\",\n\t\"bgpx\": \"background-position-x\",\n\t\"bgpy\": \"background-position-y\",\n\t\"bgr\": \"background-repeat:no-repeat|repeat-x|repeat-y|space|round\",\n\t\"bgsz\": \"background-size:contain|cover\",\n \"bs\": \"block-size\",\n\t\"bxsh\": \"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:#000}|none\",\n\t\"bxsz\": \"box-sizing:border-box|content-box|border-box\",\n\t\"c\": \"color:${1:#000}\",\n \"cg\": \"column-gap\",\n\t\"cr\": \"color:rgb(${1:0}, ${2:0}, ${3:0})\",\n\t\"cra\": \"color:rgba(${1:0}, ${2:0}, ${3:0}, ${4:.5})\",\n\t\"cl\": \"clear:both|left|right|none\",\n\t\"cm\": \"/* ${0} */\",\n\t\"cnt\": \"content:'${0}'|normal|open-quote|no-open-quote|close-quote|no-close-quote|attr(${0})|counter(${0})|counters(${0})\",\n\t\"coi\": \"counter-increment\",\n\t\"colm\": \"columns\",\n\t\"colmc\": \"column-count\",\n\t\"colmf\": \"column-fill\",\n\t\"colmg\": \"column-gap\",\n\t\"colmr\": \"column-rule\",\n\t\"colmrc\": \"column-rule-color\",\n\t\"colmrs\": \"column-rule-style\",\n\t\"colmrw\": \"column-rule-width\",\n\t\"colms\": \"column-span\",\n\t\"colmw\": \"column-width\",\n\t\"cor\": \"counter-reset\",\n\t\"cp\": \"clip:auto|rect(${1:top} ${2:right} ${3:bottom} ${4:left})\",\n\t\"cps\": \"caption-side:top|bottom\",\n\t\"cur\": \"cursor:pointer|auto|default|crosshair|hand|help|move|pointer|text\",\n\t\"d\": \"display:block|none|flex|inline-flex|inline|inline-block|grid|inline-grid|subgrid|list-item|run-in|contents|table|inline-table|table-caption|table-column|table-column-group|table-header-group|table-footer-group|table-row|table-row-group|table-cell|ruby|ruby-base|ruby-base-group|ruby-text|ruby-text-group\",\n\t\"ec\": \"empty-cells:show|hide\",\n\t\"f\": \"font:${1:1em} ${2:sans-serif}\",\n\t\"fd\": \"font-display:auto|block|swap|fallback|optional\",\n\t\"fef\": \"font-effect:none|engrave|emboss|outline\",\n\t\"fem\": \"font-emphasize\",\n\t\"femp\": \"font-emphasize-position:before|after\",\n\t\"fems\": \"font-emphasize-style:none|accent|dot|circle|disc\",\n\t\"ff\": \"font-family:serif|sans-serif|cursive|fantasy|monospace\",\n\t\"fft\": \"font-family:\\\"Times New Roman\\\", Times, Baskerville, Georgia, serif\",\n\t\"ffa\": \"font-family:Arial, \\\"Helvetica Neue\\\", Helvetica, sans-serif\",\n\t\"ffv\": \"font-family:Verdana, Geneva, sans-serif\",\n\t\"fl\": \"float:left|right|none\",\n\t\"fs\": \"font-style:italic|normal|oblique\",\n\t\"fsm\": \"font-smoothing:antialiased|subpixel-antialiased|none\",\n\t\"fst\": \"font-stretch:normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded\",\n\t\"fv\": \"font-variant:normal|small-caps\",\n\t\"fvs\": \"font-variation-settings:normal|inherit|initial|unset\",\n\t\"fw\": \"font-weight:normal|bold|bolder|lighter\",\n\t\"fx\": \"flex\",\n\t\"fxb\": \"flex-basis:fill|max-content|min-content|fit-content|content\",\n\t\"fxd\": \"flex-direction:row|row-reverse|column|column-reverse\",\n\t\"fxf\": \"flex-flow\",\n\t\"fxg\": \"flex-grow\",\n\t\"fxsh\": \"flex-shrink\",\n\t\"fxw\": \"flex-wrap:nowrap|wrap|wrap-reverse\",\n\t\"fsz\": \"font-size\",\n\t\"fsza\": \"font-size-adjust\",\n\t\"g\": \"gap\",\n\t\"gtc\": \"grid-template-columns:repeat(${0})|minmax()\",\n\t\"gtr\": \"grid-template-rows:repeat(${0})|minmax()\",\n\t\"gta\": \"grid-template-areas\",\n\t\"gt\": \"grid-template\",\n\t\"gg\": \"grid-gap\",\n\t\"gcg\": \"grid-column-gap\",\n\t\"grg\": \"grid-row-gap\",\n\t\"gac\": \"grid-auto-columns:auto|minmax()\",\n\t\"gar\": \"grid-auto-rows:auto|minmax()\",\n\t\"gaf\": \"grid-auto-flow:row|column|dense|inherit|initial|unset\",\n\t\"gd\": \"grid\",\n\t\"gc\": \"grid-column\",\n\t\"gcs\": \"grid-column-start\",\n\t\"gce\": \"grid-column-end\",\n\t\"gr\": \"grid-row\",\n\t\"grs\": \"grid-row-start\",\n\t\"gre\": \"grid-row-end\",\n\t\"ga\": \"grid-area\",\n\t\"h\": \"height\",\n \"is\": \"inline-size\",\n\t\"jc\": \"justify-content:start|end|stretch|flex-start|flex-end|center|space-between|space-around|space-evenly\",\n\t\"ji\": \"justify-items:start|end|center|stretch\",\n\t\"js\": \"justify-self:start|end|center|stretch\",\n\t\"l\": \"left\",\n\t\"lg\": \"background-image:linear-gradient(${1})\",\n\t\"lh\": \"line-height\",\n\t\"lis\": \"list-style\",\n\t\"lisi\": \"list-style-image\",\n\t\"lisp\": \"list-style-position:inside|outside\",\n\t\"list\": \"list-style-type:disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman\",\n\t\"lts\": \"letter-spacing:normal\",\n\t\"m\": \"margin\",\n\t\"mah\": \"max-height\",\n\t\"mar\": \"max-resolution\",\n\t\"maw\": \"max-width\",\n\t\"mb\": \"margin-bottom\",\n\t\"mih\": \"min-height\",\n\t\"mir\": \"min-resolution\",\n\t\"miw\": \"min-width\",\n\t\"ml\": \"margin-left\",\n\t\"mr\": \"margin-right\",\n\t\"mt\": \"margin-top\",\n \"mbs\": \"margin-block-start\",\n \"mbe\": \"margin-block-end\",\n \"mis\": \"margin-inline-start\",\n \"mie\": \"margin-inline-end\",\n\t\"ol\": \"outline\",\n\t\"olc\": \"outline-color:${1:#000}|invert\",\n\t\"olo\": \"outline-offset\",\n\t\"ols\": \"outline-style:none|dotted|dashed|solid|double|groove|ridge|inset|outset\",\n\t\"olw\": \"outline-width:thin|medium|thick\",\n\t\"op|opa\": \"opacity\",\n\t\"ord\": \"order\",\n\t\"ori\": \"orientation:landscape|portrait\",\n\t\"orp\": \"orphans\",\n\t\"ov\": \"overflow:hidden|visible|hidden|scroll|auto\",\n\t\"ovs\": \"overflow-style:scrollbar|auto|scrollbar|panner|move|marquee\",\n\t\"ovx\": \"overflow-x:hidden|visible|hidden|scroll|auto\",\n\t\"ovy\": \"overflow-y:hidden|visible|hidden|scroll|auto\",\n\t\"p\": \"padding\",\n\t\"pb\": \"padding-bottom\",\n\t\"pgba\": \"page-break-after:auto|always|left|right\",\n\t\"pgbb\": \"page-break-before:auto|always|left|right\",\n\t\"pgbi\": \"page-break-inside:auto|avoid\",\n\t\"pl\": \"padding-left\",\n\t\"pos\": \"position:relative|absolute|relative|fixed|static\",\n\t\"pr\": \"padding-right\",\n\t\"pt\": \"padding-top\",\n \"pbs\": \"padding-block-start\",\n \"pbe\": \"padding-block-end\",\n \"pis\": \"padding-inline-start\",\n \"pie\": \"padding-inline-end\",\n \"spbs\": \"scroll-padding-block-start\",\n \"spbe\": \"scroll-padding-block-end\",\n \"spis\": \"scroll-padding-inline-start\",\n \"spie\": \"scroll-padding-inline-end\",\n\t\"q\": \"quotes\",\n\t\"qen\": \"quotes:'\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019'\",\n\t\"qru\": \"quotes:'\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C'\",\n\t\"r\": \"right\",\n \"rg\": \"row-gap\",\n\t\"rsz\": \"resize:none|both|horizontal|vertical\",\n\t\"t\": \"top\",\n\t\"ta\": \"text-align:left|center|right|justify\",\n\t\"tal\": \"text-align-last:left|center|right\",\n\t\"tbl\": \"table-layout:fixed\",\n\t\"td\": \"text-decoration:none|underline|overline|line-through\",\n\t\"te\": \"text-emphasis:none|accent|dot|circle|disc|before|after\",\n\t\"th\": \"text-height:auto|font-size|text-size|max-size\",\n\t\"ti\": \"text-indent\",\n\t\"tj\": \"text-justify:auto|inter-word|inter-ideograph|inter-cluster|distribute|kashida|tibetan\",\n\t\"to\": \"text-outline:${1:0} ${2:0} ${3:#000}\",\n\t\"tov\": \"text-overflow:ellipsis|clip\",\n\t\"tr\": \"text-replace\",\n\t\"trf\": \"transform:${1}|skewX(${1:angle})|skewY(${1:angle})|scale(${1:x}, ${2:y})|scaleX(${1:x})|scaleY(${1:y})|scaleZ(${1:z})|scale3d(${1:x}, ${2:y}, ${3:z})|rotate(${1:angle})|rotateX(${1:angle})|rotateY(${1:angle})|rotateZ(${1:angle})|translate(${1:x}, ${2:y})|translateX(${1:x})|translateY(${1:y})|translateZ(${1:z})|translate3d(${1:tx}, ${2:ty}, ${3:tz})\",\n\t\"trfo\": \"transform-origin\",\n\t\"trfs\": \"transform-style:preserve-3d\",\n\t\"trs\": \"transition:${1:prop} ${2:time}\",\n\t\"trsde\": \"transition-delay:${1:time}\",\n\t\"trsdu\": \"transition-duration:${1:time}\",\n\t\"trsp\": \"transition-property:${1:prop}\",\n\t\"trstf\": \"transition-timing-function:${1:fn}\",\n\t\"tsh\": \"text-shadow:${1:hoff} ${2:voff} ${3:blur} ${4:#000}\",\n\t\"tt\": \"text-transform:uppercase|lowercase|capitalize|none\",\n\t\"tw\": \"text-wrap:none|normal|unrestricted|suppress\",\n\t\"us\": \"user-select:none\",\n\t\"v\": \"visibility:hidden|visible|collapse\",\n\t\"va\": \"vertical-align:top|super|text-top|middle|baseline|bottom|text-bottom|sub\",\n\t\"w|wid\": \"width\",\n\t\"whs\": \"white-space:nowrap|pre|pre-wrap|pre-line|normal\",\n\t\"whsc\": \"white-space-collapse:normal|keep-all|loose|break-strict|break-all\",\n\t\"wido\": \"widows\",\n\t\"wm\": \"writing-mode:lr-tb|lr-tb|lr-bt|rl-tb|rl-bt|tb-rl|tb-lr|bt-lr|bt-rl\",\n\t\"wob\": \"word-break:normal|keep-all|break-all\",\n\t\"wos\": \"word-spacing\",\n\t\"wow\": \"word-wrap:none|unrestricted|suppress|break-word|normal\",\n\t\"z\": \"z-index\",\n\t\"zom\": \"zoom:1\"\n}\n", "{\n \"tm|tmatch\": \"xsl:template[match mode]\",\n \"tn|tname\": \"xsl:template[name]\",\n \"call\": \"xsl:call-template[name]\",\n \"ap\": \"xsl:apply-templates[select mode]\",\n \"api\": \"xsl:apply-imports\",\n \"imp\": \"xsl:import[href]\",\n \"inc\": \"xsl:include[href]\",\n \"ch\": \"xsl:choose\",\n \"wh|xsl:when\": \"xsl:when[test]\",\n \"ot\": \"xsl:otherwise\",\n \"if\": \"xsl:if[test]\",\n \"par\": \"xsl:param[name]\",\n \"pare\": \"xsl:param[name select]\",\n \"var\": \"xsl:variable[name]\",\n \"vare\": \"xsl:variable[name select]\",\n \"wp\": \"xsl:with-param[name select]\",\n \"key\": \"xsl:key[name match use]\",\n \"elem\": \"xsl:element[name]\",\n \"attr\": \"xsl:attribute[name]\",\n \"attrs\": \"xsl:attribute-set[name]\",\n \"cp\": \"xsl:copy[select]\",\n \"co\": \"xsl:copy-of[select]\",\n \"val\": \"xsl:value-of[select]\",\n \"for|each\": \"xsl:for-each[select]\",\n \"tex\": \"xsl:text\",\n \"com\": \"xsl:comment\",\n \"msg\": \"xsl:message[terminate=no]\",\n \"fall\": \"xsl:fallback\",\n \"num\": \"xsl:number[value]\",\n \"nam\": \"namespace-alias[stylesheet-prefix result-prefix]\",\n \"pres\": \"xsl:preserve-space[elements]\",\n \"strip\": \"xsl:strip-space[elements]\",\n \"proc\": \"xsl:processing-instruction[name]\",\n \"sort\": \"xsl:sort[select order]\",\n \"choose\": \"xsl:choose>xsl:when+xsl:otherwise\",\n \"xsl\": \"!!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{\\n|}\",\n \"!!!\": \"{<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>}\"\n}", "{\n\t\"!!!\": \"{doctype html}\"\n}\n", "{\n\t\"lang\": \"en\",\n\t\"locale\": \"en-US\",\n\t\"charset\": \"UTF-8\",\n\t\"indentation\": \"\\t\",\n\t\"newline\": \"\\n\"\n}\n", null, null, null, null, null, null, null, null, null, "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { activateEmmetExtension } from '../emmetCommon';\n\nexport function activate(context: vscode.ExtensionContext) {\n\tactivateEmmetExtension(context);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { DefaultCompletionItemProvider } from './defaultCompletionProvider';\nimport { expandEmmetAbbreviation, wrapWithAbbreviation } from './abbreviationActions';\nimport { removeTag } from './removeTag';\nimport { updateTag } from './updateTag';\nimport { matchTag } from './matchTag';\nimport { balanceOut, balanceIn } from './balance';\nimport { splitJoinTag } from './splitJoinTag';\nimport { mergeLines } from './mergeLines';\nimport { toggleComment } from './toggleComment';\nimport { fetchEditPoint } from './editPoint';\nimport { fetchSelectItem } from './selectItem';\nimport { evaluateMathExpression } from './evaluateMathExpression';\nimport { incrementDecrement } from './incrementDecrement';\nimport { LANGUAGE_MODES, getMappingForIncludedLanguages, updateEmmetExtensionsPath, migrateEmmetExtensionsPath, getPathBaseName, getSyntaxes, getEmmetMode } from './util';\nimport { reflectCssValue } from './reflectCssValue';\nimport { addFileToParseCache, clearParseCache, removeFileFromParseCache } from './parseDocument';\n\nexport function activateEmmetExtension(context: vscode.ExtensionContext) {\n\tmigrateEmmetExtensionsPath();\n\trefreshCompletionProviders(context);\n\tupdateEmmetExtensionsPath();\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.wrapWithAbbreviation', (args) => {\n\t\twrapWithAbbreviation(args);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('emmet.expandAbbreviation', (args) => {\n\t\texpandEmmetAbbreviation(args);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.removeTag', () => {\n\t\treturn removeTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.updateTag', (inputTag) => {\n\t\tif (inputTag && typeof inputTag === 'string') {\n\t\t\treturn updateTag(inputTag);\n\t\t}\n\t\treturn updateTag(undefined);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.matchTag', () => {\n\t\tmatchTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.balanceOut', () => {\n\t\tbalanceOut();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.balanceIn', () => {\n\t\tbalanceIn();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.splitJoinTag', () => {\n\t\treturn splitJoinTag();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.mergeLines', () => {\n\t\tmergeLines();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.toggleComment', () => {\n\t\ttoggleComment();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.nextEditPoint', () => {\n\t\tfetchEditPoint('next');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.prevEditPoint', () => {\n\t\tfetchEditPoint('prev');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.selectNextItem', () => {\n\t\tfetchSelectItem('next');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.selectPrevItem', () => {\n\t\tfetchSelectItem('prev');\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.evaluateMathExpression', () => {\n\t\tevaluateMathExpression();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByOneTenth', () => {\n\t\treturn incrementDecrement(0.1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByOne', () => {\n\t\treturn incrementDecrement(1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.incrementNumberByTen', () => {\n\t\treturn incrementDecrement(10);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByOneTenth', () => {\n\t\treturn incrementDecrement(-0.1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByOne', () => {\n\t\treturn incrementDecrement(-1);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.decrementNumberByTen', () => {\n\t\treturn incrementDecrement(-10);\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.reflectCSSValue', () => {\n\t\treturn reflectCssValue();\n\t}));\n\n\tcontext.subscriptions.push(vscode.commands.registerCommand('workbench.action.showEmmetCommands', () => {\n\t\tvscode.commands.executeCommand('workbench.action.quickOpen', '>Emmet: ');\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => {\n\t\tif (e.affectsConfiguration('emmet.includeLanguages') || e.affectsConfiguration('emmet.useInlineCompletions')) {\n\t\t\trefreshCompletionProviders(context);\n\t\t}\n\t\tif (e.affectsConfiguration('emmet.extensionsPath')) {\n\t\t\tupdateEmmetExtensionsPath();\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidSaveTextDocument((e) => {\n\t\tconst basefileName: string = getPathBaseName(e.fileName);\n\t\tif (basefileName.startsWith('snippets') && basefileName.endsWith('.json')) {\n\t\t\tupdateEmmetExtensionsPath(true);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidOpenTextDocument((e) => {\n\t\tconst emmetMode = getEmmetMode(e.languageId, {}, []) ?? '';\n\t\tconst syntaxes = getSyntaxes();\n\t\tif (syntaxes.markup.includes(emmetMode) || syntaxes.stylesheet.includes(emmetMode)) {\n\t\t\taddFileToParseCache(e);\n\t\t}\n\t}));\n\n\tcontext.subscriptions.push(vscode.workspace.onDidCloseTextDocument((e) => {\n\t\tconst emmetMode = getEmmetMode(e.languageId, {}, []) ?? '';\n\t\tconst syntaxes = getSyntaxes();\n\t\tif (syntaxes.markup.includes(emmetMode) || syntaxes.stylesheet.includes(emmetMode)) {\n\t\t\tremoveFileFromParseCache(e);\n\t\t}\n\t}));\n}\n\n/**\n * Holds any registered completion providers by their language strings\n */\nconst languageMappingForCompletionProviders: Map<string, string> = new Map<string, string>();\nconst completionProviderDisposables: vscode.Disposable[] = [];\n\nfunction refreshCompletionProviders(_: vscode.ExtensionContext) {\n\tclearCompletionProviderInfo();\n\n\tconst completionProvider = new DefaultCompletionItemProvider();\n\tconst inlineCompletionProvider: vscode.InlineCompletionItemProvider = {\n\t\tasync provideInlineCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.InlineCompletionContext, token: vscode.CancellationToken) {\n\t\t\tconst items = await completionProvider.provideCompletionItems(document, position, token, { triggerCharacter: undefined, triggerKind: vscode.CompletionTriggerKind.Invoke });\n\t\t\tif (!items) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst item = items.items[0];\n\t\t\tif (!item || !item.insertText) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst range = item.range as vscode.Range;\n\n\t\t\tif (document.getText(range) !== item.label) {\n\t\t\t\t// We only want to show an inline completion if we are really sure the user meant emmet.\n\t\t\t\t// If the user types `d`, we don't want to suggest `<div></div>`.\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tinsertText: item.insertText,\n\t\t\t\t\tfilterText: item.label,\n\t\t\t\t\trange\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t};\n\n\tconst useInlineCompletionProvider = vscode.workspace.getConfiguration('emmet').get<boolean>('useInlineCompletions');\n\tconst includedLanguages = getMappingForIncludedLanguages();\n\tObject.keys(includedLanguages).forEach(language => {\n\t\tif (languageMappingForCompletionProviders.has(language) && languageMappingForCompletionProviders.get(language) === includedLanguages[language]) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (useInlineCompletionProvider) {\n\t\t\tconst inlineCompletionsProvider = vscode.languages.registerInlineCompletionItemProvider({ language, scheme: '*' }, inlineCompletionProvider);\n\t\t\tcompletionProviderDisposables.push(inlineCompletionsProvider);\n\t\t}\n\n\t\tconst explicitProvider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[includedLanguages[language]]);\n\t\tcompletionProviderDisposables.push(explicitProvider);\n\n\t\tlanguageMappingForCompletionProviders.set(language, includedLanguages[language]);\n\t});\n\n\tObject.keys(LANGUAGE_MODES).forEach(language => {\n\t\tif (!languageMappingForCompletionProviders.has(language)) {\n\t\t\tif (useInlineCompletionProvider) {\n\t\t\t\tconst inlineCompletionsProvider = vscode.languages.registerInlineCompletionItemProvider({ language, scheme: '*' }, inlineCompletionProvider);\n\t\t\t\tcompletionProviderDisposables.push(inlineCompletionsProvider);\n\t\t\t}\n\n\t\t\tconst explicitProvider = vscode.languages.registerCompletionItemProvider({ language, scheme: '*' }, completionProvider, ...LANGUAGE_MODES[language]);\n\t\t\tcompletionProviderDisposables.push(explicitProvider);\n\n\t\t\tlanguageMappingForCompletionProviders.set(language, language);\n\t\t}\n\t});\n}\n\nfunction clearCompletionProviderInfo() {\n\tlanguageMappingForCompletionProviders.clear();\n\tlet disposable: vscode.Disposable | undefined;\n\twhile (disposable = completionProviderDisposables.pop()) {\n\t\tdisposable.dispose();\n\t}\n}\n\nexport function deactivate() {\n\tclearCompletionProviderInfo();\n\tclearParseCache();\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node, Stylesheet } from 'EmmetFlatNode';\nimport { isValidLocationForEmmetAbbreviation, getSyntaxFromArgs } from './abbreviationActions';\nimport { getEmmetHelper, getMappingForIncludedLanguages, parsePartialStylesheet, getEmmetConfiguration, getEmmetMode, isStyleSheet, getFlatNode, allowedMimeTypesInScriptTag, toLSTextDocument, getHtmlFlatNode, getEmbeddedCssNodeIfAny } from './util';\nimport { Range as LSRange } from 'vscode-languageserver-textdocument';\nimport { getRootNode } from './parseDocument';\n\nexport class DefaultCompletionItemProvider implements vscode.CompletionItemProvider {\n\n\tprivate lastCompletionType: string | undefined;\n\n\tpublic provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, _: vscode.CancellationToken, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {\n\t\tconst completionResult = this.provideCompletionItemsInternal(document, position, context);\n\t\tif (!completionResult) {\n\t\t\tthis.lastCompletionType = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\treturn completionResult.then(completionList => {\n\t\t\tif (!completionList || !completionList.items.length) {\n\t\t\t\tthis.lastCompletionType = undefined;\n\t\t\t\treturn completionList;\n\t\t\t}\n\t\t\tconst item = completionList.items[0];\n\t\t\tconst expandedText = item.documentation ? item.documentation.toString() : '';\n\n\t\t\tif (expandedText.startsWith('<')) {\n\t\t\t\tthis.lastCompletionType = 'html';\n\t\t\t} else if (expandedText.indexOf(':') > 0 && expandedText.endsWith(';')) {\n\t\t\t\tthis.lastCompletionType = 'css';\n\t\t\t} else {\n\t\t\t\tthis.lastCompletionType = undefined;\n\t\t\t}\n\t\t\treturn completionList;\n\t\t});\n\t}\n\n\tprivate provideCompletionItemsInternal(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext): Thenable<vscode.CompletionList | undefined> | undefined {\n\t\tconst emmetConfig = vscode.workspace.getConfiguration('emmet');\n\t\tconst excludedLanguages = emmetConfig['excludeLanguages'] ? emmetConfig['excludeLanguages'] : [];\n\t\tif (excludedLanguages.includes(document.languageId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mappedLanguages = getMappingForIncludedLanguages();\n\t\tconst isSyntaxMapped = mappedLanguages[document.languageId] ? true : false;\n\t\tconst emmetMode = getEmmetMode((isSyntaxMapped ? mappedLanguages[document.languageId] : document.languageId), mappedLanguages, excludedLanguages);\n\n\t\tif (!emmetMode\n\t\t\t|| emmetConfig['showExpandedAbbreviation'] === 'never'\n\t\t\t|| ((isSyntaxMapped || emmetMode === 'jsx') && emmetConfig['showExpandedAbbreviation'] !== 'always')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet syntax = emmetMode;\n\n\t\tlet validateLocation = syntax === 'html' || syntax === 'jsx' || syntax === 'xml';\n\t\tlet rootNode: Node | undefined;\n\t\tlet currentNode: Node | undefined;\n\n\t\tconst lsDoc = toLSTextDocument(document);\n\t\tposition = document.validatePosition(position);\n\n\t\t// Don't show completions if there's a comment at the beginning of the line\n\t\tconst lineRange = new vscode.Range(position.line, 0, position.line, position.character);\n\t\tif (document.getText(lineRange).trimStart().startsWith('//')) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst helper = getEmmetHelper();\n\t\tif (syntax === 'html') {\n\t\t\tif (context.triggerKind === vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\t\tswitch (this.lastCompletionType) {\n\t\t\t\t\tcase 'html':\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'css':\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (validateLocation) {\n\t\t\t\tconst positionOffset = document.offsetAt(position);\n\t\t\t\tconst emmetRootNode = getRootNode(document, true);\n\t\t\t\tconst foundNode = getHtmlFlatNode(document.getText(), emmetRootNode, positionOffset, false);\n\t\t\t\tif (foundNode) {\n\t\t\t\t\tif (foundNode.name === 'script') {\n\t\t\t\t\t\tconst typeNode = foundNode.attributes.find(attr => attr.name.toString() === 'type');\n\t\t\t\t\t\tif (typeNode) {\n\t\t\t\t\t\t\tconst typeAttrValue = typeNode.value.toString();\n\t\t\t\t\t\t\tif (typeAttrValue === 'application/javascript' || typeAttrValue === 'text/javascript') {\n\t\t\t\t\t\t\t\tif (!getSyntaxFromArgs({ language: 'javascript' })) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (allowedMimeTypesInScriptTag.includes(typeAttrValue)) {\n\t\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (foundNode.name === 'style') {\n\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst styleNode = foundNode.attributes.find(attr => attr.name.toString() === 'style');\n\t\t\t\t\t\tif (styleNode && styleNode.value.start <= positionOffset && positionOffset <= styleNode.value.end) {\n\t\t\t\t\t\t\tsyntax = 'css';\n\t\t\t\t\t\t\tvalidateLocation = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst expandOptions = isStyleSheet(syntax) ?\n\t\t\t{ lookAhead: false, syntax: 'stylesheet' } :\n\t\t\t{ lookAhead: true, syntax: 'markup' };\n\t\tconst extractAbbreviationResults = helper.extractAbbreviation(lsDoc, position, expandOptions);\n\t\tif (!extractAbbreviationResults || !helper.isAbbreviationValid(syntax, extractAbbreviationResults.abbreviation)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst offset = document.offsetAt(position);\n\t\tif (isStyleSheet(document.languageId) && context.triggerKind !== vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\tvalidateLocation = true;\n\t\t\tconst usePartialParsing = vscode.workspace.getConfiguration('emmet')['optimizeStylesheetParsing'] === true;\n\t\t\trootNode = usePartialParsing && document.lineCount > 1000 ? parsePartialStylesheet(document, position) : <Stylesheet>getRootNode(document, true);\n\t\t\tif (!rootNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurrentNode = getFlatNode(rootNode, offset, true);\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/107578\n\t\t// Validate location if syntax is of styleSheet type to ensure that location is valid for emmet abbreviation.\n\t\t// For an html document containing a <style> node, compute the embeddedCssNode and fetch the flattened node as currentNode.\n\t\tif (!isStyleSheet(document.languageId) && isStyleSheet(syntax) && context.triggerKind !== vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {\n\t\t\tvalidateLocation = true;\n\t\t\trootNode = getRootNode(document, true);\n\t\t\tif (!rootNode) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst flatNode = getFlatNode(rootNode, offset, true);\n\t\t\tconst embeddedCssNode = getEmbeddedCssNodeIfAny(document, flatNode, position);\n\t\t\tcurrentNode = getFlatNode(embeddedCssNode, offset, true);\n\t\t}\n\n\t\tif (validateLocation && !isValidLocationForEmmetAbbreviation(document, rootNode, currentNode, syntax, offset, toRange(extractAbbreviationResults.abbreviationRange))) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet isNoisePromise: Thenable<boolean> = Promise.resolve(false);\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/32647\n\t\t// Check for document symbols in js/ts/jsx/tsx and avoid triggering emmet for abbreviations of the form symbolName.sometext\n\t\t// Presence of > or * or + in the abbreviation denotes valid abbreviation that should trigger emmet\n\t\tif (!isStyleSheet(syntax) && (document.languageId === 'javascript' || document.languageId === 'javascriptreact' || document.languageId === 'typescript' || document.languageId === 'typescriptreact')) {\n\t\t\tconst abbreviation: string = extractAbbreviationResults.abbreviation;\n\t\t\t// For the second condition, we don't want abbreviations that have [] characters but not ='s in them to expand\n\t\t\t// In turn, users must explicitly expand abbreviations of the form Component[attr1 attr2], but it means we don't try to expand a[i].\n\t\t\tif (abbreviation.startsWith('this.') || /\\[[^\\]=]*\\]/.test(abbreviation)) {\n\t\t\t\tisNoisePromise = Promise.resolve(true);\n\t\t\t} else {\n\t\t\t\tisNoisePromise = vscode.commands.executeCommand<vscode.SymbolInformation[] | undefined>('vscode.executeDocumentSymbolProvider', document.uri).then(symbols => {\n\t\t\t\t\treturn !!symbols && symbols.some(x => abbreviation === x.name || (abbreviation.startsWith(x.name + '.') && !/>|\\*|\\+/.test(abbreviation)));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn isNoisePromise.then((isNoise): vscode.CompletionList | undefined => {\n\t\t\tif (isNoise) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst config = getEmmetConfiguration(syntax!);\n\t\t\tconst result = helper.doComplete(toLSTextDocument(document), position, syntax, config);\n\n\t\t\tconst newItems: vscode.CompletionItem[] = [];\n\t\t\tif (result && result.items) {\n\t\t\t\tresult.items.forEach((item: any) => {\n\t\t\t\t\tconst newItem = new vscode.CompletionItem(item.label);\n\t\t\t\t\tnewItem.documentation = item.documentation;\n\t\t\t\t\tnewItem.detail = item.detail;\n\t\t\t\t\tnewItem.insertText = new vscode.SnippetString(item.textEdit.newText);\n\t\t\t\t\tconst oldrange = item.textEdit.range;\n\t\t\t\t\tnewItem.range = new vscode.Range(oldrange.start.line, oldrange.start.character, oldrange.end.line, oldrange.end.character);\n\n\t\t\t\t\tnewItem.filterText = item.filterText;\n\t\t\t\t\tnewItem.sortText = item.sortText;\n\n\t\t\t\t\tif (emmetConfig['showSuggestionsAsSnippets'] === true) {\n\t\t\t\t\t\tnewItem.kind = vscode.CompletionItemKind.Snippet;\n\t\t\t\t\t}\n\t\t\t\t\tnewItems.push(newItem);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn new vscode.CompletionList(newItems, true);\n\t\t});\n\t}\n}\n\nfunction toRange(lsRange: LSRange) {\n\treturn new vscode.Range(lsRange.start.line, lsRange.start.character, lsRange.end.line, lsRange.end.character);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node, HtmlNode, Rule, Property, Stylesheet } from 'EmmetFlatNode';\nimport { getEmmetHelper, getFlatNode, getHtmlFlatNode, getMappingForIncludedLanguages, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag, toLSTextDocument, isOffsetInsideOpenOrCloseTag } from './util';\nimport { getRootNode as parseDocument } from './parseDocument';\n\nconst trimRegex = /[\\u00a0]*[\\d#\\-\\*\\u2022]+\\.?/;\nconst hexColorRegex = /^#[\\da-fA-F]{0,6}$/;\n\ninterface ExpandAbbreviationInput {\n\tsyntax: string;\n\tabbreviation: string;\n\trangeToReplace: vscode.Range;\n\ttextToWrap?: string[];\n\tfilter?: string;\n\tindent?: string;\n\tbaseIndent?: string;\n}\n\ninterface PreviewRangesWithContent {\n\tpreviewRange: vscode.Range;\n\toriginalRange: vscode.Range;\n\toriginalContent: string;\n\ttextToWrapInPreview: string[];\n\tbaseIndent: string;\n}\n\nexport async function wrapWithAbbreviation(args: any): Promise<boolean> {\n\tif (!validate(false)) {\n\t\treturn false;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor!;\n\tconst document = editor.document;\n\n\targs = args || {};\n\tif (!args['language']) {\n\t\targs['language'] = document.languageId;\n\t}\n\t// we know it's not stylesheet due to the validate(false) call above\n\tconst syntax = getSyntaxFromArgs(args) || 'html';\n\tconst rootNode = parseDocument(document, true);\n\n\tconst helper = getEmmetHelper();\n\n\tconst operationRanges = Array.from(editor.selections).sort((a, b) => a.start.compareTo(b.start)).map(selection => {\n\t\tlet rangeToReplace: vscode.Range = selection;\n\t\t// wrap around the node if the selection falls inside its open or close tag\n\t\t{\n\t\t\tlet { start, end } = rangeToReplace;\n\n\t\t\tconst startOffset = document.offsetAt(start);\n\t\t\tconst documentText = document.getText();\n\t\t\tconst startNode = getHtmlFlatNode(documentText, rootNode, startOffset, true);\n\t\t\tif (startNode && isOffsetInsideOpenOrCloseTag(startNode, startOffset)) {\n\t\t\t\tstart = document.positionAt(startNode.start);\n\t\t\t\tconst nodeEndPosition = document.positionAt(startNode.end);\n\t\t\t\tend = nodeEndPosition.isAfter(end) ? nodeEndPosition : end;\n\t\t\t}\n\n\t\t\tconst endOffset = document.offsetAt(end);\n\t\t\tconst endNode = getHtmlFlatNode(documentText, rootNode, endOffset, true);\n\t\t\tif (endNode && isOffsetInsideOpenOrCloseTag(endNode, endOffset)) {\n\t\t\t\tconst nodeStartPosition = document.positionAt(endNode.start);\n\t\t\t\tstart = nodeStartPosition.isBefore(start) ? nodeStartPosition : start;\n\t\t\t\tconst nodeEndPosition = document.positionAt(endNode.end);\n\t\t\t\tend = nodeEndPosition.isAfter(end) ? nodeEndPosition : end;\n\t\t\t}\n\n\t\t\trangeToReplace = new vscode.Range(start, end);\n\t\t}\n\t\t// in case of multi-line, exclude last empty line from rangeToReplace\n\t\tif (!rangeToReplace.isSingleLine && rangeToReplace.end.character === 0) {\n\t\t\tconst previousLine = rangeToReplace.end.line - 1;\n\t\t\trangeToReplace = new vscode.Range(rangeToReplace.start, document.lineAt(previousLine).range.end);\n\t\t}\n\t\t// wrap line the cursor is on\n\t\tif (rangeToReplace.isEmpty) {\n\t\t\trangeToReplace = document.lineAt(rangeToReplace.start).range;\n\t\t}\n\n\t\t// ignore whitespace on the first line\n\t\tconst firstLineOfRange = document.lineAt(rangeToReplace.start);\n\t\tif (!firstLineOfRange.isEmptyOrWhitespace && firstLineOfRange.firstNonWhitespaceCharacterIndex > rangeToReplace.start.character) {\n\t\t\trangeToReplace = rangeToReplace.with(new vscode.Position(rangeToReplace.start.line, firstLineOfRange.firstNonWhitespaceCharacterIndex));\n\t\t}\n\n\t\treturn rangeToReplace;\n\t}).reduce((mergedRanges, range) => {\n\t\t// Merge overlapping ranges\n\t\tif (mergedRanges.length > 0 && range.intersection(mergedRanges[mergedRanges.length - 1])) {\n\t\t\tmergedRanges.push(range.union(mergedRanges.pop()!));\n\t\t} else {\n\t\t\tmergedRanges.push(range);\n\t\t}\n\t\treturn mergedRanges;\n\t}, [] as vscode.Range[]);\n\n\t// Backup orginal selections and update selections\n\t// Also helps with https://github.com/microsoft/vscode/issues/113930 by avoiding `editor.linkedEditing`\n\t// execution if selection is inside an open or close tag\n\tconst oldSelections = editor.selections;\n\teditor.selections = operationRanges.map(range => new vscode.Selection(range.start, range.end));\n\n\t// Fetch general information for the succesive expansions. i.e. the ranges to replace and its contents\n\tconst rangesToReplace: PreviewRangesWithContent[] = operationRanges.map(rangeToReplace => {\n\t\tlet textToWrapInPreview: string[];\n\t\tconst textToReplace = document.getText(rangeToReplace);\n\n\t\t// the following assumes all the lines are indented the same way as the first\n\t\t// this assumption helps with applyPreview later\n\t\tconst wholeFirstLine = document.lineAt(rangeToReplace.start).text;\n\t\tconst otherMatches = wholeFirstLine.match(/^(\\s*)/);\n\t\tconst baseIndent = otherMatches ? otherMatches[1] : '';\n\t\ttextToWrapInPreview = rangeToReplace.isSingleLine ?\n\t\t\t[textToReplace] :\n\t\t\ttextToReplace.split('\\n' + baseIndent).map(x => x.trimEnd());\n\n\t\t// escape $ characters, fixes #52640\n\t\ttextToWrapInPreview = textToWrapInPreview.map(e => e.replace(/(\\$\\d)/g, '\\\\$1'));\n\n\t\treturn {\n\t\t\tpreviewRange: rangeToReplace,\n\t\t\toriginalRange: rangeToReplace,\n\t\t\toriginalContent: textToReplace,\n\t\t\ttextToWrapInPreview,\n\t\t\tbaseIndent\n\t\t};\n\t});\n\n\tconst { tabSize, insertSpaces } = editor.options;\n\tconst indent = insertSpaces ? ' '.repeat(tabSize as number) : '\\t';\n\n\tfunction revertPreview(): Thenable<boolean> {\n\t\treturn editor.edit(builder => {\n\t\t\tfor (const rangeToReplace of rangesToReplace) {\n\t\t\t\tbuilder.replace(rangeToReplace.previewRange, rangeToReplace.originalContent);\n\t\t\t\trangeToReplace.previewRange = rangeToReplace.originalRange;\n\t\t\t}\n\t\t}, { undoStopBefore: false, undoStopAfter: false });\n\t}\n\n\tfunction applyPreview(expandAbbrList: ExpandAbbreviationInput[]): Thenable<boolean> {\n\t\tlet lastOldPreviewRange = new vscode.Range(0, 0, 0, 0);\n\t\tlet lastNewPreviewRange = new vscode.Range(0, 0, 0, 0);\n\t\tlet totalNewLinesInserted = 0;\n\n\t\treturn editor.edit(builder => {\n\t\t\t// the edits are applied in order top-down\n\t\t\tfor (let i = 0; i < rangesToReplace.length; i++) {\n\t\t\t\tconst expandedText = expandAbbr(expandAbbrList[i]) || '';\n\t\t\t\tif (!expandedText) {\n\t\t\t\t\t// Failed to expand text. We already showed an error inside expandAbbr.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// get the current preview range, format the new wrapped text, and then replace\n\t\t\t\t// the text in the preview range with that new text\n\t\t\t\tconst oldPreviewRange = rangesToReplace[i].previewRange;\n\t\t\t\tconst newText = expandedText\n\t\t\t\t\t.replace(/\\$\\{[\\d]*\\}/g, '|') // Removing Tabstops\n\t\t\t\t\t.replace(/\\$\\{[\\d]*:([^}]*)\\}/g, (_, placeholder) => placeholder) // Replacing Placeholders\n\t\t\t\t\t.replace(/\\\\\\$/g, '$'); // Remove backslashes before $\n\t\t\t\tbuilder.replace(oldPreviewRange, newText);\n\n\t\t\t\t// calculate the new preview range to use for future previews\n\t\t\t\t// we also have to take into account that the previous expansions could:\n\t\t\t\t// - cause new lines to appear\n\t\t\t\t// - be on the same line as other expansions\n\t\t\t\tconst expandedTextLines = newText.split('\\n');\n\t\t\t\tconst oldPreviewLines = oldPreviewRange.end.line - oldPreviewRange.start.line + 1;\n\t\t\t\tconst newLinesInserted = expandedTextLines.length - oldPreviewLines;\n\n\t\t\t\tconst newPreviewLineStart = oldPreviewRange.start.line + totalNewLinesInserted;\n\t\t\t\tlet newPreviewStart = oldPreviewRange.start.character;\n\t\t\t\tconst newPreviewLineEnd = oldPreviewRange.end.line + totalNewLinesInserted + newLinesInserted;\n\t\t\t\tlet newPreviewEnd = expandedTextLines[expandedTextLines.length - 1].length;\n\t\t\t\tif (i > 0 && newPreviewLineEnd === lastNewPreviewRange.end.line) {\n\t\t\t\t\t// If newPreviewLineEnd is equal to the previous expandedText lineEnd,\n\t\t\t\t\t// set newPreviewStart to the length of the previous expandedText in that line\n\t\t\t\t\t// plus the number of characters between both selections.\n\t\t\t\t\tnewPreviewStart = lastNewPreviewRange.end.character + (oldPreviewRange.start.character - lastOldPreviewRange.end.character);\n\t\t\t\t\tnewPreviewEnd += newPreviewStart;\n\t\t\t\t} else if (i > 0 && newPreviewLineStart === lastNewPreviewRange.end.line) {\n\t\t\t\t\t// Same as above but expandedTextLines.length > 1 so newPreviewEnd keeps its value.\n\t\t\t\t\tnewPreviewStart = lastNewPreviewRange.end.character + (oldPreviewRange.start.character - lastOldPreviewRange.end.character);\n\t\t\t\t} else if (expandedTextLines.length === 1) {\n\t\t\t\t\t// If the expandedText is single line, add the length of preceeding text as it will not be included in line length.\n\t\t\t\t\tnewPreviewEnd += oldPreviewRange.start.character;\n\t\t\t\t}\n\n\t\t\t\tlastOldPreviewRange = rangesToReplace[i].previewRange;\n\t\t\t\tlastNewPreviewRange = new vscode.Range(newPreviewLineStart, newPreviewStart, newPreviewLineEnd, newPreviewEnd);\n\t\t\t\trangesToReplace[i].previewRange = lastNewPreviewRange;\n\t\t\t\ttotalNewLinesInserted += newLinesInserted;\n\t\t\t}\n\t\t}, { undoStopBefore: false, undoStopAfter: false });\n\t}\n\n\tlet inPreviewMode = false;\n\tasync function makeChanges(inputAbbreviation: string | undefined, previewChanges: boolean): Promise<boolean> {\n\t\tconst isAbbreviationValid = !!inputAbbreviation && !!inputAbbreviation.trim() && helper.isAbbreviationValid(syntax, inputAbbreviation);\n\t\tconst extractedResults = isAbbreviationValid ? helper.extractAbbreviationFromText(inputAbbreviation!, syntax) : undefined;\n\t\tif (!extractedResults) {\n\t\t\tif (inPreviewMode) {\n\t\t\t\tinPreviewMode = false;\n\t\t\t\tawait revertPreview();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { abbreviation, filter } = extractedResults;\n\t\tif (abbreviation !== inputAbbreviation) {\n\t\t\t// Not clear what should we do in this case. Warn the user? How?\n\t\t}\n\n\t\tif (previewChanges) {\n\t\t\tconst expandAbbrList: ExpandAbbreviationInput[] = rangesToReplace.map(rangesAndContent =>\n\t\t\t\t({ syntax, abbreviation, rangeToReplace: rangesAndContent.originalRange, textToWrap: rangesAndContent.textToWrapInPreview, filter, indent, baseIndent: rangesAndContent.baseIndent })\n\t\t\t);\n\n\t\t\tinPreviewMode = true;\n\t\t\treturn applyPreview(expandAbbrList);\n\t\t}\n\n\t\tconst expandAbbrList: ExpandAbbreviationInput[] = rangesToReplace.map(rangesAndContent =>\n\t\t\t({ syntax, abbreviation, rangeToReplace: rangesAndContent.originalRange, textToWrap: rangesAndContent.textToWrapInPreview, filter, indent })\n\t\t);\n\n\t\tif (inPreviewMode) {\n\t\t\tinPreviewMode = false;\n\t\t\tawait revertPreview();\n\t\t}\n\n\t\treturn expandAbbreviationInRange(editor, expandAbbrList, false);\n\t}\n\n\tlet currentValue = '';\n\tasync function inputChanged(value: string): Promise<string> {\n\t\tif (value !== currentValue) {\n\t\t\tcurrentValue = value;\n\t\t\tawait makeChanges(value, true);\n\t\t}\n\t\treturn '';\n\t}\n\n\tconst prompt = vscode.l10n.t(\"Enter Abbreviation\");\n\tconst inputAbbreviation = (args && args['abbreviation'])\n\t\t? (args['abbreviation'] as string)\n\t\t: await vscode.window.showInputBox({ prompt, validateInput: inputChanged });\n\n\tconst changesWereMade = await makeChanges(inputAbbreviation, false);\n\tif (!changesWereMade) {\n\t\teditor.selections = oldSelections;\n\t}\n\n\treturn changesWereMade;\n}\n\nexport function expandEmmetAbbreviation(args: any): Thenable<boolean | undefined> {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn fallbackTab();\n\t}\n\n\t/**\n\t * Short circuit the parsing. If previous character is space, do not expand.\n\t */\n\tif (vscode.window.activeTextEditor.selections.length === 1 &&\n\t\tvscode.window.activeTextEditor.selection.isEmpty\n\t) {\n\t\tconst anchor = vscode.window.activeTextEditor.selection.anchor;\n\t\tif (anchor.character === 0) {\n\t\t\treturn fallbackTab();\n\t\t}\n\n\t\tconst prevPositionAnchor = anchor.translate(0, -1);\n\t\tconst prevText = vscode.window.activeTextEditor.document.getText(new vscode.Range(prevPositionAnchor, anchor));\n\t\tif (prevText === ' ' || prevText === '\\t') {\n\t\t\treturn fallbackTab();\n\t\t}\n\t}\n\n\targs = args || {};\n\tif (!args['language']) {\n\t\targs['language'] = vscode.window.activeTextEditor.document.languageId;\n\t} else {\n\t\tconst excludedLanguages = vscode.workspace.getConfiguration('emmet')['excludeLanguages'] ? vscode.workspace.getConfiguration('emmet')['excludeLanguages'] : [];\n\t\tif (excludedLanguages.includes(vscode.window.activeTextEditor.document.languageId)) {\n\t\t\treturn fallbackTab();\n\t\t}\n\t}\n\tconst syntax = getSyntaxFromArgs(args);\n\tif (!syntax) {\n\t\treturn fallbackTab();\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\n\t// When tabbed on a non empty selection, do not treat it as an emmet abbreviation, and fallback to tab instead\n\tif (vscode.workspace.getConfiguration('emmet')['triggerExpansionOnTab'] === true && editor.selections.find(x => !x.isEmpty)) {\n\t\treturn fallbackTab();\n\t}\n\n\tconst abbreviationList: ExpandAbbreviationInput[] = [];\n\tlet firstAbbreviation: string;\n\tlet allAbbreviationsSame: boolean = true;\n\tconst helper = getEmmetHelper();\n\n\tconst getAbbreviation = (document: vscode.TextDocument, selection: vscode.Selection, position: vscode.Position, syntax: string): [vscode.Range | null, string, string | undefined] => {\n\t\tposition = document.validatePosition(position);\n\t\tlet rangeToReplace: vscode.Range = selection;\n\t\tlet abbr = document.getText(rangeToReplace);\n\t\tif (!rangeToReplace.isEmpty) {\n\t\t\tconst extractedResults = helper.extractAbbreviationFromText(abbr, syntax);\n\t\t\tif (extractedResults) {\n\t\t\t\treturn [rangeToReplace, extractedResults.abbreviation, extractedResults.filter];\n\t\t\t}\n\t\t\treturn [null, '', ''];\n\t\t}\n\n\t\tconst currentLine = editor.document.lineAt(position.line).text;\n\t\tconst textTillPosition = currentLine.substr(0, position.character);\n\n\t\t// Expand cases like <div to <div></div> explicitly\n\t\t// else we will end up with <<div></div>\n\t\tif (syntax === 'html') {\n\t\t\tconst matches = textTillPosition.match(/<(\\w+)$/);\n\t\t\tif (matches) {\n\t\t\t\tabbr = matches[1];\n\t\t\t\trangeToReplace = new vscode.Range(position.translate(0, -(abbr.length + 1)), position);\n\t\t\t\treturn [rangeToReplace, abbr, ''];\n\t\t\t}\n\t\t}\n\t\tconst extractedResults = helper.extractAbbreviation(toLSTextDocument(editor.document), position, { lookAhead: false });\n\t\tif (!extractedResults) {\n\t\t\treturn [null, '', ''];\n\t\t}\n\n\t\tconst { abbreviationRange, abbreviation, filter } = extractedResults;\n\t\treturn [new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character), abbreviation, filter];\n\t};\n\n\tconst selectionsInReverseOrder = editor.selections.slice(0);\n\tselectionsInReverseOrder.sort((a, b) => {\n\t\tconst posA = a.isReversed ? a.anchor : a.active;\n\t\tconst posB = b.isReversed ? b.anchor : b.active;\n\t\treturn posA.compareTo(posB) * -1;\n\t});\n\n\tlet rootNode: Node | undefined;\n\tfunction getRootNode() {\n\t\tif (rootNode) {\n\t\t\treturn rootNode;\n\t\t}\n\n\t\tconst usePartialParsing = vscode.workspace.getConfiguration('emmet')['optimizeStylesheetParsing'] === true;\n\t\tif (editor.selections.length === 1 && isStyleSheet(editor.document.languageId) && usePartialParsing && editor.document.lineCount > 1000) {\n\t\t\trootNode = parsePartialStylesheet(editor.document, editor.selection.isReversed ? editor.selection.anchor : editor.selection.active);\n\t\t} else {\n\t\t\trootNode = parseDocument(editor.document, true);\n\t\t}\n\n\t\treturn rootNode;\n\t}\n\n\tselectionsInReverseOrder.forEach(selection => {\n\t\tconst position = selection.isReversed ? selection.anchor : selection.active;\n\t\tconst [rangeToReplace, abbreviation, filter] = getAbbreviation(editor.document, selection, position, syntax);\n\t\tif (!rangeToReplace) {\n\t\t\treturn;\n\t\t}\n\t\tif (!helper.isAbbreviationValid(syntax, abbreviation)) {\n\t\t\treturn;\n\t\t}\n\t\tif (isStyleSheet(syntax) && abbreviation.endsWith(':')) {\n\t\t\t// Fix for https://github.com/Microsoft/vscode/issues/1623\n\t\t\treturn;\n\t\t}\n\n\t\tconst offset = editor.document.offsetAt(position);\n\t\tlet currentNode = getFlatNode(getRootNode(), offset, true);\n\t\tlet validateLocation = true;\n\t\tlet syntaxToUse = syntax;\n\n\t\tif (editor.document.languageId === 'html') {\n\t\t\tif (isStyleAttribute(currentNode, offset)) {\n\t\t\t\tsyntaxToUse = 'css';\n\t\t\t\tvalidateLocation = false;\n\t\t\t} else {\n\t\t\t\tconst embeddedCssNode = getEmbeddedCssNodeIfAny(editor.document, currentNode, position);\n\t\t\t\tif (embeddedCssNode) {\n\t\t\t\t\tcurrentNode = getFlatNode(embeddedCssNode, offset, true);\n\t\t\t\t\tsyntaxToUse = 'css';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (validateLocation && !isValidLocationForEmmetAbbreviation(editor.document, getRootNode(), currentNode, syntaxToUse, offset, rangeToReplace)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!firstAbbreviation) {\n\t\t\tfirstAbbreviation = abbreviation;\n\t\t} else if (allAbbreviationsSame && firstAbbreviation !== abbreviation) {\n\t\t\tallAbbreviationsSame = false;\n\t\t}\n\n\t\tabbreviationList.push({ syntax: syntaxToUse, abbreviation, rangeToReplace, filter });\n\t});\n\n\treturn expandAbbreviationInRange(editor, abbreviationList, allAbbreviationsSame).then(success => {\n\t\treturn success ? Promise.resolve(undefined) : fallbackTab();\n\t});\n}\n\nfunction fallbackTab(): Thenable<boolean | undefined> {\n\tif (vscode.workspace.getConfiguration('emmet')['triggerExpansionOnTab'] === true) {\n\t\treturn vscode.commands.executeCommand('tab');\n\t}\n\treturn Promise.resolve(true);\n}\n/**\n * Checks if given position is a valid location to expand emmet abbreviation.\n * Works only on html and css/less/scss syntax\n * @param document current Text Document\n * @param rootNode parsed document\n * @param currentNode current node in the parsed document\n * @param syntax syntax of the abbreviation\n * @param position position to validate\n * @param abbreviationRange The range of the abbreviation for which given position is being validated\n */\nexport function isValidLocationForEmmetAbbreviation(document: vscode.TextDocument, rootNode: Node | undefined, currentNode: Node | undefined, syntax: string, offset: number, abbreviationRange: vscode.Range): boolean {\n\tif (isStyleSheet(syntax)) {\n\t\tconst stylesheet = <Stylesheet>rootNode;\n\t\tif (stylesheet && (stylesheet.comments || []).some(x => offset >= x.start && offset <= x.end)) {\n\t\t\treturn false;\n\t\t}\n\t\t// Continue validation only if the file was parse-able and the currentNode has been found\n\t\tif (!currentNode) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Get the abbreviation right now\n\t\t// Fixes https://github.com/microsoft/vscode/issues/74505\n\t\t// Stylesheet abbreviations starting with @ should bring up suggestions\n\t\t// even at outer-most level\n\t\tconst abbreviation = document.getText(new vscode.Range(abbreviationRange.start.line, abbreviationRange.start.character, abbreviationRange.end.line, abbreviationRange.end.character));\n\t\tif (abbreviation.startsWith('@')) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/34162\n\t\t// Other than sass, stylus, we can make use of the terminator tokens to validate position\n\t\tif (syntax !== 'sass' && syntax !== 'stylus' && currentNode.type === 'property') {\n\t\t\t// Fix for upstream issue https://github.com/emmetio/css-parser/issues/3\n\t\t\tif (currentNode.parent\n\t\t\t\t&& currentNode.parent.type !== 'rule'\n\t\t\t\t&& currentNode.parent.type !== 'at-rule') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst propertyNode = <Property>currentNode;\n\t\t\tif (propertyNode.terminatorToken\n\t\t\t\t&& propertyNode.separator\n\t\t\t\t&& offset >= propertyNode.separatorToken.end\n\t\t\t\t&& offset <= propertyNode.terminatorToken.start\n\t\t\t\t&& !abbreviation.includes(':')) {\n\t\t\t\treturn hexColorRegex.test(abbreviation) || abbreviation === '!';\n\t\t\t}\n\t\t\tif (!propertyNode.terminatorToken\n\t\t\t\t&& propertyNode.separator\n\t\t\t\t&& offset >= propertyNode.separatorToken.end\n\t\t\t\t&& !abbreviation.includes(':')) {\n\t\t\t\treturn hexColorRegex.test(abbreviation) || abbreviation === '!';\n\t\t\t}\n\t\t\tif (hexColorRegex.test(abbreviation) || abbreviation === '!') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// If current node is a rule or at-rule, then perform additional checks to ensure\n\t\t// emmet suggestions are not provided in the rule selector\n\t\tif (currentNode.type !== 'rule' && currentNode.type !== 'at-rule') {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst currentCssNode = <Rule>currentNode;\n\n\t\t// Position is valid if it occurs after the `{` that marks beginning of rule contents\n\t\tif (offset > currentCssNode.contentStartToken.end) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Workaround for https://github.com/microsoft/vscode/30188\n\t\t// The line above the rule selector is considered as part of the selector by the css-parser\n\t\t// But we should assume it is a valid location for css properties under the parent rule\n\t\tif (currentCssNode.parent\n\t\t\t&& (currentCssNode.parent.type === 'rule' || currentCssNode.parent.type === 'at-rule')\n\t\t\t&& currentCssNode.selectorToken) {\n\t\t\tconst position = document.positionAt(offset);\n\t\t\tconst tokenStartPos = document.positionAt(currentCssNode.selectorToken.start);\n\t\t\tconst tokenEndPos = document.positionAt(currentCssNode.selectorToken.end);\n\t\t\tif (position.line !== tokenEndPos.line\n\t\t\t\t&& tokenStartPos.character === abbreviationRange.start.character\n\t\t\t\t&& tokenStartPos.line === abbreviationRange.start.line\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tconst startAngle = '<';\n\tconst endAngle = '>';\n\tconst escape = '\\\\';\n\tconst question = '?';\n\tconst currentHtmlNode = <HtmlNode>currentNode;\n\tlet start = 0;\n\n\tif (currentHtmlNode) {\n\t\tif (currentHtmlNode.name === 'script') {\n\t\t\tconst typeAttribute = (currentHtmlNode.attributes || []).filter(x => x.name.toString() === 'type')[0];\n\t\t\tconst typeValue = typeAttribute ? typeAttribute.value.toString() : '';\n\n\t\t\tif (allowedMimeTypesInScriptTag.includes(typeValue)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst isScriptJavascriptType = !typeValue || typeValue === 'application/javascript' || typeValue === 'text/javascript';\n\t\t\tif (isScriptJavascriptType) {\n\t\t\t\treturn !!getSyntaxFromArgs({ language: 'javascript' });\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/28829\n\t\tif (!currentHtmlNode.open || !currentHtmlNode.close ||\n\t\t\t!(currentHtmlNode.open.end <= offset && offset <= currentHtmlNode.close.start)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Fix for https://github.com/microsoft/vscode/issues/35128\n\t\t// Find the position up till where we will backtrack looking for unescaped < or >\n\t\t// to decide if current position is valid for emmet expansion\n\t\tstart = currentHtmlNode.open.end;\n\t\tlet lastChildBeforePosition = currentHtmlNode.firstChild;\n\t\twhile (lastChildBeforePosition) {\n\t\t\tif (lastChildBeforePosition.end > offset) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstart = lastChildBeforePosition.end;\n\t\t\tlastChildBeforePosition = lastChildBeforePosition.nextSibling;\n\t\t}\n\t}\n\tconst startPos = document.positionAt(start);\n\tlet textToBackTrack = document.getText(new vscode.Range(startPos.line, startPos.character, abbreviationRange.start.line, abbreviationRange.start.character));\n\n\t// Worse case scenario is when cursor is inside a big chunk of text which needs to backtracked\n\t// Backtrack only 500 offsets to ensure we dont waste time doing this\n\tif (textToBackTrack.length > 500) {\n\t\ttextToBackTrack = textToBackTrack.substr(textToBackTrack.length - 500);\n\t}\n\n\tif (!textToBackTrack.trim()) {\n\t\treturn true;\n\t}\n\n\tlet valid = true;\n\tlet foundSpace = false; // If < is found before finding whitespace, then its valid abbreviation. E.g.: <div|\n\tlet i = textToBackTrack.length - 1;\n\tif (textToBackTrack[i] === startAngle) {\n\t\treturn false;\n\t}\n\n\twhile (i >= 0) {\n\t\tconst char = textToBackTrack[i];\n\t\ti--;\n\t\tif (!foundSpace && /\\s/.test(char)) {\n\t\t\tfoundSpace = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === question && textToBackTrack[i] === startAngle) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\t// Fix for https://github.com/microsoft/vscode/issues/55411\n\t\t// A space is not a valid character right after < in a tag name.\n\t\tif (/\\s/.test(char) && textToBackTrack[i] === startAngle) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char !== startAngle && char !== endAngle) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (i >= 0 && textToBackTrack[i] === escape) {\n\t\t\ti--;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === endAngle) {\n\t\t\tif (i >= 0 && textToBackTrack[i] === '=') {\n\t\t\t\tcontinue; // False alarm of cases like =>\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (char === startAngle) {\n\t\t\tvalid = !foundSpace;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn valid;\n}\n\n/**\n * Expands abbreviations as detailed in expandAbbrList in the editor\n *\n * @returns false if no snippet can be inserted.\n */\nasync function expandAbbreviationInRange(editor: vscode.TextEditor, expandAbbrList: ExpandAbbreviationInput[], insertSameSnippet: boolean): Promise<boolean> {\n\tif (!expandAbbrList || expandAbbrList.length === 0) {\n\t\treturn false;\n\t}\n\n\t// Snippet to replace at multiple cursors are not the same\n\t// `editor.insertSnippet` will have to be called for each instance separately\n\t// We will not be able to maintain multiple cursors after snippet insertion\n\tlet insertedSnippetsCount = 0;\n\tif (!insertSameSnippet) {\n\t\texpandAbbrList.sort((a: ExpandAbbreviationInput, b: ExpandAbbreviationInput) => { return b.rangeToReplace.start.compareTo(a.rangeToReplace.start); });\n\t\tfor (const expandAbbrInput of expandAbbrList) {\n\t\t\tconst expandedText = expandAbbr(expandAbbrInput);\n\t\t\tif (expandedText) {\n\t\t\t\tawait editor.insertSnippet(new vscode.SnippetString(expandedText), expandAbbrInput.rangeToReplace, { undoStopBefore: false, undoStopAfter: false });\n\t\t\t\tinsertedSnippetsCount++;\n\t\t\t}\n\t\t}\n\t\treturn insertedSnippetsCount > 0;\n\t}\n\n\t// Snippet to replace at all cursors are the same\n\t// We can pass all ranges to `editor.insertSnippet` in a single call so that\n\t// all cursors are maintained after snippet insertion\n\tconst anyExpandAbbrInput = expandAbbrList[0];\n\tconst expandedText = expandAbbr(anyExpandAbbrInput);\n\tconst allRanges = expandAbbrList.map(value => value.rangeToReplace);\n\tif (expandedText) {\n\t\treturn editor.insertSnippet(new vscode.SnippetString(expandedText), allRanges);\n\t}\n\treturn false;\n}\n\n/**\n * Expands abbreviation as detailed in given input.\n */\nfunction expandAbbr(input: ExpandAbbreviationInput): string | undefined {\n\tconst helper = getEmmetHelper();\n\tconst expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter);\n\n\tif (input.textToWrap) {\n\t\t// escape ${ sections, fixes #122231\n\t\tinput.textToWrap = input.textToWrap.map(e => e.replace(/\\$\\{/g, '\\\\\\$\\{'));\n\t\tif (input.filter && input.filter.includes('t')) {\n\t\t\tinput.textToWrap = input.textToWrap.map(line => {\n\t\t\t\treturn line.replace(trimRegex, '').trim();\n\t\t\t});\n\t\t}\n\t\texpandOptions['text'] = input.textToWrap;\n\n\t\tif (expandOptions.options) {\n\t\t\t// Below fixes https://github.com/microsoft/vscode/issues/29898\n\t\t\t// With this, Emmet formats inline elements as block elements\n\t\t\t// ensuring the wrapped multi line text does not get merged to a single line\n\t\t\tif (!input.rangeToReplace.isSingleLine) {\n\t\t\t\texpandOptions.options['output.inlineBreak'] = 1;\n\t\t\t}\n\n\t\t\tif (input.indent) {\n\t\t\t\texpandOptions.options['output.indent'] = input.indent;\n\t\t\t}\n\t\t\tif (input.baseIndent) {\n\t\t\t\texpandOptions.options['output.baseIndent'] = input.baseIndent;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet expandedText: string | undefined;\n\ttry {\n\t\texpandedText = helper.expandAbbreviation(input.abbreviation, expandOptions);\n\t} catch (e) {\n\t\tvoid vscode.window.showErrorMessage('Failed to expand abbreviation');\n\t}\n\n\treturn expandedText;\n}\n\nexport function getSyntaxFromArgs(args: { [x: string]: string }): string | undefined {\n\tconst mappedModes = getMappingForIncludedLanguages();\n\tconst language: string = args['language'];\n\tconst parentMode: string = args['parentMode'];\n\tconst excludedLanguages = vscode.workspace.getConfiguration('emmet')['excludeLanguages'] ? vscode.workspace.getConfiguration('emmet')['excludeLanguages'] : [];\n\tif (excludedLanguages.includes(language)) {\n\t\treturn;\n\t}\n\n\tlet syntax = getEmmetMode(mappedModes[language] ?? language, mappedModes, excludedLanguages);\n\tif (!syntax) {\n\t\tsyntax = getEmmetMode(mappedModes[parentMode] ?? parentMode, mappedModes, excludedLanguages);\n\t}\n\n\treturn syntax;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport parse from '@emmetio/html-matcher';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { Node as FlatNode, HtmlNode as HtmlFlatNode, Property as FlatProperty, Rule as FlatRule, CssToken as FlatCssToken, Stylesheet as FlatStylesheet } from 'EmmetFlatNode';\nimport { DocumentStreamReader } from './bufferStream';\nimport * as EmmetHelper from '@vscode/emmet-helper';\nimport { TextDocument as LSTextDocument } from 'vscode-languageserver-textdocument';\nimport { getRootNode } from './parseDocument';\n\nlet _emmetHelper: typeof EmmetHelper;\nlet _currentExtensionsPath: string[] | undefined;\n\nlet _homeDir: vscode.Uri | undefined;\n\n\nexport function setHomeDir(homeDir: vscode.Uri) {\n\t_homeDir = homeDir;\n}\n\nexport function getEmmetHelper() {\n\t// Lazy load vscode-emmet-helper instead of importing it\n\t// directly to reduce the start-up time of the extension\n\tif (!_emmetHelper) {\n\t\t_emmetHelper = require('@vscode/emmet-helper');\n\t}\n\treturn _emmetHelper;\n}\n\n/**\n * Update Emmet Helper to use user snippets from the extensionsPath setting\n */\nexport function updateEmmetExtensionsPath(forceRefresh: boolean = false) {\n\tconst helper = getEmmetHelper();\n\tlet extensionsPath = vscode.workspace.getConfiguration('emmet').get<string[]>('extensionsPath');\n\tif (!extensionsPath) {\n\t\textensionsPath = [];\n\t}\n\tif (forceRefresh || _currentExtensionsPath !== extensionsPath) {\n\t\t_currentExtensionsPath = extensionsPath;\n\t\tconst rootPaths = vscode.workspace.workspaceFolders?.length ? vscode.workspace.workspaceFolders.map(f => f.uri) : undefined;\n\t\tconst fileSystem = vscode.workspace.fs;\n\t\thelper.updateExtensionsPath(extensionsPath, fileSystem, rootPaths, _homeDir).catch(err => {\n\t\t\tif (Array.isArray(extensionsPath) && extensionsPath.length) {\n\t\t\t\tvscode.window.showErrorMessage(err.message);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Migrate old configuration(string) for extensionsPath to new type(string[])\n * https://github.com/microsoft/vscode/issues/117517\n */\nexport function migrateEmmetExtensionsPath() {\n\t// Get the detail info of emmet.extensionsPath setting\n\tconst config = vscode.workspace.getConfiguration().inspect('emmet.extensionsPath');\n\n\t// Update Global setting if the value type is string or the value is null\n\tif (typeof config?.globalValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.globalValue], true);\n\t} else if (config?.globalValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [], true);\n\t}\n\t// Update Workspace setting if the value type is string or the value is null\n\tif (typeof config?.workspaceValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceValue], false);\n\t} else if (config?.workspaceValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [], false);\n\t}\n\t// Update WorkspaceFolder setting if the value type is string or the value is null\n\tif (typeof config?.workspaceFolderValue === 'string') {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', [config.workspaceFolderValue]);\n\t} else if (config?.workspaceFolderValue === null) {\n\t\tvscode.workspace.getConfiguration().update('emmet.extensionsPath', []);\n\t}\n}\n\n/**\n * Mapping between languages that support Emmet and completion trigger characters\n */\nexport const LANGUAGE_MODES: { [id: string]: string[] } = {\n\t'html': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'jade': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'slim': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'haml': ['!', '.', '}', ':', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'xml': ['.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'xsl': ['!', '.', '}', '*', '$', '/', ']', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'css': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'scss': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'sass': [':', '!', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'less': [':', '!', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'stylus': [':', '!', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'javascriptreact': ['!', '.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n\t'typescriptreact': ['!', '.', '}', '*', '$', ']', '/', '>', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n};\n\nexport function isStyleSheet(syntax: string): boolean {\n\tconst stylesheetSyntaxes = ['css', 'scss', 'sass', 'less', 'stylus'];\n\treturn stylesheetSyntaxes.includes(syntax);\n}\n\nexport function validate(allowStylesheet: boolean = true): boolean {\n\tconst editor = vscode.window.activeTextEditor;\n\tif (!editor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn false;\n\t}\n\tif (!allowStylesheet && isStyleSheet(editor.document.languageId)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function getMappingForIncludedLanguages(): Record<string, string> {\n\t// Explicitly map languages that have built-in grammar in VS Code to their parent language\n\t// to get emmet completion support\n\t// For other languages, users will have to use `emmet.includeLanguages` or\n\t// language specific extensions can provide emmet completion support\n\tconst MAPPED_MODES: Record<string, string> = {\n\t\t'handlebars': 'html',\n\t\t'php': 'html'\n\t};\n\n\tconst finalMappedModes: Record<string, string> = {};\n\tconst includeLanguagesConfig = vscode.workspace.getConfiguration('emmet').get<Record<string, string>>('includeLanguages');\n\tconst includeLanguages = Object.assign({}, MAPPED_MODES, includeLanguagesConfig ?? {});\n\tObject.keys(includeLanguages).forEach(syntax => {\n\t\tif (typeof includeLanguages[syntax] === 'string' && LANGUAGE_MODES[includeLanguages[syntax]]) {\n\t\t\tfinalMappedModes[syntax] = includeLanguages[syntax];\n\t\t}\n\t});\n\treturn finalMappedModes;\n}\n\n/**\n* Get the corresponding emmet mode for given vscode language mode\n* E.g.: jsx for typescriptreact/javascriptreact or pug for jade\n* If the language is not supported by emmet or has been excluded via `excludeLanguages` setting,\n* then nothing is returned\n*\n* @param excludedLanguages Array of language ids that user has chosen to exclude for emmet\n*/\nexport function getEmmetMode(language: string, mappedModes: Record<string, string>, excludedLanguages: string[]): string | undefined {\n\tif (!language || excludedLanguages.includes(language)) {\n\t\treturn;\n\t}\n\n\tif (language === 'jsx-tags') {\n\t\tlanguage = 'javascriptreact';\n\t}\n\n\tif (mappedModes[language]) {\n\t\tlanguage = mappedModes[language];\n\t}\n\n\tif (/\\b(typescriptreact|javascriptreact|jsx-tags)\\b/.test(language)) { // treat tsx like jsx\n\t\tlanguage = 'jsx';\n\t}\n\telse if (language === 'sass-indented') { // map sass-indented to sass\n\t\tlanguage = 'sass';\n\t}\n\telse if (language === 'jade' || language === 'pug') {\n\t\tlanguage = 'pug';\n\t}\n\n\tconst syntaxes = getSyntaxes();\n\tif (syntaxes.markup.includes(language) || syntaxes.stylesheet.includes(language)) {\n\t\treturn language;\n\t}\n\treturn;\n}\n\nconst closeBrace = 125;\nconst openBrace = 123;\nconst slash = 47;\nconst star = 42;\n\n/**\n * Traverse the given document backward & forward from given position\n * to find a complete ruleset, then parse just that to return a Stylesheet\n * @param document vscode.TextDocument\n * @param position vscode.Position\n */\nexport function parsePartialStylesheet(document: vscode.TextDocument, position: vscode.Position): FlatStylesheet | undefined {\n\tconst isCSS = document.languageId === 'css';\n\tconst positionOffset = document.offsetAt(position);\n\tlet startOffset = 0;\n\tlet endOffset = document.getText().length;\n\tconst limitCharacter = positionOffset - 5000;\n\tconst limitOffset = limitCharacter > 0 ? limitCharacter : startOffset;\n\tconst stream = new DocumentStreamReader(document, positionOffset);\n\n\tfunction findOpeningCommentBeforePosition(pos: number): number | undefined {\n\t\tconst text = document.getText().substring(0, pos);\n\t\tconst offset = text.lastIndexOf('/*');\n\t\tif (offset === -1) {\n\t\t\treturn;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tfunction findClosingCommentAfterPosition(pos: number): number | undefined {\n\t\tconst text = document.getText().substring(pos);\n\t\tlet offset = text.indexOf('*/');\n\t\tif (offset === -1) {\n\t\t\treturn;\n\t\t}\n\t\toffset += 2 + pos;\n\t\treturn offset;\n\t}\n\n\tfunction consumeLineCommentBackwards() {\n\t\tconst posLineNumber = document.positionAt(stream.pos).line;\n\t\tif (!isCSS && currentLine !== posLineNumber) {\n\t\t\tcurrentLine = posLineNumber;\n\t\t\tconst startLineComment = document.lineAt(currentLine).text.indexOf('//');\n\t\t\tif (startLineComment > -1) {\n\t\t\t\tstream.pos = document.offsetAt(new vscode.Position(currentLine, startLineComment));\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction consumeBlockCommentBackwards() {\n\t\tif (!stream.sof() && stream.peek() === slash) {\n\t\t\tif (stream.backUp(1) === star) {\n\t\t\t\tstream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset;\n\t\t\t} else {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction consumeCommentForwards() {\n\t\tif (stream.eat(slash)) {\n\t\t\tif (stream.eat(slash) && !isCSS) {\n\t\t\t\tconst posLineNumber = document.positionAt(stream.pos).line;\n\t\t\t\tstream.pos = document.offsetAt(new vscode.Position(posLineNumber + 1, 0));\n\t\t\t} else if (stream.eat(star)) {\n\t\t\t\tstream.pos = findClosingCommentAfterPosition(stream.pos) ?? endOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Go forward until we find a closing brace.\n\twhile (!stream.eof() && !stream.eat(closeBrace)) {\n\t\tif (stream.peek() === slash) {\n\t\t\tconsumeCommentForwards();\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\tif (!stream.eof()) {\n\t\tendOffset = stream.pos;\n\t}\n\n\tstream.pos = positionOffset;\n\tlet openBracesToFind = 1;\n\tlet currentLine = position.line;\n\tlet exit = false;\n\n\t// Go back until we found an opening brace. If we find a closing one, consume its pair and continue.\n\twhile (!exit && openBracesToFind > 0 && !stream.sof()) {\n\t\tconsumeLineCommentBackwards();\n\n\t\tswitch (stream.backUp(1)) {\n\t\t\tcase openBrace:\n\t\t\t\topenBracesToFind--;\n\t\t\t\tbreak;\n\t\t\tcase closeBrace:\n\t\t\t\tif (isCSS) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\tstartOffset = stream.pos;\n\t\t\t\t\texit = true;\n\t\t\t\t} else {\n\t\t\t\t\topenBracesToFind++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase slash:\n\t\t\t\tconsumeBlockCommentBackwards();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (position.line - document.positionAt(stream.pos).line > 100\n\t\t\t|| stream.pos <= limitOffset) {\n\t\t\texit = true;\n\t\t}\n\t}\n\n\t// We are at an opening brace. We need to include its selector.\n\tcurrentLine = document.positionAt(stream.pos).line;\n\topenBracesToFind = 0;\n\tlet foundSelector = false;\n\twhile (!exit && !stream.sof() && !foundSelector && openBracesToFind >= 0) {\n\t\tconsumeLineCommentBackwards();\n\n\t\tconst ch = stream.backUp(1);\n\t\tif (/\\s/.test(String.fromCharCode(ch))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tswitch (ch) {\n\t\t\tcase slash:\n\t\t\t\tconsumeBlockCommentBackwards();\n\t\t\t\tbreak;\n\t\t\tcase closeBrace:\n\t\t\t\topenBracesToFind++;\n\t\t\t\tbreak;\n\t\t\tcase openBrace:\n\t\t\t\topenBracesToFind--;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (!openBracesToFind) {\n\t\t\t\t\tfoundSelector = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!stream.sof() && foundSelector) {\n\t\t\tstartOffset = stream.pos;\n\t\t}\n\t}\n\n\ttry {\n\t\tconst buffer = ' '.repeat(startOffset) + document.getText().substring(startOffset, endOffset);\n\t\treturn parseStylesheet(buffer);\n\t} catch (e) {\n\t\treturn;\n\t}\n}\n\n/**\n * Returns node corresponding to given position in the given root node\n */\nexport function getFlatNode(root: FlatNode | undefined, offset: number, includeNodeBoundary: boolean): FlatNode | undefined {\n\tif (!root) {\n\t\treturn;\n\t}\n\n\tfunction getFlatNodeChild(child: FlatNode | undefined): FlatNode | undefined {\n\t\tif (!child) {\n\t\t\treturn;\n\t\t}\n\t\tconst nodeStart = child.start;\n\t\tconst nodeEnd = child.end;\n\t\tif ((nodeStart < offset && nodeEnd > offset)\n\t\t\t|| (includeNodeBoundary && nodeStart <= offset && nodeEnd >= offset)) {\n\t\t\treturn getFlatNodeChildren(child.children) ?? child;\n\t\t}\n\t\telse if ('close' in child) {\n\t\t\t// We have an HTML node in this case.\n\t\t\t// In case this node is an invalid unpaired HTML node,\n\t\t\t// we still want to search its children\n\t\t\tconst htmlChild = <HtmlFlatNode>child;\n\t\t\tif (htmlChild.open && !htmlChild.close) {\n\t\t\t\treturn getFlatNodeChildren(htmlChild.children);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tfunction getFlatNodeChildren(children: FlatNode[]): FlatNode | undefined {\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst foundChild = getFlatNodeChild(children[i]);\n\t\t\tif (foundChild) {\n\t\t\t\treturn foundChild;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\treturn getFlatNodeChildren(root.children);\n}\n\nexport const allowedMimeTypesInScriptTag = ['text/html', 'text/plain', 'text/x-template', 'text/template', 'text/ng-template'];\n\n/**\n * Finds the HTML node within an HTML document at a given position\n * If position is inside a script tag of type template, then it will be parsed to find the inner HTML node as well\n */\nexport function getHtmlFlatNode(documentText: string, root: FlatNode | undefined, offset: number, includeNodeBoundary: boolean): HtmlFlatNode | undefined {\n\tlet currentNode: HtmlFlatNode | undefined = <HtmlFlatNode | undefined>getFlatNode(root, offset, includeNodeBoundary);\n\tif (!currentNode) { return; }\n\n\t// If the currentNode is a script one, first set up its subtree and then find HTML node.\n\tif (currentNode.name === 'script' && currentNode.children.length === 0) {\n\t\tconst scriptNodeBody = setupScriptNodeSubtree(documentText, currentNode);\n\t\tif (scriptNodeBody) {\n\t\t\tcurrentNode = getHtmlFlatNode(scriptNodeBody, currentNode, offset, includeNodeBoundary) ?? currentNode;\n\t\t}\n\t}\n\telse if (currentNode.type === 'cdata') {\n\t\tconst cdataBody = setupCdataNodeSubtree(documentText, currentNode);\n\t\tcurrentNode = getHtmlFlatNode(cdataBody, currentNode, offset, includeNodeBoundary) ?? currentNode;\n\t}\n\treturn currentNode;\n}\n\nexport function setupScriptNodeSubtree(documentText: string, scriptNode: HtmlFlatNode): string {\n\tconst isTemplateScript = scriptNode.name === 'script' &&\n\t\t(scriptNode.attributes &&\n\t\t\tscriptNode.attributes.some(x => x.name.toString() === 'type'\n\t\t\t\t&& allowedMimeTypesInScriptTag.includes(x.value.toString())));\n\tif (isTemplateScript\n\t\t&& scriptNode.open) {\n\t\t// blank out the rest of the document and generate the subtree.\n\t\tconst beforePadding = ' '.repeat(scriptNode.open.end);\n\t\tconst endToUse = scriptNode.close ? scriptNode.close.start : scriptNode.end;\n\t\tconst scriptBodyText = beforePadding + documentText.substring(scriptNode.open.end, endToUse);\n\t\tconst innerRoot: HtmlFlatNode = parse(scriptBodyText);\n\t\tinnerRoot.children.forEach(child => {\n\t\t\tscriptNode.children.push(child);\n\t\t\tchild.parent = scriptNode;\n\t\t});\n\t\treturn scriptBodyText;\n\t}\n\treturn '';\n}\n\nexport function setupCdataNodeSubtree(documentText: string, cdataNode: HtmlFlatNode): string {\n\t// blank out the rest of the document and generate the subtree.\n\tconst cdataStart = '<![CDATA[';\n\tconst cdataEnd = ']]>';\n\tconst startToUse = cdataNode.start + cdataStart.length;\n\tconst endToUse = cdataNode.end - cdataEnd.length;\n\tconst beforePadding = ' '.repeat(startToUse);\n\tconst cdataBody = beforePadding + documentText.substring(startToUse, endToUse);\n\tconst innerRoot: HtmlFlatNode = parse(cdataBody);\n\tinnerRoot.children.forEach(child => {\n\t\tcdataNode.children.push(child);\n\t\tchild.parent = cdataNode;\n\t});\n\treturn cdataBody;\n}\n\nexport function isOffsetInsideOpenOrCloseTag(node: FlatNode, offset: number): boolean {\n\tconst htmlNode = node as HtmlFlatNode;\n\tif ((htmlNode.open && offset > htmlNode.open.start && offset < htmlNode.open.end)\n\t\t|| (htmlNode.close && offset > htmlNode.close.start && offset < htmlNode.close.end)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function offsetRangeToSelection(document: vscode.TextDocument, start: number, end: number): vscode.Selection {\n\tconst startPos = document.positionAt(start);\n\tconst endPos = document.positionAt(end);\n\treturn new vscode.Selection(startPos, endPos);\n}\n\nexport function offsetRangeToVsRange(document: vscode.TextDocument, start: number, end: number): vscode.Range {\n\tconst startPos = document.positionAt(start);\n\tconst endPos = document.positionAt(end);\n\treturn new vscode.Range(startPos, endPos);\n}\n\n/**\n * Returns the deepest non comment node under given node\n */\nexport function getDeepestFlatNode(node: FlatNode | undefined): FlatNode | undefined {\n\tif (!node || !node.children || node.children.length === 0 || !node.children.find(x => x.type !== 'comment')) {\n\t\treturn node;\n\t}\n\tfor (let i = node.children.length - 1; i >= 0; i--) {\n\t\tif (node.children[i].type !== 'comment') {\n\t\t\treturn getDeepestFlatNode(node.children[i]);\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function findNextWord(propertyValue: string, pos: number): [number | undefined, number | undefined] {\n\n\tlet foundSpace = pos === -1;\n\tlet foundStart = false;\n\tlet foundEnd = false;\n\n\tlet newSelectionStart;\n\tlet newSelectionEnd;\n\twhile (pos < propertyValue.length - 1) {\n\t\tpos++;\n\t\tif (!foundSpace) {\n\t\t\tif (propertyValue[pos] === ' ') {\n\t\t\t\tfoundSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (foundSpace && !foundStart && propertyValue[pos] === ' ') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foundStart) {\n\t\t\tnewSelectionStart = pos;\n\t\t\tfoundStart = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (propertyValue[pos] === ' ') {\n\t\t\tnewSelectionEnd = pos;\n\t\t\tfoundEnd = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (foundStart && !foundEnd) {\n\t\tnewSelectionEnd = propertyValue.length;\n\t}\n\n\treturn [newSelectionStart, newSelectionEnd];\n}\n\nexport function findPrevWord(propertyValue: string, pos: number): [number | undefined, number | undefined] {\n\n\tlet foundSpace = pos === propertyValue.length;\n\tlet foundStart = false;\n\tlet foundEnd = false;\n\n\tlet newSelectionStart;\n\tlet newSelectionEnd;\n\twhile (pos > -1) {\n\t\tpos--;\n\t\tif (!foundSpace) {\n\t\t\tif (propertyValue[pos] === ' ') {\n\t\t\t\tfoundSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (foundSpace && !foundEnd && propertyValue[pos] === ' ') {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foundEnd) {\n\t\t\tnewSelectionEnd = pos + 1;\n\t\t\tfoundEnd = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (propertyValue[pos] === ' ') {\n\t\t\tnewSelectionStart = pos + 1;\n\t\t\tfoundStart = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (foundEnd && !foundStart) {\n\t\tnewSelectionStart = 0;\n\t}\n\n\treturn [newSelectionStart, newSelectionEnd];\n}\n\nexport function getNodesInBetween(node1: FlatNode, node2: FlatNode): FlatNode[] {\n\t// Same node\n\tif (sameNodes(node1, node2)) {\n\t\treturn [node1];\n\t}\n\n\t// Not siblings\n\tif (!sameNodes(node1.parent, node2.parent)) {\n\t\t// node2 is ancestor of node1\n\t\tif (node2.start < node1.start) {\n\t\t\treturn [node2];\n\t\t}\n\n\t\t// node1 is ancestor of node2\n\t\tif (node2.start < node1.end) {\n\t\t\treturn [node1];\n\t\t}\n\n\t\t// Get the highest ancestor of node1 that should be commented\n\t\twhile (node1.parent && node1.parent.end < node2.start) {\n\t\t\tnode1 = node1.parent;\n\t\t}\n\n\t\t// Get the highest ancestor of node2 that should be commented\n\t\twhile (node2.parent && node2.parent.start > node1.start) {\n\t\t\tnode2 = node2.parent;\n\t\t}\n\t}\n\n\tconst siblings: FlatNode[] = [];\n\tlet currentNode: FlatNode | undefined = node1;\n\tconst position = node2.end;\n\twhile (currentNode && position > currentNode.start) {\n\t\tsiblings.push(currentNode);\n\t\tcurrentNode = currentNode.nextSibling;\n\t}\n\treturn siblings;\n}\n\nexport function sameNodes(node1: FlatNode | undefined, node2: FlatNode | undefined): boolean {\n\t// return true if they're both undefined\n\tif (!node1 && !node2) {\n\t\treturn true;\n\t}\n\t// return false if only one of them is undefined\n\tif (!node1 || !node2) {\n\t\treturn false;\n\t}\n\treturn node1.start === node2.start && node1.end === node2.end;\n}\n\nexport function getEmmetConfiguration(syntax: string) {\n\tconst emmetConfig = vscode.workspace.getConfiguration('emmet');\n\tconst syntaxProfiles = Object.assign({}, emmetConfig['syntaxProfiles'] || {});\n\tconst preferences = Object.assign({}, emmetConfig['preferences'] || {});\n\t// jsx, xml and xsl syntaxes need to have self closing tags unless otherwise configured by user\n\tif (syntax === 'jsx' || syntax === 'xml' || syntax === 'xsl') {\n\t\tsyntaxProfiles[syntax] = syntaxProfiles[syntax] || {};\n\t\tif (typeof syntaxProfiles[syntax] === 'object'\n\t\t\t&& !syntaxProfiles[syntax].hasOwnProperty('self_closing_tag') // Old Emmet format\n\t\t\t&& !syntaxProfiles[syntax].hasOwnProperty('selfClosingStyle') // Emmet 2.0 format\n\t\t) {\n\t\t\tsyntaxProfiles[syntax] = {\n\t\t\t\t...syntaxProfiles[syntax],\n\t\t\t\tselfClosingStyle: syntax === 'jsx' ? 'xhtml' : 'xml'\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tpreferences,\n\t\tshowExpandedAbbreviation: emmetConfig['showExpandedAbbreviation'],\n\t\tshowAbbreviationSuggestions: emmetConfig['showAbbreviationSuggestions'],\n\t\tsyntaxProfiles,\n\t\tvariables: emmetConfig['variables'],\n\t\texcludeLanguages: emmetConfig['excludeLanguages'],\n\t\tshowSuggestionsAsSnippets: emmetConfig['showSuggestionsAsSnippets']\n\t};\n}\n\n/**\n * Itereates by each child, as well as nested child's children, in their order\n * and invokes `fn` for each. If `fn` function returns `false`, iteration stops\n */\nexport function iterateCSSToken(token: FlatCssToken, fn: (x: any) => any): boolean {\n\tfor (let i = 0, il = token.size; i < il; i++) {\n\t\tif (fn(token.item(i)) === false || iterateCSSToken(token.item(i), fn) === false) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns `name` CSS property from given `rule`\n */\nexport function getCssPropertyFromRule(rule: FlatRule, name: string): FlatProperty | undefined {\n\treturn rule.children.find(node => node.type === 'property' && node.name === name) as FlatProperty;\n}\n\n/**\n * Returns css property under caret in given editor or `null` if such node cannot\n * be found\n */\nexport function getCssPropertyFromDocument(editor: vscode.TextEditor, position: vscode.Position): FlatProperty | null {\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tconst offset = document.offsetAt(position);\n\tconst node = getFlatNode(rootNode, offset, true);\n\n\tif (isStyleSheet(editor.document.languageId)) {\n\t\treturn node && node.type === 'property' ? <FlatProperty>node : null;\n\t}\n\n\tconst htmlNode = <HtmlFlatNode>node;\n\tif (htmlNode\n\t\t&& htmlNode.name === 'style'\n\t\t&& htmlNode.open && htmlNode.close\n\t\t&& htmlNode.open.end < offset\n\t\t&& htmlNode.close.start > offset) {\n\t\tconst buffer = ' '.repeat(htmlNode.start) +\n\t\t\tdocument.getText().substring(htmlNode.start, htmlNode.end);\n\t\tconst innerRootNode = parseStylesheet(buffer);\n\t\tconst innerNode = getFlatNode(innerRootNode, offset, true);\n\t\treturn (innerNode && innerNode.type === 'property') ? <FlatProperty>innerNode : null;\n\t}\n\n\treturn null;\n}\n\n\nexport function getEmbeddedCssNodeIfAny(document: vscode.TextDocument, currentNode: FlatNode | undefined, position: vscode.Position): FlatNode | undefined {\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\tconst currentHtmlNode = <HtmlFlatNode>currentNode;\n\tif (currentHtmlNode && currentHtmlNode.open && currentHtmlNode.close) {\n\t\tconst offset = document.offsetAt(position);\n\t\tif (currentHtmlNode.open.end < offset && offset <= currentHtmlNode.close.start) {\n\t\t\tif (currentHtmlNode.name === 'style') {\n\t\t\t\tconst buffer = ' '.repeat(currentHtmlNode.open.end) + document.getText().substring(currentHtmlNode.open.end, currentHtmlNode.close.start);\n\t\t\t\treturn parseStylesheet(buffer);\n\t\t\t}\n\t\t}\n\t}\n\treturn;\n}\n\nexport function isStyleAttribute(currentNode: FlatNode | undefined, offset: number): boolean {\n\tif (!currentNode) {\n\t\treturn false;\n\t}\n\tconst currentHtmlNode = <HtmlFlatNode>currentNode;\n\tconst index = (currentHtmlNode.attributes || []).findIndex(x => x.name.toString() === 'style');\n\tif (index === -1) {\n\t\treturn false;\n\t}\n\tconst styleAttribute = currentHtmlNode.attributes[index];\n\treturn offset >= styleAttribute.value.start && offset <= styleAttribute.value.end;\n}\n\nexport function isNumber(obj: any): obj is number {\n\treturn typeof obj === 'number';\n}\n\nexport function toLSTextDocument(doc: vscode.TextDocument): LSTextDocument {\n\treturn LSTextDocument.create(doc.uri.toString(), doc.languageId, doc.version, doc.getText());\n}\n\nexport function getPathBaseName(path: string): string {\n\tconst pathAfterSlashSplit = path.split('/').pop();\n\tconst pathAfterBackslashSplit = pathAfterSlashSplit ? pathAfterSlashSplit.split('\\\\').pop() : '';\n\treturn pathAfterBackslashSplit ?? '';\n}\n\nexport function getSyntaxes() {\n\t/**\n\t * List of all known syntaxes, from emmetio/emmet\n\t */\n\treturn {\n\t\tmarkup: ['html', 'xml', 'xsl', 'jsx', 'js', 'pug', 'slim', 'haml'],\n\t\tstylesheet: ['css', 'sass', 'scss', 'less', 'sss', 'stylus']\n\t};\n}\n", "import StreamReader from '@emmetio/stream-reader';\nimport { eatPair, eatQuoted, isAlphaNumeric, isQuote, isSpace } from '@emmetio/stream-reader-utils';\n\nclass Node {\n\tconstructor(stream, type, open, close) {\n\t\tthis.stream = stream;\n\t\tthis.type = type;\n\t\tthis.open = open;\n\t\tthis.close = close;\n\n\t\tthis.children = [];\n\t\tthis.parent = null;\n\t}\n\n\t/**\n\t * Returns node name\n\t * @return {String}\n\t */\n\tget name() {\n\t\tif (this.type === 'tag' && this.open) {\n\t\t\treturn this.open && this.open.name && this.open.name.value;\n\t\t}\n\n\t\treturn '#' + this.type;\n\t}\n\n\t/**\n\t * Returns attributes of current node\n\t * @return {Array}\n\t */\n\tget attributes() {\n\t\treturn this.open && this.open.attributes;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\treturn this.open && this.open.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\treturn this.close ? this.close.end : this.open && this.open.end;\n\t}\n\n\tget firstChild() {\n\t\treturn this.children[0];\n\t}\n\n\tget nextSibling() {\n\t\tconst ix = this.getIndex();\n\t\treturn ix !== -1 ? this.parent.children[ix + 1] : null;\n\t}\n\n\tget previousSibling() {\n\t\tconst ix = this.getIndex();\n\t\treturn ix !== -1 ? this.parent.children[ix - 1] : null;\n\t}\n\n\t/**\n\t * Returns current element\u2019s index in parent list of child nodes\n\t * @return {Number}\n\t */\n\tgetIndex() {\n\t\treturn this.parent ? this.parent.children.indexOf(this) : -1;\n\t}\n\n\t/**\n\t * Adds given node as a child\n\t * @param {Node} node\n\t * @return {Node} Current node\n\t */\n\taddChild(node) {\n\t\tthis.removeChild(node);\n\t\tthis.children.push(node);\n\t\tnode.parent = this;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes given node from current node\u2019s child list\n\t * @param {Node} node\n\t * @return {Node} Current node\n\t */\n\tremoveChild(node) {\n\t\tconst ix = this.children.indexOf(node);\n\t\tif (ix !== -1) {\n\t\t\tthis.children.splice(ix, 1);\n\t\t\tnode.parent = null;\n\t\t}\n\n\t\treturn this;\n\t}\n}\n\n/**\n * A token factory method\n * @param {StreamReader} stream\n * @param {Point|Function} start Tokens\u2019 start location or stream consumer\n * @param {Point} [end] Tokens\u2019 end location\n * @return {Token}\n */\nvar token = function(stream, start, end) {\n\treturn typeof start === 'function'\n\t\t? eatToken(stream, start)\n\t\t: new Token(stream, start, end);\n};\n\n/**\n * Consumes characters from given stream that matches `fn` call and returns it\n * as token, if consumed\n * @param {StreamReader} stream\n * @param {Function} test\n * @return {Token}\n */\nfunction eatToken(stream, test) {\n\tconst start = stream.pos;\n\tif (stream.eatWhile(test)) {\n\t\treturn new Token(stream, start, stream.pos);\n\t}\n\n\tstream.pos = start;\n}\n\n/**\n * A structure describing text fragment in content stream\n */\nclass Token {\n\t/**\n\t * @param {ContentStreamReader} stream\n\t * @param {Point} start Tokens\u2019 start location in content stream\n\t * @param {Point} end Tokens\u2019 end location in content stream\n\t */\n\tconstructor(stream, start, end) {\n\t\tthis.stream = stream;\n\t\tthis.start = start != null ? start : stream.start;\n\t\tthis.end = end != null ? end : stream.pos;\n\t\tthis._value = null;\n\t}\n\n\t/**\n\t * Returns token textual value\n\t * NB implemented as getter to reduce unnecessary memory allocations for\n\t * strings that not required\n\t * @return {String}\n\t */\n\tget value() {\n\t\tif (this._value === null) {\n\t\t\tconst start = this.stream.start;\n\t\t\tconst end = this.stream.pos;\n\n\t\t\tthis.stream.start = this.start;\n\t\t\tthis.stream.pos = this.end;\n\t\t\tthis._value = this.stream.current();\n\n\t\t\tthis.stream.start = start;\n\t\t\tthis.stream.pos = end;\n\t\t}\n\n\t\treturn this._value;\n\t}\n\n\ttoString() {\n\t\treturn this.value;\n\t}\n\n\tvalueOf() {\n\t\treturn `${this.value} [${this.start}; ${this.end}]`;\n\t}\n}\n\nconst LANGLE = 60;\nconst RANGLE = 62; // < and >\nconst LSQUARE = 91;\nconst RSQUARE = 93; // [ and ]\nconst LROUND = 40;\nconst RROUND = 41; // ( and )\nconst LCURLY = 123;\nconst RCURLY = 125; // { and }\n\nconst opt = { throws: true };\n\n/**\n * Consumes paired tokens (like `[` and `]`) with respect of nesting and embedded\n * quoted values\n * @param {StreamReader} stream\n * @return {Token} A token with consumed paired character\n */\nvar eatPaired = function(stream) {\n\tconst start = stream.pos;\n\tconst consumed = eatPair(stream, LANGLE, RANGLE, opt)\n\t\t|| eatPair(stream, LSQUARE, RSQUARE, opt)\n\t\t|| eatPair(stream, LROUND, RROUND, opt)\n\t\t|| eatPair(stream, LCURLY, RCURLY, opt);\n\n\tif (consumed) {\n\t\treturn token(stream, start);\n\t}\n};\n\nconst SLASH$1 = 47; // /\nconst EQUALS = 61; // =\nconst RIGHT_ANGLE$1 = 62; // >\n\n/**\n * Consumes attributes from given stream\n * @param {StreamReader} stream\n * @return {Array} Array of consumed attributes\n */\nvar eatAttributes = function(stream) {\n\tconst result = [];\n\tlet name, value, attr;\n\n\twhile (!stream.eof()) {\n\t\tstream.eatWhile(isSpace);\n\t\tattr = { start: stream.pos };\n\n\t\t// A name could be a regular name or expression:\n\t\t// React-style \u2013 <div {...props}>\n\t\t// Angular-style \u2013 <div [ng-for]>\n\t\tif (attr.name = eatAttributeName(stream)) {\n\t\t\t// Consumed attribute name. Can be an attribute with name\n\t\t\t// or boolean attribute. The value can be React-like expression\n\t\t\tif (stream.eat(EQUALS)) {\n\t\t\t\tattr.value = eatAttributeValue(stream);\n\t\t\t} else {\n\t\t\t\tattr.boolean = true;\n\t\t\t}\n\t\t\tattr.end = stream.pos;\n\t\t\tresult.push(attr);\n\t\t} else if (isTerminator(stream.peek())) {\n\t\t\t// look for tag terminator in order to skip any other possible characters\n\t\t\t// (maybe junk)\n\t\t\tbreak;\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\treturn result;\n};\n\n/**\n * Consumes attribute name from current location\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatAttributeName(stream) {\n\treturn eatPaired(stream) || token(stream, isAttributeName);\n}\n\n/**\n * Consumes attribute value from given location\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatAttributeValue(stream) {\n\tconst start = stream.pos;\n\tif (eatQuoted(stream)) {\n\t\t// Should return token that points to unquoted value.\n\t\t// Use stream readers\u2019 public API to traverse instead of direct\n\t\t// manipulation\n\t\tconst current = stream.pos;\n\t\tlet valueStart, valueEnd;\n\n\t\tstream.pos = start;\n\t\tstream.next();\n\t\tvalueStart = stream.start = stream.pos;\n\n\t\tstream.pos = current;\n\t\tstream.backUp(1);\n\t\tvalueEnd = stream.pos;\n\n\t\tconst result = token(stream, valueStart, valueEnd);\n\t\tstream.pos = current;\n\t\treturn result;\n\t}\n\n\treturn eatPaired(stream) || eatUnquoted(stream);\n}\n\n/**\n * Check if given code belongs to attribute name.\n * NB some custom HTML variations allow non-default values in name, like `*ngFor`\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isAttributeName(code) {\n\treturn code !== EQUALS && !isTerminator(code) && !isSpace(code);\n}\n\n/**\n * Check if given code is tag terminator\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isTerminator(code) {\n\treturn code === RIGHT_ANGLE$1 || code === SLASH$1;\n}\n\n/**\n * Eats unquoted value from stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatUnquoted(stream) {\n\treturn token(stream, isUnquoted);\n}\n\n/**\n * Check if given character code is valid unquoted value\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isUnquoted(code) {\n\treturn !isNaN(code) && !isQuote(code) && !isSpace(code) && !isTerminator(code);\n}\n\nconst DASH = 45; // -\nconst DOT = 46; // .\nconst SLASH = 47; // /\nconst COLON = 58; // :\nconst LEFT_ANGLE = 60; // <\nconst RIGHT_ANGLE = 62; // >\nconst UNDERSCORE = 95; // _\n\n/**\n * Parses tag definition (open or close tag) from given stream state\n * @param {StreamReader} stream Content stream reader\n * @return {Object}\n */\nvar tag = function(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(LEFT_ANGLE)) {\n\t\tconst model = { type: stream.eat(SLASH) ? 'close' : 'open' };\n\n\t\tif (model.name = eatTagName(stream)) {\n\t\t\tif (model.type !== 'close') {\n\t\t\t\tmodel.attributes = eatAttributes(stream);\n\t\t\t\tstream.eatWhile(isSpace);\n\t\t\t\tmodel.selfClosing = stream.eat(SLASH);\n\t\t\t}\n\n\t\t\tif (stream.eat(RIGHT_ANGLE)) {\n\t\t\t\t// tag properly closed\n\t\t\t\treturn Object.assign(token(stream, start), model);\n\t\t\t}\n\t\t}\n\t}\n\n\t// invalid tag, revert to original position\n\tstream.pos = start;\n\treturn null;\n};\n\n/**\n * Eats HTML identifier (tag or attribute name) from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction eatTagName(stream) {\n\treturn token(stream, isTagName);\n}\n\n/**\n * Check if given character code can be used as HTML/XML tag name\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isTagName(code) {\n\treturn isAlphaNumeric(code)\n\t\t|| code === COLON // colon is used for namespaces\n\t\t|| code === DOT // in rare cases declarative tag names may have dots in names\n\t\t|| code === DASH\n\t\t|| code === UNDERSCORE;\n}\n\n/**\n * Eats array of character codes from given stream\n * @param {StreamReader} stream\n * @param {Number[]} codes Array of character codes\n * @return {Boolean}\n */\nfunction eatArray(stream, codes) {\n\tconst start = stream.pos;\n\n\tfor (let i = 0; i < codes.length; i++) {\n\t\tif (!stream.eat(codes[i])) {\n\t\t\tstream.pos = start;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tstream.start = start;\n\treturn true;\n}\n\n/**\n * Consumes section from given string which starts with `open` character codes\n * and ends with `close` character codes\n * @param {StreamReader} stream\n * @param {Number[]} open\n * @param {Number[]} close\n * @return {Boolean} Returns `true` if section was consumed\n */\nfunction eatSection(stream, open, close, allowUnclosed) {\n\tconst start = stream.pos;\n\tif (eatArray(stream, open)) {\n\t\t// consumed `<!--`, read next until we find ending part or reach the end of input\n\t\twhile (!stream.eof()) {\n\t\t\tif (eatArray(stream, close)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tstream.next();\n\t\t}\n\n\t\t// unclosed section is allowed\n\t\tif (allowUnclosed) {\n\t\t\treturn true;\n\t\t}\n\n\t\tstream.pos = start;\n\t\treturn false;\n\t}\n\n\t// unable to find section, revert to initial position\n\tstream.pos = start;\n\treturn null;\n}\n\n/**\n * Converts given string into array of character codes\n * @param {String} str\n * @return {Number[]}\n */\nfunction toCharCodes(str) {\n\treturn str.split('').map(ch => ch.charCodeAt(0));\n}\n\nconst open = toCharCodes('<!--');\nconst close = toCharCodes('-->');\n\n/**\n * Consumes HTML comment from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nvar comment = function(stream) {\n\tconst start = stream.pos;\n\tif (eatSection(stream, open, close, true)) {\n\t\tconst result = token(stream, start);\n\t\tresult.type = 'comment';\n\t\treturn result;\n\t}\n\n\treturn null;\n};\n\nconst open$1 = toCharCodes('<![CDATA[');\nconst close$1 = toCharCodes(']]>');\n\n/**\n * Consumes CDATA from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nvar cdata = function(stream) {\n\tconst start = stream.pos;\n\tif (eatSection(stream, open$1, close$1, true)) {\n\t\tconst result = token(stream, start);\n\t\tresult.type = 'cdata';\n\t\treturn result;\n\t}\n\n\treturn null;\n};\n\nconst defaultOptions = {\n\t/**\n\t * Expect XML content in searching content. It alters how should-be-empty\n\t * elements are treated: for example, in XML mode parser will try to locate\n\t * closing pair for `<br>` tag\n\t * @type {Boolean}\n\t */\n\txml: false,\n\n\tspecial: ['script', 'style'],\n\n\t/**\n\t * List of elements that should be treated as empty (e.g. without closing tag)\n\t * in non-XML syntax\n\t * @type {Array}\n\t */\n\tempty: ['img', 'meta', 'link', 'br', 'base', 'hr', 'area', 'wbr','col', 'embed', 'input', 'param', 'source', 'track']\n};\n\n/**\n * Parses given content into a DOM-like structure\n * @param {String|StreamReader} content\n * @param {Object} options\n * @return {Node}\n */\nfunction parse(content, options) {\n\toptions = Object.assign({}, defaultOptions, options);\n\tconst stream = typeof content === 'string'\n\t\t? new StreamReader(content)\n\t\t: content;\n\n\tconst root = new Node(stream, 'root');\n\tconst empty = new Set(options.empty);\n\tconst special = options.special.reduce(\n\t\t(map, name) => map.set(name, toCharCodes(`</${name}>`)), new Map());\n\tconst isEmpty = (token, name) =>\n\t\ttoken.selfClosing || (!options.xml && empty.has(name));\n\n\tlet m, node, name, stack = [root];\n\n\twhile (!stream.eof()) {\n\t\tif (m = match(stream)) {\n\t\t\tname = getName(m);\n\n\t\t\tif (m.type === 'open') {\n\t\t\t\t// opening tag\n\t\t\t\tnode = new Node(stream, 'tag', m);\n\t\t\t\tlast(stack).addChild(node);\n\t\t\t\tif (special.has(name)) {\n\t\t\t\t\tnode.close = consumeSpecial(stream, special.get(name));\n\t\t\t\t} else if (!isEmpty(m, name)) {\n\t\t\t\t\tstack.push(node);\n\t\t\t\t}\n\t\t\t} else if (m.type === 'close') {\n\t\t\t\t// closing tag, find it\u2019s matching opening tag\n\t\t\t\tfor (let i = stack.length - 1; i > 0; i--) {\n\t\t\t\t\tif (stack[i].name.toLowerCase() === name) {\n\t\t\t\t\t\tstack[i].close = m;\n\t\t\t\t\t\tstack = stack.slice(0, i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlast(stack).addChild(new Node(stream, m.type, m));\n\t\t\t}\n\t\t} else {\n\t\t\tstream.next();\n\t\t}\n\t}\n\n\treturn root;\n}\n\n/**\n * Matches known token in current state of given stream\n * @param {ContentStreamReader} stream\n * @return {Token}\n */\nfunction match(stream) {\n\t// fast-path optimization: check for `<` code\n\tif (stream.peek() === 60 /* < */) {\n\t\treturn comment(stream) || cdata(stream) || tag(stream);\n\t}\n}\n\n/**\n * @param {StreamReader} stream\n * @param {Number[]} codes\n * @return {Token}\n */\nfunction consumeSpecial(stream, codes) {\n\tconst start = stream.pos;\n\tlet m;\n\n\twhile (!stream.eof()) {\n\t\tif (eatArray(stream, codes)) {\n\t\t\tstream.pos = stream.start;\n\t\t\treturn tag(stream);\n\t\t}\n\t\tstream.next();\n\t}\n\n\tstream.pos = start;\n\treturn null;\n}\n\n/**\n * Returns name of given matched token\n * @param {Token} tag\n * @return {String}\n */\nfunction getName(tag$$1) {\n\treturn tag$$1.name ? tag$$1.name.value.toLowerCase() : `#${tag$$1.type}`;\n}\n\nfunction last(arr) {\n\treturn arr[arr.length - 1];\n}\n\nexport { defaultOptions, match };export default parse;\n", "/**\n * A streaming, character code-based string reader\n */\nclass StreamReader {\n\tconstructor(string, start, end) {\n\t\tif (end == null && typeof string === 'string') {\n\t\t\tend = string.length;\n\t\t}\n\n\t\tthis.string = string;\n\t\tthis.pos = this.start = start || 0;\n\t\tthis.end = end;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the end of the file.\n\t * @returns {Boolean}\n\t */\n\teof() {\n\t\treturn this.pos >= this.end;\n\t}\n\n\t/**\n\t * Creates a new stream instance which is limited to given `start` and `end`\n\t * range. E.g. its `eof()` method will look at `end` property, not actual\n\t * stream end\n\t * @param {Point} start\n\t * @param {Point} end\n\t * @return {StreamReader}\n\t */\n\tlimit(start, end) {\n\t\treturn new this.constructor(this.string, start, end);\n\t}\n\n\t/**\n\t * Returns the next character code in the stream without advancing it.\n\t * Will return NaN at the end of the file.\n\t * @returns {Number}\n\t */\n\tpeek() {\n\t\treturn this.string.charCodeAt(this.pos);\n\t}\n\n\t/**\n\t * Returns the next character in the stream and advances it.\n\t * Also returns <code>undefined</code> when no more characters are available.\n\t * @returns {Number}\n\t */\n\tnext() {\n\t\tif (this.pos < this.string.length) {\n\t\t\treturn this.string.charCodeAt(this.pos++);\n\t\t}\n\t}\n\n\t/**\n\t * `match` can be a character code or a function that takes a character code\n\t * and returns a boolean. If the next character in the stream 'matches'\n\t * the given argument, it is consumed and returned.\n\t * Otherwise, `false` is returned.\n\t * @param {Number|Function} match\n\t * @returns {Boolean}\n\t */\n\teat(match) {\n\t\tconst ch = this.peek();\n\t\tconst ok = typeof match === 'function' ? match(ch) : ch === match;\n\n\t\tif (ok) {\n\t\t\tthis.next();\n\t\t}\n\n\t\treturn ok;\n\t}\n\n\t/**\n\t * Repeatedly calls <code>eat</code> with the given argument, until it\n\t * fails. Returns <code>true</code> if any characters were eaten.\n\t * @param {Object} match\n\t * @returns {Boolean}\n\t */\n\teatWhile(match) {\n\t\tconst start = this.pos;\n\t\twhile (!this.eof() && this.eat(match)) {}\n\t\treturn this.pos !== start;\n\t}\n\n\t/**\n\t * Backs up the stream n characters. Backing it up further than the\n\t * start of the current token will cause things to break, so be careful.\n\t * @param {Number} n\n\t */\n\tbackUp(n) {\n\t\tthis.pos -= (n || 1);\n\t}\n\n\t/**\n\t * Get the string between the start of the current token and the\n\t * current stream position.\n\t * @returns {String}\n\t */\n\tcurrent() {\n\t\treturn this.substring(this.start, this.pos);\n\t}\n\n\t/**\n\t * Returns substring for given range\n\t * @param {Number} start\n\t * @param {Number} [end]\n\t * @return {String}\n\t */\n\tsubstring(start, end) {\n\t\treturn this.string.slice(start, end);\n\t}\n\n\t/**\n\t * Creates error object with current stream state\n\t * @param {String} message\n\t * @return {Error}\n\t */\n\terror(message) {\n\t\tconst err = new Error(`${message} at char ${this.pos + 1}`);\n\t\terr.originalMessage = message;\n\t\terr.pos = this.pos;\n\t\terr.string = this.string;\n\t\treturn err;\n\t}\n}\n\nexport default StreamReader;\n", "/**\n * Methods for consuming quoted values\n */\n\nconst SINGLE_QUOTE = 39; // '\nconst DOUBLE_QUOTE = 34; // \"\n\nconst defaultOptions = {\n\tescape: 92, // \\ character\n\tthrows: false\n};\n\n/**\n * Consumes 'single' or \"double\"-quoted string from given string, if possible\n * @param {StreamReader} stream\n * @param {Number} options.escape A character code of quote-escape symbol\n * @param {Boolean} options.throws Throw error if quotes string can\u2019t be properly consumed\n * @return {Boolean} `true` if quoted string was consumed. The contents\n * of quoted string will be availabe as `stream.current()`\n */\nvar eatQuoted = function(stream, options) {\n\toptions = options ? Object.assign({}, defaultOptions, options) : defaultOptions;\n\tconst start = stream.pos;\n\tconst quote = stream.peek();\n\n\tif (stream.eat(isQuote)) {\n\t\twhile (!stream.eof()) {\n\t\t\tswitch (stream.next()) {\n\t\t\t\tcase quote:\n\t\t\t\t\tstream.start = start;\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase options.escape:\n\t\t\t\t\tstream.next();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// If we\u2019re here then stream wasn\u2019t properly consumed.\n\t\t// Revert stream and decide what to do\n\t\tstream.pos = start;\n\n\t\tif (options.throws) {\n\t\t\tthrow stream.error('Unable to consume quoted string');\n\t\t}\n\t}\n\n\treturn false;\n};\n\nfunction isQuote(code) {\n\treturn code === SINGLE_QUOTE || code === DOUBLE_QUOTE;\n}\n\n/**\n * Check if given code is a number\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isNumber(code) {\n\treturn code > 47 && code < 58;\n}\n\n/**\n * Check if given character code is alpha code (letter through A to Z)\n * @param {Number} code\n * @param {Number} [from]\n * @param {Number} [to]\n * @return {Boolean}\n */\nfunction isAlpha(code, from, to) {\n\tfrom = from || 65; // A\n\tto = to || 90; // Z\n\tcode &= ~32; // quick hack to convert any char code to uppercase char code\n\n\treturn code >= from && code <= to;\n}\n\n/**\n * Check if given character code is alpha-numeric (letter through A to Z or number)\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isAlphaNumeric(code) {\n\treturn isNumber(code) || isAlpha(code);\n}\n\nfunction isWhiteSpace(code) {\n\treturn code === 32 /* space */\n\t\t|| code === 9 /* tab */\n\t\t|| code === 160; /* non-breaking space */\n}\n\n/**\n * Check if given character code is a space\n * @param {Number} code\n * @return {Boolean}\n */\nfunction isSpace(code) {\n\treturn isWhiteSpace(code)\n\t\t|| code === 10 /* LF */\n\t\t|| code === 13; /* CR */\n}\n\nconst defaultOptions$1 = {\n\tescape: 92, // \\ character\n\tthrows: false\n};\n\n/**\n * Eats paired characters substring, for example `(foo)` or `[bar]`\n * @param {StreamReader} stream\n * @param {Number} open Character code of pair openinig\n * @param {Number} close Character code of pair closing\n * @param {Object} [options]\n * @return {Boolean} Returns `true` if chacarter pair was successfully\n * consumed, it\u2019s content will be available as `stream.current()`\n */\nfunction eatPair(stream, open, close, options) {\n\toptions = options ? Object.assign({}, defaultOptions$1, options) : defaultOptions$1;\n\tconst start = stream.pos;\n\n\tif (stream.eat(open)) {\n\t\tlet stack = 1, ch;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (eatQuoted(stream, options)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tch = stream.next();\n\t\t\tif (ch === open) {\n\t\t\t\tstack++;\n\t\t\t} else if (ch === close) {\n\t\t\t\tstack--;\n\t\t\t\tif (!stack) {\n\t\t\t\t\tstream.start = start;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (ch === options.escape) {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\n\t\t// If we\u2019re here then paired character can\u2019t be consumed\n\t\tstream.pos = start;\n\n\t\tif (options.throws) {\n\t\t\tthrow stream.error(`Unable to find matching pair for ${String.fromCharCode(open)}`);\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport { eatQuoted, isQuote, isAlpha, isNumber, isAlphaNumeric, isSpace, isWhiteSpace, eatPair };\n", "import StreamReader from '@emmetio/stream-reader';\nimport { eatPair, isAlpha, isNumber, isQuote, isSpace } from '@emmetio/stream-reader-utils';\n\n/**\n * Abstract container that contains nested nodes or other containers\n */\nclass Node {\n\tconstructor(type) {\n\t\tthis.type = type;\n\t\tthis.children = [];\n\t\tthis.parent = null;\n\t}\n\n\tget firstChild() {\n\t\treturn this.children[0];\n\t}\n\n\tget nextSibling() {\n\t\tconst ix = this.index();\n\t\treturn ix !== -1 ? this.parent.children[ix + 1] : null;\n\t}\n\n\tget previousSibling() {\n\t\tconst ix = this.index();\n\t\treturn ix !== -1 ? this.parent.children[ix - 1] : null;\n\t}\n\n\t/**\n\t * Returns current element\u2019s index in parent list of child nodes\n\t * @return {Number}\n\t */\n\tindex() {\n\t\treturn this.parent ? this.parent.children.indexOf(this) : -1;\n\t}\n\n\t/**\n\t * Adds given node as a child\n\t * @param {Node} node\n\t * @return {Node} Current node\n\t */\n\tadd(node) {\n\t\tif (node) {\n\t\t\tnode.remove();\n\t\t\tthis.children.push(node);\n\t\t\tnode.parent = this;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes current node from its parent\n\t * @return {Node} Current node\n\t */\n\tremove() {\n\t\tif (this.parent) {\n\t\t\tconst ix = this.index();\n\t\t\tif (ix !== -1) {\n\t\t\t\tthis.parent.children.splice(ix, 1);\n\t\t\t\tthis.parent = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n}\n\nclass Stylesheet extends Node {\n\tconstructor() {\n\t\tsuper('stylesheet');\n\t\tthis.comments = [];\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\tconst node = this.firstChild;\n\t\treturn node && node.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s end position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\tconst node = this.children[this.children.length - 1];\n\t\treturn node && node.end;\n\t}\n\n\t/**\n\t * Adds comment token into a list.\n\t * This somewhat awkward feature is required to properly detect comment\n\t * ranges. Specifically, in Atom: it\u2019s API provides scopes limited to current\n\t * line only\n\t * @param {Token} token\n\t */\n\taddComment(token) {\n\t\tthis.comments.push(token);\n\t}\n}\n\n/**\n * Removes tokens that matches given criteria from start and end of given list\n * @param {Token[]} tokens\n * @return {Token[]}\n */\nfunction trimTokens(tokens) {\n\ttokens = tokens.slice();\n\tlet len;\n\twhile (len !== tokens.length) {\n\t\tlen = tokens.length;\n\t\tif (isFormattingToken(tokens[0])) {\n\t\t\ttokens.shift();\n\t\t}\n\n\t\tif (isFormattingToken(last(tokens))) {\n\t\t\ttokens.pop();\n\t\t}\n\t}\n\n\treturn tokens;\n}\n\n/**\n * Trims formatting tokens (whitespace and comments) from the beginning and end\n * of given token list\n * @param {Token[]} tokens\n * @return {Token[]}\n */\nfunction trimFormatting(tokens) {\n\treturn trimTokens(tokens, isFormattingToken);\n}\n\n/**\n * Check if given token is a formatting one (whitespace or comment)\n * @param {Token} token\n * @return {Boolean}\n */\nfunction isFormattingToken(token) {\n\tconst type = token && token.type;\n\treturn type === 'whitespace' || type === 'comment';\n}\n\n/**\n * Consumes string char-by-char from given stream\n * @param {StreamReader} stream\n * @param {String} string\n * @return {Boolean} Returns `true` if string was completely consumed\n */\nfunction eatString(stream, string) {\n\tconst start = stream.pos;\n\n\tfor (let i = 0, il = string.length; i < il; i++) {\n\t\tif (!stream.eat(string.charCodeAt(i))) {\n\t\t\tstream.pos = start;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction consume(stream, match) {\n\tconst start = stream.pos;\n\tif (stream.eat(match)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction consumeWhile(stream, match) {\n\tconst start = stream.pos;\n\tif (stream.eatWhile(match)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction last(arr) {\n\treturn arr[arr.length - 1];\n}\n\nfunction valueOf(token) {\n\treturn token && token.valueOf();\n}\n\n/**\n * A structure describing text fragment in content stream. It may contain\n * other sub-fragments (also tokens) that represent current fragments\u2019 logical\n * parts\n */\nclass Token {\n\t/**\n\t * @param {StreamReader} stream\n\t * @param {String} type Token type\n\t * @param {Object} [start] Tokens\u2019 start position in `stream`\n\t * @param {Object} [end] Tokens\u2019 end position in `stream`\n\t */\n\tconstructor(stream, type, start, end) {\n\t\tthis.stream = stream;\n\t\tthis.start = start != null ? start : stream.start;\n\t\tthis.end = end != null ? end : stream.pos;\n\t\tthis.type = type;\n\n\t\tthis._props = null;\n\t\tthis._value = null;\n\t\tthis._items = null;\n\t}\n\n\tget size() {\n\t\treturn this._items ? this._items.length : 0;\n\t}\n\n\tget items() {\n\t\treturn this._items;\n\t}\n\n\tclone(start, end) {\n\t\treturn new this.constructor(this.stream, this.type,\n\t\t\tstart != null ? start : this.start,\n\t\t\tend != null ? end : this.end);\n\t}\n\n\tadd(item) {\n\t\tif (Array.isArray(item)) {\n\t\t\tfor (let i = 0, il = item.length; i < il; i++) {\n\t\t\t\tthis.add(item[i]);\n\t\t\t}\n\t\t} else if (item) {\n\t\t\tif (!this._items) {\n\t\t\t\tthis._items = [item];\n\t\t\t} else {\n\t\t\t\tthis._items.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tremove(item) {\n\t\tif (this._items) {\n\t\t\tconst ix = this._items.indexOf(item);\n\t\t\tif (ix !== -1 ) {\n\t\t\t\tthis._items.splice(ix, 1);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\titem(i) {\n\t\tconst size = this.size;\n\t\treturn this._items && this._items[(size + i) % size];\n\t}\n\n\tlimit() {\n\t\treturn this.stream.limit(this.start, this.end);\n\t}\n\n\tslice(from, to) {\n\t\tconst token = this.clone();\n\t\tconst items = this._items && this._items.slice(from, to);\n\t\tif (items && items.length) {\n\t\t\ttoken.start = items[0].start;\n\t\t\ttoken.end = items[items.length - 1].end;\n\t\t\ttoken.add(items);\n\t\t} else if (items) {\n\t\t\t// Empty token\n\t\t\ttoken.start = token.end;\n\t\t}\n\n\t\treturn token;\n\t}\n\n\tproperty(name, value) {\n\t\tif (typeof value !== 'undefined') {\n\t\t\t// set property value\n\t\t\tif (!this._props) {\n\t\t\t\tthis._props = {};\n\t\t\t}\n\n\t\t\tthis._props[name] = value;\n\t\t}\n\n\t\treturn this._props && this._props[name];\n\t}\n\n\t/**\n\t * Returns token textual representation\n\t * @return {String}\n\t */\n\ttoString() {\n\t\treturn `${this.valueOf()} [${this.start}, ${this.end}] (${this.type})`;\n\t}\n\n\tvalueOf() {\n\t\tif (this._value === null) {\n\t\t\tthis._value = this.stream.substring(this.start, this.end);\n\t\t}\n\n\t\treturn this._value;\n\t}\n}\n\nconst COMMA = 44; // ,\nconst PROP_DELIMITER$1 = 58; // :\nconst PROP_TERMINATOR$1 = 59; // ;\nconst RULE_START$1 = 123; // {\nconst RULE_END$1 = 125; // }\n\nconst types = new Map()\n\t.set(COMMA, 'comma')\n\t.set(PROP_DELIMITER$1, 'propertyDelimiter')\n\t.set(PROP_TERMINATOR$1, 'propertyTerminator')\n\t.set(RULE_START$1, 'ruleStart')\n\t.set(RULE_END$1, 'ruleEnd');\n\n/**\n * Consumes separator token from given string\n */\nfunction separator(stream) {\n\tif (isSeparator(stream.peek())) {\n\t\tconst start = stream.pos;\n\t\tconst type = types.get(stream.next());\n\t\tconst token = new Token(stream, 'separator', start);\n\n\t\ttoken.property('type', type);\n\t\treturn token;\n\t}\n}\n\n\n\nfunction isSeparator(code) {\n\treturn code === COMMA\n\t\t|| code === PROP_DELIMITER$1 || code === PROP_TERMINATOR$1\n\t\t|| code === RULE_START$1 || code === RULE_END$1;\n}\n\nconst ARGUMENTS_START = 40; // (\nconst ARGUMENTS_END = 41; // )\n\nvar args = function(stream, tokenConsumer) {\n\tif (stream.peek() === ARGUMENTS_START) {\n\t\tconst start = stream.pos;\n\t\tstream.next();\n\n\t\tconst tokens = [];\n\t\tlet t;\n\t\t// in LESS, it\u2019s possible to separate arguments list either by `;` or `,`.\n\t\t// In first case, we should keep comma-separated item as a single argument\n\t\tlet usePropTerminator = false;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (isUnexpectedTerminator(stream.peek()) || stream.eat(ARGUMENTS_END)) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tt = tokenConsumer(stream);\n\t\t\tif (!t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (isSemicolonSeparator(t)) {\n\t\t\t\tusePropTerminator = true;\n\t\t\t}\n\n\t\t\ttokens.push(t);\n\t\t}\n\n\t\tstream.start = start;\n\t\treturn createArgumentList(stream, tokens, usePropTerminator);\n\t}\n};\n\nfunction isUnexpectedTerminator(code) {\n\treturn code === RULE_START$1 || code === RULE_END$1;\n}\n\nfunction createArgumentList(stream, tokens, usePropTerminator) {\n\tconst argsToken = new Token(stream, 'arguments');\n\tconst isSeparator = usePropTerminator ? isSemicolonSeparator : isCommaSeparator;\n\tlet arg = [];\n\n\tfor (let i = 0, il = tokens.length, token; i < il; i++) {\n\t\ttoken = tokens[i];\n\t\tif (isSeparator(token)) {\n\t\t\targsToken.add(createArgument(stream, arg) || createEmptyArgument(stream, token.start));\n\t\t\targ.length = 0;\n\t\t} else {\n\t\t\targ.push(token);\n\t\t}\n\t}\n\n\tif (arg.length) {\n\t\targsToken.add(createArgument(stream, arg));\n\t}\n\n\treturn argsToken;\n}\n\nfunction createArgument(stream, tokens) {\n\ttokens = trimFormatting(tokens);\n\n\tif (tokens.length) {\n\t\tconst arg = new Token(stream, 'argument', tokens[0].start, last(tokens).end);\n\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\targ.add(tokens[i]);\n\t\t}\n\n\t\treturn arg;\n\t}\n}\n\nfunction createEmptyArgument(stream, pos) {\n\tconst token = new Token(stream, 'argument', pos, pos);\n\ttoken.property('empty', true);\n\treturn token;\n}\n\nfunction isCommaSeparator(token) {\n\treturn token.property('type') === 'comma';\n}\n\nfunction isSemicolonSeparator(token) {\n\treturn token.property('type') === 'propertyTerminator';\n}\n\nconst HYPHEN = 45;\nconst UNDERSCORE = 95;\n\nfunction ident(stream) {\n\treturn eatIdent(stream) && new Token(stream, 'ident');\n}\n\nfunction eatIdent(stream) {\n\tconst start = stream.pos;\n\n\tstream.eat(HYPHEN);\n\tif (stream.eat(isIdentStart)) {\n\t\tstream.eatWhile(isIdent);\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction isIdentStart(code) {\n\treturn code === UNDERSCORE || code === HYPHEN || isAlpha(code) || code >= 128;\n}\n\nfunction isIdent(code) {\n\treturn isNumber(code) || isIdentStart(code);\n}\n\nfunction prefixed(stream, tokenType, prefix, body, allowEmptyBody) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(prefix)) {\n\t\tconst bodyToken = body(stream, start);\n\t\tif (bodyToken || allowEmptyBody) {\n\t\t\tstream.start = start;\n\t\t\treturn new Token(stream, tokenType, start).add(bodyToken);\n\t\t}\n\t}\n\n\tstream.pos = start;\n}\n\nconst AT = 64; // @\n\n/**\n * Consumes at-keyword from given stream\n */\nfunction atKeyword(stream) {\n\treturn prefixed(stream, 'at-keyword', AT, ident);\n}\n\nconst HASH = 35; // #\nconst AT$1 = 64; // @\n\n/**\n * Consumes interpolation token, e.g. `#{expression}`\n * @param {StreamReader} stream\n * @param {Function} tokenConsumer\n * @return {Token}\n */\nfunction interpolation(stream, tokenConsumer) {\n\tconst start = stream.pos;\n\ttokenConsumer = tokenConsumer || defaultTokenConsumer;\n\n\tif ((stream.eat(HASH) || stream.eat(AT$1)) && stream.eat(RULE_START$1)) {\n\t\tconst container = new Token(stream, 'interpolation', start);\n\t\tlet stack = 1, token;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (stream.eat(RULE_START$1)) {\n\t\t\t\tstack++;\n\t\t\t} else if (stream.eat(RULE_END$1)) {\n\t\t\t\tstack--;\n\t\t\t\tif (!stack) {\n\t\t\t\t\tcontainer.end = stream.pos;\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\t\t\t} else if (token = tokenConsumer(stream)) {\n\t\t\t\tcontainer.add(token);\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tstream.pos = start;\n}\n\nfunction eatInterpolation(stream) {\n\tconst start = stream.pos;\n\n\tif ((stream.eat(HASH) || stream.eat(AT$1)) && eatPair(stream, RULE_START$1, RULE_END$1)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction defaultTokenConsumer(stream) {\n\tconst start = stream.pos;\n\n\twhile (!stream.eof()) {\n\t\tif (stream.peek() === RULE_END$1) {\n\t\t\tbreak;\n\t\t}\n\n\t\teatString$1(stream) || stream.next();\n\t}\n\n\tif (start !== stream.pos) {\n\t\treturn new Token(stream, 'expression', start);\n\t}\n}\n\n/**\n * Consumes quoted string from current string and returns token with consumed\n * data or `null`, if string wasn\u2019t consumed\n * @param {StreamReader} stream\n * @return {StringToken}\n */\nfunction string(stream) {\n\treturn eatString$1(stream, true);\n}\n\nfunction eatString$1(stream, asToken) {\n\tlet ch = stream.peek(), pos, tokens, token;\n\n\tif (isQuote(ch)) {\n\t\tstream.start = stream.pos;\n\t\tstream.next();\n\t\tconst quote = ch;\n\t\tconst valueStart = stream.pos;\n\n\t\twhile (!stream.eof()) {\n\t\t\tpos = stream.pos;\n\t\t\tif (stream.eat(quote) || stream.eat(isNewline)) {\n\t\t\t\t// found end of string or newline without preceding '\\',\n\t\t\t\t// which is not allowed (don\u2019t throw error, for now)\n\t\t\t\tbreak;\n\t\t\t} else if (stream.eat(92 /* \\ */)) {\n\t\t\t\t// backslash allows newline in string\n\t\t\t\tstream.eat(isNewline);\n\t\t\t} else if (asToken && (token = interpolation(stream))) {\n\t\t\t\tif (!tokens) {\n\t\t\t\t\ttokens = [token];\n\t\t\t\t} else {\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstream.next();\n\t\t}\n\n\t\t// Either reached EOF or explicitly stopped at string end\n\t\t// NB use extra `asToken` param to return boolean instead of token to reduce\n\t\t// memory allocations and improve performance\n\t\tif (asToken) {\n\t\t\tconst token = new Token(stream, 'string');\n\t\t\tconst inner = new Token(stream, 'unquoted', valueStart, pos);\n\t\t\tinner.add(tokens);\n\t\t\ttoken.add(inner);\n\t\t\ttoken.property('quote', quote);\n\t\t\treturn token;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isNewline(code) {\n\treturn code === 10 /* LF */ || code === 13 /* CR */;\n}\n\nconst ASTERISK = 42;\nconst SLASH = 47;\n\n/**\n * Consumes comment from given stream: either multi-line or single-line\n * @param {StreamReader} stream\n * @return {CommentToken}\n */\nvar comment = function(stream) {\n\treturn singleLineComment(stream) || multiLineComment(stream);\n};\n\nfunction singleLineComment(stream) {\n\tif (eatSingleLineComment(stream)) {\n\t\tconst token = new Token(stream, 'comment');\n\t\ttoken.property('type', 'single-line');\n\t\treturn token;\n\t}\n}\n\nfunction multiLineComment(stream) {\n\tif (eatMultiLineComment(stream)) {\n\t\tconst token = new Token(stream, 'comment');\n\t\ttoken.property('type', 'multiline');\n\t\treturn token;\n\t}\n}\n\nfunction eatComment(stream) {\n\treturn eatSingleLineComment(stream) || eatMultiLineComment(stream);\n}\n\nfunction eatSingleLineComment(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(SLASH) && stream.eat(SLASH)) {\n\t\t// single-line comment, consume till the end of line\n\t\tstream.start = start;\n\t\twhile (!stream.eof()) {\n\t\t\tif (isLineBreak(stream.next())) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction eatMultiLineComment(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(SLASH) && stream.eat(ASTERISK)) {\n\t\twhile (!stream.eof()) {\n\t\t\tif (stream.next() === ASTERISK && stream.eat(SLASH)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction isLineBreak(code) {\n\treturn code === 10 /* LF */ || code === 13 /* CR */;\n}\n\n/**\n * Consumes white-space tokens from given stream\n */\nfunction whitespace(stream) {\n\treturn eatWhitespace(stream) && new Token(stream, 'whitespace');\n}\n\nfunction eatWhitespace(stream) {\n\treturn consumeWhile(stream, isSpace);\n}\n\nconst ATTR_START = 91; // [\nconst ATTR_END = 93; // ]\n\n/**\n * Consumes attribute from given string, e.g. value between [ and ]\n * @param {StreamReader} stream\n * @return {AttributeToken}\n */\nfunction eatAttribuite(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eat(ATTR_START)) {\n\t\tskip(stream);\n\t\tconst name = ident(stream);\n\n\t\tskip(stream);\n\t\tconst op = operator(stream);\n\n\t\tskip(stream);\n\t\tconst value = string(stream) || ident(stream);\n\n\t\tskip(stream);\n\t\tstream.eat(ATTR_END);\n\n\t\treturn new Token(stream, 'attribute', start).add(name).add(op).add(value);\n\t}\n}\n\nfunction skip(stream) {\n\twhile (!stream.eof()) {\n\t\tif (!eatWhitespace(stream) && !eatComment(stream)) {\n\t\t\treturn true;\n\t\t}\n\t}\n}\n\nfunction operator(stream) {\n\treturn consumeWhile(stream, isOperator) && new Token(stream, 'operator');\n}\n\nfunction isOperator(code) {\n\treturn code === 126 /* ~ */\n\t\t|| code === 124 /* | */\n\t\t|| code === 94 /* ^ */\n\t\t|| code === 36 /* $ */\n\t\t|| code === 42 /* * */\n\t\t|| code === 61; /* = */\n}\n\nconst BACKTICK = 96; // `\n\n/**\n * Consumes backtick token, e.g. `...`\n * @param {StreamReader} stream\n * @param {Function} tokenConsumer\n * @return {Token}\n */\nfunction backtick(stream) {\n\tif (eatBacktick(stream)) {\n\t\treturn new Token(stream, 'backtick');\n\t}\n}\n\nfunction eatBacktick(stream) {\n\tconst start = stream.pos;\n\n\tif (eatPair(stream, BACKTICK, BACKTICK)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nconst CLASS = 46; // .\n\n/**\n * Consumes class fragment from given stream, e.g. `.foo`\n * @param {StreamReader} stream\n * @return {ClassToken}\n */\nfunction className(stream) {\n\treturn prefixed(stream, 'class', CLASS, ident);\n}\n\nconst ADJACENT_SIBLING = 43; // +\nconst GENERAL_SIBLING = 126; // ~\nconst CHILD = 62; // >\nconst NESTING = 38; // &\n\nconst types$1 = {\n\t[ADJACENT_SIBLING]: 'adjacentSibling',\n\t[GENERAL_SIBLING]: 'generalSibling',\n\t[CHILD]: 'child',\n\t[NESTING]: 'nesting'\n};\n\n/**\n * Consumes combinator token from given string\n */\nvar combinator = function(stream) {\n\tif (isCombinator(stream.peek())) {\n\t\tconst start = stream.pos;\n\t\tconst type = types$1[stream.next()];\n\t\tconst token = new Token(stream, 'combinator', start);\n\n\t\ttoken.property('type', type);\n\t\treturn token;\n\t}\n};\n\n\n\nfunction isCombinator(code) {\n\treturn code === ADJACENT_SIBLING || code === GENERAL_SIBLING\n\t\t|| code === NESTING || code === CHILD;\n}\n\nconst HASH$1 = 35;\n\nfunction hash(stream) {\n\treturn prefixed(stream, 'hash', HASH$1, hashValue, true);\n}\n\n\n\nfunction hashValue(stream) {\n\tif (eatHashValue(stream)) {\n\t\treturn new Token(stream, 'hash-value');\n\t}\n}\n\nfunction eatHashValue(stream) {\n\treturn consumeWhile(stream, isHashValue);\n}\n\nfunction isHashValue(code) {\n\treturn isNumber(code) || isAlpha(code, 65 /* A */, 70 /* F */)\n\t\t|| code === 95 /* _ */ || code === 45 /* - */\n\t\t|| code > 128; /* non-ASCII */\n}\n\nconst ID = 35; // #\n\n/**\n * Consumes id fragment from given stream, e.g. `#foo`\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction id(stream) {\n\treturn prefixed(stream, 'id', ID, ident);\n}\n\nconst IMPORTANT = 33; // !\n\n/**\n * Consumes !important token\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction important(stream) {\n\treturn prefixed(stream, 'important', IMPORTANT, ident);\n}\n\nconst DOT = 46; // .\n\n/**\n * Consumes number from given string, e.g. `10px`\n * @param {StreamReader} stream\n * @return {NumberToken}\n */\nfunction number(stream) {\n\tif (eatNumericPart(stream)) {\n\t\tconst start = stream.start;\n\t\tconst num = new Token(stream, 'value');\n\t\tconst unit = eatUnitPart(stream) ? new Token(stream, 'unit') : null;\n\n\t\treturn new Token(stream, 'number', start).add(num).add(unit);\n\t}\n}\n\n\n\nfunction eatNumericPart(stream) {\n\tconst start = stream.pos;\n\n\tstream.eat(isOperator$1);\n\tif (stream.eatWhile(isNumber)) {\n\t\tstream.start = start;\n\t\tconst decimalEnd = stream.pos;\n\n\t\tif (!(stream.eat(DOT) && stream.eatWhile(isNumber))) {\n\t\t\tstream.pos = decimalEnd;\n\t\t}\n\n\t\treturn true;\n\t} else if (stream.eat(DOT) && stream.eatWhile(isNumber)) {\n\t\tstream.start = start;\n\t\treturn true;\n\t}\n\n\t// TODO eat exponent part\n\n\tstream.pos = start;\n\treturn false;\n}\n\nfunction eatUnitPart(stream) {\n\treturn eatIdent(stream) || eatPercent(stream);\n}\n\nfunction eatPercent(stream) {\n\treturn consume(stream, 37 /* % */);\n}\n\nfunction isOperator$1(code) {\n\treturn code === 45 /* - */ || code === 43 /* + */;\n}\n\nconst NOT = 33; // !\nconst MULTIPLY = 42; // *\nconst PLUS = 43; // +\nconst MINUS = 45; // -\nconst DIVIDE = 47; // /\nconst LESS_THAN = 60; // <\nconst EQUALS = 61; // =\nconst GREATER_THAN = 62; // <\n\nfunction operator$1(stream) {\n\treturn eatOperator(stream) && new Token(stream, 'operator');\n}\n\nfunction eatOperator(stream) {\n\tif (consume(stream, isEquality)) {\n\t\tstream.eatWhile(EQUALS);\n\t\treturn true;\n\t} else if (consume(stream, isOperator$2)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isEquality(code) {\n\treturn code === NOT || code === LESS_THAN || code === EQUALS || code === GREATER_THAN;\n}\n\nfunction isOperator$2(code) {\n\treturn code === MULTIPLY || code === PLUS || code === MINUS || code === DIVIDE\n\t\t|| isEquality(code);\n}\n\nconst PSEUDO = 58; // :\n\n/**\n * Consumes pseudo-selector from given stream\n */\nvar pseudo = function(stream) {\n\tconst start = stream.pos;\n\n\tif (stream.eatWhile(PSEUDO)) {\n\t\tconst name = ident(stream);\n\t\tif (name) {\n\t\t\treturn new Token(stream, 'pseudo', start).add(name);\n\t\t}\n\t}\n\n\tstream.pos = start;\n};\n\n/**\n * Consumes unquoted value from given stream\n * @param {StreamReader} stream\n * @return {UnquotedToken}\n */\nvar unquoted = function(stream) {\n\treturn eatUnquoted(stream) && new Token(stream, 'unquoted');\n};\n\nfunction eatUnquoted(stream) {\n\treturn consumeWhile(stream, isUnquoted);\n}\n\nfunction isUnquoted(code) {\n\treturn !isNaN(code) && !isQuote(code) && !isSpace(code)\n\t\t&& code !== 40 /* ( */ && code !== 41 /* ) */ && code !== 92 /* \\ */\n\t\t&& !isNonPrintable(code);\n}\n\nfunction isNonPrintable(code) {\n\treturn (code >= 0 && code <= 8) || code === 11\n\t|| (code >= 14 && code <= 31) || code === 127;\n}\n\n/**\n * Consumes URL token from given stream\n * @param {StreamReader} stream\n * @return {Token}\n */\nfunction url(stream) {\n\tconst start = stream.pos;\n\n\tif (eatString(stream, 'url(')) {\n\t\teatWhitespace(stream);\n\t\tconst value = string(stream) || unquoted(stream);\n\t\teatWhitespace(stream);\n\t\tstream.eat(41); // )\n\n\t\treturn new Token(stream, 'url', start).add(value);\n\t}\n\n\tstream.pos = start;\n}\n\nfunction eatUrl(stream) {\n\tconst start = stream.pos;\n\n\tif (eatString(stream, 'url(')) {\n\t\teatWhitespace(stream);\n\t\teatString$1(stream) || eatUnquoted(stream);\n\t\teatWhitespace(stream);\n\t\tstream.eat(41); // )\n\t\tstream.start = start;\n\n\t\treturn true;\n\t}\n\n\tstream.pos = start;\n\treturn false;\n}\n\nconst VARIABLE = 36; // $\n\n/**\n * Consumes SCSS variable from given stream\n */\nfunction variable(stream) {\n\treturn prefixed(stream, 'variable', VARIABLE, variableName);\n}\n\n\n\nfunction variableName(stream) {\n\tif (eatVariableName(stream)) {\n\t\treturn new Token(stream, 'name');\n\t}\n}\n\nfunction eatVariableName(stream) {\n\treturn consumeWhile(stream, isVariableName);\n}\n\nfunction isVariableName(code) {\n\treturn code === VARIABLE || isIdent(code);\n}\n\n/**\n * Group tokens by commonly used context\n */\n\nfunction consumeToken(stream) {\n\tconst _token = any(stream) || args(stream, consumeToken);\n\tif (_token && _token.type === 'ident') {\n\t\tconst _args = args(stream, consumeToken);\n\t\tif (_args) {\n\t\t\t// An identifier followed by arguments \u2013 function call\n\t\t\treturn new Token(stream, 'function', _token.start, _args.end).add(_token).add(_args);\n\t\t}\n\t}\n\n\treturn _token || unknown(stream);\n}\n\nfunction any(stream) {\n\treturn formatting(stream) || url(stream) || selector(stream) || value(stream)\n\t\t|| separator(stream);\n}\n\nfunction selector(stream) {\n\treturn interpolation(stream) || backtick(stream) || ident(stream) || atKeyword(stream)\n\t\t|| className(stream) || id(stream) || pseudo(stream) || eatAttribuite(stream)\n\t\t|| combinator(stream);\n}\n\nfunction value(stream) {\n\treturn url(stream) || string(stream) || interpolation(stream) || backtick(stream) \n\t\t|| number(stream) || hash(stream) || keyword(stream) || important(stream) \n\t\t|| operator$1(stream);\n}\n\nfunction keyword(stream) {\n\treturn backtick(stream) || variable(stream) || atKeyword(stream) || ident(stream);\n}\n\nfunction formatting(stream) {\n\treturn comment(stream) || whitespace(stream);\n}\n\nfunction unknown(stream) {\n\tstream.start = stream.pos;\n\tconst ch = stream.next();\n\tif (ch != null) {\n\t\treturn new Token(stream, 'unknown');\n\t}\n}\n\n/**\n * Parses CSS rule selector\n * @param {String|StreamReader} source\n * @return {Token[]}\n */\nfunction parseSelector(source) {\n\treturn parseList(source, 'selector');\n}\n\n/**\n * Parses CSS property name. Mostly used for LESS where\n * property-like entry might be used as a mixin call\n * @param {String|StreamReader} source\n * @return {Token}\n */\nfunction parsePropertyName(source) {\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst items = [];\n\n\twhile (!stream.eof()) {\n\t\titems.push(consumeToken(stream));\n\t}\n\n\tlet token;\n\tif (items.length === 1) {\n\t\ttoken = items[0];\n\t} else {\n\t\ttoken = new Token(stream, 'property-name', stream.start, stream.end);\n\t\tfor (let i = 0, il = items.length; i < il; i++) {\n\t\t\ttoken.add(items[i]);\n\t\t}\n\t}\n\n\treturn token;\n}\n\n/**\n * Parses CSS property value\n * @param {String|StreamReader} source\n * @return {Token[]}\n */\nfunction parsePropertyValue(source) {\n\treturn parseList(source);\n}\n\n/**\n * Parses @media CSS rule expression\n * @param {String|StreamReader} source\n * @return {Token[]}\n */\nfunction parseMediaExpression(source) {\n\treturn parseList(source);\n}\n\n/**\n * Parses given source into a set of tokens, separated by comma. Each token contains\n * parsed sub-items as independent tokens and so on. Mostly used to parse\n * selectors and property values\n * @param {String|StreamReader} source Source to parse\n * @param {String} [tokenType] Type of first-level tokens.\n * Default is `item`\n * @return {Token[]}\n */\nfunction parseList(source, tokenType) {\n\ttokenType = tokenType || 'item';\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst items = [];\n\tconst fragments = [];\n\tconst flush = () => {\n\t\tconst clean = trimFormatting(fragments);\n\n\t\tif (clean.length) {\n\t\t\tconst item = new Token(stream, tokenType, clean[0].start, last(clean).end);\n\t\t\tfor (let i = 0; i < clean.length; i++) {\n\t\t\t\titem.add(clean[i]);\n\t\t\t}\n\t\t\titems.push(item);\n\t\t}\n\n\t\tfragments.length = 0;\n\t};\n\n\tlet token;\n\twhile (!stream.eof()) {\n\t\tif (stream.eat(44 /* , */)) {\n\t\t\tflush();\n\t\t} else if (token = consumeToken(stream)) {\n\t\t\tif (token.type !== 'comment') {\n\t\t\t\tfragments.push(token);\n\t\t\t}\n\t\t} else {\n\t\t\tthrow stream.error('Unexpected character');\n\t\t}\n\t}\n\n\tflush();\n\treturn items;\n}\n\n/**\n * Creates CSS rule from given tokens\n * @param {StreamReader} stream\n * @param {Token[]} tokens\n * @param {Token} [content]\n * @return {Rule}\n */\nfunction createRule(stream, tokens, contentStart, contentEnd) {\n\tif (!tokens.length) {\n\t\treturn null;\n\t}\n\n\tconst name = tokens[0];\n\tname.end = last(tokens).end;\n\n\treturn new Rule(stream, name, contentStart, contentEnd);\n}\n\n/**\n * Represents CSS rule\n * @type {Node}\n */\nclass Rule extends Node {\n\t/**\n\t * @param {StreamReader} stream\n\t * @param {Token} name Rule\u2019s name token\n\t * @param {Token} contentStart Rule\u2019s content start token\n\t * @param {Token} [contentEnd] Rule\u2019s content end token\n\t */\n\tconstructor(stream, name, contentStart, contentEnd) {\n\t\tsuper('rule');\n\t\tthis.stream = stream;\n\t\tthis.selectorToken = name;\n\t\tthis.contentStartToken = contentStart;\n\t\tthis.contentEndToken = contentEnd || contentStart;\n\t\tthis._parsedSelector = null;\n\t}\n\n\t/**\n\t * Returns rule selector\n\t * @return {String}\n\t */\n\tget selector() {\n\t\treturn valueOf(this.selectorToken);\n\t}\n\n\tget parsedSelector() {\n\t\tif (!this._parsedSelector) {\n\t\t\tthis._parsedSelector = parseSelector(this.selectorToken.limit());\n\t\t}\n\n\t\treturn this._parsedSelector;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\treturn this.selectorToken && this.selectorToken.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s end position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\tconst token = this.contentEndToken || this.contentStartToken || this.nameToken;\n\t\treturn token && token.end;\n\t}\n}\n\n/**\n * Creates CSS rule from given tokens\n * @param {StreamReader} stream\n * @param {Token[]} tokens\n * @param {Token} [content]\n * @return {Rule}\n */\nfunction createAtRule(stream, tokens, contentStart, contentEnd) {\n\tif (!tokens.length) {\n\t\treturn null;\n\t}\n\n\tlet ix = 0, expression;\n\tconst name = tokens[ix++];\n \n\tif (ix < tokens.length) {\n\t\texpression = tokens[ix++];\n\t\texpression.type = 'expression';\n\t\texpression.end = last(tokens).end;\n\t} else {\n\t\texpression = new Token(stream, 'expression', name.end, name.end);\n\t}\n\n\treturn new AtRule(stream, name, expression, contentStart, contentEnd);\n}\n\nclass AtRule extends Node {\n\tconstructor(stream, name, expression, contentStart, contentEnd) {\n\t\tsuper('at-rule');\n\t\tthis.stream = stream;\n\t\tthis.nameToken = name;\n\t\tthis.expressionToken = expression;\n\t\tthis.contentStartToken = contentStart;\n\t\tthis.contentEndToken = contentEnd || contentStart;\n\t\tthis._parsedExpression = null;\n\t}\n\n\t/**\n\t * Returns at-rule name\n\t * @return {String}\n\t */\n\tget name() {\n\t\treturn valueOf(this.nameToken && this.nameToken.item(0));\n\t}\n\n\tget expression() {\n\t\treturn valueOf(this.expressionToken);\n\t}\n\n\tget parsedExpression() {\n\t\tif (!this._parsedExpression) {\n\t\t\tthis._parsedExpression = parseMediaExpression(this.expressionToken.limit());\n\t\t}\n\n\t\treturn this._parsedExpression;\n\t}\n\n\t/**\n\t * Returns node\u2019s start position in stream\n\t * @return {*}\n\t */\n\tget start() {\n\t\treturn this.nameToken && this.nameToken.start;\n\t}\n\n\t/**\n\t * Returns node\u2019s end position in stream\n\t * @return {*}\n\t */\n\tget end() {\n\t\tconst token = this.contentEndToken || this.contentStartToken || this.nameToken;\n\t\treturn token && token.end;\n\t}\n}\n\n/**\n * Factory method that creates property node from given tokens\n * @param {StreamReader} stream\n * @param {Token[]} tokens\n * @param {Token} terminator\n * @return {Property}\n */\nfunction createProperty(stream, tokens, terminator) {\n\t// NB in LESS, fragmented properties without value like `.foo.bar;` must be\n\t// treated like mixin call\n\tif (!tokens.length) {\n\t\treturn null;\n\t}\n\n\tlet separator, value, ix = 0;\n\tconst name = tokens[ix++];\n\n\tif (ix < tokens.length) {\n\t\tvalue = tokens[ix++];\n\t\tvalue.type = 'value';\n\t\tvalue.end = last(tokens).end;\n\t}\n\n\tif (name && value) {\n\t\tseparator = new Token(stream, 'separator', name.end, value.start);\n\t}\n\n\treturn new Property(\n\t\tstream,\n\t\tname,\n\t\tvalue,\n\t\tseparator,\n\t\tterminator\n\t);\n}\n\nclass Property extends Node {\n\tconstructor(stream, name, value, separator, terminator) {\n\t\tsuper('property');\n\t\tthis.stream = stream;\n\t\tthis.nameToken = name;\n\t\tthis.valueToken = value;\n\t\tthis._parsedName = null;\n\t\tthis._parsedValue = null;\n\n\t\tthis.separatorToken = separator;\n\t\tthis.terminatorToken = terminator;\n\t}\n\n\t/**\n\t * Property name\n\t * @return {String}\n\t */\n\tget name() {\n\t\treturn valueOf(this.nameToken);\n\t}\n\n\t/**\n\t * Returns parsed sub-tokens of current property name\n\t * @return {Token[]}\n\t */\n\tget parsedName() {\n\t\tif (!this._parsedName) {\n\t\t\tthis._parsedName = parsePropertyName(this.nameToken.limit());\n\t\t}\n\n\t\treturn this._parsedName;\n\t}\n\n\t/**\n\t * Property value\n\t * @return {String}\n\t */\n\tget value() {\n\t\treturn valueOf(this.valueToken);\n\t}\n\n\t/**\n\t * Parsed value parts: a list of tokens, separated by comma. Each token may\n\t * contains parsed sub-tokens and so on\n\t * @return {Token[]}\n\t */\n\tget parsedValue() {\n\t\tif (!this._parsedValue) {\n\t\t\tthis._parsedValue = parsePropertyValue(this.valueToken.limit());\n\t\t}\n\n\t\treturn this._parsedValue;\n\t}\n\n\tget separator() {\n\t\treturn valueOf(this.separatorToken);\n\t}\n\n\tget terminator() {\n\t\treturn valueOf(this.terminatorToken);\n\t}\n\n\tget start() {\n\t\tconst token = this.nameToken || this.separatorToken || this.valueToken\n\t\t\t|| this.terminatorToken;\n\t\treturn token && token.start;\n\t}\n\n\tget end() {\n\t\tconst token = this.terminatorToken || this.valueToken\n\t\t\t|| this.separatorToken || this.nameToken;\n\t\treturn token && token.end;\n\t}\n}\n\nconst LBRACE = 40; // (\nconst RBRACE = 41; // )\nconst PROP_DELIMITER = 58; // :\nconst PROP_TERMINATOR = 59; // ;\nconst RULE_START = 123; // {\nconst RULE_END = 125; // }\n\nfunction parseStylesheet(source) {\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst root = new Stylesheet();\n\tlet ctx = root, child, accum, token;\n\tlet tokens = [];\n\tconst flush = () => {\n\t\tif (accum) {\n\t\t\ttokens.push(accum);\n\t\t\taccum = null;\n\t\t}\n\t};\n\n\twhile (!stream.eof()) {\n\t\tif (eatWhitespace(stream)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token = comment(stream)) {\n\t\t\troot.addComment(token);\n\t\t\tcontinue;\n\t\t}\n\n\t\tstream.start = stream.pos;\n\n\t\tif (stream.eatWhile(PROP_DELIMITER)) {\n\t\t\t// Property delimiter can be either a real property delimiter or a\n\t\t\t// part of pseudo-selector.\n\t\t\tif (!tokens.length) {\n\t\t\t\tif (accum) {\n\t\t\t\t\t// No consumed tokens yet but pending token: most likely it\u2019s\n\t\t\t\t\t// a CSS property\n\t\t\t\t\tflush();\n\t\t\t\t} else {\n\t\t\t\t\t// No consumend or accumulated token, seems like a start of\n\t\t\t\t\t// pseudo-selector, e.g. `::slotted`\n\t\t\t\t\taccum = new Token(stream, 'preparse');\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Skip delimiter if there are already consumend tokens: most likely\n\t\t\t// it\u2019s a part of pseudo-selector\n\t\t} else if (stream.eat(PROP_TERMINATOR)) {\n\t\t\tflush();\n\t\t\tctx.add(createProperty(stream, tokens, new Token(stream, 'termintator')));\n\t\t\ttokens.length = 0;\n\t\t} else if (stream.eat(RULE_START)) {\n\t\t\tflush();\n\t\t\tif (tokens.length > 0) {\n\t\t\t\tchild = tokens[0].type === 'at-keyword'\n\t\t\t\t? createAtRule(stream, tokens, new Token(stream, 'body-start'))\n\t\t\t\t: createRule(stream, tokens, new Token(stream, 'body-start'));\n\t\t\t\tctx.add(child);\n\t\t\t\tctx = child;\n\t\t\t\ttokens.length = 0;\n\t\t\t}\n\t\t} else if (stream.eat(RULE_END)) {\n\t\t\tflush();\n\n\t\t\t// Finalize context section\n\t\t\tctx.add(createProperty(stream, tokens));\n\n\t\t\tif (ctx.type !== 'stylesheet') {\n\t\t\t\t// In case of invalid stylesheet with redundant `}`,\n\t\t\t\t// don\u2019t modify root section.\n\t\t\t\tctx.contentEndToken = new Token(stream, 'body-end');\n\t\t\t\tctx = ctx.parent;\n\t\t\t}\n\n\t\t\ttokens.length = 0;\n\t\t} else if (token = atKeyword(stream)) {\n\t\t\t// Explictly consume @-tokens since it defines how rule or property\n\t\t\t// should be pre-parsed\n\t\t\tflush();\n\t\t\ttokens.push(token);\n\t\t} else if (eatUrl(stream) || eatInterpolation(stream) || eatBacktick(stream) \n\t\t\t\t|| eatBraces(stream, root) || eatString$1(stream) || stream.next()) {\n\t\t\t// NB explicitly consume `url()` token since it may contain\n\t\t\t// an unquoted url like `http://example.com` which interferes\n\t\t\t// with single-line comment\n\t\t\taccum = accum || new Token(stream, 'preparse');\n\t\t\taccum.end = stream.pos;\n\t\t} else {\n\t\t\tthrow new Error(`Unexpected end-of-stream at ${stream.pos}`);\n\t\t}\n\t}\n\n\tif (accum) {\n\t\ttokens.push(accum);\n\t}\n\n\t// Finalize all the rest properties\n\tctx.add(createProperty(stream, tokens));\n\n\t// Finalize unterminated rules\n\tstream.start = stream.pos;\n\twhile (ctx && ctx !== root) {\n\t\tctx.contentEndToken = new Token(stream, 'body-end');\n\t\tctx = ctx.parent;\n\t}\n\n\treturn root;\n}\n\n/**\n * Parses given source into tokens\n * @param {String|StreamReader} source\n * @param {Function} [consumer] Token consumer function, for example, `selector`,\n * `value` etc. from `lib/tokens` module. Default is generic `consumeToken`\n * @return {Token[]}\n */\nfunction lexer(source, consumer) {\n\tconsumer = consumer || consumeToken;\n\tconst stream = typeof source === 'string' ? new StreamReader(source) : source;\n\tconst result = [];\n\tlet token;\n\n\twhile (!stream.eof() && (token = consumer(stream))) {\n\t\tresult.push(token);\n\t}\n\n\treturn result;\n}\n\n/**\n * Consumes content inside round braces. Mostly used to skip `;` token inside\n * expressions since in LESS it is also used to separate function arguments\n * @param {StringReader} stream\n * @param {Stylesheet} root A stylesheet root. Used to accumulate comments\n * @return {Boolean}\n */\nfunction eatBraces(stream, root) {\n\tif (stream.eat(LBRACE)) {\n\t\tlet stack = 1, token;\n\n\t\twhile (!stream.eof()) {\n\t\t\tif (stream.eat(RBRACE)) {\n\t\t\t\tstack--;\n\t\t\t\tif (!stack) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (stream.eat(LBRACE)) {\n\t\t\t\tstack++;\n\t\t\t} else if (eatUrl(stream) || eatString$1(stream)) {\n\t\t\t\tcontinue;\n\t\t\t} else if (token = comment(stream)) {\n\t\t\t\troot.addComment(token);\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tstream.next();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport { lexer, Token, any, selector, value, keyword, variable, formatting, comment, whitespace, ident, string, url, interpolation, backtick, parseMediaExpression, parsePropertyName, parsePropertyValue, parseSelector, createProperty, createRule, createAtRule };export default parseStylesheet;\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport { TextDocument } from 'vscode';\n\n/**\n * A stream reader for VSCode's `TextDocument`\n * Based on @emmetio/stream-reader and @emmetio/atom-plugin\n */\nexport class DocumentStreamReader {\n\tprivate document: TextDocument;\n\tprivate start: number;\n\tprivate _eof: number;\n\tprivate _sof: number;\n\tpublic pos: number;\n\n\tconstructor(document: TextDocument, pos?: number, limit?: [number, number]) {\n\t\tthis.document = document;\n\t\tthis.start = this.pos = pos ? pos : 0;\n\t\tthis._sof = limit ? limit[0] : 0;\n\t\tthis._eof = limit ? limit[1] : document.getText().length;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the start of the file.\n\t */\n\tsof(): boolean {\n\t\treturn this.pos <= this._sof;\n\t}\n\n\t/**\n\t * Returns true only if the stream is at the end of the file.\n\t */\n\teof(): boolean {\n\t\treturn this.pos >= this._eof;\n\t}\n\n\t/**\n\t * Creates a new stream instance which is limited to given range for given document\n\t */\n\tlimit(start: number, end: number): DocumentStreamReader {\n\t\treturn new DocumentStreamReader(this.document, start, [start, end]);\n\t}\n\n\t/**\n\t * Returns the next character code in the stream without advancing it.\n\t * Will return NaN at the end of the file.\n\t */\n\tpeek(): number {\n\t\tif (this.eof()) {\n\t\t\treturn NaN;\n\t\t}\n\t\treturn this.document.getText().charCodeAt(this.pos);\n\t}\n\n\t/**\n\t * Returns the next character in the stream and advances it.\n\t * Also returns NaN when no more characters are available.\n\t */\n\tnext(): number {\n\t\tif (this.eof()) {\n\t\t\treturn NaN;\n\t\t}\n\n\t\tconst code = this.document.getText().charCodeAt(this.pos);\n\t\tthis.pos++;\n\n\t\tif (this.eof()) {\n\t\t\t// restrict pos to eof, if in case it got moved beyond eof\n\t\t\tthis.pos = this._eof;\n\t\t}\n\n\t\treturn code;\n\t}\n\n\t/**\n\t * Backs up the stream n characters. Backing it up further than the\n\t * start of the current token will cause things to break, so be careful.\n\t */\n\tbackUp(n: number): number {\n\t\tthis.pos -= n;\n\t\tif (this.pos < 0) {\n\t\t\tthis.pos = 0;\n\t\t}\n\t\treturn this.peek();\n\t}\n\n\t/**\n\t * Get the string between the start of the current token and the\n\t * current stream position.\n\t */\n\tcurrent(): string {\n\t\treturn this.substring(this.start, this.pos);\n\t}\n\n\t/**\n\t * Returns contents for given range\n\t */\n\tsubstring(from: number, to: number): string {\n\t\treturn this.document.getText().substring(from, to);\n\t}\n\n\t/**\n\t * Creates error object with current stream state\n\t */\n\terror(message: string): Error {\n\t\tconst err = new Error(`${message} at offset ${this.pos}`);\n\t\treturn err;\n\t}\n\n\t/**\n\t * `match` can be a character code or a function that takes a character code\n\t * and returns a boolean. If the next character in the stream 'matches'\n\t * the given argument, it is consumed and returned.\n\t * Otherwise, `false` is returned.\n\t */\n\teat(match: number | Function): boolean {\n\t\tconst ch = this.peek();\n\t\tconst ok = typeof match === 'function' ? match(ch) : ch === match;\n\n\t\tif (ok) {\n\t\t\tthis.next();\n\t\t}\n\n\t\treturn ok;\n\t}\n\n\t/**\n\t * Repeatedly calls <code>eat</code> with the given argument, until it\n\t * fails. Returns <code>true</code> if any characters were eaten.\n\t */\n\teatWhile(match: number | Function): boolean {\n\t\tconst start = this.pos;\n\t\twhile (!this.eof() && this.eat(match)) { }\n\t\treturn this.pos !== start;\n\t}\n}\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (const change of changes) {\n if (FullTextDocument.isIncremental(change)) {\n // makes sure start is before end\n const range = getWellformedRange(change.range);\n // update content\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n // update the offsets\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n }\n else {\n if (addedLineOffsets.length < 10000) {\n lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n }\n else { // avoid too many arguments for splice\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n }\n else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = undefined;\n }\n else {\n throw new Error('Unknown change event received');\n }\n }\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n const lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n const line = low - 1;\n offset = this.ensureBeforeEOL(offset, lineOffsets[line]);\n return { line, character: offset - lineOffsets[line] };\n }\n offsetAt(position) {\n const lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n const lineOffset = lineOffsets[position.line];\n if (position.character <= 0) {\n return lineOffset;\n }\n const nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n const offset = Math.min(lineOffset + position.character, nextLineOffset);\n return this.ensureBeforeEOL(offset, lineOffset);\n }\n ensureBeforeEOL(offset, lineOffset) {\n while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {\n offset--;\n }\n return offset;\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range !== undefined &&\n (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n }\n static isFull(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n }\n}\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n }\n else {\n throw new Error('TextDocument.update: document must be created by TextDocument.create');\n }\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n const text = document.getText();\n const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n const diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n const startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error('Overlapping edit');\n }\n else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join('');\n }\n TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n const ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n if (isEOL(ch)) {\n if (ch === 13 /* CharCode.CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction isEOL(char) {\n return char === 13 /* CharCode.CarriageReturn */ || char === 10 /* CharCode.LineFeed */;\n}\nfunction getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range };\n }\n return textEdit;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { TextDocument } from 'vscode';\nimport { Node as FlatNode } from 'EmmetFlatNode';\nimport parse from '@emmetio/html-matcher';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { isStyleSheet } from './util';\n\ntype Pair<K, V> = {\n\tkey: K;\n\tvalue: V;\n};\n\n// Map(filename, Pair(fileVersion, rootNodeOfParsedContent))\nconst _parseCache = new Map<string, Pair<number, FlatNode> | undefined>();\n\nexport function getRootNode(document: TextDocument, useCache: boolean): FlatNode {\n\tconst key = document.uri.toString();\n\tconst result = _parseCache.get(key);\n\tconst documentVersion = document.version;\n\tif (useCache && result) {\n\t\tif (documentVersion === result.key) {\n\t\t\treturn result.value;\n\t\t}\n\t}\n\n\tconst parseContent = isStyleSheet(document.languageId) ? parseStylesheet : parse;\n\tconst rootNode = parseContent(document.getText());\n\tif (useCache) {\n\t\t_parseCache.set(key, { key: documentVersion, value: rootNode });\n\t}\n\treturn rootNode;\n}\n\nexport function addFileToParseCache(document: TextDocument) {\n\tconst filename = document.uri.toString();\n\t_parseCache.set(filename, undefined);\n}\n\nexport function removeFileFromParseCache(document: TextDocument) {\n\tconst filename = document.uri.toString();\n\t_parseCache.delete(filename);\n}\n\nexport function clearParseCache() {\n\t_parseCache.clear();\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getRootNode } from './parseDocument';\nimport { validate, getHtmlFlatNode, offsetRangeToVsRange } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nexport function removeTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst finalRangesToRemove = Array.from(editor.selections).reverse()\n\t\t.reduce<vscode.Range[]>((prev, selection) =>\n\t\t\tprev.concat(getRangesToRemove(editor.document, rootNode, selection)), []);\n\n\treturn editor.edit(editBuilder => {\n\t\tfinalRangesToRemove.forEach(range => {\n\t\t\teditBuilder.delete(range);\n\t\t});\n\t});\n}\n\n/**\n * Calculates the ranges to remove, along with what to replace those ranges with.\n * It finds the node to remove based on the selection's start position\n * and then removes that node, reindenting the content in between.\n */\nfunction getRangesToRemove(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Range[] {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToUpdate = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!nodeToUpdate) {\n\t\treturn [];\n\t}\n\n\tlet openTagRange: vscode.Range | undefined;\n\tif (nodeToUpdate.open) {\n\t\topenTagRange = offsetRangeToVsRange(document, nodeToUpdate.open.start, nodeToUpdate.open.end);\n\t}\n\tlet closeTagRange: vscode.Range | undefined;\n\tif (nodeToUpdate.close) {\n\t\tcloseTagRange = offsetRangeToVsRange(document, nodeToUpdate.close.start, nodeToUpdate.close.end);\n\t}\n\n\tif (openTagRange && closeTagRange) {\n\t\tconst innerCombinedRange = new vscode.Range(\n\t\t\topenTagRange.end.line,\n\t\t\topenTagRange.end.character,\n\t\t\tcloseTagRange.start.line,\n\t\t\tcloseTagRange.start.character);\n\t\tconst outerCombinedRange = new vscode.Range(\n\t\t\topenTagRange.start.line,\n\t\t\topenTagRange.start.character,\n\t\t\tcloseTagRange.end.line,\n\t\t\tcloseTagRange.end.character);\n\t\t// Special case: there is only whitespace in between.\n\t\tif (document.getText(innerCombinedRange).trim() === '' && nodeToUpdate.name !== 'pre') {\n\t\t\treturn [outerCombinedRange];\n\t\t}\n\t}\n\n\tconst rangesToRemove = [];\n\tif (openTagRange) {\n\t\trangesToRemove.push(openTagRange);\n\t\tif (closeTagRange) {\n\t\t\tconst indentAmountToRemove = calculateIndentAmountToRemove(document, openTagRange, closeTagRange);\n\t\t\tlet firstInnerNonEmptyLine: number | undefined;\n\t\t\tlet lastInnerNonEmptyLine: number | undefined;\n\t\t\tfor (let i = openTagRange.start.line + 1; i < closeTagRange.start.line; i++) {\n\t\t\t\tif (!document.lineAt(i).isEmptyOrWhitespace) {\n\t\t\t\t\trangesToRemove.push(new vscode.Range(i, 0, i, indentAmountToRemove));\n\t\t\t\t\tif (firstInnerNonEmptyLine === undefined) {\n\t\t\t\t\t\t// We found the first non-empty inner line.\n\t\t\t\t\t\tfirstInnerNonEmptyLine = i;\n\t\t\t\t\t}\n\t\t\t\t\tlastInnerNonEmptyLine = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the entire last line + empty lines preceding it\n\t\t\t// if it is just the tag, otherwise remove just the tag.\n\t\t\tif (entireLineIsTag(document, closeTagRange) && lastInnerNonEmptyLine) {\n\t\t\t\trangesToRemove.push(new vscode.Range(\n\t\t\t\t\tlastInnerNonEmptyLine,\n\t\t\t\t\tdocument.lineAt(lastInnerNonEmptyLine).range.end.character,\n\t\t\t\t\tcloseTagRange.end.line,\n\t\t\t\t\tcloseTagRange.end.character));\n\t\t\t} else {\n\t\t\t\trangesToRemove.push(closeTagRange);\n\t\t\t}\n\n\t\t\t// Remove the entire first line + empty lines proceding it\n\t\t\t// if it is just the tag, otherwise keep on removing just the tag.\n\t\t\tif (entireLineIsTag(document, openTagRange) && firstInnerNonEmptyLine) {\n\t\t\t\trangesToRemove[1] = new vscode.Range(\n\t\t\t\t\topenTagRange.start.line,\n\t\t\t\t\topenTagRange.start.character,\n\t\t\t\t\tfirstInnerNonEmptyLine,\n\t\t\t\t\tdocument.lineAt(firstInnerNonEmptyLine).firstNonWhitespaceCharacterIndex);\n\t\t\t\trangesToRemove.shift();\n\t\t\t}\n\t\t}\n\t}\n\treturn rangesToRemove;\n}\n\nfunction entireLineIsTag(document: vscode.TextDocument, range: vscode.Range): boolean {\n\tif (range.start.line === range.end.line) {\n\t\tconst lineText = document.lineAt(range.start).text;\n\t\tconst tagText = document.getText(range);\n\t\tif (lineText.trim() === tagText) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Calculates the amount of indent to remove for getRangesToRemove.\n */\nfunction calculateIndentAmountToRemove(document: vscode.TextDocument, openRange: vscode.Range, closeRange: vscode.Range): number {\n\tconst startLine = openRange.start.line;\n\tconst endLine = closeRange.start.line;\n\n\tconst startLineIndent = document.lineAt(startLine).firstNonWhitespaceCharacterIndex;\n\tconst endLineIndent = document.lineAt(endLine).firstNonWhitespaceCharacterIndex;\n\n\tlet contentIndent: number | undefined;\n\tfor (let i = startLine + 1; i < endLine; i++) {\n\t\tconst line = document.lineAt(i);\n\t\tif (!line.isEmptyOrWhitespace) {\n\t\t\tconst lineIndent = line.firstNonWhitespaceCharacterIndex;\n\t\t\tcontentIndent = !contentIndent ? lineIndent : Math.min(contentIndent, lineIndent);\n\t\t}\n\t}\n\n\tlet indentAmount = 0;\n\tif (contentIndent) {\n\t\tif (contentIndent < startLineIndent || contentIndent < endLineIndent) {\n\t\t\tindentAmount = 0;\n\t\t}\n\t\telse {\n\t\t\tindentAmount = Math.min(contentIndent - startLineIndent, contentIndent - endLineIndent);\n\t\t}\n\t}\n\treturn indentAmount;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getHtmlFlatNode, validate } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\ninterface TagRange {\n\tname: string;\n\trange: vscode.Range;\n}\n\nexport async function updateTag(tagName: string | undefined): Promise<boolean | undefined> {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst rangesToUpdate = editor.selections\n\t\t.reduceRight<TagRange[]>((prev, selection) =>\n\t\t\tprev.concat(getRangesToUpdate(document, selection, rootNode)), []);\n\tif (!rangesToUpdate.length) {\n\t\treturn;\n\t}\n\tconst firstTagName = rangesToUpdate[0].name;\n\tconst tagNamesAreEqual = rangesToUpdate.every(range => range.name === firstTagName);\n\n\tif (tagName === undefined) {\n\t\ttagName = await vscode.window.showInputBox({\n\t\t\tprompt: 'Enter Tag',\n\t\t\tvalue: tagNamesAreEqual ? firstTagName : undefined\n\t\t});\n\n\t\t// TODO: Accept fragments for JSX and TSX\n\t\tif (!tagName) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\trangesToUpdate.forEach(tagRange => {\n\t\t\teditBuilder.replace(tagRange.range, tagName!);\n\t\t});\n\t});\n}\n\nfunction getRangesFromNode(node: HtmlFlatNode, document: vscode.TextDocument): TagRange[] {\n\tconst ranges: TagRange[] = [];\n\tif (node.open) {\n\t\tconst start = document.positionAt(node.open.start);\n\t\tranges.push({\n\t\t\tname: node.name,\n\t\t\trange: new vscode.Range(start.translate(0, 1), start.translate(0, 1).translate(0, node.name.length))\n\t\t});\n\t}\n\tif (node.close) {\n\t\tconst endTagStart = document.positionAt(node.close.start);\n\t\tconst end = document.positionAt(node.close.end);\n\t\tranges.push({\n\t\t\tname: node.name,\n\t\t\trange: new vscode.Range(endTagStart.translate(0, 2), end.translate(0, -1))\n\t\t});\n\t}\n\treturn ranges;\n}\n\nfunction getRangesToUpdate(document: vscode.TextDocument, selection: vscode.Selection, rootNode: HtmlFlatNode): TagRange[] {\n\tconst documentText = document.getText();\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToUpdate = getHtmlFlatNode(documentText, rootNode, offset, true);\n\tif (!nodeToUpdate) {\n\t\treturn [];\n\t}\n\treturn getRangesFromNode(nodeToUpdate, document);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, getHtmlFlatNode, offsetRangeToSelection } from './util';\nimport { getRootNode } from './parseDocument';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nexport function matchTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst updatedSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst updatedSelection = getUpdatedSelections(document, rootNode, selection.start);\n\t\tif (updatedSelection) {\n\t\t\tupdatedSelections.push(updatedSelection);\n\t\t}\n\t});\n\tif (updatedSelections.length) {\n\t\teditor.selections = updatedSelections;\n\t\teditor.revealRange(editor.selections[updatedSelections.length - 1]);\n\t}\n}\n\nfunction getUpdatedSelections(document: vscode.TextDocument, rootNode: HtmlFlatNode, position: vscode.Position): vscode.Selection | undefined {\n\tconst offset = document.offsetAt(position);\n\tconst currentNode = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\t// If no opening/closing tag or cursor is between open and close tag, then no-op\n\tif (!currentNode.open\n\t\t|| !currentNode.close\n\t\t|| (offset > currentNode.open.end && offset < currentNode.close.start)) {\n\t\treturn;\n\t}\n\n\t// Place cursor inside the close tag if cursor is inside the open tag, else place it inside the open tag\n\tconst finalOffset = (offset <= currentNode.open.end) ? currentNode.close.start + 2 : currentNode.start + 1;\n\treturn offsetRangeToSelection(document, finalOffset, finalOffset);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getHtmlFlatNode, offsetRangeToSelection, validate } from './util';\nimport { getRootNode } from './parseDocument';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\n\nlet balanceOutStack: Array<readonly vscode.Selection[]> = [];\nlet lastBalancedSelections: readonly vscode.Selection[] = [];\n\nexport function balanceOut() {\n\tbalance(true);\n}\n\nexport function balanceIn() {\n\tbalance(false);\n}\n\nfunction balance(out: boolean) {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst rangeFn = out ? getRangeToBalanceOut : getRangeToBalanceIn;\n\tlet newSelections: readonly vscode.Selection[] = editor.selections.map(selection => {\n\t\treturn rangeFn(document, rootNode, selection);\n\t});\n\n\t// check whether we are starting a balance elsewhere\n\tif (areSameSelections(lastBalancedSelections, editor.selections)) {\n\t\t// we are not starting elsewhere, so use the stack as-is\n\t\tif (out) {\n\t\t\t// make sure we are able to expand outwards\n\t\t\tif (!areSameSelections(editor.selections, newSelections)) {\n\t\t\t\tbalanceOutStack.push(editor.selections);\n\t\t\t}\n\t\t} else if (balanceOutStack.length) {\n\t\t\tnewSelections = balanceOutStack.pop()!;\n\t\t}\n\t} else {\n\t\t// we are starting elsewhere, so reset the stack\n\t\tbalanceOutStack = out ? [editor.selections] : [];\n\t}\n\n\teditor.selections = newSelections;\n\tlastBalancedSelections = editor.selections;\n}\n\nfunction getRangeToBalanceOut(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Selection {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToBalance = getHtmlFlatNode(document.getText(), rootNode, offset, false);\n\tif (!nodeToBalance) {\n\t\treturn selection;\n\t}\n\tif (!nodeToBalance.open || !nodeToBalance.close) {\n\t\treturn offsetRangeToSelection(document, nodeToBalance.start, nodeToBalance.end);\n\t}\n\n\t// Set reverse direction if we were in the end tag\n\tlet innerSelection: vscode.Selection;\n\tlet outerSelection: vscode.Selection;\n\tif (nodeToBalance.close.start <= offset && nodeToBalance.close.end > offset) {\n\t\tinnerSelection = offsetRangeToSelection(document, nodeToBalance.close.start, nodeToBalance.open.end);\n\t\touterSelection = offsetRangeToSelection(document, nodeToBalance.close.end, nodeToBalance.open.start);\n\t}\n\telse {\n\t\tinnerSelection = offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);\n\t\touterSelection = offsetRangeToSelection(document, nodeToBalance.open.start, nodeToBalance.close.end);\n\t}\n\n\tif (innerSelection.contains(selection) && !innerSelection.isEqual(selection)) {\n\t\treturn innerSelection;\n\t}\n\tif (outerSelection.contains(selection) && !outerSelection.isEqual(selection)) {\n\t\treturn outerSelection;\n\t}\n\treturn selection;\n}\n\nfunction getRangeToBalanceIn(document: vscode.TextDocument, rootNode: HtmlFlatNode, selection: vscode.Selection): vscode.Selection {\n\tconst offset = document.offsetAt(selection.start);\n\tconst nodeToBalance = getHtmlFlatNode(document.getText(), rootNode, offset, true);\n\tif (!nodeToBalance) {\n\t\treturn selection;\n\t}\n\n\tconst selectionStart = document.offsetAt(selection.start);\n\tconst selectionEnd = document.offsetAt(selection.end);\n\tif (nodeToBalance.open && nodeToBalance.close) {\n\t\tconst entireNodeSelected = selectionStart === nodeToBalance.start && selectionEnd === nodeToBalance.end;\n\t\tconst startInOpenTag = selectionStart > nodeToBalance.open.start && selectionStart < nodeToBalance.open.end;\n\t\tconst startInCloseTag = selectionStart > nodeToBalance.close.start && selectionStart < nodeToBalance.close.end;\n\n\t\tif (entireNodeSelected || startInOpenTag || startInCloseTag) {\n\t\t\treturn offsetRangeToSelection(document, nodeToBalance.open.end, nodeToBalance.close.start);\n\t\t}\n\t}\n\n\tif (!nodeToBalance.firstChild) {\n\t\treturn selection;\n\t}\n\n\tconst firstChild = nodeToBalance.firstChild;\n\tif (selectionStart === firstChild.start\n\t\t&& selectionEnd === firstChild.end\n\t\t&& firstChild.open\n\t\t&& firstChild.close) {\n\t\treturn offsetRangeToSelection(document, firstChild.open.end, firstChild.close.start);\n\t}\n\n\treturn offsetRangeToSelection(document, firstChild.start, firstChild.end);\n}\n\nfunction areSameSelections(a: readonly vscode.Selection[], b: readonly vscode.Selection[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (!a[i].isEqual(b[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, getEmmetMode, getEmmetConfiguration, getHtmlFlatNode, offsetRangeToVsRange } from './util';\nimport { HtmlNode as HtmlFlatNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\nexport function splitJoinTag() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = <HtmlFlatNode>getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst documentText = document.getText();\n\t\t\tconst offset = document.offsetAt(selection.start);\n\t\t\tconst nodeToUpdate = getHtmlFlatNode(documentText, rootNode, offset, true);\n\t\t\tif (nodeToUpdate) {\n\t\t\t\tconst textEdit = getRangesToReplace(document, nodeToUpdate);\n\t\t\t\teditBuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction getRangesToReplace(document: vscode.TextDocument, nodeToUpdate: HtmlFlatNode): vscode.TextEdit {\n\tlet rangeToReplace: vscode.Range;\n\tlet textToReplaceWith: string;\n\n\tif (!nodeToUpdate.open || !nodeToUpdate.close) {\n\t\t// Split Tag\n\t\tconst nodeText = document.getText().substring(nodeToUpdate.start, nodeToUpdate.end);\n\t\tconst m = nodeText.match(/(\\s*\\/)?>$/);\n\t\tconst end = nodeToUpdate.end;\n\t\tconst start = m ? end - m[0].length : end;\n\n\t\trangeToReplace = offsetRangeToVsRange(document, start, end);\n\t\ttextToReplaceWith = `></${nodeToUpdate.name}>`;\n\t} else {\n\t\t// Join Tag\n\t\tconst start = nodeToUpdate.open.end - 1;\n\t\tconst end = nodeToUpdate.end;\n\t\trangeToReplace = offsetRangeToVsRange(document, start, end);\n\t\ttextToReplaceWith = '/>';\n\n\t\tconst emmetMode = getEmmetMode(document.languageId, {}, []) ?? '';\n\t\tconst emmetConfig = getEmmetConfiguration(emmetMode);\n\t\tif (emmetMode && emmetConfig.syntaxProfiles[emmetMode] &&\n\t\t\t(emmetConfig.syntaxProfiles[emmetMode]['selfClosingStyle'] === 'xhtml' || emmetConfig.syntaxProfiles[emmetMode]['self_closing_tag'] === 'xhtml')) {\n\t\t\ttextToReplaceWith = ' ' + textToReplaceWith;\n\t\t}\n\t}\n\n\treturn new vscode.TextEdit(rangeToReplace, textToReplaceWith);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { Node } from 'EmmetFlatNode';\nimport { getFlatNode, offsetRangeToVsRange, validate } from './util';\nimport { getRootNode } from './parseDocument';\n\nexport function mergeLines() {\n\tif (!validate(false) || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\n\tconst editor = vscode.window.activeTextEditor;\n\n\tconst rootNode = getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst textEdit = getRangesToReplace(editor.document, selection, rootNode);\n\t\t\tif (textEdit) {\n\t\t\t\teditBuilder.replace(textEdit.range, textEdit.newText);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction getRangesToReplace(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): vscode.TextEdit | undefined {\n\tlet startNodeToUpdate: Node | undefined;\n\tlet endNodeToUpdate: Node | undefined;\n\n\tconst selectionStart = document.offsetAt(selection.start);\n\tconst selectionEnd = document.offsetAt(selection.end);\n\tif (selection.isEmpty) {\n\t\tstartNodeToUpdate = endNodeToUpdate = getFlatNode(rootNode, selectionStart, true);\n\t} else {\n\t\tstartNodeToUpdate = getFlatNode(rootNode, selectionStart, true);\n\t\tendNodeToUpdate = getFlatNode(rootNode, selectionEnd, true);\n\t}\n\n\tif (!startNodeToUpdate || !endNodeToUpdate) {\n\t\treturn;\n\t}\n\n\tconst startPos = document.positionAt(startNodeToUpdate.start);\n\tconst startLine = startPos.line;\n\tconst startChar = startPos.character;\n\tconst endPos = document.positionAt(endNodeToUpdate.end);\n\tconst endLine = endPos.line;\n\tif (startLine === endLine) {\n\t\treturn;\n\t}\n\n\tconst rangeToReplace = offsetRangeToVsRange(document, startNodeToUpdate.start, endNodeToUpdate.end);\n\tlet textToReplaceWith = document.lineAt(startLine).text.substr(startChar);\n\tfor (let i = startLine + 1; i <= endLine; i++) {\n\t\ttextToReplaceWith += document.lineAt(i).text.trim();\n\t}\n\n\treturn new vscode.TextEdit(rangeToReplace, textToReplaceWith);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getNodesInBetween, getFlatNode, getHtmlFlatNode, sameNodes, isStyleSheet, validate, offsetRangeToVsRange, offsetRangeToSelection } from './util';\nimport { Node, Stylesheet, Rule } from 'EmmetFlatNode';\nimport parseStylesheet from '@emmetio/css-parser';\nimport { getRootNode } from './parseDocument';\n\nlet startCommentStylesheet: string;\nlet endCommentStylesheet: string;\nlet startCommentHTML: string;\nlet endCommentHTML: string;\n\nexport function toggleComment(): Thenable<boolean> | undefined {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tsetupCommentSpacing();\n\n\tconst editor = vscode.window.activeTextEditor;\n\tconst rootNode = getRootNode(editor.document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\treturn editor.edit(editBuilder => {\n\t\tconst allEdits: vscode.TextEdit[][] = [];\n\t\tArray.from(editor.selections).reverse().forEach(selection => {\n\t\t\tconst edits = isStyleSheet(editor.document.languageId) ? toggleCommentStylesheet(editor.document, selection, <Stylesheet>rootNode) : toggleCommentHTML(editor.document, selection, rootNode!);\n\t\t\tif (edits.length > 0) {\n\t\t\t\tallEdits.push(edits);\n\t\t\t}\n\t\t});\n\n\t\t// Apply edits in order so we can skip nested ones.\n\t\tallEdits.sort((arr1, arr2) => {\n\t\t\tconst result = arr1[0].range.start.line - arr2[0].range.start.line;\n\t\t\treturn result === 0 ? arr1[0].range.start.character - arr2[0].range.start.character : result;\n\t\t});\n\t\tlet lastEditPosition = new vscode.Position(0, 0);\n\t\tfor (const edits of allEdits) {\n\t\t\tif (edits[0].range.end.isAfterOrEqual(lastEditPosition)) {\n\t\t\t\tedits.forEach(x => {\n\t\t\t\t\teditBuilder.replace(x.range, x.newText);\n\t\t\t\t\tlastEditPosition = x.range.end;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction toggleCommentHTML(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Node): vscode.TextEdit[] {\n\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tconst documentText = document.getText();\n\n\tconst startNode = getHtmlFlatNode(documentText, rootNode, selectionStartOffset, true);\n\tconst endNode = getHtmlFlatNode(documentText, rootNode, selectionEndOffset, true);\n\n\tif (!startNode || !endNode) {\n\t\treturn [];\n\t}\n\n\tif (sameNodes(startNode, endNode) && startNode.name === 'style'\n\t\t&& startNode.open && startNode.close\n\t\t&& startNode.open.end < selectionStartOffset\n\t\t&& startNode.close.start > selectionEndOffset) {\n\t\tconst buffer = ' '.repeat(startNode.open.end) +\n\t\t\tdocumentText.substring(startNode.open.end, startNode.close.start);\n\t\tconst cssRootNode = parseStylesheet(buffer);\n\t\treturn toggleCommentStylesheet(document, selection, cssRootNode);\n\t}\n\n\tconst allNodes: Node[] = getNodesInBetween(startNode, endNode);\n\tlet edits: vscode.TextEdit[] = [];\n\n\tallNodes.forEach(node => {\n\t\tedits = edits.concat(getRangesToUnCommentHTML(node, document));\n\t});\n\n\tif (startNode.type === 'comment') {\n\t\treturn edits;\n\t}\n\n\n\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, allNodes[0].start, allNodes[0].start), startCommentHTML));\n\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, allNodes[allNodes.length - 1].end, allNodes[allNodes.length - 1].end), endCommentHTML));\n\n\treturn edits;\n}\n\nfunction getRangesToUnCommentHTML(node: Node, document: vscode.TextDocument): vscode.TextEdit[] {\n\tlet unCommentTextEdits: vscode.TextEdit[] = [];\n\n\t// If current node is commented, then uncomment and return\n\tif (node.type === 'comment') {\n\t\tunCommentTextEdits.push(new vscode.TextEdit(offsetRangeToVsRange(document, node.start, node.start + startCommentHTML.length), ''));\n\t\tunCommentTextEdits.push(new vscode.TextEdit(offsetRangeToVsRange(document, node.end - endCommentHTML.length, node.end), ''));\n\t\treturn unCommentTextEdits;\n\t}\n\n\t// All children of current node should be uncommented\n\tnode.children.forEach(childNode => {\n\t\tunCommentTextEdits = unCommentTextEdits.concat(getRangesToUnCommentHTML(childNode, document));\n\t});\n\n\treturn unCommentTextEdits;\n}\n\nfunction toggleCommentStylesheet(document: vscode.TextDocument, selection: vscode.Selection, rootNode: Stylesheet): vscode.TextEdit[] {\n\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\tlet selectionStartOffset = document.offsetAt(selectionStart);\n\tlet selectionEndOffset = document.offsetAt(selectionEnd);\n\n\tconst startNode = getFlatNode(rootNode, selectionStartOffset, true);\n\tconst endNode = getFlatNode(rootNode, selectionEndOffset, true);\n\n\tif (!selection.isEmpty) {\n\t\tselectionStartOffset = adjustStartNodeCss(startNode, selectionStartOffset, rootNode);\n\t\tselectionEndOffset = adjustEndNodeCss(endNode, selectionEndOffset, rootNode);\n\t\tselection = offsetRangeToSelection(document, selectionStartOffset, selectionEndOffset);\n\t} else if (startNode) {\n\t\tselectionStartOffset = startNode.start;\n\t\tselectionEndOffset = startNode.end;\n\t\tselection = offsetRangeToSelection(document, selectionStartOffset, selectionEndOffset);\n\t}\n\n\t// Uncomment the comments that intersect with the selection.\n\tconst rangesToUnComment: vscode.Range[] = [];\n\tconst edits: vscode.TextEdit[] = [];\n\trootNode.comments.forEach(comment => {\n\t\tconst commentRange = offsetRangeToVsRange(document, comment.start, comment.end);\n\t\tif (selection.intersection(commentRange)) {\n\t\t\trangesToUnComment.push(commentRange);\n\t\t\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, comment.start, comment.start + startCommentStylesheet.length), ''));\n\t\t\tedits.push(new vscode.TextEdit(offsetRangeToVsRange(document, comment.end - endCommentStylesheet.length, comment.end), ''));\n\t\t}\n\t});\n\n\tif (edits.length > 0) {\n\t\treturn edits;\n\t}\n\n\treturn [\n\t\tnew vscode.TextEdit(new vscode.Range(selection.start, selection.start), startCommentStylesheet),\n\t\tnew vscode.TextEdit(new vscode.Range(selection.end, selection.end), endCommentStylesheet)\n\t];\n}\n\nfunction setupCommentSpacing() {\n\tconst config: boolean | undefined = vscode.workspace.getConfiguration('editor.comments').get('insertSpace');\n\tif (config) {\n\t\tstartCommentStylesheet = '/* ';\n\t\tendCommentStylesheet = ' */';\n\t\tstartCommentHTML = '<!-- ';\n\t\tendCommentHTML = ' -->';\n\t} else {\n\t\tstartCommentStylesheet = '/*';\n\t\tendCommentStylesheet = '*/';\n\t\tstartCommentHTML = '<!--';\n\t\tendCommentHTML = '-->';\n\t}\n}\n\nfunction adjustStartNodeCss(node: Node | undefined, offset: number, rootNode: Stylesheet): number {\n\tfor (const comment of rootNode.comments) {\n\t\tif (comment.start <= offset && offset <= comment.end) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\tif (!node) {\n\t\treturn offset;\n\t}\n\n\tif (node.type === 'property') {\n\t\treturn node.start;\n\t}\n\n\tconst rule = <Rule>node;\n\tif (offset < rule.contentStartToken.end || !rule.firstChild) {\n\t\treturn rule.start;\n\t}\n\n\tif (offset < rule.firstChild.start) {\n\t\treturn offset;\n\t}\n\n\tlet newStartNode = rule.firstChild;\n\twhile (newStartNode.nextSibling && offset > newStartNode.end) {\n\t\tnewStartNode = newStartNode.nextSibling;\n\t}\n\n\treturn newStartNode.start;\n}\n\nfunction adjustEndNodeCss(node: Node | undefined, offset: number, rootNode: Stylesheet): number {\n\tfor (const comment of rootNode.comments) {\n\t\tif (comment.start <= offset && offset <= comment.end) {\n\t\t\treturn offset;\n\t\t}\n\t}\n\n\tif (!node) {\n\t\treturn offset;\n\t}\n\n\tif (node.type === 'property') {\n\t\treturn node.end;\n\t}\n\n\tconst rule = <Rule>node;\n\tif (offset === rule.contentEndToken.end || !rule.firstChild) {\n\t\treturn rule.end;\n\t}\n\n\tif (offset > rule.children[rule.children.length - 1].end) {\n\t\treturn offset;\n\t}\n\n\tlet newEndNode = rule.children[rule.children.length - 1];\n\twhile (newEndNode.previousSibling && offset < newEndNode.start) {\n\t\tnewEndNode = newEndNode.previousSibling;\n\t}\n\n\treturn newEndNode.end;\n}\n\n\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate } from './util';\n\nexport function fetchEditPoint(direction: string): void {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\n\tconst newSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst updatedSelection = direction === 'next' ? nextEditPoint(selection, editor) : prevEditPoint(selection, editor);\n\t\tnewSelections.push(updatedSelection);\n\t});\n\teditor.selections = newSelections;\n\teditor.revealRange(editor.selections[editor.selections.length - 1]);\n}\n\nfunction nextEditPoint(selection: vscode.Selection, editor: vscode.TextEditor): vscode.Selection {\n\tfor (let lineNum = selection.anchor.line; lineNum < editor.document.lineCount; lineNum++) {\n\t\tconst updatedSelection = findEditPoint(lineNum, editor, selection.anchor, 'next');\n\t\tif (updatedSelection) {\n\t\t\treturn updatedSelection;\n\t\t}\n\t}\n\treturn selection;\n}\n\nfunction prevEditPoint(selection: vscode.Selection, editor: vscode.TextEditor): vscode.Selection {\n\tfor (let lineNum = selection.anchor.line; lineNum >= 0; lineNum--) {\n\t\tconst updatedSelection = findEditPoint(lineNum, editor, selection.anchor, 'prev');\n\t\tif (updatedSelection) {\n\t\t\treturn updatedSelection;\n\t\t}\n\t}\n\treturn selection;\n}\n\n\nfunction findEditPoint(lineNum: number, editor: vscode.TextEditor, position: vscode.Position, direction: string): vscode.Selection | undefined {\n\tconst line = editor.document.lineAt(lineNum);\n\tlet lineContent = line.text;\n\n\tif (lineNum !== position.line && line.isEmptyOrWhitespace && lineContent.length) {\n\t\treturn new vscode.Selection(lineNum, lineContent.length, lineNum, lineContent.length);\n\t}\n\n\tif (lineNum === position.line && direction === 'prev') {\n\t\tlineContent = lineContent.substr(0, position.character);\n\t}\n\tconst emptyAttrIndex = direction === 'next' ? lineContent.indexOf('\"\"', lineNum === position.line ? position.character : 0) : lineContent.lastIndexOf('\"\"');\n\tconst emptyTagIndex = direction === 'next' ? lineContent.indexOf('><', lineNum === position.line ? position.character : 0) : lineContent.lastIndexOf('><');\n\n\tlet winner = -1;\n\n\tif (emptyAttrIndex > -1 && emptyTagIndex > -1) {\n\t\twinner = direction === 'next' ? Math.min(emptyAttrIndex, emptyTagIndex) : Math.max(emptyAttrIndex, emptyTagIndex);\n\t} else if (emptyAttrIndex > -1) {\n\t\twinner = emptyAttrIndex;\n\t} else {\n\t\twinner = emptyTagIndex;\n\t}\n\n\tif (winner > -1) {\n\t\treturn new vscode.Selection(lineNum, winner + 1, lineNum, winner + 1);\n\t}\n\treturn;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { validate, isStyleSheet } from './util';\nimport { nextItemHTML, prevItemHTML } from './selectItemHTML';\nimport { nextItemStylesheet, prevItemStylesheet } from './selectItemStylesheet';\nimport { HtmlNode, CssNode } from 'EmmetFlatNode';\nimport { getRootNode } from './parseDocument';\n\nexport function fetchSelectItem(direction: string): void {\n\tif (!validate() || !vscode.window.activeTextEditor) {\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\tconst document = editor.document;\n\tconst rootNode = getRootNode(document, true);\n\tif (!rootNode) {\n\t\treturn;\n\t}\n\n\tconst newSelections: vscode.Selection[] = [];\n\teditor.selections.forEach(selection => {\n\t\tconst selectionStart = selection.isReversed ? selection.active : selection.anchor;\n\t\tconst selectionEnd = selection.isReversed ? selection.anchor : selection.active;\n\n\t\tlet updatedSelection;\n\t\tif (isStyleSheet(editor.document.languageId)) {\n\t\t\tupdatedSelection = direction === 'next' ?\n\t\t\t\tnextItemStylesheet(document, selectionStart, selectionEnd, <CssNode>rootNode) :\n\t\t\t\tprevItemStylesheet(document, selectionStart, selectionEnd, <CssNode>rootNode);\n\t\t} else {\n\t\t\tupdatedSelection = direction === 'next' ?\n\t\t\t\tnextItemHTML(document, selectionStart, selectionEnd, <HtmlNode>rootNode) :\n\t\t\t\tprevItemHTML(document, selectionStart, selectionEnd, <HtmlNode>rootNode);\n\t\t}\n\t\tnewSelections.push(updatedSelection ? updatedSelection : selection);\n\t});\n\teditor.selections = newSelections;\n\teditor.revealRange(editor.selections[editor.selections.length - 1]);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getDeepestFlatNode, findNextWord, findPrevWord, getHtmlFlatNode, offsetRangeToSelection } from './util';\nimport { HtmlNode } from 'EmmetFlatNode';\n\nexport function nextItemHTML(document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, rootNode: HtmlNode): vscode.Selection | undefined {\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tlet currentNode = getHtmlFlatNode(document.getText(), rootNode, selectionEndOffset, false);\n\tlet nextNode: HtmlNode | undefined = undefined;\n\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\tif (currentNode.type !== 'comment') {\n\t\t// If cursor is in the tag name, select tag\n\t\tif (currentNode.open &&\n\t\t\tselectionEndOffset <= currentNode.open.start + currentNode.name.length) {\n\t\t\treturn getSelectionFromNode(document, currentNode);\n\t\t}\n\n\t\t// If cursor is in the open tag, look for attributes\n\t\tif (currentNode.open &&\n\t\t\tselectionEndOffset < currentNode.open.end) {\n\t\t\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\t\t\tconst attrSelection = getNextAttribute(document, selectionStartOffset, selectionEndOffset, currentNode);\n\t\t\tif (attrSelection) {\n\t\t\t\treturn attrSelection;\n\t\t\t}\n\t\t}\n\n\t\t// Get the first child of current node which is right after the cursor and is not a comment\n\t\tnextNode = currentNode.firstChild;\n\t\twhile (nextNode && (selectionEndOffset >= nextNode.end || nextNode.type === 'comment')) {\n\t\t\tnextNode = nextNode.nextSibling;\n\t\t}\n\t}\n\n\t// Get next sibling of current node which is not a comment. If none is found try the same on the parent\n\twhile (!nextNode && currentNode) {\n\t\tif (currentNode.nextSibling) {\n\t\t\tif (currentNode.nextSibling.type !== 'comment') {\n\t\t\t\tnextNode = currentNode.nextSibling;\n\t\t\t} else {\n\t\t\t\tcurrentNode = currentNode.nextSibling;\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentNode = currentNode.parent;\n\t\t}\n\t}\n\n\treturn nextNode && getSelectionFromNode(document, nextNode);\n}\n\nexport function prevItemHTML(document: vscode.TextDocument, selectionStart: vscode.Position, selectionEnd: vscode.Position, rootNode: HtmlNode): vscode.Selection | undefined {\n\tconst selectionStartOffset = document.offsetAt(selectionStart);\n\tlet currentNode = getHtmlFlatNode(document.getText(), rootNode, selectionStartOffset, false);\n\tlet prevNode: HtmlNode | undefined = undefined;\n\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\tconst selectionEndOffset = document.offsetAt(selectionEnd);\n\tif (currentNode.open &&\n\t\tcurrentNode.type !== 'comment' &&\n\t\tselectionStartOffset - 1 > currentNode.open.start) {\n\t\tif (selectionStartOffset < currentNode.open.end || !currentNode.firstChild || selectionEndOffset <= currentNode.firstChild.start) {\n\t\t\tprevNode = currentNode;\n\t\t} else {\n\t\t\t// Select the child that appears just before the cursor and is not a comment\n\t\t\tprevNode = currentNode.firstChild;\n\t\t\tlet oldOption: HtmlNode | undefined = undefined;\n\t\t\twhile (prevNode.nextSibling && selectionStartOffset >= prevNode.nextSibling.end) {\n\t\t\t\tif (prevNode && prevNode.type !== 'comment') {\n\t\t\t\t\toldOption = prevNode;\n\t\t\t\t}\n\t\t\t\tprevNode = prevNode.nextSibling;\n\t\t\t}\n\n\t\t\tprevNode = <HtmlNode>getDeepestFlatNode((prevNode && prevNode.type !== 'comment') ? prevNode : oldOption);\n\t\t}\n\t}\n\n\t// Select previous sibling which is not a comment. If none found, then select parent\n\twhile (!prevNode && currentNode) {\n\t\tif (currentNode.previousSibling) {\n\t\t\tif (currentNode.previousSibling.type !== 'comment') {\n\t\t\t\tprevNode = <HtmlNode>getDeepestFlatNode(currentNode.previousSibling);\n\t\t\t} else {\n\t\t\t\tcurrentNode = currentNode.previousSibling;\n\t\t\t}\n\t\t} else {\n\t\t\tprevNode = currentNode.parent;\n\t\t}\n\n\t}\n\n\tif (!prevNode) {\n\t\treturn undefined;\n\t}\n\n\tconst attrSelection = getPrevAttribute(document, selectionStartOffset, selectionEndOffset, prevNode);\n\treturn attrSelection ? attrSelection : getSelectionFromNode(document, prevNode);\n}\n\nfunction getSelectionFromNode(document: vscode.TextDocument, node: HtmlNode): vscode.Selection | undefined {\n\tif (node && node.open) {\n\t\tconst selectionStart = node.open.start + 1;\n\t\tconst selectionEnd = selectionStart + node.name.length;\n\t\treturn offsetRangeToSelection(document, selectionStart, selectionEnd);\n\t}\n\treturn undefined;\n}\n\nfunction getNextAttribute(document: vscode.TextDocument, selectionStart: number, selectionEnd: number, node: HtmlNode): vscode.Selection | undefined {\n\tif (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {\n\t\treturn;\n\t}\n\n\tfor (const attr of node.attributes) {\n\t\tif (selectionEnd < attr.start) {\n\t\t\t// select full attr\n\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t}\n\n\t\tif (!attr.value || attr.value.start === attr.value.end) {\n\t\t\t// No attr value to select\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ((selectionStart === attr.start && selectionEnd === attr.end) ||\n\t\t\tselectionEnd < attr.value.start) {\n\t\t\t// cursor is in attr name, so select full attr value\n\t\t\treturn offsetRangeToSelection(document, attr.value.start, attr.value.end);\n\t\t}\n\n\t\t// Fetch the next word in the attr value\n\t\tif (!attr.value.toString().includes(' ')) {\n\t\t\t// attr value does not have space, so no next word to find\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet pos: number | undefined = undefined;\n\t\tif (selectionStart === attr.value.start && selectionEnd === attr.value.end) {\n\t\t\tpos = -1;\n\t\t}\n\t\tif (pos === undefined && selectionEnd < attr.end) {\n\t\t\tconst selectionEndCharacter = document.positionAt(selectionEnd).character;\n\t\t\tconst attrValueStartCharacter = document.positionAt(attr.value.start).character;\n\t\t\tpos = selectionEndCharacter - attrValueStartCharacter - 1;\n\t\t}\n\n\t\tif (pos !== undefined) {\n\t\t\tconst [newSelectionStartOffset, newSelectionEndOffset] = findNextWord(attr.value.toString(), pos);\n\t\t\tif (newSelectionStartOffset === undefined || newSelectionEndOffset === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {\n\t\t\t\tconst newSelectionStart = attr.value.start + newSelectionStartOffset;\n\t\t\t\tconst newSelectionEnd = attr.value.start + newSelectionEndOffset;\n\t\t\t\treturn offsetRangeToSelection(document, newSelectionStart, newSelectionEnd);\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn;\n}\n\nfunction getPrevAttribute(document: vscode.TextDocument, selectionStart: number, selectionEnd: number, node: HtmlNode): vscode.Selection | undefined {\n\tif (!node.attributes || node.attributes.length === 0 || node.type === 'comment') {\n\t\treturn;\n\t}\n\n\tfor (let i = node.attributes.length - 1; i >= 0; i--) {\n\t\tconst attr = node.attributes[i];\n\t\tif (selectionStart <= attr.start) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!attr.value || attr.value.start === attr.value.end || selectionStart < attr.value.start) {\n\t\t\t// select full attr\n\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t}\n\n\t\tif (selectionStart === attr.value.start) {\n\t\t\tif (selectionEnd >= attr.value.end) {\n\t\t\t\t// select full attr\n\t\t\t\treturn offsetRangeToSelection(document, attr.start, attr.end);\n\t\t\t}\n\t\t\t// select attr value\n\t\t\treturn offsetRangeToSelection(document, attr.value.start, attr.value.end);\n\t\t}\n\n\t\t// Fetch the prev word in the attr value\n\t\tconst selectionStartCharacter = document.positionAt(selectionStart).character;\n\t\tconst attrValueStartCharacter = document.positionAt(attr.value.start).character;\n\t\tconst pos = selectionStart > attr.value.end ? attr.value.toString().length :\n\t\t\tselectionStartCharacter - attrValueStartCharacter;\n\t\tconst [newSelectionStartOffset, newSelectionEndOffset] = findPrevWord(attr.value.toString(), pos);\n\t\tif (newSelectionStartOffset === undefined || newSelectionEndOffset === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tif (newSelectionStartOffset >= 0 && newSelectionEndOffset >= 0) {\n\t\t\tconst newSelectionStart = attr.value.start + newSelectionStartOffset;\n\t\t\tconst newSelectionEnd = attr.value.start + newSelectionEndOffset;\n\t\t\treturn offsetRangeToSelection(document, newSelectionStart, newSelectionEnd);\n\t\t}\n\t}\n\n\treturn;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as vscode from 'vscode';\nimport { getDeepestFlatNode, findNextWord, findPrevWord, getFlatNode, offsetRangeToSelection } from './util';\nimport { Node, CssNode, Rule, Property } from 'EmmetFlatNode';\n\nexport function nextItemStylesheet(document: vscode.TextDocument, startPosition: vscode.Position, endPosition: vscode.Position, rootNode: Node): vscode.Selection | undefined {\n\tconst startOffset = document.offsetAt(startPosition);\n\tconst endOffset = document.offsetAt(endPosition);\n\tlet currentNode: CssNode | undefined = <CssNode>getFlatNode(rootNode, endOffset, true);\n\tif (!currentNode) {\n\t\tcurrentNode = <CssNode>rootNode;\n\t}\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\t// Full property is selected, so select full property value next\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset === currentNode.start &&\n\t\tendOffset === currentNode.end) {\n\t\treturn getSelectionFromProperty(document, currentNode, startOffset, endOffset, true, 'next');\n\t}\n\n\t// Part or whole of propertyValue is selected, so select the next word in the propertyValue\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset >= (<Property>currentNode).valueToken.start &&\n\t\tendOffset <= (<Property>currentNode).valueToken.end) {\n\t\tconst singlePropertyValue = getSelectionFromProperty(document, currentNode, startOffset, endOffset, false, 'next');\n\t\tif (singlePropertyValue) {\n\t\t\treturn singlePropertyValue;\n\t\t}\n\t}\n\n\t// Cursor is in the selector or in a property\n\tif ((currentNode.type === 'rule' && endOffset < (<Rule>currentNode).selectorToken.end)\n\t\t|| (currentNode.type === 'property' && endOffset < (<Property>currentNode).valueToken.end)) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Get the first child of current node which is right after the cursor\n\tlet nextNode = currentNode.firstChild;\n\twhile (nextNode && endOffset >= nextNode.end) {\n\t\tnextNode = nextNode.nextSibling;\n\t}\n\n\t// Get next sibling of current node or the parent\n\twhile (!nextNode && currentNode) {\n\t\tnextNode = currentNode.nextSibling;\n\t\tcurrentNode = currentNode.parent;\n\t}\n\n\treturn nextNode ? getSelectionFromNode(document, nextNode) : undefined;\n}\n\nexport function prevItemStylesheet(document: vscode.TextDocument, startPosition: vscode.Position, endPosition: vscode.Position, rootNode: CssNode): vscode.Selection | undefined {\n\tconst startOffset = document.offsetAt(startPosition);\n\tconst endOffset = document.offsetAt(endPosition);\n\tlet currentNode = <CssNode>getFlatNode(rootNode, startOffset, false);\n\tif (!currentNode) {\n\t\tcurrentNode = rootNode;\n\t}\n\tif (!currentNode) {\n\t\treturn;\n\t}\n\n\t// Full property value is selected, so select the whole property next\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset === (<Property>currentNode).valueToken.start &&\n\t\tendOffset === (<Property>currentNode).valueToken.end) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Part of propertyValue is selected, so select the prev word in the propertyValue\n\tif (currentNode.type === 'property' &&\n\t\tstartOffset >= (<Property>currentNode).valueToken.start &&\n\t\tendOffset <= (<Property>currentNode).valueToken.end) {\n\t\tconst singlePropertyValue = getSelectionFromProperty(document, currentNode, startOffset, endOffset, false, 'prev');\n\t\tif (singlePropertyValue) {\n\t\t\treturn singlePropertyValue;\n\t\t}\n\t}\n\n\tif (currentNode.type === 'property' || !currentNode.firstChild ||\n\t\t(currentNode.type === 'rule' && startOffset <= currentNode.firstChild.start)) {\n\t\treturn getSelectionFromNode(document, currentNode);\n\t}\n\n\t// Select the child that appears just before the cursor\n\tlet prevNode: CssNode | undefined = currentNode.firstChild;\n\twhile (prevNode.nextSibling && startOffset >= prevNode.nextSibling.end) {\n\t\tprevNode = prevNode.nextSibling;\n\t}\n\tprevNode = <CssNode | undefined>getDeepestFlatNode(prevNode);\n\n\treturn getSelectionFromProperty(document, prevNode, startOffset, endOffset, false, 'prev');\n}\n\n\nfunction getSelectionFromNode(document: vscode.TextDocument, node: Node | undefined): vscode.Selection | undefined {\n\tif (!node) {\n\t\treturn;\n\t}\n\n\tconst nodeToSelect = node.type === 'rule' ? (<Rule>node).selectorToken : node;\n\treturn offsetRangeToSelection(document, nodeToSelect.start, nodeToSelect.end);\n}\n\n\nfunction getSelectionFromProperty(document: vscode.TextDocument, node: Node | undefined, selectionStart: number, selectionEnd: number, selectFullValue: boolean, direction: string): vscode.Selection | undefined {\n\tif (!node || node.type !== 'property') {\n\t\treturn;\n\t}\n\tconst propertyNode = <Property>node;\n\n\tconst propertyValue = propertyNode.valueToken.stream.substring(propertyNode.valueToken.start, propertyNode.valueToken.end);\n\tselectFullValue = selectFullValue ||\n\t\t(direction === 'prev' && selectionStart === propertyNode.valueToken.start && selectionEnd < propertyNode.valueToken.end);\n\n\tif (selectFullValue) {\n\t\treturn offsetRangeToSelection(document, propertyNode.valueToken.start, propertyNode.valueToken.end);\n\t}\n\n\tlet pos: number = -1;\n\tif (direction === 'prev') {\n\t\tif (selectionStart === propertyNode.valueToken.start) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionStartChar = document.positionAt(selectionStart).character;\n\t\tconst tokenStartChar = document.positionAt(propertyNode.valueToken.start).character;\n\t\tpos = selectionStart > propertyNode.valueToken.end ? propertyValue.length :\n\t\t\tselectionStartChar - tokenStartChar;\n\t} else if (direction === 'next') {\n\t\tif (selectionEnd === propertyNode.valueToken.end &&\n\t\t\t(selectionStart > propertyNode.valueToken.start || !propertyValue.includes(' '))) {\n\t\t\treturn;\n\t\t}\n\t\tconst selectionEndChar = document.positionAt(selectionEnd).character;\n\t\tconst tokenStartChar = document.positionAt(propertyNode.valueToken.start).character;\n\t\tpos = selectionEnd === propertyNode.valueToken.end ? -1 :\n\t\t\tselectionEndChar - tokenStartChar - 1;\n\t}\n\n\n\tconst [newSelectionStartOffset, newSelectionEndOffset] = direction === 'prev' ? findPrevWord(propertyValue, pos) : findNextWord(propertyValue, pos);\n\tif (!newSelectionStartOffset && !newSelectionEndOffset) {\n\t\treturn;\n\t}\n\n\tconst tokenStart = document.positionAt(propertyNode.valueToken.start);\n\tconst newSelectionStart = tokenStart.translate(0, newSelectionStartOffset);\n\tconst newSelectionEnd = tokenStart.translate(0, newSelectionEndOffset);\n\n\treturn new vscode.Selection(newSelectionStart, newSelectionEnd);\n}\n\n\n\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport * as vscode from 'vscode';\nimport evaluate, { extract } from '@emmetio/math-expression';\n\nexport function evaluateMathExpression(): Thenable<boolean> {\n\tif (!vscode.window.activeTextEditor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn Promise.resolve(false);\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\treturn editor.edit(editBuilder => {\n\t\teditor.selections.forEach(selection => {\n\t\t\t// startpos always comes before endpos\n\t\t\tconst startpos = selection.isReversed ? selection.active : selection.anchor;\n\t\t\tconst endpos = selection.isReversed ? selection.anchor : selection.active;\n\t\t\tconst selectionText = editor.document.getText(new vscode.Range(startpos, endpos));\n\n\t\t\ttry {\n\t\t\t\tif (selectionText) {\n\t\t\t\t\t// respect selections\n\t\t\t\t\tconst result = String(evaluate(selectionText));\n\t\t\t\t\teditBuilder.replace(new vscode.Range(startpos, endpos), result);\n\t\t\t\t} else {\n\t\t\t\t\t// no selection made, extract expression from line\n\t\t\t\t\tconst lineToSelectionEnd = editor.document.getText(new vscode.Range(new vscode.Position(selection.end.line, 0), endpos));\n\t\t\t\t\tconst extractedIndices = extract(lineToSelectionEnd);\n\t\t\t\t\tif (!extractedIndices) {\n\t\t\t\t\t\tthrow new Error('Invalid extracted indices');\n\t\t\t\t\t}\n\t\t\t\t\tconst result = String(evaluate(lineToSelectionEnd.substr(extractedIndices[0], extractedIndices[1])));\n\t\t\t\t\tconst rangeToReplace = new vscode.Range(\n\t\t\t\t\t\tnew vscode.Position(selection.end.line, extractedIndices[0]),\n\t\t\t\t\t\tnew vscode.Position(selection.end.line, extractedIndices[1])\n\t\t\t\t\t);\n\t\t\t\t\teditBuilder.replace(rangeToReplace, result);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tvscode.window.showErrorMessage('Could not evaluate expression');\n\t\t\t\t// Ignore error since most likely it's because of non-math expression\n\t\t\t\tconsole.warn('Math evaluation error', err);\n\t\t\t}\n\t\t});\n\t});\n}\n", null, null, "import Scanner, { isWhiteSpace, isNumber } from '@emmetio/scanner';\n\nexport const enum TokenType {\n Number = 'num',\n Op1 = 'op1',\n Op2 = 'op2',\n Null = 'null'\n}\n\nexport const enum Operator {\n Plus = 43, // +\n Minus = 45, // -\n Multiply = 42, // *\n Divide = 47, // /\n IntDivide = 92, // \\\n LeftParenthesis = 40, // (\n RightParenthesis = 41, // )\n Dot = 46, // .\n}\n\nconst enum ParserState {\n Primary = 1 << 0,\n Operator = 1 << 1,\n LParen = 1 << 2,\n RParen = 1 << 3,\n Sign = 1 << 4,\n NullaryCall = 1 << 5,\n}\n\nexport interface Token {\n type: TokenType;\n value: number;\n priority: number;\n}\n\nexport const nullary = token(TokenType.Null, 0);\n\n/**\n * Parses given expression in forward direction\n */\nexport default function parse(expr: string | Scanner): Token[] | null {\n const scanner = typeof expr === 'string' ? new Scanner(expr) : expr;\n let ch: number;\n let priority = 0;\n let expected: ParserState = (ParserState.Primary | ParserState.LParen | ParserState.Sign);\n const tokens: Token[] = [];\n\n while (!scanner.eof()) {\n scanner.eatWhile(isWhiteSpace);\n scanner.start = scanner.pos;\n\n if (consumeNumber(scanner)) {\n if ((expected & ParserState.Primary) === 0) {\n error('Unexpected number', scanner);\n }\n\n tokens.push(number(scanner.current()));\n expected = (ParserState.Operator | ParserState.RParen);\n } else if (isOperator(scanner.peek())) {\n ch = scanner.next()!;\n if (isSign(ch) && (expected & ParserState.Sign)) {\n if (isNegativeSign(ch)) {\n tokens.push(op1(ch, priority));\n }\n expected = (ParserState.Primary | ParserState.LParen | ParserState.Sign);\n } else {\n if ((expected & ParserState.Operator) === 0) {\n error('Unexpected operator', scanner);\n }\n tokens.push(op2(ch, priority));\n expected = (ParserState.Primary | ParserState.LParen | ParserState.Sign);\n }\n } else if (scanner.eat(Operator.LeftParenthesis)) {\n if ((expected & ParserState.LParen) === 0) {\n error('Unexpected \"(\"', scanner);\n }\n\n priority += 10;\n expected = (ParserState.Primary | ParserState.LParen | ParserState.Sign | ParserState.NullaryCall);\n } else if (scanner.eat(Operator.RightParenthesis)) {\n priority -= 10;\n\n if (expected & ParserState.NullaryCall) {\n tokens.push(nullary);\n } else if ((expected & ParserState.RParen) === 0) {\n error('Unexpected \")\"', scanner);\n }\n\n expected = (ParserState.Operator | ParserState.RParen | ParserState.LParen);\n } else {\n error('Unknown character', scanner);\n }\n }\n\n if (priority < 0 || priority >= 10) {\n error('Unmatched \"()\"', scanner);\n }\n\n const result = orderTokens(tokens);\n\n if (result === null) {\n error('Parity', scanner);\n }\n\n return result;\n}\n\n/**\n * Consumes number from given stream\n * @return Returns `true` if number was consumed\n */\nfunction consumeNumber(scanner: Scanner): boolean {\n const start = scanner.pos;\n if (scanner.eat(Operator.Dot) && scanner.eatWhile(isNumber)) {\n // short decimal notation: .025\n return true;\n }\n\n if (scanner.eatWhile(isNumber) && (!scanner.eat(Operator.Dot) || scanner.eatWhile(isNumber))) {\n // either integer or decimal: 10, 10.25\n return true;\n }\n\n scanner.pos = start;\n return false;\n}\n\n/**\n * Orders parsed tokens (operands and operators) in given array so that they are\n * laid off in order of execution\n */\nfunction orderTokens(tokens: Token[]): Token[] | null {\n const operators: Token[] = [];\n const operands: Token[] = [];\n let nOperators = 0;\n\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n\n if (t.type === TokenType.Number) {\n operands.push(t);\n } else {\n nOperators += t.type === TokenType.Op1 ? 1 : 2;\n\n while (operators.length) {\n if (t.priority <= operators[operators.length - 1].priority) {\n operands.push(operators.pop()!);\n } else {\n break;\n }\n }\n\n operators.push(t);\n }\n }\n\n return nOperators + 1 === operands.length + operators.length\n ? operands.concat(operators.reverse())\n : null /* parity */;\n}\n\n/**\n * Number token factory\n */\nfunction number(value: string, priority?: number): Token {\n return token(TokenType.Number, parseFloat(value), priority);\n}\n\n/**\n * Unary operator factory\n * @param value Operator character code\n * @param priority Operator execution priority\n */\nfunction op1(value: number, priority = 0) {\n if (value === Operator.Minus) {\n priority += 2;\n }\n return token(TokenType.Op1, value, priority);\n}\n\n/**\n * Binary operator factory\n * @param value Operator character code\n * @param priority Operator execution priority\n */\nfunction op2(value: number, priority = 0): Token {\n if (value === Operator.Multiply) {\n priority += 1;\n } else if (value === Operator.Divide || value === Operator.IntDivide) {\n priority += 2;\n }\n\n return token(TokenType.Op2, value, priority);\n}\n\nfunction error(name: string, scanner?: Scanner) {\n if (scanner) {\n name += ` at column ${scanner.pos} of expression`;\n }\n throw new Error(name);\n}\n\nexport function isSign(ch: number): boolean {\n return isPositiveSign(ch) || isNegativeSign(ch);\n}\n\nfunction isPositiveSign(ch: number) {\n return ch === Operator.Plus;\n}\n\nfunction isNegativeSign(ch: number) {\n return ch === Operator.Minus;\n}\n\nexport function isOperator(ch: number): ch is Operator {\n return ch === Operator.Plus || ch === Operator.Minus || ch === Operator.Multiply\n || ch === Operator.Divide || ch === Operator.IntDivide;\n}\n\nexport function token(type: TokenType, value: number, priority: number = 0): Token {\n return { type, value, priority };\n}\n", "import { Operator, isSign, isOperator } from './parser';\nimport { isSpace, isNumber } from '@emmetio/scanner';\n\nexport interface ExtractOptions {\n /**\n * Allow capturing extra expression characters right after start position.\n * Useful for extracting expressions from text editor source which inserts\n * paired characters like `(` and `)` to properly extract expression past\n * caret position\n */\n lookAhead: boolean;\n\n /**\n * Allow whitespace in extracted expressions\n */\n whitespace: boolean;\n}\n\ninterface BackwardScanner {\n text: string;\n pos: number;\n}\n\nconst defaultOptions: ExtractOptions = {\n lookAhead: true,\n whitespace: true\n};\n\nexport default function extract(text: string, pos = text.length, options?: Partial<ExtractOptions>): [number, number] | null {\n const opt = { ...defaultOptions, ...options };\n const scanner: BackwardScanner = { text, pos };\n let ch: number;\n\n if (opt.lookAhead && cur(scanner) === Operator.RightParenthesis) {\n // Basically, we should consume right parenthesis only with optional whitespace\n scanner.pos++;\n const len = text.length;\n while (scanner.pos < len) {\n ch = cur(scanner);\n if (ch !== Operator.RightParenthesis && !(opt.whitespace && isSpace(ch))) {\n break;\n }\n scanner.pos++;\n }\n }\n\n const end = scanner.pos;\n let braces = 0;\n while (scanner.pos >= 0) {\n if (number(scanner)) {\n continue;\n }\n\n ch = prev(scanner);\n if (ch === Operator.RightParenthesis) {\n braces++;\n } else if (ch === Operator.LeftParenthesis) {\n if (!braces) {\n break;\n }\n braces--;\n } else if (!((opt.whitespace && isSpace(ch)) || isSign(ch) || isOperator(ch))) {\n break;\n }\n\n scanner.pos--;\n }\n\n if (scanner.pos !== end && !braces) {\n // Trim whitespace\n while (isSpace(cur(scanner))) {\n scanner.pos++;\n }\n\n return [scanner.pos, end];\n }\n\n return null;\n}\n\n/**\n * Backward-consumes number from given scanner, if possible\n */\nfunction number(scanner: BackwardScanner): boolean {\n if (isNumber(prev(scanner))) {\n scanner.pos--;\n let dot = false;\n let ch: number;\n\n while (scanner.pos >= 0) {\n ch = prev(scanner);\n if (ch === 46 /* . */) {\n if (dot) {\n // Decimal delimiter already consumed, abort\n break;\n }\n dot = true;\n } else if (!isNumber(ch)) {\n break;\n }\n scanner.pos--;\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction prev(scanner: BackwardScanner): number {\n return scanner.text.charCodeAt(scanner.pos - 1);\n}\n\nfunction cur(scanner: BackwardScanner): number {\n return scanner.text.charCodeAt(scanner.pos);\n}\n", "import Scanner from '@emmetio/scanner';\nimport parse, { TokenType, Operator, Token } from './parser';\n\nexport { default as extract, ExtractOptions } from './extract';\n\ntype UnaryAction = { [op in Operator]?: (n: number) => number };\ntype BinaryAction = { [op in Operator]?: (n1: number, n2: number) => number };\n\nconst ops1: UnaryAction = {\n [Operator.Minus]: num => -num\n};\n\nconst ops2: BinaryAction = {\n [Operator.Plus]: (a, b) => a + b,\n [Operator.Minus]: (a, b) => a - b,\n [Operator.Multiply]: (a, b) => a * b,\n [Operator.Divide]: (a, b) => a / b,\n [Operator.IntDivide]: (a, b) => Math.floor(a / b)\n};\n\n/**\n * Evaluates given math expression\n * @param expr Expression to evaluate\n */\nexport default function evaluate(expr: string | Scanner | Token[]): number | null {\n if (!Array.isArray(expr)) {\n expr = parse(expr)!;\n }\n\n if (!expr || !expr.length) {\n return null;\n }\n\n const nStack: number[] = [];\n let n1: number;\n let n2: number;\n let f: (n1: number, n2?: number) => number;\n\n for (let i = 0, il = expr.length; i < il; i++) {\n const token = expr[i];\n if (token.type === TokenType.Number) {\n nStack.push(token.value);\n } else if (token.type === TokenType.Op2) {\n n2 = nStack.pop()!;\n n1 = nStack.pop()!;\n f = ops2[token.value];\n nStack.push(f(n1, n2));\n } else if (token.type === TokenType.Op1) {\n n1 = nStack.pop()!;\n f = ops1[token.value];\n nStack.push(f(n1));\n } else {\n throw new Error('Invalid expression');\n }\n }\n\n if (nStack.length > 1) {\n throw new Error('Invalid Expression (parity)');\n }\n\n return nStack[0];\n}\n\nexport { parse, Token };\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Based on @sergeche's work in his emmet plugin */\n\nimport * as vscode from 'vscode';\n\nconst reNumber = /[0-9]/;\n\n/**\n * Incerement number under caret of given editor\n */\nexport function incrementDecrement(delta: number): Thenable<boolean> | undefined {\n\tif (!vscode.window.activeTextEditor) {\n\t\tvscode.window.showInformationMessage('No editor is active');\n\t\treturn;\n\t}\n\tconst editor = vscode.window.activeTextEditor;\n\n\treturn editor.edit(editBuilder => {\n\t\teditor.selections.forEach(selection => {\n\t\t\tconst rangeToReplace = locate(editor.document, selection.isReversed ? selection.anchor : selection.active);\n\t\t\tif (!rangeToReplace) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = editor.document.getText(rangeToReplace);\n\t\t\tif (isValidNumber(text)) {\n\t\t\t\teditBuilder.replace(rangeToReplace, update(text, delta));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Updates given number with `delta` and returns string formatted according\n * to original string format\n */\nexport function update(numString: string, delta: number): string {\n\tlet m: RegExpMatchArray | null;\n\tconst decimals = (m = numString.match(/\\.(\\d+)$/)) ? m[1].length : 1;\n\tlet output = String((parseFloat(numString) + delta).toFixed(decimals)).replace(/\\.0+$/, '');\n\n\tif (m = numString.match(/^\\-?(0\\d+)/)) {\n\t\t// padded number: preserve padding\n\t\toutput = output.replace(/^(\\-?)(\\d+)/, (_, minus, prefix) =>\n\t\t\tminus + '0'.repeat(Math.max(0, (m ? m[1].length : 0) - prefix.length)) + prefix);\n\t}\n\n\tif (/^\\-?\\./.test(numString)) {\n\t\t// omit integer part\n\t\toutput = output.replace(/^(\\-?)0+/, '$1');\n\t}\n\n\treturn output;\n}\n\n/**\n * Locates number from given position in the document\n *\n * @return Range of number or `undefined` if not found\n */\nexport function locate(document: vscode.TextDocument, pos: vscode.Position): vscode.Range | undefined {\n\n\tconst line = document.lineAt(pos.line).text;\n\tlet start = pos.character;\n\tlet end = pos.character;\n\tlet hadDot = false, hadMinus = false;\n\tlet ch;\n\n\twhile (start > 0) {\n\t\tch = line[--start];\n\t\tif (ch === '-') {\n\t\t\thadMinus = true;\n\t\t\tbreak;\n\t\t} else if (ch === '.' && !hadDot) {\n\t\t\thadDot = true;\n\t\t} else if (!reNumber.test(ch)) {\n\t\t\tstart++;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (line[end] === '-' && !hadMinus) {\n\t\tend++;\n\t}\n\n\twhile (end < line.length) {\n\t\tch = line[end++];\n\t\tif (ch === '.' && !hadDot && reNumber.test(line[end])) {\n\t\t\t// A dot must be followed by a number. Otherwise stop parsing\n\t\t\thadDot = true;\n\t\t} else if (!reNumber.test(ch)) {\n\t\t\tend--;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// ensure that found range contains valid number\n\tif (start !== end && isValidNumber(line.slice(start, end))) {\n\t\treturn new vscode.Range(pos.line, start, pos.line, end);\n\t}\n\n\treturn;\n}\n\n/**\n * Check if given string contains valid number\n */\nfunction isValidNumber(str: string): boolean {\n\treturn str ? !isNaN(parseFloat(str)) : false;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { window, TextEditor } from 'vscode';\nimport { getCssPropertyFromRule, getCssPropertyFromDocument, offsetRangeToVsRange } from './util';\nimport { Property, Rule } from 'EmmetFlatNode';\n\nconst vendorPrefixes = ['-webkit-', '-moz-', '-ms-', '-o-', ''];\n\nexport function reflectCssValue(): Thenable<boolean> | undefined {\n\tconst editor = window.activeTextEditor;\n\tif (!editor) {\n\t\twindow.showInformationMessage('No editor is active.');\n\t\treturn;\n\t}\n\n\tconst node = getCssPropertyFromDocument(editor, editor.selection.active);\n\tif (!node) {\n\t\treturn;\n\t}\n\n\treturn updateCSSNode(editor, node);\n}\n\nfunction updateCSSNode(editor: TextEditor, property: Property): Thenable<boolean> {\n\tconst rule: Rule = property.parent;\n\tlet currentPrefix = '';\n\n\t// Find vendor prefix of given property node\n\tfor (const prefix of vendorPrefixes) {\n\t\tif (property.name.startsWith(prefix)) {\n\t\t\tcurrentPrefix = prefix;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst propertyName = property.name.substr(currentPrefix.length);\n\tconst propertyValue = property.value;\n\n\treturn editor.edit(builder => {\n\t\t// Find properties with vendor prefixes, update each\n\t\tvendorPrefixes.forEach(prefix => {\n\t\t\tif (prefix === currentPrefix) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst vendorProperty = getCssPropertyFromRule(rule, prefix + propertyName);\n\t\t\tif (vendorProperty) {\n\t\t\t\tconst rangeToReplace = offsetRangeToVsRange(editor.document, vendorProperty.valueToken.start, vendorProperty.valueToken.end);\n\t\t\t\tbuilder.replace(rangeToReplace, propertyValue);\n\t\t\t}\n\t\t});\n\t});\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["define_process_env_default", "init_define_process_env", "__esmMin", "createScanner", "text", "ignoreTrivia", "len", "pos", "value", "tokenOffset", "token", "lineNumber", "lineStartOffset", "tokenLineStartOffset", "prevTokenLineStartOffset", "scanError", "scanHexDigits", "count", "exact", "digits", "ch", "setPosition", "newPosition", "scanNumber", "start", "isDigit", "end", "scanString", "result", "ch2", "ch3", "isLineBreak", "scanNext", "code", "isWhiteSpace", "safeLength", "commentClosed", "isUnknownContentCharacter", "scanNextNonTrivia", "init_scanner", "__esmMin", "init_define_process_env", "init_format", "__esmMin", "init_define_process_env", "init_scanner", "parse", "text", "errors", "options", "ParseOptions", "currentProperty", "currentParent", "previousParents", "onValue", "value", "visitor", "object", "name", "array", "error", "offset", "length", "visit", "_scanner", "createScanner", "toNoArgVisit", "visitFunction", "toOneArgVisit", "arg", "onObjectBegin", "onObjectProperty", "onObjectEnd", "onArrayBegin", "onArrayEnd", "onLiteralValue", "onSeparator", "onComment", "onError", "disallowComments", "allowTrailingComma", "scanNext", "token", "handleError", "skipUntilAfter", "skipUntil", "parseString", "isValue", "parseLiteral", "tokenValue", "parseProperty", "parseValue", "parseObject", "needsComma", "parseArray", "init_parser", "__esmMin", "init_define_process_env", "init_scanner", "init_edit", "__esmMin", "init_define_process_env", "init_format", "init_parser", "printParseErrorCode", "code", "parse", "init_main", "__esmMin", "init_define_process_env", "init_format", "init_edit", "init_scanner", "init_parser", "require_shams", "__commonJSMin", "exports", "module", "init_define_process_env", "obj", "sym", "symObj", "symVal", "_", "syms", "descriptor", "require_shams", "__commonJSMin", "exports", "module", "init_define_process_env", "hasSymbols", "require_es_object_atoms", "__commonJSMin", "exports", "module", "init_define_process_env", "require_es_errors", "__commonJSMin", "exports", "module", "init_define_process_env", "require_eval", "__commonJSMin", "exports", "module", "init_define_process_env", "require_range", "__commonJSMin", "exports", "module", "init_define_process_env", "require_ref", "__commonJSMin", "exports", "module", "init_define_process_env", "require_syntax", "__commonJSMin", "exports", "module", "init_define_process_env", "require_type", "__commonJSMin", "exports", "module", "init_define_process_env", "require_uri", "__commonJSMin", "exports", "module", "init_define_process_env", "require_abs", "__commonJSMin", "exports", "module", "init_define_process_env", "require_floor", "__commonJSMin", "exports", "module", "init_define_process_env", "require_max", "__commonJSMin", "exports", "module", "init_define_process_env", "require_min", "__commonJSMin", "exports", "module", "init_define_process_env", "require_pow", "__commonJSMin", "exports", "module", "init_define_process_env", "require_round", "__commonJSMin", "exports", "module", "init_define_process_env", "require_isNaN", "__commonJSMin", "exports", "module", "init_define_process_env", "a", "require_sign", "__commonJSMin", "exports", "module", "init_define_process_env", "$isNaN", "number", "require_gOPD", "__commonJSMin", "exports", "module", "init_define_process_env", "require_gopd", "__commonJSMin", "exports", "module", "init_define_process_env", "$gOPD", "require_es_define_property", "__commonJSMin", "exports", "module", "init_define_process_env", "$defineProperty", "require_has_symbols", "__commonJSMin", "exports", "module", "init_define_process_env", "origSymbol", "hasSymbolSham", "require_Reflect_getPrototypeOf", "__commonJSMin", "exports", "module", "init_define_process_env", "require_Object_getPrototypeOf", "__commonJSMin", "exports", "module", "init_define_process_env", "$Object", "require_implementation", "__commonJSMin", "exports", "module", "init_define_process_env", "ERROR_MESSAGE", "toStr", "max", "funcType", "concatty", "a", "b", "arr", "j", "slicy", "arrLike", "offset", "joiny", "joiner", "str", "i", "that", "target", "args", "bound", "binder", "result", "boundLength", "boundArgs", "Empty", "require_function_bind", "__commonJSMin", "exports", "module", "init_define_process_env", "implementation", "require_functionCall", "__commonJSMin", "exports", "module", "init_define_process_env", "require_functionApply", "__commonJSMin", "exports", "module", "init_define_process_env", "require_reflectApply", "__commonJSMin", "exports", "module", "init_define_process_env", "require_actualApply", "__commonJSMin", "exports", "module", "init_define_process_env", "bind", "$apply", "$call", "$reflectApply", "require_call_bind_apply_helpers", "__commonJSMin", "exports", "module", "init_define_process_env", "bind", "$TypeError", "$call", "$actualApply", "args", "require_get", "__commonJSMin", "exports", "module", "init_define_process_env", "callBind", "gOPD", "hasProtoAccessor", "desc", "$Object", "$getPrototypeOf", "value", "require_get_proto", "__commonJSMin", "exports", "module", "init_define_process_env", "reflectGetProto", "originalGetProto", "getDunderProto", "O", "require_hasown", "__commonJSMin", "exports", "module", "init_define_process_env", "call", "$hasOwn", "bind", "require_get_intrinsic", "__commonJSMin", "exports", "module", "init_define_process_env", "undefined", "$Object", "$Error", "$EvalError", "$RangeError", "$ReferenceError", "$SyntaxError", "$TypeError", "$URIError", "abs", "floor", "max", "min", "pow", "round", "sign", "$Function", "getEvalledConstructor", "expressionSyntax", "$gOPD", "$defineProperty", "throwTypeError", "ThrowTypeError", "hasSymbols", "getProto", "$ObjectGPO", "$ReflectGPO", "$apply", "$call", "needsEval", "TypedArray", "INTRINSICS", "errorProto", "doEval", "name", "value", "fn", "gen", "LEGACY_ALIASES", "bind", "hasOwn", "$concat", "$spliceApply", "$replace", "$strSlice", "$exec", "rePropName", "reEscapeChar", "stringToPath", "string", "first", "last", "result", "match", "number", "quote", "subString", "getBaseIntrinsic", "allowMissing", "intrinsicName", "alias", "parts", "intrinsicBaseName", "intrinsic", "intrinsicRealName", "skipFurtherCaching", "i", "isOwn", "part", "desc", "require_define_data_property", "__commonJSMin", "exports", "module", "init_define_process_env", "$defineProperty", "$SyntaxError", "$TypeError", "gopd", "obj", "property", "value", "nonEnumerable", "nonWritable", "nonConfigurable", "loose", "desc", "require_has_property_descriptors", "__commonJSMin", "exports", "module", "init_define_process_env", "$defineProperty", "hasPropertyDescriptors", "require_set_function_length", "__commonJSMin", "exports", "module", "init_define_process_env", "GetIntrinsic", "define", "hasDescriptors", "gOPD", "$TypeError", "$floor", "fn", "length", "loose", "functionLengthIsConfigurable", "functionLengthIsWritable", "desc", "require_applyBind", "__commonJSMin", "exports", "module", "init_define_process_env", "bind", "$apply", "actualApply", "require_call_bind", "__commonJSMin", "exports", "module", "init_define_process_env", "setFunctionLength", "$defineProperty", "callBindBasic", "applyBind", "originalFunction", "func", "adjustedLength", "require_callBound", "__commonJSMin", "exports", "module", "init_define_process_env", "GetIntrinsic", "callBind", "$indexOf", "name", "allowMissing", "intrinsic", "require_is_arguments", "__commonJSMin", "exports", "module", "init_define_process_env", "hasToStringTag", "callBound", "$toString", "isStandardArguments", "value", "isLegacyArguments", "supportsStandardArguments", "require_call_bound", "__commonJSMin", "exports", "module", "init_define_process_env", "GetIntrinsic", "callBindBasic", "$indexOf", "name", "allowMissing", "intrinsic", "require_is_regex", "__commonJSMin", "exports", "module", "init_define_process_env", "callBound", "hasToStringTag", "hasOwn", "gOPD", "fn", "$exec", "isRegexMarker", "throwRegexMarker", "badStringifier", "value", "descriptor", "hasLastIndexDataProperty", "e", "$toString", "regexClass", "require_safe_regex_test", "__commonJSMin", "exports", "module", "init_define_process_env", "callBound", "isRegex", "$exec", "$TypeError", "regex", "s", "require_generator_function", "__commonJSMin", "exports", "module", "init_define_process_env", "cached", "require_is_generator_function", "__commonJSMin", "exports", "module", "init_define_process_env", "callBound", "safeRegexTest", "isFnRegex", "hasToStringTag", "getProto", "toStr", "fnToStr", "getGeneratorFunction", "fn", "str", "GeneratorFunction", "require_is_callable", "__commonJSMin", "exports", "module", "init_define_process_env", "fnToStr", "reflectApply", "badArrayLike", "isCallableMarker", "_", "constructorRegex", "isES6ClassFn", "value", "fnStr", "tryFunctionObject", "toStr", "objectClass", "fnClass", "genClass", "ddaClass", "ddaClass2", "ddaClass3", "hasToStringTag", "isIE68", "isDDA", "all", "str", "e", "strClass", "require_for_each", "__commonJSMin", "exports", "module", "init_define_process_env", "isCallable", "toStr", "hasOwnProperty", "forEachArray", "array", "iterator", "receiver", "len", "forEachString", "string", "forEachObject", "object", "k", "isArray", "x", "list", "thisArg", "require_possible_typed_array_names", "__commonJSMin", "exports", "module", "init_define_process_env", "require_available_typed_arrays", "__commonJSMin", "exports", "module", "init_define_process_env", "possibleNames", "g", "out", "i", "require_which_typed_array", "__commonJSMin", "exports", "module", "init_define_process_env", "forEach", "availableTypedArrays", "callBind", "callBound", "gOPD", "getProto", "$toString", "hasToStringTag", "g", "typedArrays", "$slice", "$indexOf", "array", "value", "i", "cache", "typedArray", "arr", "proto", "descriptor", "superProto", "bound", "fn", "tryTypedArrays", "found", "getter", "trySlices", "name", "tag", "require_is_typed_array", "__commonJSMin", "exports", "module", "init_define_process_env", "whichTypedArray", "value", "require_types", "__commonJSMin", "exports", "init_define_process_env", "isArgumentsObject", "isGeneratorFunction", "whichTypedArray", "isTypedArray", "uncurryThis", "f", "BigIntSupported", "SymbolSupported", "ObjectToString", "numberValue", "stringValue", "booleanValue", "bigIntValue", "symbolValue", "checkBoxedPrimitive", "value", "prototypeValueOf", "isPromise", "input", "isArrayBufferView", "isDataView", "isUint8Array", "isUint8ClampedArray", "isUint16Array", "isUint32Array", "isInt8Array", "isInt16Array", "isInt32Array", "isFloat32Array", "isFloat64Array", "isBigInt64Array", "isBigUint64Array", "isMapToString", "isMap", "isSetToString", "isSet", "isWeakMapToString", "isWeakMap", "isWeakSetToString", "isWeakSet", "isArrayBufferToString", "isArrayBuffer", "isDataViewToString", "SharedArrayBufferCopy", "isSharedArrayBufferToString", "isSharedArrayBuffer", "isAsyncFunction", "isMapIterator", "isSetIterator", "isGeneratorObject", "isWebAssemblyCompiledModule", "isNumberObject", "isStringObject", "isBooleanObject", "isBigIntObject", "isSymbolObject", "isBoxedPrimitive", "isAnyArrayBuffer", "method", "require_isBufferBrowser", "__commonJSMin", "exports", "module", "init_define_process_env", "arg", "require_inherits_browser", "__commonJSMin", "exports", "module", "init_define_process_env", "ctor", "superCtor", "TempCtor", "require_util", "__commonJSMin", "exports", "init_define_process_env", "getOwnPropertyDescriptors", "obj", "keys", "descriptors", "formatRegExp", "f", "isString", "objects", "i", "inspect", "args", "len", "str", "x", "isNull", "isObject", "fn", "msg", "warned", "deprecated", "debugs", "debugEnvRegex", "define_process_env_default", "debugEnv", "set", "pid", "opts", "ctx", "stylizeNoColor", "isBoolean", "isUndefined", "stylizeWithColor", "formatValue", "styleType", "style", "arrayToHash", "array", "hash", "val", "idx", "value", "recurseTimes", "isFunction", "ret", "primitive", "formatPrimitive", "visibleKeys", "isError", "formatError", "name", "isRegExp", "isDate", "base", "braces", "isArray", "n", "output", "formatArray", "key", "formatProperty", "reduceToSingleString", "simple", "isNumber", "l", "hasOwnProperty", "desc", "line", "numLinesEst", "length", "prev", "cur", "ar", "arg", "isNullOrUndefined", "isSymbol", "re", "objectToString", "d", "isPrimitive", "o", "pad", "months", "timestamp", "time", "origin", "add", "prop", "kCustomPromisifiedSymbol", "original", "promiseResolve", "promiseReject", "promise", "resolve", "reject", "err", "callbackifyOnRejected", "reason", "cb", "newReason", "callbackify", "callbackified", "maybeCb", "self", "rej", "DocumentUri", "URI", "integer", "uinteger", "Position", "Range", "Location", "LocationLink", "Color", "ColorInformation", "ColorPresentation", "FoldingRangeKind", "FoldingRange", "DiagnosticRelatedInformation", "DiagnosticSeverity", "DiagnosticTag", "CodeDescription", "Diagnostic", "Command", "TextEdit", "ChangeAnnotation", "ChangeAnnotationIdentifier", "AnnotatedTextEdit", "TextDocumentEdit", "CreateFile", "RenameFile", "DeleteFile", "WorkspaceEdit", "TextDocumentIdentifier", "VersionedTextDocumentIdentifier", "OptionalVersionedTextDocumentIdentifier", "TextDocumentItem", "MarkupKind", "MarkupContent", "CompletionItemKind", "InsertTextFormat", "CompletionItemTag", "InsertReplaceEdit", "InsertTextMode", "CompletionItemLabelDetails", "CompletionItem", "CompletionList", "MarkedString", "Hover", "ParameterInformation", "SignatureInformation", "DocumentHighlightKind", "DocumentHighlight", "SymbolKind", "SymbolTag", "SymbolInformation", "WorkspaceSymbol", "DocumentSymbol", "CodeActionKind", "CodeActionTriggerKind", "CodeActionContext", "CodeAction", "CodeLens", "FormattingOptions", "DocumentLink", "SelectionRange", "SemanticTokenTypes", "SemanticTokenModifiers", "SemanticTokens", "InlineValueText", "InlineValueVariableLookup", "InlineValueEvaluatableExpression", "InlineValueContext", "InlayHintKind", "InlayHintLabelPart", "InlayHint", "StringValue", "InlineCompletionItem", "InlineCompletionList", "InlineCompletionTriggerKind", "SelectedCompletionInfo", "InlineCompletionContext", "WorkspaceFolder", "TextDocument", "FullTextDocument", "Is", "init_main", "__esmMin", "init_define_process_env", "is", "value", "create", "line", "character", "candidate", "one", "two", "three", "four", "uri", "range", "targetUri", "targetRange", "targetSelectionRange", "originSelectionRange", "red", "green", "blue", "alpha", "color", "label", "textEdit", "additionalTextEdits", "startLine", "endLine", "startCharacter", "endCharacter", "kind", "collapsedText", "result", "location", "message", "severity", "code", "source", "relatedInformation", "_a", "title", "command", "args", "replace", "newText", "insert", "position", "del", "needsConfirmation", "description", "annotation", "textDocument", "edits", "options", "oldUri", "newUri", "change", "version", "languageId", "text", "items", "isIncomplete", "fromPlainText", "plainText", "documentation", "parameters", "name", "containerName", "detail", "selectionRange", "children", "diagnostics", "only", "triggerKind", "kindOrCommandOrEdit", "checkKind", "data", "tabSize", "insertSpaces", "target", "parent", "variableName", "caseSensitiveLookup", "expression", "frameId", "stoppedLocation", "createSnippet", "insertText", "filterText", "selectedCompletionInfo", "content", "applyEdits", "document", "sortedEdits", "mergeSort", "a", "b", "diff", "lastModifiedOffset", "i", "e", "startOffset", "endOffset", "compare", "p", "left", "right", "leftIdx", "rightIdx", "start", "end", "event", "lineOffsets", "isLineStart", "ch", "offset", "low", "high", "mid", "lineOffset", "nextLineOffset", "toString", "defined", "undefined", "boolean", "string", "number", "numberRange", "min", "max", "func", "objectLiteral", "typedArray", "check", "URI", "Utils", "assertPath", "path", "TypeError", "JSON", "stringify", "normalizeStringPosix", "allowAboveRoot", "code", "res", "lastSegmentLength", "lastSlash", "dots", "i", "length", "charCodeAt", "lastSlashIndex", "lastIndexOf", "slice", "posix", "resolve", "cwd", "resolvedPath", "resolvedAbsolute", "arguments", "process", "normalize", "isAbsolute", "trailingSeparator", "join", "joined", "arg", "relative", "from", "to", "fromStart", "fromEnd", "fromLen", "toStart", "toLen", "lastCommonSep", "fromCode", "out", "_makeLong", "dirname", "hasRoot", "end", "matchedSlash", "basename", "ext", "start", "extIdx", "firstNonSlashEnd", "extname", "startDot", "startPart", "preDotState", "format", "pathObject", "sep", "dir", "root", "base", "name", "parse", "ret", "delimiter", "win32", "module", "exports", "__webpack_module_cache__", "__webpack_require__", "moduleId", "cachedModule", "__webpack_modules__", "d", "definition", "key", "o", "Object", "defineProperty", "enumerable", "get", "obj", "prop", "prototype", "hasOwnProperty", "call", "r", "Symbol", "toStringTag", "value", "isWindows", "f", "P", "navigator", "userAgent", "indexOf", "_schemePattern", "_singleSlashStart", "_doubleSlashStart", "_validateUri", "_strict", "scheme", "Error", "authority", "query", "fragment", "test", "_empty", "_slash", "_regexp", "thing", "fsPath", "with", "toString", "schemeOrData", "this", "uriToFsPath", "change", "Uri", "match", "exec", "percentDecode", "replace", "idx", "substring", "components", "result", "skipEncoding", "_asFormatted", "toJSON", "data", "_formatted", "external", "_fsPath", "_sep", "_pathSepMarker", "$mid", "encodeTable", "encodeURIComponentFast", "uriComponent", "isPath", "isAuthority", "nativeEncodePos", "pos", "encodeURIComponent", "charAt", "substr", "escaped", "encodeURIComponentMinimal", "uri", "keepDriveLetterCasing", "toLowerCase", "encoder", "userinfo", "String", "fromCharCode", "decodeURIComponentGraceful", "str", "decodeURIComponent", "_rEncodedAsHex", "A", "posixPath", "slash", "t", "joinPath", "paths", "resolvePath", "slashAdded", "LIB", "cssData", "htmlData", "init_data", "__esmMin", "init_define_process_env", "isAbsolutePath", "path", "PathMatchRegex", "normalizePath", "parts", "newParts", "part", "Dot", "res", "joinPath", "uri", "paths", "FileType", "init_fileService", "__esmMin", "init_define_process_env", "isNumber", "code", "isAlpha", "from", "to", "isAlphaNumericWord", "isAlphaWord", "isUmlaut", "isWhiteSpace", "isSpace", "isQuote", "tokenScanner", "tokens", "peek", "scanner", "next", "slice", "readable", "consume", "test", "token", "error", "message", "err", "abbreviation", "abbr", "options", "result", "statements", "ctx", "node", "stack", "element", "group", "isChildOperator", "isSiblingOperator", "isClimbOperator", "isGroupStart", "isBracket", "repeater$1", "attr", "elem", "elementName", "isEmpty", "isRepeater", "text", "getText", "shortAttribute", "attributeSet", "isCloseOperator", "isAttributeSetStart", "attributes", "attribute", "isAttributeSetEnd", "type", "isOperator", "count", "createLiteral", "literal$1", "quoted", "name", "value", "isEquals", "start", "quote", "allowBrackets", "brackets", "isCapitalizedLiteral", "pos", "isClassNameOperator", "isElementName$1", "isTextStart", "context", "isOpen", "isSingle", "isLiteral", "ch", "escaped", "Chars", "tokenize", "source", "Scanner", "getToken", "field", "repeaterPlaceholder", "repeaterNumber", "repeater", "whiteSpace", "literal", "operator", "bracket", "expressionStart", "prev", "isAllowedOperator", "isElementName", "isAllowedSpace", "isAllowedRepeater", "isQuote$1", "bracketType", "isOpenBracket", "op", "operatorType", "implicit", "size", "reverse", "base", "parent", "index", "consumePlaceholder", "stream", "stringify", "state", "tokenVisitor", "convert", "textInserted", "cleanText", "s", "convertGroup", "_a", "varValue", "deepest", "deepestNode", "last", "insertText", "insertHref", "convertStatement", "original", "repeat", "items", "i", "isGroup", "convertElement", "target", "children", "stringifyName", "stringifyValue", "child", "convertAttribute", "isField", "attachRepeater", "implied", "isBoolean", "valueType", "str", "arr", "href", "urlRegex", "emailRegex", "hrefAttribute", "item", "parseAbbreviation", "ScannerError", "isValue", "mergeTokens", "shouldConsumeDashAfter", "short", "customProperty", "numberValue", "colorValue", "stringValue", "isIdentPrefix", "isKeyword", "isLiteral$1", "end", "consumeNumber", "rawValue", "finished", "valueStart", "color", "alpha", "isHex", "colorAlpha", "r", "g", "b", "a", "parseColor", "isBracket$1", "afterNegative", "hasDecimal", "prevPos", "hasFloat", "OperatorType", "parser", "property", "consumeProperty", "important", "valueFragment", "valueMode", "isFunctionStart", "isValueDelimiter", "isImportant", "consumeValue", "isFragmentDelimiter", "inArgument", "args", "consumeArguments", "isCloseBracket", "isArgumentDelimiter", "open", "t1", "t2", "parse", "mergeAttributes", "config", "lookup", "attrName", "mergeValue", "mergeDeclarations", "glue", "append", "t", "dest", "src", "lastIx", "walk", "fn", "ancestors", "callback", "find", "findDeepest", "isNode", "resolveSnippets", "reversed", "warn", "resolve", "snippet", "snippetAbbr", "walkResolve", "topNode", "mergeNodes", "resolved", "createOutputStream", "level", "push", "processText", "_push", "pushString", "lines", "splitByLines", "il", "pushNewline", "indent", "baseIndent", "newline", "pushIndent", "pushField", "placeholder", "tagName", "strCase", "attrQuote", "expressionEnd", "isBooleanAttribute", "selfClose", "isInline", "implicitTag", "resolveImplicitTag", "getParentElement", "contextName", "parentName", "lowercase", "elementMap", "lorem", "m", "reLorem", "db", "vocabularies", "minWordCount", "maxWordCount", "wordCount", "rand", "findRepeater", "paragraph", "sample", "len", "iterations", "choice", "val", "sentence", "words", "capitalize", "word", "insertCommas", "hasComma", "totalCommas", "dict", "startWithCommon", "totalWords", "xsl", "matchesName", "isAllowed", "bem", "expandClassNames", "expandShortNotation", "data", "getBEMData", "classNames", "cl", "ix", "uniqueClass", "findBlockName", "updateClass", "path", "prefix", "originalClass", "reElement", "getBlockName", "reModifier", "arrClassNames", "classValue", "parseBEM", "getBEMDataFromContext", "depth", "parentIx", "blockCandidates1", "blockCandidates2", "filter", "label", "input", "n", "isEmptyAttribute", "visitor", "current", "createWalkState", "isSnippet", "isInlineElement", "pushTokens", "out", "largestIndex", "line", "shouldOutputAttribute", "template", "offset", "TemplateChars", "namePos", "afterPos", "isTokenStart", "isToken", "createCommentState", "commentNodeBefore", "shouldComment", "output", "commentNodeAfter", "comment", "attrs", "html", "format", "shouldFormat", "getIndent", "pushAttribute", "pushSnippet", "innerFormat", "hasNewline", "startsWithBlockTag", "caret", "valuePrefix", "lQuote", "rQuote", "getMultiValue", "isPropKey", "fieldIx", "adjacentInline", "before", "after", "matches", "htmlTagRegex", "key", "multiple", "reservedKeywords", "indentFormat", "primary", "secondary", "collectAttributes", "pushPrimaryAttributes", "pushSecondaryAttributes", "pushValue", "isPrimaryAttribute", "lineLengths", "maxLength", "valueLength", "haml", "slim", "pug", "oldTextValue", "parseOpt", "snippets", "transform", "formatters", "createSnippet", "reProperty", "keywords", "parsed", "parseValue", "cssVal", "collectKeywords", "CSSSnippetType", "nest", "snippetsSort", "cur", "isProperty", "opt", "v", "scoreMatch", "str1", "str2", "partialMatch", "str1Len", "str2Len", "minLength", "j", "score", "ch1", "ch2", "found", "acronym", "matchRatio", "delta", "maxScore", "sum", "shortHex", "asHex", "asRGB", "isShortHex", "toShortHex", "toHex", "values", "frac", "num", "digits", "hex", "pad", "css", "CSSAbbreviationScope", "isJSON", "toCamelCase", "propertyValue", "outputImportant", "outputToken", "getSingleNumeric", "getQuote", "outputValue", "separator", "prevEnd", "_", "letter", "convertSnippets", "isValueScope", "filteredSnippets", "getSnippetsForScope", "resolveNode", "resolveGradient", "propName", "resolveValueKeywords", "findBestMatch", "resolveAsProperty", "resolveAsSnippet", "resolveNumericValue", "gradientFn", "gradientName", "cssValue", "inlineValue", "getUnmatchedPart", "kw", "resolveKeyword", "defaultValue", "hasField", "wrapWithField", "minScore", "match", "reField", "inputValue", "tail", "matchedItem", "calculateScore", "getScoringPart", "lastPos", "ref", "dep", "aliases", "unitless", "q", "parseSnippets", "k", "resolveConfig", "globals", "syntax", "defaultSyntaxes", "defaultConfig", "mergedData", "typeDefaults", "syntaxConfig", "typeOverride", "syntaxDefaults", "syntaxOverride", "backwardScanner", "sol", "previous", "ok", "consumeWhile", "c", "consumeQuoted", "isHtml", "consumeIdent", "consumeAttributeWithUnquotedValue", "consumeAttribute", "consumeAttributeWithQuotedValue", "bracePairs", "isUnquotedValue", "isIdent", "Brackets", "extractAbbreviation", "defaultOptions", "offsetPastAutoClosed", "getStartOffset", "isCloseBrace", "isOpenBrace", "isAtHTMLTag", "isAbbreviation", "compiledPrefix", "consumePair", "consumeArray", "close", "consumed", "specialChars", "expandAbbreviation", "resolvedConfig", "stylesheet", "markup", "stringifyMarkup", "parseMarkup", "stringifyStylesheet", "parseStylesheet", "operators", "latin", "ru", "sp", "markupSnippets", "stylesheetSnippets", "xslSnippets", "pugSnippets", "variables", "init_emmet_es", "__esmMin", "init_define_process_env", "_Scanner", "parentRepeater", "className", "parseSnippets", "snippets", "result", "k", "name", "syntaxes", "init_configCompat", "__esmMin", "init_define_process_env", "emmetHelper_exports", "__export", "FileType", "doComplete", "emmetSnippetField", "expandAbbreviation", "extractAbbreviation", "extractAbbreviationFromText", "getDefaultSnippets", "getDefaultSyntax", "getEmmetMode", "getExpandOptions", "getSyntaxType", "isAbbreviationValid", "isStyleSheet", "parseAbbreviation", "updateExtensionsPath", "document", "position", "syntax", "emmetConfig", "isStyleSheetRes", "snippetKeyCache", "registry", "customSnippetsRegistry", "markupSnippetKeys", "_a", "extractedValue", "abbreviationRange", "abbreviation", "filter", "currentLineTillPosition", "getCurrentLine", "getCurrentWord", "syntaxes", "expandOptions", "expandedText", "expandedAbbr", "completionItems", "createExpandedAbbr", "abbr", "isExpandedTextNoise", "CompletionItem", "TextEdit", "escapeNonTabStopDollar", "addFinalTabStop", "replaceTabStopsWithCursors", "InsertTextFormat", "l10n", "cssData", "x", "CompletionList", "removeTabStops", "stylesheetCustomSnippetsKeys", "stylesheetCustomSnippetsKeyCache", "makeSnippetSuggestion", "_b", "_c", "abbrRegex", "tagToFindMoreSuggestionsFor", "newTagMatches", "commonlyUsedTagSuggestions", "commonlyUsedTags", "abbreviationSuggestions", "item", "CompletionItemKind", "snippetKeys", "prefix", "snippetDetail", "skipFullMatch", "snippetCompletions", "snippetKey", "currentAbbr", "matches", "expandedWord", "text", "maxTabStop", "maxTabStopRanges", "foundLastStop", "replaceWithLastStop", "i", "n", "numberStart", "numberEnd", "currentTabStop", "foundPlaceholder", "rangeStart", "rangeEnd", "offset", "start", "end", "emptyUserConfig", "resolvedConfig", "resolveConfig", "getFilters", "pos", "maxFilters", "filterDelimitor", "bemFilterSuffix", "commentFilterSuffix", "trimFilterSuffix", "options", "currentLine", "lengthOccupiedByFilter", "result", "Range", "extractOptions", "cssAbbreviationRegex", "jsxAbbreviationStartRegex", "htmlAbbreviationRegex", "htmlAbbreviationStartRegex", "between", "after", "endPrefixIndex", "tag", "dotMatches", "htmlData", "preferences", "stylesheetSyntax", "profile", "getProfile", "trimmedFilters", "filterFromProfile", "bemEnabled", "commentEnabled", "formatters", "getFormatters", "unitAliases", "defaultVSCodeOptions", "userPreferenceOptions", "_d", "_e", "_g", "_f", "getClosingStyle", "_h", "_j", "defaultMarkupAttributeOptions", "defaultMarkupValuePrefixOptions", "combinedOptions", "key", "castKey", "mergedAliases", "type", "variables", "getVariables", "baseSyntax", "snippets", "_k", "resolvedOptions", "parse", "parse$1", "config", "css", "stringify", "profilesFromSettings", "profilesFromFile", "newOptions", "variablesFromSettings", "variablesFromFile", "commentFormatter", "fuzzySearchMinScore", "stylesheetFormatter", "alias", "aliasName", "aliasValue", "emmetExtensionsPathSetting", "fs", "workspaceFolderPaths", "homeDir", "resetSettingsFromFile", "emmetExtensionsPathUri", "emmetExtensionsPath", "joinPath", "isAbsolutePath", "URI", "workspacePath", "uri", "snippetsPath", "profilesPath", "decoder", "snippetsDataStr", "snippetsData", "snippetsJson", "tryParseFile", "updateVariables", "updateSnippets", "e", "profilesDataStr", "profilesData", "profilesJson", "updateProfiles", "strPath", "dataStr", "errors", "json", "printParseErrorCode", "varsJson", "profileJson", "customSnippets", "prevSnippetKeys", "mergedSnippetKeys", "prevSnippetsRegistry", "newSnippets", "parseSnippets", "mergedSnippets", "language", "excludedLanguages", "import_util", "init_emmetHelper", "__esmMin", "init_define_process_env", "init_main", "init_esm", "init_data", "init_fileService", "init_emmet_es", "init_configCompat", "message", "index", "placeholder", "emmetBrowserMain_exports", "__export", "activate", "__toCommonJS", "init_define_process_env", "init_define_process_env", "vscode", "init_define_process_env", "vscode", "init_define_process_env", "vscode", "init_define_process_env", "vscode", "init_define_process_env", "init_define_process_env", "StreamReader", "string", "start", "end", "match", "ch", "ok", "n", "message", "err", "stream_reader_es_default", "init_define_process_env", "defaultOptions", "eatQuoted", "stream", "options", "start", "quote", "isQuote", "code", "isNumber", "isAlpha", "from", "to", "isAlphaNumeric", "isWhiteSpace", "isSpace", "defaultOptions$1", "eatPair", "open", "close", "stack", "ch", "Node", "stream", "type", "open", "close", "ix", "node", "token", "start", "end", "eatToken", "Token", "test", "LANGLE", "RANGLE", "LSQUARE", "RSQUARE", "LROUND", "RROUND", "LCURLY", "RCURLY", "opt", "eatPaired", "eatPair", "SLASH$1", "EQUALS", "RIGHT_ANGLE$1", "eatAttributes", "result", "name", "value", "attr", "isSpace", "eatAttributeName", "eatAttributeValue", "isTerminator", "isAttributeName", "eatQuoted", "current", "valueStart", "valueEnd", "eatUnquoted", "code", "isUnquoted", "isQuote", "DASH", "DOT", "SLASH", "COLON", "LEFT_ANGLE", "RIGHT_ANGLE", "UNDERSCORE", "tag", "model", "eatTagName", "isTagName", "isAlphaNumeric", "eatArray", "codes", "i", "eatSection", "allowUnclosed", "toCharCodes", "str", "ch", "comment", "open$1", "close$1", "cdata", "defaultOptions", "parse", "content", "options", "stream_reader_es_default", "root", "empty", "special", "map", "isEmpty", "m", "stack", "match", "getName", "last", "consumeSpecial", "tag$$1", "arr", "html_matcher_es_default", "parse", "init_define_process_env", "Node", "type", "ix", "node", "Stylesheet", "token", "trimTokens", "tokens", "len", "isFormattingToken", "last", "trimFormatting", "eatString", "stream", "string", "start", "i", "il", "consume", "match", "consumeWhile", "arr", "valueOf", "Token", "end", "item", "size", "from", "to", "items", "name", "value", "COMMA", "PROP_DELIMITER$1", "PROP_TERMINATOR$1", "RULE_START$1", "RULE_END$1", "types", "separator", "isSeparator", "code", "ARGUMENTS_START", "ARGUMENTS_END", "args", "tokenConsumer", "t", "usePropTerminator", "isUnexpectedTerminator", "isSemicolonSeparator", "createArgumentList", "argsToken", "isCommaSeparator", "arg", "createArgument", "createEmptyArgument", "pos", "HYPHEN", "UNDERSCORE", "ident", "eatIdent", "isIdentStart", "isIdent", "isAlpha", "isNumber", "prefixed", "tokenType", "prefix", "body", "allowEmptyBody", "bodyToken", "AT", "atKeyword", "HASH", "AT$1", "interpolation", "defaultTokenConsumer", "container", "stack", "eatInterpolation", "eatPair", "eatString$1", "asToken", "ch", "isQuote", "quote", "valueStart", "isNewline", "inner", "ASTERISK", "SLASH", "comment", "singleLineComment", "multiLineComment", "eatSingleLineComment", "eatMultiLineComment", "eatComment", "isLineBreak", "whitespace", "eatWhitespace", "isSpace", "ATTR_START", "ATTR_END", "eatAttribuite", "skip", "op", "operator", "isOperator", "BACKTICK", "backtick", "eatBacktick", "CLASS", "className", "ADJACENT_SIBLING", "GENERAL_SIBLING", "CHILD", "NESTING", "types$1", "combinator", "isCombinator", "HASH$1", "hash", "hashValue", "eatHashValue", "isHashValue", "ID", "id", "IMPORTANT", "important", "DOT", "number", "eatNumericPart", "num", "unit", "eatUnitPart", "isOperator$1", "decimalEnd", "eatPercent", "NOT", "MULTIPLY", "PLUS", "MINUS", "DIVIDE", "LESS_THAN", "EQUALS", "GREATER_THAN", "operator$1", "eatOperator", "isEquality", "isOperator$2", "PSEUDO", "pseudo", "unquoted", "eatUnquoted", "isUnquoted", "isNonPrintable", "url", "eatUrl", "VARIABLE", "variable", "variableName", "eatVariableName", "isVariableName", "consumeToken", "_token", "any", "_args", "unknown", "formatting", "selector", "keyword", "parseSelector", "source", "parseList", "parsePropertyName", "stream_reader_es_default", "parsePropertyValue", "parseMediaExpression", "fragments", "flush", "clean", "createRule", "contentStart", "contentEnd", "Rule", "createAtRule", "expression", "AtRule", "createProperty", "terminator", "Property", "LBRACE", "RBRACE", "PROP_DELIMITER", "PROP_TERMINATOR", "RULE_START", "RULE_END", "parseStylesheet", "root", "ctx", "child", "accum", "eatBraces", "eatBraces", "stream", "root", "LBRACE", "stack", "token", "RBRACE", "eatUrl", "eatString$1", "comment", "css_parser_es_default", "parseStylesheet", "init_define_process_env", "DocumentStreamReader", "_DocumentStreamReader", "document", "pos", "limit", "start", "end", "code", "n", "from", "to", "message", "match", "ch", "ok", "init_define_process_env", "FullTextDocument", "_FullTextDocument", "uri", "languageId", "version", "content", "range", "start", "end", "changes", "change", "getWellformedRange", "startOffset", "endOffset", "startLine", "endLine", "lineOffsets", "addedLineOffsets", "computeLineOffsets", "i", "len", "diff", "offset", "low", "high", "mid", "line", "position", "lineOffset", "nextLineOffset", "isEOL", "event", "candidate", "TextDocument", "create", "update", "document", "applyEdits", "edits", "text", "sortedEdits", "mergeSort", "getWellformedEdit", "a", "b", "lastModifiedOffset", "spans", "e", "data", "compare", "p", "left", "right", "leftIdx", "rightIdx", "isAtLineStart", "textOffset", "result", "ch", "char", "textEdit", "init_define_process_env", "_parseCache", "getRootNode", "document", "useCache", "key", "result", "documentVersion", "rootNode", "isStyleSheet", "css_parser_es_default", "html_matcher_es_default", "addFileToParseCache", "filename", "removeFileFromParseCache", "_emmetHelper", "_currentExtensionsPath", "_homeDir", "getEmmetHelper", "_emmetHelper", "updateEmmetExtensionsPath", "forceRefresh", "helper", "extensionsPath", "_currentExtensionsPath", "rootPaths", "f", "fileSystem", "_homeDir", "err", "migrateEmmetExtensionsPath", "config", "LANGUAGE_MODES", "isStyleSheet", "syntax", "validate", "allowStylesheet", "editor", "getMappingForIncludedLanguages", "MAPPED_MODES", "finalMappedModes", "includeLanguagesConfig", "includeLanguages", "getEmmetMode", "language", "mappedModes", "excludedLanguages", "syntaxes", "getSyntaxes", "closeBrace", "openBrace", "slash", "star", "parsePartialStylesheet", "document", "position", "isCSS", "positionOffset", "startOffset", "endOffset", "limitCharacter", "limitOffset", "stream", "DocumentStreamReader", "findOpeningCommentBeforePosition", "pos", "offset", "findClosingCommentAfterPosition", "consumeLineCommentBackwards", "posLineNumber", "currentLine", "startLineComment", "consumeBlockCommentBackwards", "consumeCommentForwards", "openBracesToFind", "exit", "foundSelector", "ch", "buffer", "css_parser_es_default", "getFlatNode", "root", "includeNodeBoundary", "getFlatNodeChild", "child", "nodeStart", "nodeEnd", "getFlatNodeChildren", "htmlChild", "children", "i", "foundChild", "allowedMimeTypesInScriptTag", "getHtmlFlatNode", "documentText", "currentNode", "scriptNodeBody", "setupScriptNodeSubtree", "cdataBody", "setupCdataNodeSubtree", "scriptNode", "x", "beforePadding", "endToUse", "scriptBodyText", "html_matcher_es_default", "cdataNode", "startToUse", "isOffsetInsideOpenOrCloseTag", "node", "htmlNode", "offsetRangeToSelection", "start", "end", "startPos", "endPos", "offsetRangeToVsRange", "getDeepestFlatNode", "findNextWord", "propertyValue", "foundSpace", "foundStart", "foundEnd", "newSelectionStart", "newSelectionEnd", "findPrevWord", "getNodesInBetween", "node1", "node2", "sameNodes", "siblings", "getEmmetConfiguration", "emmetConfig", "syntaxProfiles", "preferences", "getCssPropertyFromRule", "rule", "name", "node", "getCssPropertyFromDocument", "editor", "position", "document", "rootNode", "getRootNode", "offset", "getFlatNode", "isStyleSheet", "htmlNode", "buffer", "innerRootNode", "css_parser_es_default", "innerNode", "getEmbeddedCssNodeIfAny", "currentNode", "currentHtmlNode", "isStyleAttribute", "index", "x", "styleAttribute", "toLSTextDocument", "doc", "TextDocument", "getPathBaseName", "path", "pathAfterSlashSplit", "getSyntaxes", "trimRegex", "hexColorRegex", "wrapWithAbbreviation", "args", "validate", "editor", "document", "syntax", "getSyntaxFromArgs", "rootNode", "getRootNode", "helper", "getEmmetHelper", "operationRanges", "a", "b", "selection", "rangeToReplace", "start", "end", "startOffset", "documentText", "startNode", "getHtmlFlatNode", "isOffsetInsideOpenOrCloseTag", "nodeEndPosition", "endOffset", "endNode", "nodeStartPosition", "previousLine", "firstLineOfRange", "mergedRanges", "range", "oldSelections", "rangesToReplace", "textToWrapInPreview", "textToReplace", "otherMatches", "baseIndent", "x", "e", "tabSize", "insertSpaces", "indent", "revertPreview", "builder", "applyPreview", "expandAbbrList", "lastOldPreviewRange", "lastNewPreviewRange", "totalNewLinesInserted", "i", "expandedText", "expandAbbr", "oldPreviewRange", "newText", "_", "placeholder", "expandedTextLines", "oldPreviewLines", "newLinesInserted", "newPreviewLineStart", "newPreviewStart", "newPreviewLineEnd", "newPreviewEnd", "inPreviewMode", "makeChanges", "inputAbbreviation", "previewChanges", "extractedResults", "abbreviation", "filter", "rangesAndContent", "expandAbbreviationInRange", "currentValue", "inputChanged", "value", "prompt", "changesWereMade", "expandEmmetAbbreviation", "fallbackTab", "anchor", "prevPositionAnchor", "prevText", "abbreviationList", "firstAbbreviation", "allAbbreviationsSame", "getAbbreviation", "position", "abbr", "textTillPosition", "matches", "toLSTextDocument", "abbreviationRange", "selectionsInReverseOrder", "posA", "posB", "usePartialParsing", "isStyleSheet", "parsePartialStylesheet", "offset", "currentNode", "getFlatNode", "validateLocation", "syntaxToUse", "isStyleAttribute", "embeddedCssNode", "getEmbeddedCssNodeIfAny", "isValidLocationForEmmetAbbreviation", "success", "stylesheet", "propertyNode", "currentCssNode", "tokenStartPos", "tokenEndPos", "startAngle", "endAngle", "escape", "question", "currentHtmlNode", "typeAttribute", "typeValue", "allowedMimeTypesInScriptTag", "lastChildBeforePosition", "startPos", "textToBackTrack", "valid", "foundSpace", "char", "insertSameSnippet", "insertedSnippetsCount", "expandAbbrInput", "anyExpandAbbrInput", "allRanges", "input", "expandOptions", "getEmmetConfiguration", "line", "mappedModes", "getMappingForIncludedLanguages", "language", "parentMode", "excludedLanguages", "getEmmetMode", "DefaultCompletionItemProvider", "document", "position", "_", "context", "completionResult", "completionList", "item", "expandedText", "emmetConfig", "excludedLanguages", "mappedLanguages", "getMappingForIncludedLanguages", "isSyntaxMapped", "emmetMode", "getEmmetMode", "syntax", "validateLocation", "rootNode", "currentNode", "lsDoc", "toLSTextDocument", "lineRange", "helper", "getEmmetHelper", "positionOffset", "emmetRootNode", "getRootNode", "foundNode", "getHtmlFlatNode", "typeNode", "attr", "typeAttrValue", "getSyntaxFromArgs", "allowedMimeTypesInScriptTag", "styleNode", "expandOptions", "isStyleSheet", "extractAbbreviationResults", "offset", "parsePartialStylesheet", "getFlatNode", "flatNode", "embeddedCssNode", "getEmbeddedCssNodeIfAny", "isValidLocationForEmmetAbbreviation", "toRange", "isNoisePromise", "abbreviation", "symbols", "x", "isNoise", "config", "getEmmetConfiguration", "result", "newItems", "newItem", "oldrange", "lsRange", "init_define_process_env", "vscode", "removeTag", "validate", "editor", "document", "rootNode", "getRootNode", "finalRangesToRemove", "prev", "selection", "getRangesToRemove", "editBuilder", "range", "offset", "nodeToUpdate", "getHtmlFlatNode", "openTagRange", "offsetRangeToVsRange", "closeTagRange", "innerCombinedRange", "outerCombinedRange", "rangesToRemove", "indentAmountToRemove", "calculateIndentAmountToRemove", "firstInnerNonEmptyLine", "lastInnerNonEmptyLine", "i", "entireLineIsTag", "lineText", "tagText", "openRange", "closeRange", "startLine", "endLine", "startLineIndent", "endLineIndent", "contentIndent", "line", "lineIndent", "indentAmount", "init_define_process_env", "vscode", "updateTag", "tagName", "validate", "editor", "document", "rootNode", "getRootNode", "rangesToUpdate", "prev", "selection", "getRangesToUpdate", "firstTagName", "tagNamesAreEqual", "range", "editBuilder", "tagRange", "getRangesFromNode", "node", "ranges", "start", "endTagStart", "end", "documentText", "offset", "nodeToUpdate", "getHtmlFlatNode", "init_define_process_env", "vscode", "matchTag", "validate", "editor", "document", "rootNode", "getRootNode", "updatedSelections", "selection", "updatedSelection", "getUpdatedSelections", "position", "offset", "currentNode", "getHtmlFlatNode", "finalOffset", "offsetRangeToSelection", "init_define_process_env", "vscode", "balanceOutStack", "lastBalancedSelections", "balanceOut", "balance", "balanceIn", "out", "validate", "editor", "document", "rootNode", "getRootNode", "rangeFn", "getRangeToBalanceOut", "getRangeToBalanceIn", "newSelections", "selection", "areSameSelections", "offset", "nodeToBalance", "getHtmlFlatNode", "offsetRangeToSelection", "innerSelection", "outerSelection", "selectionStart", "selectionEnd", "entireNodeSelected", "startInOpenTag", "startInCloseTag", "firstChild", "a", "b", "i", "init_define_process_env", "vscode", "splitJoinTag", "validate", "editor", "document", "rootNode", "getRootNode", "editBuilder", "selection", "documentText", "offset", "nodeToUpdate", "getHtmlFlatNode", "textEdit", "getRangesToReplace", "rangeToReplace", "textToReplaceWith", "m", "end", "start", "offsetRangeToVsRange", "emmetMode", "getEmmetMode", "emmetConfig", "getEmmetConfiguration", "init_define_process_env", "vscode", "mergeLines", "validate", "editor", "rootNode", "getRootNode", "editBuilder", "selection", "textEdit", "getRangesToReplace", "document", "startNodeToUpdate", "endNodeToUpdate", "selectionStart", "selectionEnd", "getFlatNode", "startPos", "startLine", "startChar", "endLine", "rangeToReplace", "offsetRangeToVsRange", "textToReplaceWith", "i", "init_define_process_env", "vscode", "startCommentStylesheet", "endCommentStylesheet", "startCommentHTML", "endCommentHTML", "toggleComment", "validate", "setupCommentSpacing", "editor", "rootNode", "getRootNode", "editBuilder", "allEdits", "selection", "edits", "isStyleSheet", "toggleCommentStylesheet", "toggleCommentHTML", "arr1", "arr2", "result", "lastEditPosition", "x", "document", "selectionStart", "selectionEnd", "selectionStartOffset", "selectionEndOffset", "documentText", "startNode", "getHtmlFlatNode", "endNode", "sameNodes", "buffer", "cssRootNode", "css_parser_es_default", "allNodes", "getNodesInBetween", "node", "getRangesToUnCommentHTML", "offsetRangeToVsRange", "unCommentTextEdits", "childNode", "getFlatNode", "offsetRangeToSelection", "adjustStartNodeCss", "adjustEndNodeCss", "rangesToUnComment", "comment", "commentRange", "offset", "rule", "newStartNode", "newEndNode", "init_define_process_env", "vscode", "fetchEditPoint", "direction", "validate", "editor", "newSelections", "selection", "updatedSelection", "nextEditPoint", "prevEditPoint", "lineNum", "findEditPoint", "position", "line", "lineContent", "emptyAttrIndex", "emptyTagIndex", "winner", "init_define_process_env", "vscode", "init_define_process_env", "nextItemHTML", "document", "selectionStart", "selectionEnd", "rootNode", "selectionEndOffset", "currentNode", "getHtmlFlatNode", "nextNode", "getSelectionFromNode", "selectionStartOffset", "attrSelection", "getNextAttribute", "prevItemHTML", "prevNode", "oldOption", "getDeepestFlatNode", "getPrevAttribute", "node", "offsetRangeToSelection", "attr", "pos", "selectionEndCharacter", "attrValueStartCharacter", "newSelectionStartOffset", "newSelectionEndOffset", "findNextWord", "newSelectionStart", "newSelectionEnd", "selectionStartCharacter", "findPrevWord", "init_define_process_env", "vscode", "nextItemStylesheet", "document", "startPosition", "endPosition", "rootNode", "startOffset", "endOffset", "currentNode", "getFlatNode", "getSelectionFromProperty", "singlePropertyValue", "getSelectionFromNode", "nextNode", "prevItemStylesheet", "prevNode", "getDeepestFlatNode", "node", "nodeToSelect", "offsetRangeToSelection", "selectionStart", "selectionEnd", "selectFullValue", "direction", "propertyNode", "propertyValue", "pos", "selectionStartChar", "tokenStartChar", "selectionEndChar", "newSelectionStartOffset", "newSelectionEndOffset", "findPrevWord", "findNextWord", "tokenStart", "newSelectionStart", "newSelectionEnd", "fetchSelectItem", "direction", "validate", "editor", "document", "rootNode", "getRootNode", "newSelections", "selection", "selectionStart", "selectionEnd", "updatedSelection", "isStyleSheet", "nextItemStylesheet", "prevItemStylesheet", "nextItemHTML", "prevItemHTML", "init_define_process_env", "vscode", "init_define_process_env", "isNumber", "code", "isWhiteSpace", "code", "isSpace", "Scanner", "_Scanner", "str", "start", "end", "match", "ch", "ok", "n", "message", "pos", "ScannerError", "nullary", "token", "parse", "expr", "scanner", "Scanner", "ch", "priority", "expected", "tokens", "isWhiteSpace", "consumeNumber", "error", "number", "isOperator", "isSign", "isNegativeSign", "op1", "op2", "result", "orderTokens", "start", "isNumber", "operators", "operands", "nOperators", "t", "value", "name", "isPositiveSign", "type", "defaultOptions", "extract", "text", "pos", "options", "opt", "cur", "len", "isSpace", "end", "braces", "prev", "dot", "ops1", "num", "ops2", "a", "b", "evaluate", "nStack", "n1", "n2", "f", "i", "il", "evaluateMathExpression", "editor", "editBuilder", "selection", "startpos", "endpos", "selectionText", "result", "math_es_default", "lineToSelectionEnd", "extractedIndices", "extract", "rangeToReplace", "err", "init_define_process_env", "vscode", "reNumber", "incrementDecrement", "delta", "editor", "editBuilder", "selection", "rangeToReplace", "locate", "text", "isValidNumber", "update", "numString", "m", "decimals", "output", "_", "minus", "prefix", "document", "pos", "line", "start", "end", "hadDot", "hadMinus", "ch", "str", "init_define_process_env", "import_vscode", "vendorPrefixes", "reflectCssValue", "editor", "node", "getCssPropertyFromDocument", "updateCSSNode", "property", "rule", "currentPrefix", "prefix", "propertyName", "propertyValue", "builder", "vendorProperty", "getCssPropertyFromRule", "rangeToReplace", "offsetRangeToVsRange", "activateEmmetExtension", "context", "migrateEmmetExtensionsPath", "refreshCompletionProviders", "updateEmmetExtensionsPath", "args", "wrapWithAbbreviation", "expandEmmetAbbreviation", "removeTag", "inputTag", "updateTag", "matchTag", "balanceOut", "balanceIn", "splitJoinTag", "mergeLines", "toggleComment", "fetchEditPoint", "fetchSelectItem", "evaluateMathExpression", "incrementDecrement", "reflectCssValue", "e", "basefileName", "getPathBaseName", "emmetMode", "getEmmetMode", "syntaxes", "getSyntaxes", "addFileToParseCache", "removeFileFromParseCache", "languageMappingForCompletionProviders", "completionProviderDisposables", "_", "clearCompletionProviderInfo", "completionProvider", "DefaultCompletionItemProvider", "inlineCompletionProvider", "document", "position", "token", "items", "item", "range", "useInlineCompletionProvider", "includedLanguages", "getMappingForIncludedLanguages", "language", "inlineCompletionsProvider", "explicitProvider", "LANGUAGE_MODES", "disposable", "activate", "context", "activateEmmetExtension"]
|
|
7
7
|
}
|