{
  "version": 3,
  "sources": ["../node_modules/source-map-js/lib/base64.js", "../node_modules/source-map-js/lib/base64-vlq.js", "../node_modules/source-map-js/lib/util.js", "../node_modules/source-map-js/lib/array-set.js", "../node_modules/source-map-js/lib/mapping-list.js", "../node_modules/source-map-js/lib/source-map-generator.js", "../src/index.js", "../node_modules/css-tree/lib/tokenizer/char-code-definitions.js", "../node_modules/css-tree/lib/tokenizer/utils.js", "../node_modules/css-tree/lib/tokenizer/names.js", "../node_modules/css-tree/lib/tokenizer/adopt-buffer.js", "../node_modules/css-tree/lib/tokenizer/OffsetToLocation.js", "../node_modules/css-tree/lib/tokenizer/TokenStream.js", "../node_modules/css-tree/lib/tokenizer/index.js", "../node_modules/css-tree/lib/generator/sourceMap.js", "../node_modules/css-tree/lib/generator/token-before.js", "../node_modules/css-tree/lib/generator/create.js", "../node_modules/css-tree/lib/syntax/node/index-generate.js", "../node_modules/css-tree/lib/syntax/node/AnPlusB.js", "../node_modules/css-tree/lib/syntax/node/Atrule.js", "../node_modules/css-tree/lib/syntax/node/AtrulePrelude.js", "../node_modules/css-tree/lib/syntax/node/AttributeSelector.js", "../node_modules/css-tree/lib/syntax/node/Block.js", "../node_modules/css-tree/lib/syntax/node/Brackets.js", "../node_modules/css-tree/lib/syntax/node/CDC.js", "../node_modules/css-tree/lib/syntax/node/CDO.js", "../node_modules/css-tree/lib/syntax/node/ClassSelector.js", "../node_modules/css-tree/lib/syntax/node/Combinator.js", "../node_modules/css-tree/lib/syntax/node/Comment.js", "../node_modules/css-tree/lib/syntax/node/Condition.js", "../node_modules/css-tree/lib/syntax/node/Declaration.js", "../node_modules/css-tree/lib/syntax/node/DeclarationList.js", "../node_modules/css-tree/lib/syntax/node/Dimension.js", "../node_modules/css-tree/lib/syntax/node/Feature.js", "../node_modules/css-tree/lib/syntax/node/FeatureFunction.js", "../node_modules/css-tree/lib/syntax/node/FeatureRange.js", "../node_modules/css-tree/lib/syntax/node/Function.js", "../node_modules/css-tree/lib/syntax/node/GeneralEnclosed.js", "../node_modules/css-tree/lib/syntax/node/Hash.js", "../node_modules/css-tree/lib/syntax/node/Identifier.js", "../node_modules/css-tree/lib/syntax/node/IdSelector.js", "../node_modules/css-tree/lib/syntax/node/Layer.js", "../node_modules/css-tree/lib/syntax/node/LayerList.js", "../node_modules/css-tree/lib/syntax/node/MediaQuery.js", "../node_modules/css-tree/lib/syntax/node/MediaQueryList.js", "../node_modules/css-tree/lib/syntax/node/NestingSelector.js", "../node_modules/css-tree/lib/syntax/node/Nth.js", "../node_modules/css-tree/lib/syntax/node/Number.js", "../node_modules/css-tree/lib/syntax/node/Operator.js", "../node_modules/css-tree/lib/syntax/node/Parentheses.js", "../node_modules/css-tree/lib/syntax/node/Percentage.js", "../node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js", "../node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js", "../node_modules/css-tree/lib/syntax/node/Ratio.js", "../node_modules/css-tree/lib/syntax/node/Raw.js", "../node_modules/css-tree/lib/syntax/node/Rule.js", "../node_modules/css-tree/lib/syntax/node/Scope.js", "../node_modules/css-tree/lib/syntax/node/Selector.js", "../node_modules/css-tree/lib/syntax/node/SelectorList.js", "../node_modules/css-tree/lib/utils/string.js", "../node_modules/css-tree/lib/syntax/node/String.js", "../node_modules/css-tree/lib/syntax/node/StyleSheet.js", "../node_modules/css-tree/lib/syntax/node/SupportsDeclaration.js", "../node_modules/css-tree/lib/syntax/node/TypeSelector.js", "../node_modules/css-tree/lib/syntax/node/UnicodeRange.js", "../node_modules/css-tree/lib/utils/url.js", "../node_modules/css-tree/lib/syntax/node/Url.js", "../node_modules/css-tree/lib/syntax/node/Value.js", "../node_modules/css-tree/lib/syntax/node/WhiteSpace.js", "../node_modules/css-tree/lib/syntax/config/generator.js", "../node_modules/css-tree/lib/generator/index.js", "../node_modules/css-tree/lib/utils/List.js", "../node_modules/css-tree/lib/utils/create-custom-error.js", "../node_modules/css-tree/lib/parser/SyntaxError.js", "../node_modules/css-tree/lib/parser/sequence.js", "../node_modules/css-tree/lib/parser/create.js", "../node_modules/css-tree/lib/syntax/scope/selector.js", "../node_modules/css-tree/lib/syntax/pseudo/lang.js", "../node_modules/css-tree/lib/syntax/pseudo/index.js", "../node_modules/css-tree/lib/syntax/node/index-parse-selector.js", "../node_modules/css-tree/lib/syntax/config/parser-selector.js", "../node_modules/css-tree/lib/parser/parse-selector.js", "../src/util/compare.js", "../src/util/sort.js", "../src/util/filter.js", "../src/core/calculate.js"],
  "sourcesContent": ["/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n  var cache = [];\n\n  return function(input) {\n    for (var i = 0; i < cache.length; i++) {\n      if (cache[i].input === input) {\n        var temp = cache[0];\n        cache[0] = cache[i];\n        cache[i] = temp;\n        return cache[0].result;\n      }\n    }\n\n    var result = f(input);\n\n    cache.unshift({\n      input,\n      result,\n    });\n\n    if (cache.length > MAX_CACHED_INPUTS) {\n      cache.pop();\n    }\n\n    return result;\n  };\n}\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nvar normalize = lruMemoize(function normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  // Split the path into parts between `/` characters. This is much faster than\n  // using `.split(/\\/+/g)`.\n  var parts = [];\n  var start = 0;\n  var i = 0;\n  while (true) {\n    start = i;\n    i = path.indexOf(\"/\", start);\n    if (i === -1) {\n      parts.push(path.slice(start));\n      break;\n    } else {\n      parts.push(path.slice(start, i));\n      while (i < path.length && path[i] === \"/\") {\n        i++;\n      }\n    }\n  }\n\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   \u201CsourceRoot\u201D, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    }));\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      if (this._validateMapping(generated, original, source, name) === false) {\n        return;\n      }\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n      var message = 'original.line and original.column are not numbers -- you probably meant to omit ' +\n      'the original mapping entirely and only map the generated position. If so, pass ' +\n      'null for the original mapping instead of an object with empty or null values.'\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message);\n      }\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      var message = 'Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      });\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message)\n      }\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        // One ';' per skipped line. Build large gaps with a single flat\n        // string: appending ';' one by one creates a rope node per line, which\n        // can exhaust the heap for a big gap (CVE-2026-93749).\n        var lineDelta = mapping.generatedLine - previousGeneratedLine;\n        next += lineDelta === 1 ? ';' : ';'.repeat(lineDelta);\n        previousGeneratedLine = mapping.generatedLine;\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "import generate from 'css-tree/generator';\n\nimport { calculate, calculateForAST } from './core/index.js';\nimport { compare, equals, greaterThan, lessThan } from './util/compare.js';\nimport { min, max } from './util/filter.js';\nimport { sortAsc, sortDesc } from './util/sort.js';\n\nclass NotAllowedError extends Error {\n    constructor() {\n        super('Manipulating a Specificity instance is not allowed. Instead, create a new Specificity()');\n    }\n}\n\nclass Specificity {\n    constructor(value, selector = null) {\n        this.value = value;\n        this.selector = selector;\n    }\n\n    get a() {\n        return this.value.a;\n    }\n\n    set a(val) {\n        throw new NotAllowedError();\n    }\n\n    get b() {\n        return this.value.b;\n    }\n\n    set b(val) {\n        throw new NotAllowedError();\n    }\n\n    get c() {\n        return this.value.c;\n    }\n\n    set c(val) {\n        throw new NotAllowedError();\n    }\n\n    selectorString() {\n        // this.selector already is a String\n        if (typeof this.selector === 'string' || this.selector instanceof String) {\n            return this.selector;\n        }\n\n        // this.selector is a Selector as parsed by CSSTree\n        if (this.selector instanceof Object) {\n            if (this.selector.type === 'Selector') {\n                return generate(this.selector);\n            }\n        }\n\n        // this.selector is something else \u2026\n        return '';\n    }\n\n    toObject() {\n        return this.value;\n    }\n\n    toArray() {\n        return [this.value.a, this.value.b, this.value.c];\n    }\n\n    toString() {\n        return `(${this.value.a},${this.value.b},${this.value.c})`;\n    }\n\n    toJSON() {\n        return {\n            selector: this.selectorString(),\n            asObject: this.toObject(),\n            asArray: this.toArray(),\n            asString: this.toString(),\n        };\n    }\n\n    isEqualTo(otherSpecificity) {\n        return equals(this, otherSpecificity);\n    }\n\n    isGreaterThan(otherSpecificity) {\n        return greaterThan(this, otherSpecificity);\n    }\n\n    isLessThan(otherSpecificity) {\n        return lessThan(this, otherSpecificity);\n    }\n\n    static calculate(selector) {\n        return calculate(selector);\n    }\n\n    static calculateForAST(selector) {\n        return calculateForAST(selector);\n    }\n\n    static compare(s1, s2) {\n        return compare(s1, s2);\n    }\n\n    static equals(s1, s2) {\n        return equals(s1, s2);\n    }\n\n    static lessThan(s1, s2) {\n        return lessThan(s1, s2);\n    }\n\n    static greaterThan(s1, s2) {\n        return greaterThan(s1, s2);\n    }\n\n    static min(...specificities) {\n        return min(...specificities);\n    }\n\n    static max(...specificities) {\n        return max(...specificities);\n    }\n\n    static sortAsc(...specificities) {\n        return sortAsc(...specificities);\n    }\n\n    static sortDesc(...specificities) {\n        return sortDesc(...specificities);\n    }\n}\n\nexport default Specificity;\n", "const EOF = 0;\n\n// https://drafts.csswg.org/css-syntax-3/\n// \u00A7 4.2. Definitions\n\n// digit\n// A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9).\nexport function isDigit(code) {\n    return code >= 0x0030 && code <= 0x0039;\n}\n\n// hex digit\n// A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F),\n// or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f).\nexport function isHexDigit(code) {\n    return (\n        isDigit(code) || // 0 .. 9\n        (code >= 0x0041 && code <= 0x0046) || // A .. F\n        (code >= 0x0061 && code <= 0x0066)    // a .. f\n    );\n}\n\n// uppercase letter\n// A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z).\nexport function isUppercaseLetter(code) {\n    return code >= 0x0041 && code <= 0x005A;\n}\n\n// lowercase letter\n// A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z).\nexport function isLowercaseLetter(code) {\n    return code >= 0x0061 && code <= 0x007A;\n}\n\n// letter\n// An uppercase letter or a lowercase letter.\nexport function isLetter(code) {\n    return isUppercaseLetter(code) || isLowercaseLetter(code);\n}\n\n// non-ASCII code point\n// A code point with a value equal to or greater than U+0080 <control>.\n//\n// 2024-09-02: The latest spec narrows the range for non-ASCII characters (see https://github.com/csstree/csstree/issues/188).\n// However, all modern browsers support a wider range, and strictly following the latest spec could result\n// in some CSS being parsed incorrectly, even though it works in the browser. Therefore, this function adheres\n// to the previous, broader definition of non-ASCII characters.\nexport function isNonAscii(code) {\n    return code >= 0x0080;\n}\n\n// name-start code point\n// A letter, a non-ASCII code point, or U+005F LOW LINE (_).\nexport function isNameStart(code) {\n    return isLetter(code) || isNonAscii(code) || code === 0x005F;\n}\n\n// name code point\n// A name-start code point, a digit, or U+002D HYPHEN-MINUS (-).\nexport function isName(code) {\n    return isNameStart(code) || isDigit(code) || code === 0x002D;\n}\n\n// non-printable code point\n// A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION,\n// or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE.\nexport function isNonPrintable(code) {\n    return (\n        (code >= 0x0000 && code <= 0x0008) ||\n        (code === 0x000B) ||\n        (code >= 0x000E && code <= 0x001F) ||\n        (code === 0x007F)\n    );\n}\n\n// newline\n// U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition,\n// as they are converted to U+000A LINE FEED during preprocessing.\n// TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED\nexport function isNewline(code) {\n    return code === 0x000A || code === 0x000D || code === 0x000C;\n}\n\n// whitespace\n// A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.\nexport function isWhiteSpace(code) {\n    return isNewline(code) || code === 0x0020 || code === 0x0009;\n}\n\n// \u00A7 4.3.8. Check if two code points are a valid escape\nexport function isValidEscape(first, second) {\n    // If the first code point is not U+005C REVERSE SOLIDUS (\\), return false.\n    if (first !== 0x005C) {\n        return false;\n    }\n\n    // Otherwise, if the second code point is a newline or EOF, return false.\n    if (isNewline(second) || second === EOF) {\n        return false;\n    }\n\n    // Otherwise, return true.\n    return true;\n}\n\n// \u00A7 4.3.9. Check if three code points would start an identifier\nexport function isIdentifierStart(first, second, third) {\n    // Look at the first code point:\n\n    // U+002D HYPHEN-MINUS\n    if (first === 0x002D) {\n        // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS,\n        // or the second and third code points are a valid escape, return true. Otherwise, return false.\n        return (\n            isNameStart(second) ||\n            second === 0x002D ||\n            isValidEscape(second, third)\n        );\n    }\n\n    // name-start code point\n    if (isNameStart(first)) {\n        // Return true.\n        return true;\n    }\n\n    // U+005C REVERSE SOLIDUS (\\)\n    if (first === 0x005C) {\n        // If the first and second code points are a valid escape, return true. Otherwise, return false.\n        return isValidEscape(first, second);\n    }\n\n    // anything else\n    // Return false.\n    return false;\n}\n\n// \u00A7 4.3.10. Check if three code points would start a number\nexport function isNumberStart(first, second, third) {\n    // Look at the first code point:\n\n    // U+002B PLUS SIGN (+)\n    // U+002D HYPHEN-MINUS (-)\n    if (first === 0x002B || first === 0x002D) {\n        // If the second code point is a digit, return true.\n        if (isDigit(second)) {\n            return 2;\n        }\n\n        // Otherwise, if the second code point is a U+002E FULL STOP (.)\n        // and the third code point is a digit, return true.\n        // Otherwise, return false.\n        return second === 0x002E && isDigit(third) ? 3 : 0;\n    }\n\n    // U+002E FULL STOP (.)\n    if (first === 0x002E) {\n        // If the second code point is a digit, return true. Otherwise, return false.\n        return isDigit(second) ? 2 : 0;\n    }\n\n    // digit\n    if (isDigit(first)) {\n        // Return true.\n        return 1;\n    }\n\n    // anything else\n    // Return false.\n    return 0;\n}\n\n//\n// Misc\n//\n\n// detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)\nexport function isBOM(code) {\n    // UTF-16BE\n    if (code === 0xFEFF) {\n        return 1;\n    }\n\n    // UTF-16LE\n    if (code === 0xFFFE) {\n        return 1;\n    }\n\n    return 0;\n}\n\n// Fast code category\n// Only ASCII code points has a special meaning, that's why we define a maps for 0..127 codes only\nconst CATEGORY = new Array(0x80);\nexport const EofCategory = 0x80;\nexport const WhiteSpaceCategory = 0x82;\nexport const DigitCategory = 0x83;\nexport const NameStartCategory = 0x84;\nexport const NonPrintableCategory = 0x85;\n\nfor (let i = 0; i < CATEGORY.length; i++) {\n    CATEGORY[i] =\n        isWhiteSpace(i) && WhiteSpaceCategory ||\n        isDigit(i) && DigitCategory ||\n        isNameStart(i) && NameStartCategory ||\n        isNonPrintable(i) && NonPrintableCategory ||\n        i || EofCategory;\n}\n\nexport function charCodeCategory(code) {\n    return code < 0x80 ? CATEGORY[code] : NameStartCategory;\n}\n", "import {\n    isDigit,\n    isHexDigit,\n    isUppercaseLetter,\n    isName,\n    isWhiteSpace,\n    isValidEscape\n} from './char-code-definitions.js';\n\nfunction getCharCode(source, offset) {\n    return offset < source.length ? source.charCodeAt(offset) : 0;\n}\n\nexport function getNewlineLength(source, offset, code) {\n    if (code === 13 /* \\r */ && getCharCode(source, offset + 1) === 10 /* \\n */) {\n        return 2;\n    }\n\n    return 1;\n}\n\nexport function cmpChar(testStr, offset, referenceCode) {\n    let code = testStr.charCodeAt(offset);\n\n    // code.toLowerCase() for A..Z\n    if (isUppercaseLetter(code)) {\n        code = code | 32;\n    }\n\n    return code === referenceCode;\n}\n\nexport function cmpStr(testStr, start, end, referenceStr) {\n    if (end - start !== referenceStr.length) {\n        return false;\n    }\n\n    if (start < 0 || end > testStr.length) {\n        return false;\n    }\n\n    for (let i = start; i < end; i++) {\n        const referenceCode = referenceStr.charCodeAt(i - start);\n        let testCode = testStr.charCodeAt(i);\n\n        // testCode.toLowerCase() for A..Z\n        if (isUppercaseLetter(testCode)) {\n            testCode = testCode | 32;\n        }\n\n        if (testCode !== referenceCode) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nexport function findWhiteSpaceStart(source, offset) {\n    for (; offset >= 0; offset--) {\n        if (!isWhiteSpace(source.charCodeAt(offset))) {\n            break;\n        }\n    }\n\n    return offset + 1;\n}\n\nexport function findWhiteSpaceEnd(source, offset) {\n    for (; offset < source.length; offset++) {\n        if (!isWhiteSpace(source.charCodeAt(offset))) {\n            break;\n        }\n    }\n\n    return offset;\n}\n\nexport function findDecimalNumberEnd(source, offset) {\n    for (; offset < source.length; offset++) {\n        if (!isDigit(source.charCodeAt(offset))) {\n            break;\n        }\n    }\n\n    return offset;\n}\n\n// \u00A7 4.3.7. Consume an escaped code point\nexport function consumeEscaped(source, offset) {\n    // It assumes that the U+005C REVERSE SOLIDUS (\\) has already been consumed and\n    // that the next input code point has already been verified to be part of a valid escape.\n    offset += 2;\n\n    // hex digit\n    if (isHexDigit(getCharCode(source, offset - 1))) {\n        // Consume as many hex digits as possible, but no more than 5.\n        // Note that this means 1-6 hex digits have been consumed in total.\n        for (const maxOffset = Math.min(source.length, offset + 5); offset < maxOffset; offset++) {\n            if (!isHexDigit(getCharCode(source, offset))) {\n                break;\n            }\n        }\n\n        // If the next input code point is whitespace, consume it as well.\n        const code = getCharCode(source, offset);\n        if (isWhiteSpace(code)) {\n            offset += getNewlineLength(source, offset, code);\n        }\n    }\n\n    return offset;\n}\n\n// \u00A74.3.11. Consume a name\n// Note: This algorithm does not do the verification of the first few code points that are necessary\n// to ensure the returned code points would constitute an <ident-token>. If that is the intended use,\n// ensure that the stream starts with an identifier before calling this algorithm.\nexport function consumeName(source, offset) {\n    // Let result initially be an empty string.\n    // Repeatedly consume the next input code point from the stream:\n    for (; offset < source.length; offset++) {\n        const code = source.charCodeAt(offset);\n\n        // name code point\n        if (isName(code)) {\n            // Append the code point to result.\n            continue;\n        }\n\n        // the stream starts with a valid escape\n        if (isValidEscape(code, getCharCode(source, offset + 1))) {\n            // Consume an escaped code point. Append the returned code point to result.\n            offset = consumeEscaped(source, offset) - 1;\n            continue;\n        }\n\n        // anything else\n        // Reconsume the current input code point. Return result.\n        break;\n    }\n\n    return offset;\n}\n\n// \u00A74.3.12. Consume a number\nexport function consumeNumber(source, offset) {\n    let code = source.charCodeAt(offset);\n\n    // 2. If the next input code point is U+002B PLUS SIGN (+) or U+002D HYPHEN-MINUS (-),\n    // consume it and append it to repr.\n    if (code === 0x002B || code === 0x002D) {\n        code = source.charCodeAt(offset += 1);\n    }\n\n    // 3. While the next input code point is a digit, consume it and append it to repr.\n    if (isDigit(code)) {\n        offset = findDecimalNumberEnd(source, offset + 1);\n        code = source.charCodeAt(offset);\n    }\n\n    // 4. If the next 2 input code points are U+002E FULL STOP (.) followed by a digit, then:\n    if (code === 0x002E && isDigit(source.charCodeAt(offset + 1))) {\n        // 4.1 Consume them.\n        // 4.2 Append them to repr.\n        offset += 2;\n\n        // 4.3 Set type to \"number\".\n        // TODO\n\n        // 4.4 While the next input code point is a digit, consume it and append it to repr.\n\n        offset = findDecimalNumberEnd(source, offset);\n    }\n\n    // 5. If the next 2 or 3 input code points are U+0045 LATIN CAPITAL LETTER E (E)\n    // or U+0065 LATIN SMALL LETTER E (e), ... , followed by a digit, then:\n    if (cmpChar(source, offset, 101 /* e */)) {\n        let sign = 0;\n        code = source.charCodeAt(offset + 1);\n\n        // ... optionally followed by U+002D HYPHEN-MINUS (-) or U+002B PLUS SIGN (+) ...\n        if (code === 0x002D || code === 0x002B) {\n            sign = 1;\n            code = source.charCodeAt(offset + 2);\n        }\n\n        // ... followed by a digit\n        if (isDigit(code)) {\n            // 5.1 Consume them.\n            // 5.2 Append them to repr.\n\n            // 5.3 Set type to \"number\".\n            // TODO\n\n            // 5.4 While the next input code point is a digit, consume it and append it to repr.\n            offset = findDecimalNumberEnd(source, offset + 1 + sign + 1);\n        }\n    }\n\n    return offset;\n}\n\n// \u00A7 4.3.14. Consume the remnants of a bad url\n// ... its sole use is to consume enough of the input stream to reach a recovery point\n// where normal tokenizing can resume.\nexport function consumeBadUrlRemnants(source, offset) {\n    // Repeatedly consume the next input code point from the stream:\n    for (; offset < source.length; offset++) {\n        const code = source.charCodeAt(offset);\n\n        // U+0029 RIGHT PARENTHESIS ())\n        // EOF\n        if (code === 0x0029) {\n            // Return.\n            offset++;\n            break;\n        }\n\n        if (isValidEscape(code, getCharCode(source, offset + 1))) {\n            // Consume an escaped code point.\n            // Note: This allows an escaped right parenthesis (\"\\)\") to be encountered\n            // without ending the <bad-url-token>. This is otherwise identical to\n            // the \"anything else\" clause.\n            offset = consumeEscaped(source, offset);\n        }\n    }\n\n    return offset;\n}\n\n// \u00A7 4.3.7. Consume an escaped code point\n// Note: This algorithm assumes that escaped is valid without leading U+005C REVERSE SOLIDUS (\\)\nexport function decodeEscaped(escaped) {\n    // Single char escaped that's not a hex digit\n    if (escaped.length === 1 && !isHexDigit(escaped.charCodeAt(0))) {\n        return escaped[0];\n    }\n\n    // Interpret the hex digits as a hexadecimal number.\n    let code = parseInt(escaped, 16);\n\n    if (\n        (code === 0) ||                       // If this number is zero,\n        (code >= 0xD800 && code <= 0xDFFF) || // or is for a surrogate,\n        (code > 0x10FFFF)                     // or is greater than the maximum allowed code point\n    ) {\n        // ... return U+FFFD REPLACEMENT CHARACTER\n        code = 0xFFFD;\n    }\n\n    // Otherwise, return the code point with that value.\n    return String.fromCodePoint(code);\n}\n", "export default [\n    'EOF-token',\n    'ident-token',\n    'function-token',\n    'at-keyword-token',\n    'hash-token',\n    'string-token',\n    'bad-string-token',\n    'url-token',\n    'bad-url-token',\n    'delim-token',\n    'number-token',\n    'percentage-token',\n    'dimension-token',\n    'whitespace-token',\n    'CDO-token',\n    'CDC-token',\n    'colon-token',\n    'semicolon-token',\n    'comma-token',\n    '[-token',\n    ']-token',\n    '(-token',\n    ')-token',\n    '{-token',\n    '}-token',\n    'comment-token'\n];\n", "const MIN_SIZE = 16 * 1024;\n\nexport function adoptBuffer(buffer = null, size) {\n    if (buffer === null || buffer.length < size) {\n        return new Uint32Array(Math.max(size + 1024, MIN_SIZE));\n    }\n\n    return buffer;\n};\n", "import { adoptBuffer } from './adopt-buffer.js';\nimport { isBOM } from './char-code-definitions.js';\n\nconst N = 10;\nconst F = 12;\nconst R = 13;\n\nfunction computeLinesAndColumns(host) {\n    const source = host.source;\n    const sourceLength = source.length;\n    const startOffset = source.length > 0 ? isBOM(source.charCodeAt(0)) : 0;\n    const lines = adoptBuffer(host.lines, sourceLength);\n    const columns = adoptBuffer(host.columns, sourceLength);\n    let line = host.startLine;\n    let column = host.startColumn;\n\n    for (let i = startOffset; i < sourceLength; i++) {\n        const code = source.charCodeAt(i);\n\n        lines[i] = line;\n        columns[i] = column++;\n\n        if (code === N || code === R || code === F) {\n            if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {\n                i++;\n                lines[i] = line;\n                columns[i] = column;\n            }\n\n            line++;\n            column = 1;\n        }\n    }\n\n    lines[sourceLength] = line;\n    columns[sourceLength] = column;\n\n    host.lines = lines;\n    host.columns = columns;\n    host.computed = true;\n}\n\nexport class OffsetToLocation {\n    constructor(source, startOffset, startLine, startColumn) {\n        this.setSource(source, startOffset, startLine, startColumn);\n        this.lines = null;\n        this.columns = null;\n    }\n    setSource(source = '', startOffset = 0, startLine = 1, startColumn = 1) {\n        this.source = source;\n        this.startOffset = startOffset;\n        this.startLine = startLine;\n        this.startColumn = startColumn;\n        this.computed = false;\n    }\n    getLocation(offset, filename) {\n        if (!this.computed) {\n            computeLinesAndColumns(this);\n        }\n\n        return {\n            source: filename,\n            offset: this.startOffset + offset,\n            line: this.lines[offset],\n            column: this.columns[offset]\n        };\n    }\n    getLocationRange(start, end, filename) {\n        if (!this.computed) {\n            computeLinesAndColumns(this);\n        }\n\n        return {\n            source: filename,\n            start: {\n                offset: this.startOffset + start,\n                line: this.lines[start],\n                column: this.columns[start]\n            },\n            end: {\n                offset: this.startOffset + end,\n                line: this.lines[end],\n                column: this.columns[end]\n            }\n        };\n    }\n};\n", "import { adoptBuffer } from './adopt-buffer.js';\nimport { cmpStr } from './utils.js';\nimport tokenNames from './names.js';\nimport {\n    WhiteSpace,\n    Comment,\n    Delim,\n    EOF,\n    Function as FunctionToken,\n    LeftParenthesis,\n    RightParenthesis,\n    LeftSquareBracket,\n    RightSquareBracket,\n    LeftCurlyBracket,\n    RightCurlyBracket\n} from './types.js';\n\nconst OFFSET_MASK = 0x00FFFFFF;\nconst TYPE_SHIFT = 24;\nconst BLOCK_OPEN_TOKEN = 1;\nconst BLOCK_CLOSE_TOKEN = 2;\nconst balancePair = new Uint8Array(32); // 32b of memory ought to be enough for anyone (any number of tokens)\nbalancePair[FunctionToken] = RightParenthesis;\nbalancePair[LeftParenthesis] = RightParenthesis;\nbalancePair[LeftSquareBracket] = RightSquareBracket;\nbalancePair[LeftCurlyBracket] = RightCurlyBracket;\n\nconst blockTokens = new Uint8Array(32);\nblockTokens[FunctionToken] = BLOCK_OPEN_TOKEN;\nblockTokens[LeftParenthesis] = BLOCK_OPEN_TOKEN;\nblockTokens[LeftSquareBracket] = BLOCK_OPEN_TOKEN;\nblockTokens[LeftCurlyBracket] = BLOCK_OPEN_TOKEN;\nblockTokens[RightParenthesis] = BLOCK_CLOSE_TOKEN;\nblockTokens[RightSquareBracket] = BLOCK_CLOSE_TOKEN;\nblockTokens[RightCurlyBracket] = BLOCK_CLOSE_TOKEN;\n\nfunction boundIndex(index, min, max) {\n    return index < min ? min : index > max ? max : index;\n}\n\nexport class TokenStream {\n    constructor(source, tokenize) {\n        this.setSource(source, tokenize);\n    }\n    reset() {\n        this.eof = false;\n        this.tokenIndex = -1;\n        this.tokenType = 0;\n        this.tokenStart = this.firstCharOffset;\n        this.tokenEnd = this.firstCharOffset;\n    }\n    setSource(source = '', tokenize = () => {}) {\n        source = String(source || '');\n\n        const sourceLength = source.length;\n        const offsetAndType = adoptBuffer(this.offsetAndType, source.length + 1); // +1 because of eof-token\n        const balance = adoptBuffer(this.balance, source.length + 1);\n        let tokenCount = 0;\n        let firstCharOffset = -1;\n        let balanceCloseType = 0;\n        let balanceStart = source.length;\n\n        // capture buffers\n        this.offsetAndType = null;\n        this.balance = null;\n        balance.fill(0);\n\n        tokenize(source, (type, start, end) => {\n            const index = tokenCount++;\n\n            // type & offset\n            offsetAndType[index] = (type << TYPE_SHIFT) | end;\n\n            if (firstCharOffset === -1) {\n                firstCharOffset = start;\n            }\n\n            // balance\n            balance[index] = balanceStart;\n\n            if (type === balanceCloseType) {\n                const prevBalanceStart = balance[balanceStart];\n\n                // set reference to balance end for a block opener\n                balance[balanceStart] = index;\n\n                // pop state\n                balanceStart = prevBalanceStart;\n                balanceCloseType = balancePair[offsetAndType[prevBalanceStart] >> TYPE_SHIFT];\n            } else if (this.isBlockOpenerTokenType(type)) { // check for FunctionToken, <(-token>, <[-token> and <{-token>\n                // push state\n                balanceStart = index;\n                balanceCloseType = balancePair[type];\n            }\n        });\n\n        // finalize buffers\n        offsetAndType[tokenCount] = (EOF << TYPE_SHIFT) | sourceLength; // <EOF-token>\n        balance[tokenCount] = tokenCount; // prevents false positive balance match with any token\n\n        // reverse references from balance start to end\n        // tokens\n        //   token:   a ( [ b c ] d e ) {\n        //   index:   0 1 2 3 4 5 6 7 8 9\n        // before\n        //   balance: 0 8 5 2 2 2 1 1 1 0\n        //            - > > < < < < < < -\n        // after\n        //   balance: 9 8 5 5 5 2 8 8 1 9\n        //            > > > > > < > > < >\n        for (let i = 0; i < tokenCount; i++) {\n            const balanceStart = balance[i];\n\n            if (balanceStart <= i) {\n                const balanceEnd = balance[balanceStart];\n\n                if (balanceEnd !== i) {\n                    balance[i] = balanceEnd;\n                }\n            } else if (balanceStart > tokenCount) {\n                balance[i] = tokenCount;\n            }\n        }\n\n        // balance[0] = tokenCount;\n\n        this.source = source;\n        this.firstCharOffset = firstCharOffset === -1 ? 0 : firstCharOffset;\n        this.tokenCount = tokenCount;\n        this.offsetAndType = offsetAndType;\n        this.balance = balance;\n\n        this.reset();\n        this.next();\n    }\n\n    lookupType(offset) {\n        offset += this.tokenIndex;\n\n        if (offset < this.tokenCount) {\n            return this.offsetAndType[offset] >> TYPE_SHIFT;\n        }\n\n        return EOF;\n    }\n    lookupTypeNonSC(idx) {\n        for (let offset = this.tokenIndex; offset < this.tokenCount; offset++) {\n            const tokenType = this.offsetAndType[offset] >> TYPE_SHIFT;\n\n            if (tokenType !== WhiteSpace && tokenType !== Comment) {\n                if (idx-- === 0) {\n                    return tokenType;\n                }\n            }\n        }\n\n        return EOF;\n    }\n    lookupOffset(offset) {\n        offset += this.tokenIndex;\n\n        if (offset < this.tokenCount) {\n            return this.offsetAndType[offset - 1] & OFFSET_MASK;\n        }\n\n        return this.source.length;\n    }\n    lookupOffsetNonSC(idx) {\n        for (let offset = this.tokenIndex; offset < this.tokenCount; offset++) {\n            const tokenType = this.offsetAndType[offset] >> TYPE_SHIFT;\n\n            if (tokenType !== WhiteSpace && tokenType !== Comment) {\n                if (idx-- === 0) {\n                    return offset - this.tokenIndex;\n                }\n            }\n        }\n\n        return EOF;\n    }\n    lookupValue(offset, referenceStr) {\n        offset += this.tokenIndex;\n\n        if (offset < this.tokenCount) {\n            return cmpStr(\n                this.source,\n                this.offsetAndType[offset - 1] & OFFSET_MASK,\n                this.offsetAndType[offset] & OFFSET_MASK,\n                referenceStr\n            );\n        }\n\n        return false;\n    }\n    getTokenStart(tokenIndex) {\n        if (tokenIndex === this.tokenIndex) {\n            return this.tokenStart;\n        }\n\n        if (tokenIndex > 0) {\n            return tokenIndex < this.tokenCount\n                ? this.offsetAndType[tokenIndex - 1] & OFFSET_MASK\n                : this.offsetAndType[this.tokenCount] & OFFSET_MASK;\n        }\n\n        return this.firstCharOffset;\n    }\n    getTokenEnd(tokenIndex) {\n        if (tokenIndex === this.tokenIndex) {\n            return this.tokenEnd;\n        }\n\n        return this.offsetAndType[boundIndex(tokenIndex, 0, this.tokenCount)] & OFFSET_MASK;\n    }\n    getTokenType(tokenIndex) {\n        if (tokenIndex === this.tokenIndex) {\n            return this.tokenType;\n        }\n\n        return this.offsetAndType[boundIndex(tokenIndex, 0, this.tokenCount)] >> TYPE_SHIFT;\n    }\n    substrToCursor(start) {\n        return this.source.substring(start, this.tokenStart);\n    }\n\n    isBlockOpenerTokenType(tokenType) {\n        return blockTokens[tokenType] === BLOCK_OPEN_TOKEN;\n    }\n    isBlockCloserTokenType(tokenType) {\n        return blockTokens[tokenType] === BLOCK_CLOSE_TOKEN;\n    }\n    getBlockTokenPairIndex(tokenIndex) {\n        const type = this.getTokenType(tokenIndex);\n\n        if (blockTokens[type] === 1) {\n            // block open token\n            const pairIndex = this.balance[tokenIndex];\n            const closeType = this.getTokenType(pairIndex);\n\n            return balancePair[type] === closeType ? pairIndex : -1;\n        } else if (blockTokens[type] === 2) {\n            // block close token\n            const pairIndex = this.balance[tokenIndex];\n            const openType = this.getTokenType(pairIndex);\n\n            return balancePair[openType] === type ? pairIndex : -1;\n        }\n\n        return -1;\n    }\n    isBalanceEdge(tokenIndex) {\n        return this.balance[this.tokenIndex] < tokenIndex;\n    }\n\n    isDelim(code, offset) {\n        if (offset) {\n            return (\n                this.lookupType(offset) === Delim &&\n                this.source.charCodeAt(this.lookupOffset(offset)) === code\n            );\n        }\n\n        return (\n            this.tokenType === Delim &&\n            this.source.charCodeAt(this.tokenStart) === code\n        );\n    }\n\n    skip(tokenCount) {\n        let next = this.tokenIndex + tokenCount;\n\n        if (next < this.tokenCount) {\n            this.tokenIndex = next;\n            this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK;\n            next = this.offsetAndType[next];\n            this.tokenType = next >> TYPE_SHIFT;\n            this.tokenEnd = next & OFFSET_MASK;\n        } else {\n            this.tokenIndex = this.tokenCount;\n            this.next();\n        }\n    }\n    next() {\n        let next = this.tokenIndex + 1;\n\n        if (next < this.tokenCount) {\n            this.tokenIndex = next;\n            this.tokenStart = this.tokenEnd;\n            next = this.offsetAndType[next];\n            this.tokenType = next >> TYPE_SHIFT;\n            this.tokenEnd = next & OFFSET_MASK;\n        } else {\n            this.eof = true;\n            this.tokenIndex = this.tokenCount;\n            this.tokenType = EOF;\n            this.tokenStart = this.tokenEnd = this.source.length;\n        }\n    }\n    skipSC() {\n        while (this.tokenType === WhiteSpace || this.tokenType === Comment) {\n            this.next();\n        }\n    }\n    skipUntilBalanced(startToken, stopConsume) {\n        let cursor = startToken;\n        let balanceEnd = 0;\n        let offset = 0;\n\n        loop:\n        for (; cursor < this.tokenCount; cursor++) {\n            balanceEnd = this.balance[cursor];\n\n            // stop scanning on balance edge that points to offset before start token\n            if (balanceEnd < startToken) {\n                break loop;\n            }\n\n            offset = cursor > 0 ? this.offsetAndType[cursor - 1] & OFFSET_MASK : this.firstCharOffset;\n\n            // check stop condition\n            switch (stopConsume(this.source.charCodeAt(offset))) {\n                case 1: // just stop\n                    break loop;\n\n                case 2: // stop & included\n                    cursor++;\n                    break loop;\n\n                default:\n                    // fast forward to the end of balanced block for an open block tokens\n                    if (this.isBlockOpenerTokenType(this.offsetAndType[cursor] >> TYPE_SHIFT)) {\n                        cursor = balanceEnd;\n                    }\n            }\n        }\n\n        this.skip(cursor - this.tokenIndex);\n    }\n\n    forEachToken(fn) {\n        for (let i = 0, offset = this.firstCharOffset; i < this.tokenCount; i++) {\n            const start = offset;\n            const item = this.offsetAndType[i];\n            const end = item & OFFSET_MASK;\n            const type = item >> TYPE_SHIFT;\n\n            offset = end;\n\n            fn(type, start, end, i);\n        }\n    }\n    dump() {\n        const tokens = new Array(this.tokenCount);\n\n        this.forEachToken((type, start, end, index) => {\n            tokens[index] = {\n                idx: index,\n                type: tokenNames[type],\n                chunk: this.source.substring(start, end),\n                balance: this.balance[index]\n            };\n        });\n\n        return tokens;\n    }\n};\n", "import * as TYPE from './types.js';\nimport {\n    isNewline,\n    isName,\n    isValidEscape,\n    isNumberStart,\n    isIdentifierStart,\n    isBOM,\n    charCodeCategory,\n    WhiteSpaceCategory,\n    DigitCategory,\n    NameStartCategory,\n    NonPrintableCategory\n} from './char-code-definitions.js';\nimport {\n    cmpStr,\n    getNewlineLength,\n    findWhiteSpaceEnd,\n    consumeEscaped,\n    consumeName,\n    consumeNumber,\n    consumeBadUrlRemnants\n} from './utils.js';\n\nexport function tokenize(source, onToken) {\n    function getCharCode(offset) {\n        return offset < sourceLength ? source.charCodeAt(offset) : 0;\n    }\n\n    // \u00A7 4.3.3. Consume a numeric token\n    function consumeNumericToken() {\n        // Consume a number and let number be the result.\n        offset = consumeNumber(source, offset);\n\n        // If the next 3 input code points would start an identifier, then:\n        if (isIdentifierStart(getCharCode(offset), getCharCode(offset + 1), getCharCode(offset + 2))) {\n            // Create a <dimension-token> with the same value and type flag as number, and a unit set initially to the empty string.\n            // Consume a name. Set the <dimension-token>\u2019s unit to the returned value.\n            // Return the <dimension-token>.\n            type = TYPE.Dimension;\n            offset = consumeName(source, offset);\n            return;\n        }\n\n        // Otherwise, if the next input code point is U+0025 PERCENTAGE SIGN (%), consume it.\n        if (getCharCode(offset) === 0x0025) {\n            // Create a <percentage-token> with the same value as number, and return it.\n            type = TYPE.Percentage;\n            offset++;\n            return;\n        }\n\n        // Otherwise, create a <number-token> with the same value and type flag as number, and return it.\n        type = TYPE.Number;\n    }\n\n    // \u00A7 4.3.4. Consume an ident-like token\n    function consumeIdentLikeToken() {\n        const nameStartOffset = offset;\n\n        // Consume a name, and let string be the result.\n        offset = consumeName(source, offset);\n\n        // If string\u2019s value is an ASCII case-insensitive match for \"url\",\n        // and the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.\n        if (cmpStr(source, nameStartOffset, offset, 'url') && getCharCode(offset) === 0x0028) {\n            // While the next two input code points are whitespace, consume the next input code point.\n            offset = findWhiteSpaceEnd(source, offset + 1);\n\n            // If the next one or two input code points are U+0022 QUOTATION MARK (\"), U+0027 APOSTROPHE ('),\n            // or whitespace followed by U+0022 QUOTATION MARK (\") or U+0027 APOSTROPHE ('),\n            // then create a <function-token> with its value set to string and return it.\n            if (getCharCode(offset) === 0x0022 ||\n                getCharCode(offset) === 0x0027) {\n                type = TYPE.Function;\n                offset = nameStartOffset + 4;\n                return;\n            }\n\n            // Otherwise, consume a url token, and return it.\n            consumeUrlToken();\n            return;\n        }\n\n        // Otherwise, if the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.\n        // Create a <function-token> with its value set to string and return it.\n        if (getCharCode(offset) === 0x0028) {\n            type = TYPE.Function;\n            offset++;\n            return;\n        }\n\n        // Otherwise, create an <ident-token> with its value set to string and return it.\n        type = TYPE.Ident;\n    }\n\n    // \u00A7 4.3.5. Consume a string token\n    function consumeStringToken(endingCodePoint) {\n        // This algorithm may be called with an ending code point, which denotes the code point\n        // that ends the string. If an ending code point is not specified,\n        // the current input code point is used.\n        if (!endingCodePoint) {\n            endingCodePoint = getCharCode(offset++);\n        }\n\n        // Initially create a <string-token> with its value set to the empty string.\n        type = TYPE.String;\n\n        // Repeatedly consume the next input code point from the stream:\n        for (; offset < source.length; offset++) {\n            const code = source.charCodeAt(offset);\n\n            switch (charCodeCategory(code)) {\n                // ending code point\n                case endingCodePoint:\n                    // Return the <string-token>.\n                    offset++;\n                    return;\n\n                    // EOF\n                    // case EofCategory:\n                    // This is a parse error. Return the <string-token>.\n                    // return;\n\n                // newline\n                case WhiteSpaceCategory:\n                    if (isNewline(code)) {\n                        // This is a parse error. Reconsume the current input code point,\n                        // create a <bad-string-token>, and return it.\n                        offset += getNewlineLength(source, offset, code);\n                        type = TYPE.BadString;\n                        return;\n                    }\n                    break;\n\n                // U+005C REVERSE SOLIDUS (\\)\n                case 0x005C:\n                    // If the next input code point is EOF, do nothing.\n                    if (offset === source.length - 1) {\n                        break;\n                    }\n\n                    const nextCode = getCharCode(offset + 1);\n\n                    // Otherwise, if the next input code point is a newline, consume it.\n                    if (isNewline(nextCode)) {\n                        offset += getNewlineLength(source, offset + 1, nextCode);\n                    } else if (isValidEscape(code, nextCode)) {\n                        // Otherwise, (the stream starts with a valid escape) consume\n                        // an escaped code point and append the returned code point to\n                        // the <string-token>\u2019s value.\n                        offset = consumeEscaped(source, offset) - 1;\n                    }\n                    break;\n\n                // anything else\n                // Append the current input code point to the <string-token>\u2019s value.\n            }\n        }\n    }\n\n    // \u00A7 4.3.6. Consume a url token\n    // Note: This algorithm assumes that the initial \"url(\" has already been consumed.\n    // This algorithm also assumes that it\u2019s being called to consume an \"unquoted\" value, like url(foo).\n    // A quoted value, like url(\"foo\"), is parsed as a <function-token>. Consume an ident-like token\n    // automatically handles this distinction; this algorithm shouldn\u2019t be called directly otherwise.\n    function consumeUrlToken() {\n        // Initially create a <url-token> with its value set to the empty string.\n        type = TYPE.Url;\n\n        // Consume as much whitespace as possible.\n        offset = findWhiteSpaceEnd(source, offset);\n\n        // Repeatedly consume the next input code point from the stream:\n        for (; offset < source.length; offset++) {\n            const code = source.charCodeAt(offset);\n\n            switch (charCodeCategory(code)) {\n                // U+0029 RIGHT PARENTHESIS ())\n                case 0x0029:\n                    // Return the <url-token>.\n                    offset++;\n                    return;\n\n                    // EOF\n                    // case EofCategory:\n                    // This is a parse error. Return the <url-token>.\n                    // return;\n\n                // whitespace\n                case WhiteSpaceCategory:\n                    // Consume as much whitespace as possible.\n                    offset = findWhiteSpaceEnd(source, offset);\n\n                    // If the next input code point is U+0029 RIGHT PARENTHESIS ()) or EOF,\n                    // consume it and return the <url-token>\n                    // (if EOF was encountered, this is a parse error);\n                    if (getCharCode(offset) === 0x0029 || offset >= source.length) {\n                        if (offset < source.length) {\n                            offset++;\n                        }\n                        return;\n                    }\n\n                    // otherwise, consume the remnants of a bad url, create a <bad-url-token>,\n                    // and return it.\n                    offset = consumeBadUrlRemnants(source, offset);\n                    type = TYPE.BadUrl;\n                    return;\n\n                // U+0022 QUOTATION MARK (\")\n                // U+0027 APOSTROPHE (')\n                // U+0028 LEFT PARENTHESIS (()\n                // non-printable code point\n                case 0x0022:\n                case 0x0027:\n                case 0x0028:\n                case NonPrintableCategory:\n                    // This is a parse error. Consume the remnants of a bad url,\n                    // create a <bad-url-token>, and return it.\n                    offset = consumeBadUrlRemnants(source, offset);\n                    type = TYPE.BadUrl;\n                    return;\n\n                // U+005C REVERSE SOLIDUS (\\)\n                case 0x005C:\n                    // If the stream starts with a valid escape, consume an escaped code point and\n                    // append the returned code point to the <url-token>\u2019s value.\n                    if (isValidEscape(code, getCharCode(offset + 1))) {\n                        offset = consumeEscaped(source, offset) - 1;\n                        break;\n                    }\n\n                    // Otherwise, this is a parse error. Consume the remnants of a bad url,\n                    // create a <bad-url-token>, and return it.\n                    offset = consumeBadUrlRemnants(source, offset);\n                    type = TYPE.BadUrl;\n                    return;\n\n                // anything else\n                // Append the current input code point to the <url-token>\u2019s value.\n            }\n        }\n    }\n\n    // ensure source is a string\n    source = String(source || '');\n\n    const sourceLength = source.length;\n    let start = isBOM(getCharCode(0));\n    let offset = start;\n    let type;\n\n    // https://drafts.csswg.org/css-syntax-3/#consume-token\n    // \u00A7 4.3.1. Consume a token\n    while (offset < sourceLength) {\n        const code = source.charCodeAt(offset);\n\n        switch (charCodeCategory(code)) {\n            // whitespace\n            case WhiteSpaceCategory:\n                // Consume as much whitespace as possible. Return a <whitespace-token>.\n                type = TYPE.WhiteSpace;\n                offset = findWhiteSpaceEnd(source, offset + 1);\n                break;\n\n            // U+0022 QUOTATION MARK (\")\n            case 0x0022:\n                // Consume a string token and return it.\n                consumeStringToken();\n                break;\n\n            // U+0023 NUMBER SIGN (#)\n            case 0x0023:\n                // If the next input code point is a name code point or the next two input code points are a valid escape, then:\n                if (isName(getCharCode(offset + 1)) || isValidEscape(getCharCode(offset + 1), getCharCode(offset + 2))) {\n                    // Create a <hash-token>.\n                    type = TYPE.Hash;\n\n                    // If the next 3 input code points would start an identifier, set the <hash-token>\u2019s type flag to \"id\".\n                    // if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {\n                    //     // TODO: set id flag\n                    // }\n\n                    // Consume a name, and set the <hash-token>\u2019s value to the returned string.\n                    offset = consumeName(source, offset + 1);\n\n                    // Return the <hash-token>.\n                } else {\n                    // Otherwise, return a <delim-token> with its value set to the current input code point.\n                    type = TYPE.Delim;\n                    offset++;\n                }\n\n                break;\n\n            // U+0027 APOSTROPHE (')\n            case 0x0027:\n                // Consume a string token and return it.\n                consumeStringToken();\n                break;\n\n            // U+0028 LEFT PARENTHESIS (()\n            case 0x0028:\n                // Return a <(-token>.\n                type = TYPE.LeftParenthesis;\n                offset++;\n                break;\n\n            // U+0029 RIGHT PARENTHESIS ())\n            case 0x0029:\n                // Return a <)-token>.\n                type = TYPE.RightParenthesis;\n                offset++;\n                break;\n\n            // U+002B PLUS SIGN (+)\n            case 0x002B:\n                // If the input stream starts with a number, ...\n                if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                    // ... reconsume the current input code point, consume a numeric token, and return it.\n                    consumeNumericToken();\n                } else {\n                    // Otherwise, return a <delim-token> with its value set to the current input code point.\n                    type = TYPE.Delim;\n                    offset++;\n                }\n                break;\n\n            // U+002C COMMA (,)\n            case 0x002C:\n                // Return a <comma-token>.\n                type = TYPE.Comma;\n                offset++;\n                break;\n\n            // U+002D HYPHEN-MINUS (-)\n            case 0x002D:\n                // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.\n                if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                    consumeNumericToken();\n                } else {\n                    // Otherwise, if the next 2 input code points are U+002D HYPHEN-MINUS U+003E GREATER-THAN SIGN (->), consume them and return a <CDC-token>.\n                    if (getCharCode(offset + 1) === 0x002D &&\n                        getCharCode(offset + 2) === 0x003E) {\n                        type = TYPE.CDC;\n                        offset = offset + 3;\n                    } else {\n                        // Otherwise, if the input stream starts with an identifier, ...\n                        if (isIdentifierStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                            // ... reconsume the current input code point, consume an ident-like token, and return it.\n                            consumeIdentLikeToken();\n                        } else {\n                            // Otherwise, return a <delim-token> with its value set to the current input code point.\n                            type = TYPE.Delim;\n                            offset++;\n                        }\n                    }\n                }\n                break;\n\n            // U+002E FULL STOP (.)\n            case 0x002E:\n                // If the input stream starts with a number, ...\n                if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n                    // ... reconsume the current input code point, consume a numeric token, and return it.\n                    consumeNumericToken();\n                } else {\n                    // Otherwise, return a <delim-token> with its value set to the current input code point.\n                    type = TYPE.Delim;\n                    offset++;\n                }\n\n                break;\n\n            // U+002F SOLIDUS (/)\n            case 0x002F:\n                // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A ASTERISK (*),\n                if (getCharCode(offset + 1) === 0x002A) {\n                    // ... consume them and all following code points up to and including the first U+002A ASTERISK (*)\n                    // followed by a U+002F SOLIDUS (/), or up to an EOF code point.\n                    type = TYPE.Comment;\n                    offset = source.indexOf('*/', offset + 2);\n                    offset = offset === -1 ? source.length : offset + 2;\n                } else {\n                    type = TYPE.Delim;\n                    offset++;\n                }\n                break;\n\n            // U+003A COLON (:)\n            case 0x003A:\n                // Return a <colon-token>.\n                type = TYPE.Colon;\n                offset++;\n                break;\n\n            // U+003B SEMICOLON (;)\n            case 0x003B:\n                // Return a <semicolon-token>.\n                type = TYPE.Semicolon;\n                offset++;\n                break;\n\n            // U+003C LESS-THAN SIGN (<)\n            case 0x003C:\n                // If the next 3 input code points are U+0021 EXCLAMATION MARK U+002D HYPHEN-MINUS U+002D HYPHEN-MINUS (!--), ...\n                if (getCharCode(offset + 1) === 0x0021 &&\n                    getCharCode(offset + 2) === 0x002D &&\n                    getCharCode(offset + 3) === 0x002D) {\n                    // ... consume them and return a <CDO-token>.\n                    type = TYPE.CDO;\n                    offset = offset + 4;\n                } else {\n                    // Otherwise, return a <delim-token> with its value set to the current input code point.\n                    type = TYPE.Delim;\n                    offset++;\n                }\n\n                break;\n\n            // U+0040 COMMERCIAL AT (@)\n            case 0x0040:\n                // If the next 3 input code points would start an identifier, ...\n                if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {\n                    // ... consume a name, create an <at-keyword-token> with its value set to the returned value, and return it.\n                    type = TYPE.AtKeyword;\n                    offset = consumeName(source, offset + 1);\n                } else {\n                    // Otherwise, return a <delim-token> with its value set to the current input code point.\n                    type = TYPE.Delim;\n                    offset++;\n                }\n\n                break;\n\n            // U+005B LEFT SQUARE BRACKET ([)\n            case 0x005B:\n                // Return a <[-token>.\n                type = TYPE.LeftSquareBracket;\n                offset++;\n                break;\n\n            // U+005C REVERSE SOLIDUS (\\)\n            case 0x005C:\n                // If the input stream starts with a valid escape, ...\n                if (isValidEscape(code, getCharCode(offset + 1))) {\n                    // ... reconsume the current input code point, consume an ident-like token, and return it.\n                    consumeIdentLikeToken();\n                } else {\n                    // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.\n                    type = TYPE.Delim;\n                    offset++;\n                }\n                break;\n\n            // U+005D RIGHT SQUARE BRACKET (])\n            case 0x005D:\n                // Return a <]-token>.\n                type = TYPE.RightSquareBracket;\n                offset++;\n                break;\n\n            // U+007B LEFT CURLY BRACKET ({)\n            case 0x007B:\n                // Return a <{-token>.\n                type = TYPE.LeftCurlyBracket;\n                offset++;\n                break;\n\n            // U+007D RIGHT CURLY BRACKET (})\n            case 0x007D:\n                // Return a <}-token>.\n                type = TYPE.RightCurlyBracket;\n                offset++;\n                break;\n\n            // digit\n            case DigitCategory:\n                // Reconsume the current input code point, consume a numeric token, and return it.\n                consumeNumericToken();\n                break;\n\n            // name-start code point\n            case NameStartCategory:\n                // Reconsume the current input code point, consume an ident-like token, and return it.\n                consumeIdentLikeToken();\n                break;\n\n                // EOF\n                // case EofCategory:\n                // Return an <EOF-token>.\n                // break;\n\n            // anything else\n            default:\n                // Return a <delim-token> with its value set to the current input code point.\n                type = TYPE.Delim;\n                offset++;\n        }\n\n        // put token to stream\n        onToken(type, start, start = offset);\n    }\n}\n\nexport * from './types.js';\nexport * as tokenTypes from './types.js';\nexport { default as tokenNames } from './names.js';\nexport * from './char-code-definitions.js';\nexport * from './utils.js';\nexport * from './OffsetToLocation.js';\nexport * from './TokenStream.js';\n", "import { SourceMapGenerator } from 'source-map-js/lib/source-map-generator.js';\n\nconst trackNodes = new Set(['Atrule', 'Selector', 'Declaration']);\n\nexport function generateSourceMap(handlers) {\n    const map = new SourceMapGenerator();\n    const generated = {\n        line: 1,\n        column: 0\n    };\n    const original = {\n        line: 0, // should be zero to add first mapping\n        column: 0\n    };\n    const activatedGenerated = {\n        line: 1,\n        column: 0\n    };\n    const activatedMapping = {\n        generated: activatedGenerated\n    };\n    let line = 1;\n    let column = 0;\n    let sourceMappingActive = false;\n\n    const origHandlersNode = handlers.node;\n    handlers.node = function(node) {\n        if (node.loc && node.loc.start && trackNodes.has(node.type)) {\n            const nodeLine = node.loc.start.line;\n            const nodeColumn = node.loc.start.column - 1;\n\n            if (original.line !== nodeLine ||\n                original.column !== nodeColumn) {\n                original.line = nodeLine;\n                original.column = nodeColumn;\n\n                generated.line = line;\n                generated.column = column;\n\n                if (sourceMappingActive) {\n                    sourceMappingActive = false;\n                    if (generated.line !== activatedGenerated.line ||\n                        generated.column !== activatedGenerated.column) {\n                        map.addMapping(activatedMapping);\n                    }\n                }\n\n                sourceMappingActive = true;\n                map.addMapping({\n                    source: node.loc.source,\n                    original,\n                    generated\n                });\n            }\n        }\n\n        origHandlersNode.call(this, node);\n\n        if (sourceMappingActive && trackNodes.has(node.type)) {\n            activatedGenerated.line = line;\n            activatedGenerated.column = column;\n        }\n    };\n\n    const origHandlersEmit = handlers.emit;\n    handlers.emit = function(value, type, auto) {\n        for (let i = 0; i < value.length; i++) {\n            if (value.charCodeAt(i) === 10) { // \\n\n                line++;\n                column = 0;\n            } else {\n                column++;\n            }\n        }\n\n        origHandlersEmit(value, type, auto);\n    };\n\n    const origHandlersResult = handlers.result;\n    handlers.result = function() {\n        if (sourceMappingActive) {\n            map.addMapping(activatedMapping);\n        }\n\n        return {\n            css: origHandlersResult(),\n            map\n        };\n    };\n\n    return handlers;\n};\n", "import {\n    Delim,\n    Ident,\n    Function as FunctionToken,\n    Url,\n    BadUrl,\n    AtKeyword,\n    Hash,\n    Percentage,\n    Dimension,\n    Number as NumberToken,\n    String as StringToken,\n    Colon,\n    LeftParenthesis,\n    RightParenthesis,\n    CDC\n} from '../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B;    // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\n\n// code:\n// 0xxxxxxx x0000000 - char code (0x80 for non-ASCII) or delim value\n// 00000000 0xxxxxx0 - token type (0 for delim, 1 for token)\n// 00000000 0000000x - reserved for carriage emit flag (0 for no space, 1 for space)\nconst code = (type, value) => {\n    if (type === Delim) {\n        type = value;\n    }\n\n    if (typeof type === 'string') {\n        type = Math.min(type.charCodeAt(0), 0x80) << 6; // replace non-ASCII with 0x80\n    }\n\n    return type << 1;\n};\n\n// https://www.w3.org/TR/css-syntax-3/#serialization\n// The only requirement for serialization is that it must \"round-trip\" with parsing,\n// that is, parsing the stylesheet must produce the same data structures as parsing,\n// serializing, and parsing again, except for consecutive <whitespace-token>s,\n// which may be collapsed into a single token.\n\nconst specPairs = [\n    [Ident, Ident],\n    [Ident, FunctionToken],\n    [Ident, Url],\n    [Ident, BadUrl],\n    [Ident, '-'],\n    [Ident, NumberToken],\n    [Ident, Percentage],\n    [Ident, Dimension],\n    [Ident, CDC],\n    [Ident, LeftParenthesis],\n\n    [AtKeyword, Ident],\n    [AtKeyword, FunctionToken],\n    [AtKeyword, Url],\n    [AtKeyword, BadUrl],\n    [AtKeyword, '-'],\n    [AtKeyword, NumberToken],\n    [AtKeyword, Percentage],\n    [AtKeyword, Dimension],\n    [AtKeyword, CDC],\n\n    [Hash, Ident],\n    [Hash, FunctionToken],\n    [Hash, Url],\n    [Hash, BadUrl],\n    [Hash, '-'],\n    [Hash, NumberToken],\n    [Hash, Percentage],\n    [Hash, Dimension],\n    [Hash, CDC],\n\n    [Dimension, Ident],\n    [Dimension, FunctionToken],\n    [Dimension, Url],\n    [Dimension, BadUrl],\n    [Dimension, '-'],\n    [Dimension, NumberToken],\n    [Dimension, Percentage],\n    [Dimension, Dimension],\n    [Dimension, CDC],\n\n    ['#', Ident],\n    ['#', FunctionToken],\n    ['#', Url],\n    ['#', BadUrl],\n    ['#', '-'],\n    ['#', NumberToken],\n    ['#', Percentage],\n    ['#', Dimension],\n    ['#', CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n    ['-', Ident],\n    ['-', FunctionToken],\n    ['-', Url],\n    ['-', BadUrl],\n    ['-', '-'],\n    ['-', NumberToken],\n    ['-', Percentage],\n    ['-', Dimension],\n    ['-', CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n    [NumberToken, Ident],\n    [NumberToken, FunctionToken],\n    [NumberToken, Url],\n    [NumberToken, BadUrl],\n    [NumberToken, NumberToken],\n    [NumberToken, Percentage],\n    [NumberToken, Dimension],\n    [NumberToken, '%'],\n    [NumberToken, CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n    ['@', Ident],\n    ['@', FunctionToken],\n    ['@', Url],\n    ['@', BadUrl],\n    ['@', '-'],\n    ['@', CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n    ['.', NumberToken],\n    ['.', Percentage],\n    ['.', Dimension],\n\n    ['+', NumberToken],\n    ['+', Percentage],\n    ['+', Dimension],\n\n    ['/', '*']\n];\n// validate with scripts/generate-safe\nconst safePairs = specPairs.concat([\n    [Ident, Hash],\n\n    [Dimension, Hash],\n\n    [Hash, Hash],\n\n    [AtKeyword, LeftParenthesis],\n    [AtKeyword, StringToken],\n    [AtKeyword, Colon],\n\n    [Percentage, Percentage],\n    [Percentage, Dimension],\n    [Percentage, FunctionToken],\n    [Percentage, '-'],\n\n    [RightParenthesis, Ident],\n    [RightParenthesis, FunctionToken],\n    [RightParenthesis, Percentage],\n    [RightParenthesis, Dimension],\n    [RightParenthesis, Hash],\n    [RightParenthesis, '-']\n]);\n\nfunction createMap(pairs) {\n    const isWhiteSpaceRequired = new Set(\n        pairs.map(([prev, next]) => (code(prev) << 16 | code(next)))\n    );\n\n    return function(prevCode, type, value) {\n        const nextCode = code(type, value);\n        const nextCharCode = value.charCodeAt(0);\n        const emitWs =\n            (nextCharCode === HYPHENMINUS &&\n                type !== Ident &&\n                type !== FunctionToken &&\n                type !== CDC) ||\n            (nextCharCode === PLUSSIGN)\n                ? isWhiteSpaceRequired.has((prevCode & 0xFFFE) << 16 | nextCharCode << 7)\n                : isWhiteSpaceRequired.has((prevCode & 0xFFFE) << 16 | nextCode);\n\n        return nextCode | emitWs;\n    };\n}\n\nexport const spec = createMap(specPairs);\nexport const safe = createMap(safePairs);\n", "import { tokenize, Delim, WhiteSpace } from '../tokenizer/index.js';\nimport { generateSourceMap } from './sourceMap.js';\nimport * as tokenBefore from './token-before.js';\n\nconst REVERSESOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\\)\n\nfunction processChildren(node, delimeter) {\n    if (typeof delimeter === 'function') {\n        let prev = null;\n\n        node.children.forEach(node => {\n            if (prev !== null) {\n                delimeter.call(this, prev);\n            }\n\n            this.node(node);\n            prev = node;\n        });\n\n        return;\n    }\n\n    node.children.forEach(this.node, this);\n}\n\nexport function createGenerator(config) {\n    const types = new Map();\n\n    for (let [name, item] of Object.entries(config.node)) {\n        const fn = item.generate || item;\n\n        if (typeof fn === 'function') {\n            types.set(name, item.generate || item);\n        }\n    }\n\n    return function(node, options) {\n        let buffer = '';\n        let prevCode = 0;\n        let handlers = {\n            node(node) {\n                if (types.has(node.type)) {\n                    types.get(node.type).call(publicApi, node);\n                } else {\n                    throw new Error('Unknown node type: ' + node.type);\n                }\n            },\n            tokenBefore: tokenBefore.safe,\n            token(type, value, suppressAutoWhiteSpace) {\n                prevCode = this.tokenBefore(prevCode, type, value);\n\n                if (!suppressAutoWhiteSpace && prevCode & 1) {\n                    this.emit(' ', WhiteSpace, true);\n                }\n\n                this.emit(value, type, false);\n\n                if (type === Delim && value.charCodeAt(0) === REVERSESOLIDUS) {\n                    this.emit('\\n', WhiteSpace, true);\n                }\n            },\n            emit(value) {\n                buffer += value;\n            },\n            result() {\n                return buffer;\n            }\n        };\n\n        if (options) {\n            if (typeof options.decorator === 'function') {\n                handlers = options.decorator(handlers);\n            }\n\n            if (options.sourceMap) {\n                handlers = generateSourceMap(handlers);\n            }\n\n            if (options.mode in tokenBefore) {\n                handlers.tokenBefore = tokenBefore[options.mode];\n            }\n        }\n\n        const publicApi = {\n            node: (node) => handlers.node(node),\n            children: processChildren,\n            token: (type, value) => handlers.token(type, value),\n            tokenize: (raw) =>\n                tokenize(raw, (type, start, end) => {\n                    handlers.token(\n                        type,\n                        raw.slice(start, end),\n                        start !== 0 // suppress auto whitespace for internal value tokens\n                    );\n                })\n        };\n\n        handlers.node(node);\n\n        return handlers.result();\n    };\n};\n", "export { generate as AnPlusB } from './AnPlusB.js';\nexport { generate as Atrule } from './Atrule.js';\nexport { generate as AtrulePrelude } from './AtrulePrelude.js';\nexport { generate as AttributeSelector } from './AttributeSelector.js';\nexport { generate as Block } from './Block.js';\nexport { generate as Brackets } from './Brackets.js';\nexport { generate as CDC } from './CDC.js';\nexport { generate as CDO } from './CDO.js';\nexport { generate as ClassSelector } from './ClassSelector.js';\nexport { generate as Combinator } from './Combinator.js';\nexport { generate as Comment } from './Comment.js';\nexport { generate as Condition } from './Condition.js';\nexport { generate as Declaration } from './Declaration.js';\nexport { generate as DeclarationList } from './DeclarationList.js';\nexport { generate as Dimension } from './Dimension.js';\nexport { generate as Feature } from './Feature.js';\nexport { generate as FeatureFunction } from './FeatureFunction.js';\nexport { generate as FeatureRange } from './FeatureRange.js';\nexport { generate as Function } from './Function.js';\nexport { generate as GeneralEnclosed } from './GeneralEnclosed.js';\nexport { generate as Hash } from './Hash.js';\nexport { generate as Identifier } from './Identifier.js';\nexport { generate as IdSelector } from './IdSelector.js';\nexport { generate as Layer } from './Layer.js';\nexport { generate as LayerList } from './LayerList.js';\nexport { generate as MediaQuery } from './MediaQuery.js';\nexport { generate as MediaQueryList } from './MediaQueryList.js';\nexport { generate as NestingSelector } from './NestingSelector.js';\nexport { generate as Nth } from './Nth.js';\nexport { generate as Number } from './Number.js';\nexport { generate as Operator } from './Operator.js';\nexport { generate as Parentheses } from './Parentheses.js';\nexport { generate as Percentage } from './Percentage.js';\nexport { generate as PseudoClassSelector } from './PseudoClassSelector.js';\nexport { generate as PseudoElementSelector } from './PseudoElementSelector.js';\nexport { generate as Ratio } from './Ratio.js';\nexport { generate as Raw } from './Raw.js';\nexport { generate as Rule } from './Rule.js';\nexport { generate as Scope } from './Scope.js';\nexport { generate as Selector } from './Selector.js';\nexport { generate as SelectorList } from './SelectorList.js';\nexport { generate as String } from './String.js';\nexport { generate as StyleSheet } from './StyleSheet.js';\nexport { generate as SupportsDeclaration } from './SupportsDeclaration.js';\nexport { generate as TypeSelector } from './TypeSelector.js';\nexport { generate as UnicodeRange } from './UnicodeRange.js';\nexport { generate as Url } from './Url.js';\nexport { generate as Value } from './Value.js';\nexport { generate as WhiteSpace } from './WhiteSpace.js';\n", "import {\n    isDigit,\n    WhiteSpace,\n    Comment,\n    Ident,\n    Number,\n    Dimension\n} from '../../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B;    // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst N = 0x006E;           // U+006E LATIN SMALL LETTER N (n)\nconst DISALLOW_SIGN = true;\nconst ALLOW_SIGN = false;\n\nfunction checkInteger(offset, disallowSign) {\n    let pos = this.tokenStart + offset;\n    const code = this.charCodeAt(pos);\n\n    if (code === PLUSSIGN || code === HYPHENMINUS) {\n        if (disallowSign) {\n            this.error('Number sign is not allowed');\n        }\n        pos++;\n    }\n\n    for (; pos < this.tokenEnd; pos++) {\n        if (!isDigit(this.charCodeAt(pos))) {\n            this.error('Integer is expected', pos);\n        }\n    }\n}\n\nfunction checkTokenIsInteger(disallowSign) {\n    return checkInteger.call(this, 0, disallowSign);\n}\n\nfunction expectCharCode(offset, code) {\n    if (!this.cmpChar(this.tokenStart + offset, code)) {\n        let msg = '';\n\n        switch (code) {\n            case N:\n                msg = 'N is expected';\n                break;\n            case HYPHENMINUS:\n                msg = 'HyphenMinus is expected';\n                break;\n        }\n\n        this.error(msg, this.tokenStart + offset);\n    }\n}\n\n// ... <signed-integer>\n// ... ['+' | '-'] <signless-integer>\nfunction consumeB() {\n    let offset = 0;\n    let sign = 0;\n    let type = this.tokenType;\n\n    while (type === WhiteSpace || type === Comment) {\n        type = this.lookupType(++offset);\n    }\n\n    if (type !== Number) {\n        if (this.isDelim(PLUSSIGN, offset) ||\n            this.isDelim(HYPHENMINUS, offset)) {\n            sign = this.isDelim(PLUSSIGN, offset) ? PLUSSIGN : HYPHENMINUS;\n\n            do {\n                type = this.lookupType(++offset);\n            } while (type === WhiteSpace || type === Comment);\n\n            if (type !== Number) {\n                this.skip(offset);\n                checkTokenIsInteger.call(this, DISALLOW_SIGN);\n            }\n        } else {\n            return null;\n        }\n    }\n\n    if (offset > 0) {\n        this.skip(offset);\n    }\n\n    if (sign === 0) {\n        type = this.charCodeAt(this.tokenStart);\n        if (type !== PLUSSIGN && type !== HYPHENMINUS) {\n            this.error('Number sign is expected');\n        }\n    }\n\n    checkTokenIsInteger.call(this, sign !== 0);\n    return sign === HYPHENMINUS ? '-' + this.consume(Number) : this.consume(Number);\n}\n\n// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb\nexport const name = 'AnPlusB';\nexport const structure = {\n    a: [String, null],\n    b: [String, null]\n};\n\nexport function parse() {\n    /* eslint-disable brace-style*/\n    const start = this.tokenStart;\n    let a = null;\n    let b = null;\n\n    // <integer>\n    if (this.tokenType === Number) {\n        checkTokenIsInteger.call(this, ALLOW_SIGN);\n        b = this.consume(Number);\n    }\n\n    // -n\n    // -n <signed-integer>\n    // -n ['+' | '-'] <signless-integer>\n    // -n- <signless-integer>\n    // <dashndashdigit-ident>\n    else if (this.tokenType === Ident && this.cmpChar(this.tokenStart, HYPHENMINUS)) {\n        a = '-1';\n\n        expectCharCode.call(this, 1, N);\n\n        switch (this.tokenEnd - this.tokenStart) {\n            // -n\n            // -n <signed-integer>\n            // -n ['+' | '-'] <signless-integer>\n            case 2:\n                this.next();\n                b = consumeB.call(this);\n                break;\n\n            // -n- <signless-integer>\n            case 3:\n                expectCharCode.call(this, 2, HYPHENMINUS);\n\n                this.next();\n                this.skipSC();\n\n                checkTokenIsInteger.call(this, DISALLOW_SIGN);\n\n                b = '-' + this.consume(Number);\n                break;\n\n            // <dashndashdigit-ident>\n            default:\n                expectCharCode.call(this, 2, HYPHENMINUS);\n                checkInteger.call(this, 3, DISALLOW_SIGN);\n                this.next();\n\n                b = this.substrToCursor(start + 2);\n        }\n    }\n\n    // '+'? n\n    // '+'? n <signed-integer>\n    // '+'? n ['+' | '-'] <signless-integer>\n    // '+'? n- <signless-integer>\n    // '+'? <ndashdigit-ident>\n    else if (this.tokenType === Ident || (this.isDelim(PLUSSIGN) && this.lookupType(1) === Ident)) {\n        let sign = 0;\n        a = '1';\n\n        // just ignore a plus\n        if (this.isDelim(PLUSSIGN)) {\n            sign = 1;\n            this.next();\n        }\n\n        expectCharCode.call(this, 0, N);\n\n        switch (this.tokenEnd - this.tokenStart) {\n            // '+'? n\n            // '+'? n <signed-integer>\n            // '+'? n ['+' | '-'] <signless-integer>\n            case 1:\n                this.next();\n                b = consumeB.call(this);\n                break;\n\n            // '+'? n- <signless-integer>\n            case 2:\n                expectCharCode.call(this, 1, HYPHENMINUS);\n\n                this.next();\n                this.skipSC();\n\n                checkTokenIsInteger.call(this, DISALLOW_SIGN);\n\n                b = '-' + this.consume(Number);\n                break;\n\n            // '+'? <ndashdigit-ident>\n            default:\n                expectCharCode.call(this, 1, HYPHENMINUS);\n                checkInteger.call(this, 2, DISALLOW_SIGN);\n                this.next();\n\n                b = this.substrToCursor(start + sign + 1);\n        }\n    }\n\n    // <ndashdigit-dimension>\n    // <ndash-dimension> <signless-integer>\n    // <n-dimension>\n    // <n-dimension> <signed-integer>\n    // <n-dimension> ['+' | '-'] <signless-integer>\n    else if (this.tokenType === Dimension) {\n        const code = this.charCodeAt(this.tokenStart);\n        const sign = code === PLUSSIGN || code === HYPHENMINUS;\n        let i = this.tokenStart + sign;\n\n        for (; i < this.tokenEnd; i++) {\n            if (!isDigit(this.charCodeAt(i))) {\n                break;\n            }\n        }\n\n        if (i === this.tokenStart + sign) {\n            this.error('Integer is expected', this.tokenStart + sign);\n        }\n\n        expectCharCode.call(this, i - this.tokenStart, N);\n        a = this.substring(start, i);\n\n        // <n-dimension>\n        // <n-dimension> <signed-integer>\n        // <n-dimension> ['+' | '-'] <signless-integer>\n        if (i + 1 === this.tokenEnd) {\n            this.next();\n            b = consumeB.call(this);\n        } else {\n            expectCharCode.call(this, i - this.tokenStart + 1, HYPHENMINUS);\n\n            // <ndash-dimension> <signless-integer>\n            if (i + 2 === this.tokenEnd) {\n                this.next();\n                this.skipSC();\n                checkTokenIsInteger.call(this, DISALLOW_SIGN);\n                b = '-' + this.consume(Number);\n            }\n            // <ndashdigit-dimension>\n            else {\n                checkInteger.call(this, i - this.tokenStart + 2, DISALLOW_SIGN);\n                this.next();\n                b = this.substrToCursor(i + 1);\n            }\n        }\n    } else {\n        this.error();\n    }\n\n    if (a !== null && a.charCodeAt(0) === PLUSSIGN) {\n        a = a.substr(1);\n    }\n\n    if (b !== null && b.charCodeAt(0) === PLUSSIGN) {\n        b = b.substr(1);\n    }\n\n    return {\n        type: 'AnPlusB',\n        loc: this.getLocation(start, this.tokenStart),\n        a,\n        b\n    };\n}\n\nexport function generate(node) {\n    if (node.a) {\n        const a =\n            node.a === '+1' && 'n' ||\n            node.a ===  '1' && 'n' ||\n            node.a === '-1' && '-n' ||\n            node.a + 'n';\n\n        if (node.b) {\n            const b = node.b[0] === '-' || node.b[0] === '+'\n                ? node.b\n                : '+' + node.b;\n            this.tokenize(a + b);\n        } else {\n            this.tokenize(a);\n        }\n    } else {\n        this.tokenize(node.b);\n    }\n}\n", "import {\n    AtKeyword,\n    Semicolon,\n    LeftCurlyBracket,\n    RightCurlyBracket\n} from '../../tokenizer/index.js';\n\nfunction consumeRaw() {\n    return this.Raw(this.consumeUntilLeftCurlyBracketOrSemicolon, true);\n}\n\nfunction isDeclarationBlockAtrule() {\n    for (let offset = 1, type; type = this.lookupType(offset); offset++) {\n        if (type === RightCurlyBracket) {\n            return true;\n        }\n\n        if (type === LeftCurlyBracket ||\n            type === AtKeyword) {\n            return false;\n        }\n    }\n\n    return false;\n}\n\n\nexport const name = 'Atrule';\nexport const walkContext = 'atrule';\nexport const structure = {\n    name: String,\n    prelude: ['AtrulePrelude', 'Raw', null],\n    block: ['Block', null]\n};\n\nexport function parse(isDeclaration = false) {\n    const start = this.tokenStart;\n    let name;\n    let nameLowerCase;\n    let prelude = null;\n    let block = null;\n\n    this.eat(AtKeyword);\n\n    name = this.substrToCursor(start + 1);\n    nameLowerCase = name.toLowerCase();\n    this.skipSC();\n\n    // parse prelude\n    if (this.eof === false &&\n        this.tokenType !== LeftCurlyBracket &&\n        this.tokenType !== Semicolon) {\n        if (this.parseAtrulePrelude) {\n            prelude = this.parseWithFallback(this.AtrulePrelude.bind(this, name, isDeclaration), consumeRaw);\n        } else {\n            prelude = consumeRaw.call(this, this.tokenIndex);\n        }\n\n        this.skipSC();\n    }\n\n    switch (this.tokenType) {\n        case Semicolon:\n            this.next();\n            break;\n\n        case LeftCurlyBracket:\n            if (hasOwnProperty.call(this.atrule, nameLowerCase) &&\n                typeof this.atrule[nameLowerCase].block === 'function') {\n                block = this.atrule[nameLowerCase].block.call(this, isDeclaration);\n            } else {\n                // TODO: should consume block content as Raw?\n                block = this.Block(isDeclarationBlockAtrule.call(this));\n            }\n\n            break;\n    }\n\n    return {\n        type: 'Atrule',\n        loc: this.getLocation(start, this.tokenStart),\n        name,\n        prelude,\n        block\n    };\n}\n\nexport function generate(node) {\n    this.token(AtKeyword, '@' + node.name);\n\n    if (node.prelude !== null) {\n        this.node(node.prelude);\n    }\n\n    if (node.block) {\n        this.node(node.block);\n    } else {\n        this.token(Semicolon, ';');\n    }\n}\n", "import {\n    Semicolon,\n    LeftCurlyBracket\n} from '../../tokenizer/index.js';\n\nexport const name = 'AtrulePrelude';\nexport const walkContext = 'atrulePrelude';\nexport const structure = {\n    children: [[]]\n};\n\nexport function parse(name) {\n    let children = null;\n\n    if (name !== null) {\n        name = name.toLowerCase();\n    }\n\n    this.skipSC();\n\n    if (hasOwnProperty.call(this.atrule, name) &&\n        typeof this.atrule[name].prelude === 'function') {\n        // custom consumer\n        children = this.atrule[name].prelude.call(this);\n    } else {\n        // default consumer\n        children = this.readSequence(this.scope.AtrulePrelude);\n    }\n\n    this.skipSC();\n\n    if (this.eof !== true &&\n        this.tokenType !== LeftCurlyBracket &&\n        this.tokenType !== Semicolon) {\n        this.error('Semicolon or block is expected');\n    }\n\n    return {\n        type: 'AtrulePrelude',\n        loc: this.getLocationFromList(children),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node);\n}\n", "import {\n    Ident,\n    String as StringToken,\n    Delim,\n    LeftSquareBracket,\n    RightSquareBracket\n} from '../../tokenizer/index.js';\n\nconst DOLLARSIGN = 0x0024;       // U+0024 DOLLAR SIGN ($)\nconst ASTERISK = 0x002A;         // U+002A ASTERISK (*)\nconst EQUALSSIGN = 0x003D;       // U+003D EQUALS SIGN (=)\nconst CIRCUMFLEXACCENT = 0x005E; // U+005E (^)\nconst VERTICALLINE = 0x007C;     // U+007C VERTICAL LINE (|)\nconst TILDE = 0x007E;            // U+007E TILDE (~)\n\nfunction getAttributeName() {\n    if (this.eof) {\n        this.error('Unexpected end of input');\n    }\n\n    const start = this.tokenStart;\n    let expectIdent = false;\n\n    if (this.isDelim(ASTERISK)) {\n        expectIdent = true;\n        this.next();\n    } else if (!this.isDelim(VERTICALLINE)) {\n        this.eat(Ident);\n    }\n\n    if (this.isDelim(VERTICALLINE)) {\n        if (this.charCodeAt(this.tokenStart + 1) !== EQUALSSIGN) {\n            this.next();\n            this.eat(Ident);\n        } else if (expectIdent) {\n            this.error('Identifier is expected', this.tokenEnd);\n        }\n    } else if (expectIdent) {\n        this.error('Vertical line is expected');\n    }\n\n    return {\n        type: 'Identifier',\n        loc: this.getLocation(start, this.tokenStart),\n        name: this.substrToCursor(start)\n    };\n}\n\nfunction getOperator() {\n    const start = this.tokenStart;\n    const code = this.charCodeAt(start);\n\n    if (code !== EQUALSSIGN &&        // =\n        code !== TILDE &&             // ~=\n        code !== CIRCUMFLEXACCENT &&  // ^=\n        code !== DOLLARSIGN &&        // $=\n        code !== ASTERISK &&          // *=\n        code !== VERTICALLINE         // |=\n    ) {\n        this.error('Attribute selector (=, ~=, ^=, $=, *=, |=) is expected');\n    }\n\n    this.next();\n\n    if (code !== EQUALSSIGN) {\n        if (!this.isDelim(EQUALSSIGN)) {\n            this.error('Equal sign is expected');\n        }\n\n        this.next();\n    }\n\n    return this.substrToCursor(start);\n}\n\n// '[' <wq-name> ']'\n// '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'\nexport const name = 'AttributeSelector';\nexport const structure = {\n    name: 'Identifier',\n    matcher: [String, null],\n    value: ['String', 'Identifier', null],\n    flags: [String, null]\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    let name;\n    let matcher = null;\n    let value = null;\n    let flags = null;\n\n    this.eat(LeftSquareBracket);\n    this.skipSC();\n\n    name = getAttributeName.call(this);\n    this.skipSC();\n\n    if (this.tokenType !== RightSquareBracket) {\n        // avoid case `[name i]`\n        if (this.tokenType !== Ident) {\n            matcher = getOperator.call(this);\n\n            this.skipSC();\n\n            value = this.tokenType === StringToken\n                ? this.String()\n                : this.Identifier();\n\n            this.skipSC();\n        }\n\n        // attribute flags\n        if (this.tokenType === Ident) {\n            flags = this.consume(Ident);\n\n            this.skipSC();\n        }\n    }\n\n    this.eat(RightSquareBracket);\n\n    return {\n        type: 'AttributeSelector',\n        loc: this.getLocation(start, this.tokenStart),\n        name,\n        matcher,\n        value,\n        flags\n    };\n}\n\nexport function generate(node) {\n    this.token(Delim, '[');\n    this.node(node.name);\n\n    if (node.matcher !== null) {\n        this.tokenize(node.matcher);\n        this.node(node.value);\n    }\n\n    if (node.flags !== null) {\n        this.token(Ident, node.flags);\n    }\n\n    this.token(Delim, ']');\n}\n", "import {\n    WhiteSpace,\n    Comment,\n    Semicolon,\n    AtKeyword,\n    LeftCurlyBracket,\n    RightCurlyBracket\n} from '../../tokenizer/index.js';\n\nconst AMPERSAND = 0x0026;       // U+0026 AMPERSAND (&)\n\nfunction consumeRaw() {\n    return this.Raw(null, true);\n}\nfunction consumeRule() {\n    return this.parseWithFallback(this.Rule, consumeRaw);\n}\nfunction consumeRawDeclaration() {\n    return this.Raw(this.consumeUntilSemicolonIncluded, true);\n}\nfunction consumeDeclaration() {\n    if (this.tokenType === Semicolon) {\n        return consumeRawDeclaration.call(this, this.tokenIndex);\n    }\n\n    const node = this.parseWithFallback(this.Declaration, consumeRawDeclaration);\n\n    if (this.tokenType === Semicolon) {\n        this.next();\n    }\n\n    return node;\n}\n\nexport const name = 'Block';\nexport const walkContext = 'block';\nexport const structure = {\n    children: [[\n        'Atrule',\n        'Rule',\n        'Declaration'\n    ]]\n};\n\nexport function parse(isStyleBlock) {\n    const consumer = isStyleBlock ? consumeDeclaration : consumeRule;\n    const start = this.tokenStart;\n    let children = this.createList();\n\n    this.eat(LeftCurlyBracket);\n\n    scan:\n    while (!this.eof) {\n        switch (this.tokenType) {\n            case RightCurlyBracket:\n                break scan;\n\n            case WhiteSpace:\n            case Comment:\n                this.next();\n                break;\n\n            case AtKeyword:\n                children.push(this.parseWithFallback(this.Atrule.bind(this, isStyleBlock), consumeRaw));\n                break;\n\n            default:\n                if (isStyleBlock && this.isDelim(AMPERSAND))  {\n                    children.push(consumeRule.call(this));\n                } else {\n                    children.push(consumer.call(this));\n                }\n        }\n    }\n\n    if (!this.eof) {\n        this.eat(RightCurlyBracket);\n    }\n\n    return {\n        type: 'Block',\n        loc: this.getLocation(start, this.tokenStart),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.token(LeftCurlyBracket, '{');\n    this.children(node, prev => {\n        if (prev.type === 'Declaration') {\n            this.token(Semicolon, ';');\n        }\n    });\n    this.token(RightCurlyBracket, '}');\n}\n", "import {\n    Delim,\n    LeftSquareBracket,\n    RightSquareBracket\n} from '../../tokenizer/index.js';\n\nexport const name = 'Brackets';\nexport const structure = {\n    children: [[]]\n};\n\nexport function parse(readSequence, recognizer) {\n    const start = this.tokenStart;\n    let children = null;\n\n    this.eat(LeftSquareBracket);\n\n    children = readSequence.call(this, recognizer);\n\n    if (!this.eof) {\n        this.eat(RightSquareBracket);\n    }\n\n    return {\n        type: 'Brackets',\n        loc: this.getLocation(start, this.tokenStart),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.token(Delim, '[');\n    this.children(node);\n    this.token(Delim, ']');\n}\n", "import { CDC } from '../../tokenizer/index.js';\n\nexport const name = 'CDC';\nexport const structure = [];\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    this.eat(CDC); // -->\n\n    return {\n        type: 'CDC',\n        loc: this.getLocation(start, this.tokenStart)\n    };\n}\n\nexport function generate() {\n    this.token(CDC, '-->');\n}\n", "import { CDO } from '../../tokenizer/index.js';\n\nexport const name = 'CDO';\nexport const structure = [];\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    this.eat(CDO); // <!--\n\n    return {\n        type: 'CDO',\n        loc: this.getLocation(start, this.tokenStart)\n    };\n}\n\nexport function generate() {\n    this.token(CDO, '<!--');\n}\n", "import { Delim, Ident } from '../../tokenizer/index.js';\n\nconst FULLSTOP = 0x002E; // U+002E FULL STOP (.)\n\n// '.' ident\nexport const name = 'ClassSelector';\nexport const structure = {\n    name: String\n};\n\nexport function parse() {\n    this.eatDelim(FULLSTOP);\n\n    return {\n        type: 'ClassSelector',\n        loc: this.getLocation(this.tokenStart - 1, this.tokenEnd),\n        name: this.consume(Ident)\n    };\n}\n\nexport function generate(node) {\n    this.token(Delim, '.');\n    this.token(Ident, node.name);\n}\n", "import { WhiteSpace, Delim } from '../../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B;        // U+002B PLUS SIGN (+)\nconst SOLIDUS = 0x002F;         // U+002F SOLIDUS (/)\nconst GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)\nconst TILDE = 0x007E;           // U+007E TILDE (~)\n\nexport const name = 'Combinator';\nexport const structure = {\n    name: String\n};\n\n// + | > | ~ | /deep/\nexport function parse() {\n    const start = this.tokenStart;\n    let name;\n\n    switch (this.tokenType) {\n        case WhiteSpace:\n            name = ' ';\n            break;\n\n        case Delim:\n            switch (this.charCodeAt(this.tokenStart)) {\n                case GREATERTHANSIGN:\n                case PLUSSIGN:\n                case TILDE:\n                    this.next();\n                    break;\n\n                case SOLIDUS:\n                    this.next();\n                    this.eatIdent('deep');\n                    this.eatDelim(SOLIDUS);\n                    break;\n\n                default:\n                    this.error('Combinator is expected');\n            }\n\n            name = this.substrToCursor(start);\n            break;\n    }\n\n    return {\n        type: 'Combinator',\n        loc: this.getLocation(start, this.tokenStart),\n        name\n    };\n}\n\nexport function generate(node) {\n    this.tokenize(node.name);\n}\n", "import { Comment } from '../../tokenizer/index.js';\n\nconst ASTERISK = 0x002A;        // U+002A ASTERISK (*)\nconst SOLIDUS = 0x002F;         // U+002F SOLIDUS (/)\n\n\nexport const name = 'Comment';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    let end = this.tokenEnd;\n\n    this.eat(Comment);\n\n    if ((end - start + 2) >= 2 &&\n        this.charCodeAt(end - 2) === ASTERISK &&\n        this.charCodeAt(end - 1) === SOLIDUS) {\n        end -= 2;\n    }\n\n    return {\n        type: 'Comment',\n        loc: this.getLocation(start, this.tokenStart),\n        value: this.substring(start + 2, end)\n    };\n}\n\nexport function generate(node) {\n    this.token(Comment, '/*' + node.value + '*/');\n}\n", "import {\n    WhiteSpace,\n    Comment,\n    Ident,\n    LeftParenthesis,\n    RightParenthesis,\n    Function as FunctionToken,\n    Colon,\n    EOF\n} from '../../tokenizer/index.js';\n\nconst likelyFeatureToken = new Set([Colon, RightParenthesis, EOF]);\n\nexport const name = 'Condition';\nexport const structure = {\n    kind: String,\n    children: [[\n        'Identifier',\n        'Feature',\n        'FeatureFunction',\n        'FeatureRange',\n        'SupportsDeclaration'\n    ]]\n};\n\nfunction featureOrRange(kind) {\n    if (this.lookupTypeNonSC(1) === Ident &&\n        likelyFeatureToken.has(this.lookupTypeNonSC(2))) {\n        return this.Feature(kind);\n    }\n\n    return this.FeatureRange(kind);\n}\n\nconst parentheses = {\n    media: featureOrRange,\n    container: featureOrRange,\n    supports() {\n        return this.SupportsDeclaration();\n    }\n};\n\nexport function parse(kind = 'media') {\n    const children = this.createList();\n\n    scan: while (!this.eof) {\n        switch (this.tokenType) {\n            case Comment:\n            case WhiteSpace:\n                this.next();\n                continue;\n\n            case Ident:\n                children.push(this.Identifier());\n                break;\n\n            case LeftParenthesis: {\n                let term = this.parseWithFallback(\n                    () => parentheses[kind].call(this, kind),\n                    () => null\n                );\n\n                if (!term) {\n                    term = this.parseWithFallback(\n                        () => {\n                            this.eat(LeftParenthesis);\n                            const res = this.Condition(kind);\n                            this.eat(RightParenthesis);\n                            return res;\n                        },\n                        () => {\n                            return this.GeneralEnclosed(kind);\n                        }\n                    );\n                }\n\n                children.push(term);\n                break;\n            }\n\n            case FunctionToken: {\n                let term = this.parseWithFallback(\n                    () => this.FeatureFunction(kind),\n                    () => null\n                );\n\n                if (!term) {\n                    term = this.GeneralEnclosed(kind);\n                }\n\n                children.push(term);\n                break;\n            }\n\n            default:\n                break scan;\n        }\n    }\n\n    if (children.isEmpty) {\n        this.error('Condition is expected');\n    }\n\n    return {\n        type: 'Condition',\n        loc: this.getLocationFromList(children),\n        kind,\n        children\n    };\n}\n\nexport function generate(node) {\n    node.children.forEach(child => {\n        if (child.type === 'Condition') {\n            this.token(LeftParenthesis, '(');\n            this.node(child);\n            this.token(RightParenthesis, ')');\n        } else {\n            this.node(child);\n        }\n    });\n}\n\n", "import { isCustomProperty } from '../../utils/names.js';\nimport {\n    Ident,\n    Hash,\n    Colon,\n    Semicolon,\n    Delim,\n    WhiteSpace\n} from '../../tokenizer/index.js';\n\nconst EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)\nconst NUMBERSIGN = 0x0023;      // U+0023 NUMBER SIGN (#)\nconst DOLLARSIGN = 0x0024;      // U+0024 DOLLAR SIGN ($)\nconst AMPERSAND = 0x0026;       // U+0026 AMPERSAND (&)\nconst ASTERISK = 0x002A;        // U+002A ASTERISK (*)\nconst PLUSSIGN = 0x002B;        // U+002B PLUS SIGN (+)\nconst SOLIDUS = 0x002F;         // U+002F SOLIDUS (/)\n\nfunction consumeValueRaw() {\n    return this.Raw(this.consumeUntilExclamationMarkOrSemicolon, true);\n}\n\nfunction consumeCustomPropertyRaw() {\n    return this.Raw(this.consumeUntilExclamationMarkOrSemicolon, false);\n}\n\nfunction consumeValue() {\n    const startValueToken = this.tokenIndex;\n    const value = this.Value();\n\n    if (value.type !== 'Raw' &&\n        this.eof === false &&\n        this.tokenType !== Semicolon &&\n        this.isDelim(EXCLAMATIONMARK) === false &&\n        this.isBalanceEdge(startValueToken) === false) {\n        this.error();\n    }\n\n    return value;\n}\n\nexport const name = 'Declaration';\nexport const walkContext = 'declaration';\nexport const structure = {\n    important: [Boolean, String],\n    property: String,\n    value: ['Value', 'Raw']\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    const startToken = this.tokenIndex;\n    const property = readProperty.call(this);\n    const customProperty = isCustomProperty(property);\n    const parseValue = customProperty ? this.parseCustomProperty : this.parseValue;\n    const consumeRaw = customProperty ? consumeCustomPropertyRaw : consumeValueRaw;\n    let important = false;\n    let value;\n\n    this.skipSC();\n    this.eat(Colon);\n\n    const valueStart = this.tokenIndex;\n\n    if (!customProperty) {\n        this.skipSC();\n    }\n\n    if (parseValue) {\n        value = this.parseWithFallback(consumeValue, consumeRaw);\n    } else {\n        value = consumeRaw.call(this, this.tokenIndex);\n    }\n\n    if (customProperty && value.type === 'Value' && value.children.isEmpty) {\n        for (let offset = valueStart - this.tokenIndex; offset <= 0; offset++) {\n            if (this.lookupType(offset) === WhiteSpace) {\n                value.children.appendData({\n                    type: 'WhiteSpace',\n                    loc: null,\n                    value: ' '\n                });\n                break;\n            }\n        }\n    }\n\n    if (this.isDelim(EXCLAMATIONMARK)) {\n        important = getImportant.call(this);\n        this.skipSC();\n    }\n\n    // Do not include semicolon to range per spec\n    // https://drafts.csswg.org/css-syntax/#declaration-diagram\n\n    if (this.eof === false &&\n        this.tokenType !== Semicolon &&\n        this.isBalanceEdge(startToken) === false) {\n        this.error();\n    }\n\n    return {\n        type: 'Declaration',\n        loc: this.getLocation(start, this.tokenStart),\n        important,\n        property,\n        value\n    };\n}\n\nexport function generate(node) {\n    this.token(Ident, node.property);\n    this.token(Colon, ':');\n    this.node(node.value);\n\n    if (node.important) {\n        this.token(Delim, '!');\n        this.token(Ident, node.important === true ? 'important' : node.important);\n    }\n}\n\nfunction readProperty() {\n    const start = this.tokenStart;\n\n    // hacks\n    if (this.tokenType === Delim) {\n        switch (this.charCodeAt(this.tokenStart)) {\n            case ASTERISK:\n            case DOLLARSIGN:\n            case PLUSSIGN:\n            case NUMBERSIGN:\n            case AMPERSAND:\n                this.next();\n                break;\n\n            // TODO: not sure we should support this hack\n            case SOLIDUS:\n                this.next();\n                if (this.isDelim(SOLIDUS)) {\n                    this.next();\n                }\n                break;\n        }\n    }\n\n    if (this.tokenType === Hash) {\n        this.eat(Hash);\n    } else {\n        this.eat(Ident);\n    }\n\n    return this.substrToCursor(start);\n}\n\n// ! ws* important\nfunction getImportant() {\n    this.eat(Delim);\n    this.skipSC();\n\n    const important = this.consume(Ident);\n\n    // store original value in case it differ from `important`\n    // for better original source restoring and hacks like `!ie` support\n    return important === 'important' ? true : important;\n}\n", "import {\n    WhiteSpace,\n    Comment,\n    Semicolon,\n    AtKeyword\n} from '../../tokenizer/index.js';\n\nconst AMPERSAND = 0x0026;       // U+0026 AMPERSAND (&)\n\nfunction consumeRaw() {\n    return this.Raw(this.consumeUntilSemicolonIncluded, true);\n}\n\nexport const name = 'DeclarationList';\nexport const structure = {\n    children: [[\n        'Declaration',\n        'Atrule',\n        'Rule'\n    ]]\n};\n\nexport function parse() {\n    const children = this.createList();\n\n    scan:\n    while (!this.eof) {\n        switch (this.tokenType) {\n            case WhiteSpace:\n            case Comment:\n            case Semicolon:\n                this.next();\n                break;\n\n            case AtKeyword:\n                children.push(this.parseWithFallback(this.Atrule.bind(this, true), consumeRaw));\n                break;\n\n            default:\n                if (this.isDelim(AMPERSAND))  {\n                    children.push(this.parseWithFallback(this.Rule, consumeRaw));\n                } else {\n                    children.push(this.parseWithFallback(this.Declaration, consumeRaw));\n                }\n        }\n    }\n\n    return {\n        type: 'DeclarationList',\n        loc: this.getLocationFromList(children),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node, prev => {\n        if (prev.type === 'Declaration') {\n            this.token(Semicolon, ';');\n        }\n    });\n}\n\n", "import { Dimension } from '../../tokenizer/index.js';\n\nexport const name = 'Dimension';\nexport const structure = {\n    value: String,\n    unit: String\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    const value = this.consumeNumber(Dimension);\n\n    return {\n        type: 'Dimension',\n        loc: this.getLocation(start, this.tokenStart),\n        value,\n        unit: this.substring(start + value.length, this.tokenStart)\n    };\n}\n\nexport function generate(node) {\n    this.token(Dimension, node.value + node.unit);\n}\n", "import {\n    Ident,\n    Number,\n    Dimension,\n    Function as FunctionToken,\n    LeftParenthesis,\n    RightParenthesis,\n    Colon,\n    Delim\n} from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F;  // U+002F SOLIDUS (/)\n\nexport const name = 'Feature';\nexport const structure = {\n    kind: String,\n    name: String,\n    value: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function', null]\n};\n\nexport function parse(kind) {\n    const start = this.tokenStart;\n    let name;\n    let value = null;\n\n    this.eat(LeftParenthesis);\n    this.skipSC();\n\n    name = this.consume(Ident);\n    this.skipSC();\n\n    if (this.tokenType !== RightParenthesis) {\n        this.eat(Colon);\n        this.skipSC();\n\n        switch (this.tokenType) {\n            case Number:\n                if (this.lookupNonWSType(1) === Delim) {\n                    value = this.Ratio();\n                } else {\n                    value = this.Number();\n                }\n\n                break;\n\n            case Dimension:\n                value = this.Dimension();\n                break;\n\n            case Ident:\n                value = this.Identifier();\n                break;\n\n            case FunctionToken:\n                value = this.parseWithFallback(\n                    () => {\n                        const res = this.Function(this.readSequence, this.scope.Value);\n\n                        this.skipSC();\n\n                        if (this.isDelim(SOLIDUS)) {\n                            this.error();\n                        }\n\n                        return res;\n                    },\n                    () => {\n                        return this.Ratio();\n                    }\n                );\n                break;\n\n            default:\n                this.error('Number, dimension, ratio or identifier is expected');\n        }\n\n        this.skipSC();\n    }\n\n    if (!this.eof) {\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'Feature',\n        loc: this.getLocation(start, this.tokenStart),\n        kind,\n        name,\n        value\n    };\n}\n\nexport function generate(node) {\n    this.token(LeftParenthesis, '(');\n    this.token(Ident, node.name);\n\n    if (node.value !== null) {\n        this.token(Colon, ':');\n        this.node(node.value);\n    }\n\n    this.token(RightParenthesis, ')');\n}\n", "import {\n    Function as FunctionToken,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'FeatureFunction';\nexport const structure = {\n    kind: String,\n    feature: String,\n    value: ['Declaration', 'Selector']\n};\n\nfunction getFeatureParser(kind, name) {\n    const featuresOfKind = this.features[kind] || {};\n    const parser = featuresOfKind[name];\n\n    if (typeof parser !== 'function') {\n        this.error(`Unknown feature ${name}()`);\n    }\n\n    return parser;\n}\n\nexport function parse(kind = 'unknown') {\n    const start = this.tokenStart;\n    const functionName = this.consumeFunctionName();\n    const valueParser = getFeatureParser.call(this, kind, functionName.toLowerCase());\n\n    this.skipSC();\n\n    const value = this.parseWithFallback(\n        () => {\n            const startValueToken = this.tokenIndex;\n            const value = valueParser.call(this);\n\n            if (this.eof === false &&\n                this.isBalanceEdge(startValueToken) === false) {\n                this.error();\n            }\n\n            return value;\n        },\n        () => this.Raw(null, false)\n    );\n\n    if (!this.eof) {\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'FeatureFunction',\n        loc: this.getLocation(start, this.tokenStart),\n        kind,\n        feature: functionName,\n        value\n    };\n}\n\nexport function generate(node) {\n    this.token(FunctionToken, node.feature + '(');\n    this.node(node.value);\n    this.token(RightParenthesis, ')');\n}\n", "import {\n    Ident,\n    Number,\n    Dimension,\n    Function as FunctionToken,\n    LeftParenthesis,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F;         // U+002F SOLIDUS (/)\nconst LESSTHANSIGN = 0x003C;    // U+003C LESS-THAN SIGN (<)\nconst EQUALSSIGN = 0x003D;      // U+003D EQUALS SIGN (=)\nconst GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)\n\nexport const name = 'FeatureRange';\nexport const structure = {\n    kind: String,\n    left: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function'],\n    leftComparison: String,\n    middle: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function'],\n    rightComparison: [String, null],\n    right: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function', null]\n};\n\nfunction readTerm() {\n    this.skipSC();\n\n    switch (this.tokenType) {\n        case Number:\n            if (this.isDelim(SOLIDUS, this.lookupOffsetNonSC(1))) {\n                return this.Ratio();\n            } else {\n                return this.Number();\n            }\n\n        case Dimension:\n            return this.Dimension();\n\n        case Ident:\n            return this.Identifier();\n\n        case FunctionToken:\n            return this.parseWithFallback(\n                () => {\n                    const res = this.Function(this.readSequence, this.scope.Value);\n\n                    this.skipSC();\n\n                    if (this.isDelim(SOLIDUS)) {\n                        this.error();\n                    }\n\n                    return res;\n                },\n                () => {\n                    return this.Ratio();\n                }\n            );\n\n        default:\n            this.error('Number, dimension, ratio or identifier is expected');\n    }\n}\n\nfunction readComparison(expectColon) {\n    this.skipSC();\n\n    if (this.isDelim(LESSTHANSIGN) ||\n        this.isDelim(GREATERTHANSIGN)) {\n        const value = this.source[this.tokenStart];\n\n        this.next();\n\n        if (this.isDelim(EQUALSSIGN)) {\n            this.next();\n            return value + '=';\n        }\n\n        return value;\n    }\n\n    if (this.isDelim(EQUALSSIGN)) {\n        return '=';\n    }\n\n    this.error(`Expected ${expectColon ? '\":\", ' : ''}\"<\", \">\", \"=\" or \")\"`);\n}\n\nexport function parse(kind = 'unknown') {\n    const start = this.tokenStart;\n\n    this.skipSC();\n    this.eat(LeftParenthesis);\n\n    const left = readTerm.call(this);\n    const leftComparison = readComparison.call(this, left.type === 'Identifier');\n    const middle = readTerm.call(this);\n    let rightComparison = null;\n    let right = null;\n\n    if (this.lookupNonWSType(0) !== RightParenthesis) {\n        rightComparison = readComparison.call(this);\n        right = readTerm.call(this);\n    }\n\n    this.skipSC();\n    this.eat(RightParenthesis);\n\n    return {\n        type: 'FeatureRange',\n        loc: this.getLocation(start, this.tokenStart),\n        kind,\n        left,\n        leftComparison,\n        middle,\n        rightComparison,\n        right\n    };\n}\n\nexport function generate(node) {\n    this.token(LeftParenthesis, '(');\n    this.node(node.left);\n    this.tokenize(node.leftComparison);\n    this.node(node.middle);\n\n    if (node.right) {\n        this.tokenize(node.rightComparison);\n        this.node(node.right);\n    }\n\n    this.token(RightParenthesis, ')');\n}\n", "import {\n    Function as FunctionToken,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\n\nexport const name = 'Function';\nexport const walkContext = 'function';\nexport const structure = {\n    name: String,\n    children: [[]]\n};\n\n// <function-token> <sequence> )\nexport function parse(readSequence, recognizer) {\n    const start = this.tokenStart;\n    const name = this.consumeFunctionName();\n    const nameLowerCase = name.toLowerCase();\n    let children;\n\n    children = recognizer.hasOwnProperty(nameLowerCase)\n        ? recognizer[nameLowerCase].call(this, recognizer)\n        : readSequence.call(this, recognizer);\n\n    if (!this.eof) {\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'Function',\n        loc: this.getLocation(start, this.tokenStart),\n        name,\n        children\n    };\n}\n\nexport function generate(node) {\n    this.token(FunctionToken, node.name + '(');\n    this.children(node);\n    this.token(RightParenthesis, ')');\n}\n", "import {\n    Function as FunctionToken,\n    LeftParenthesis,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\n\nexport const name = 'GeneralEnclosed';\nexport const structure = {\n    kind: String,\n    function: [String, null],\n    children: [[]]\n};\n\n// <function-token> <any-value> )\n// ( <any-value> )\nexport function parse(kind) {\n    const start = this.tokenStart;\n    let functionName = null;\n\n    if (this.tokenType === FunctionToken) {\n        functionName = this.consumeFunctionName();\n    } else {\n        this.eat(LeftParenthesis);\n    }\n\n    const children = this.parseWithFallback(\n        () => {\n            const startValueToken = this.tokenIndex;\n            const children = this.readSequence(this.scope.Value);\n\n            if (this.eof === false &&\n                this.isBalanceEdge(startValueToken) === false) {\n                this.error();\n            }\n\n            return children;\n        },\n        () => this.createSingleNodeList(\n            this.Raw(null, false)\n        )\n    );\n\n    if (!this.eof) {\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'GeneralEnclosed',\n        loc: this.getLocation(start, this.tokenStart),\n        kind,\n        function: functionName,\n        children\n    };\n}\n\nexport function generate(node) {\n    if (node.function) {\n        this.token(FunctionToken, node.function + '(');\n    } else {\n        this.token(LeftParenthesis, '(');\n    }\n\n    this.children(node);\n    this.token(RightParenthesis, ')');\n}\n", "import { Hash } from '../../tokenizer/index.js';\n\n// '#' ident\nexport const xxx = 'XXX';\nexport const name = 'Hash';\nexport const structure = {\n    value: String\n};\nexport function parse() {\n    const start = this.tokenStart;\n\n    this.eat(Hash);\n\n    return {\n        type: 'Hash',\n        loc: this.getLocation(start, this.tokenStart),\n        value: this.substrToCursor(start + 1)\n    };\n}\nexport function generate(node) {\n    this.token(Hash, '#' + node.value);\n}\n\n", "import { Ident } from '../../tokenizer/index.js';\n\nexport const name = 'Identifier';\nexport const structure = {\n    name: String\n};\n\nexport function parse() {\n    return {\n        type: 'Identifier',\n        loc: this.getLocation(this.tokenStart, this.tokenEnd),\n        name: this.consume(Ident)\n    };\n}\n\nexport function generate(node) {\n    this.token(Ident, node.name);\n}\n", "import { Hash, Delim } from '../../tokenizer/index.js';\n\nexport const name = 'IdSelector';\nexport const structure = {\n    name: String\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    // TODO: check value is an ident\n    this.eat(Hash);\n\n    return {\n        type: 'IdSelector',\n        loc: this.getLocation(start, this.tokenStart),\n        name: this.substrToCursor(start + 1)\n    };\n}\n\nexport function generate(node) {\n    // Using Delim instead of Hash is a hack to avoid for a whitespace between ident and id-selector\n    // in safe mode (e.g. \"a#id\"), because IE11 doesn't allow a sequence <ident-token> <hash-token>\n    // without a whitespace in values (e.g. \"1px solid#000\")\n    this.token(Delim, '#' + node.name);\n}\n", "import { Ident, Delim } from '../../tokenizer/index.js';\n\nconst FULLSTOP = 0x002E; // U+002E FULL STOP (.)\n\nexport const name = 'Layer';\nexport const structure = {\n    name: String\n};\n\nexport function parse() {\n    let tokenStart = this.tokenStart;\n    let name = this.consume(Ident);\n\n    while (this.isDelim(FULLSTOP)) {\n        this.eat(Delim);\n        name += '.' + this.consume(Ident);\n    }\n\n    return {\n        type: 'Layer',\n        loc: this.getLocation(tokenStart, this.tokenStart),\n        name\n    };\n}\n\nexport function generate(node) {\n    this.tokenize(node.name);\n}\n", "import { Comma } from '../../tokenizer/index.js';\n\nexport const name = 'LayerList';\nexport const structure = {\n    children: [[\n        'Layer'\n    ]]\n};\n\nexport function parse() {\n    const children = this.createList();\n\n    this.skipSC();\n\n    while (!this.eof) {\n        children.push(this.Layer());\n\n        if (this.lookupTypeNonSC(0) !== Comma) {\n            break;\n        }\n\n        this.skipSC();\n        this.next();\n        this.skipSC();\n    }\n\n    return {\n        type: 'LayerList',\n        loc: this.getLocationFromList(children),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node, () => this.token(Comma, ','));\n}\n", "import {\n    Comma,\n    EOF,\n    Ident,\n    LeftCurlyBracket,\n    LeftParenthesis,\n    Function as FunctionToken,\n    Semicolon\n} from '../../tokenizer/index.js';\n\nexport const name = 'MediaQuery';\nexport const structure = {\n    modifier: [String, null],\n    mediaType: [String, null],\n    condition: ['Condition', null]\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    let modifier = null;\n    let mediaType = null;\n    let condition = null;\n\n    this.skipSC();\n\n    if (this.tokenType === Ident && this.lookupTypeNonSC(1) !== LeftParenthesis) {\n        // [ not | only ]? <media-type>\n        const ident = this.consume(Ident);\n        const identLowerCase = ident.toLowerCase();\n\n        if (identLowerCase === 'not' || identLowerCase === 'only') {\n            this.skipSC();\n            modifier = identLowerCase;\n            mediaType = this.consume(Ident);\n        } else {\n            mediaType = ident;\n        }\n\n        switch (this.lookupTypeNonSC(0)) {\n            case Ident: {\n                // and <media-condition-without-or>\n                this.skipSC();\n                this.eatIdent('and');\n                condition = this.Condition('media');\n                break;\n            }\n\n            case LeftCurlyBracket:\n            case Semicolon:\n            case Comma:\n            case EOF:\n                break;\n\n            default:\n                this.error('Identifier or parenthesis is expected');\n        }\n    } else {\n        switch (this.tokenType) {\n            case Ident:\n            case LeftParenthesis:\n            case FunctionToken: {\n                // <media-condition>\n                condition = this.Condition('media');\n                break;\n            }\n\n            case LeftCurlyBracket:\n            case Semicolon:\n            case EOF:\n                break;\n\n            default:\n                this.error('Identifier or parenthesis is expected');\n        }\n    }\n\n    return {\n        type: 'MediaQuery',\n        loc: this.getLocation(start, this.tokenStart),\n        modifier,\n        mediaType,\n        condition\n    };\n}\n\nexport function generate(node) {\n    if (node.mediaType) {\n        if (node.modifier) {\n            this.token(Ident, node.modifier);\n        }\n\n        this.token(Ident, node.mediaType);\n\n        if (node.condition) {\n            this.token(Ident, 'and');\n            this.node(node.condition);\n        }\n    } else if (node.condition) {\n        this.node(node.condition);\n    }\n}\n\n", "import { Comma } from '../../tokenizer/index.js';\n\nexport const name = 'MediaQueryList';\nexport const structure = {\n    children: [[\n        'MediaQuery'\n    ]]\n};\n\nexport function parse() {\n    const children = this.createList();\n\n    this.skipSC();\n\n    while (!this.eof) {\n        children.push(this.MediaQuery());\n\n        if (this.tokenType !== Comma) {\n            break;\n        }\n\n        this.next();\n    }\n\n    return {\n        type: 'MediaQueryList',\n        loc: this.getLocationFromList(children),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node, () => this.token(Comma, ','));\n}\n", "import { Delim } from '../../tokenizer/index.js';\n\nconst AMPERSAND = 0x0026;       // U+0026 AMPERSAND (&)\n\nexport const name = 'NestingSelector';\nexport const structure = {\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    this.eatDelim(AMPERSAND);\n\n    return {\n        type: 'NestingSelector',\n        loc: this.getLocation(start, this.tokenStart)\n    };\n}\n\nexport function generate() {\n    this.token(Delim, '&');\n}\n", "import { Ident } from '../../tokenizer/index.js';\n\nexport const name = 'Nth';\nexport const structure = {\n    nth: ['AnPlusB', 'Identifier'],\n    selector: ['SelectorList', null]\n};\n\nexport function parse() {\n    this.skipSC();\n\n    const start = this.tokenStart;\n    let end = start;\n    let selector = null;\n    let nth;\n\n    if (this.lookupValue(0, 'odd') || this.lookupValue(0, 'even')) {\n        nth = this.Identifier();\n    } else {\n        nth = this.AnPlusB();\n    }\n\n    end = this.tokenStart;\n    this.skipSC();\n\n    if (this.lookupValue(0, 'of')) {\n        this.next();\n\n        selector = this.SelectorList();\n        end = this.tokenStart;\n    }\n\n    return {\n        type: 'Nth',\n        loc: this.getLocation(start, end),\n        nth,\n        selector\n    };\n}\n\nexport function generate(node) {\n    this.node(node.nth);\n    if (node.selector !== null) {\n        this.token(Ident, 'of');\n        this.node(node.selector);\n    }\n}\n", "import { Number as NumberToken } from '../../tokenizer/index.js';\n\nexport const name = 'Number';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    return {\n        type: 'Number',\n        loc: this.getLocation(this.tokenStart, this.tokenEnd),\n        value: this.consume(NumberToken)\n    };\n}\n\nexport function generate(node) {\n    this.token(NumberToken, node.value);\n}\n", "// '/' | '*' | ',' | ':' | '+' | '-'\nexport const name = 'Operator';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    this.next();\n\n    return {\n        type: 'Operator',\n        loc: this.getLocation(start, this.tokenStart),\n        value: this.substrToCursor(start)\n    };\n}\n\nexport function generate(node) {\n    this.tokenize(node.value);\n}\n", "import {\n    LeftParenthesis,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'Parentheses';\nexport const structure = {\n    children: [[]]\n};\n\nexport function parse(readSequence, recognizer) {\n    const start = this.tokenStart;\n    let children = null;\n\n    this.eat(LeftParenthesis);\n\n    children = readSequence.call(this, recognizer);\n\n    if (!this.eof) {\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'Parentheses',\n        loc: this.getLocation(start, this.tokenStart),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.token(LeftParenthesis, '(');\n    this.children(node);\n    this.token(RightParenthesis, ')');\n}\n", "import { Percentage } from '../../tokenizer/index.js';\n\nexport const name = 'Percentage';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    return {\n        type: 'Percentage',\n        loc: this.getLocation(this.tokenStart, this.tokenEnd),\n        value: this.consumeNumber(Percentage)\n    };\n}\n\nexport function generate(node) {\n    this.token(Percentage, node.value + '%');\n}\n", "import {\n    Ident,\n    Function as FunctionToken,\n    Colon,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\n\nexport const name = 'PseudoClassSelector';\nexport const walkContext = 'function';\nexport const structure = {\n    name: String,\n    children: [['Raw'], null]\n};\n\n// : [ <ident> | <function-token> <any-value>? ) ]\nexport function parse() {\n    const start = this.tokenStart;\n    let children = null;\n    let name;\n    let nameLowerCase;\n\n    this.eat(Colon);\n\n    if (this.tokenType === FunctionToken) {\n        name = this.consumeFunctionName();\n        nameLowerCase = name.toLowerCase();\n\n        if (this.lookupNonWSType(0) == RightParenthesis) {\n            children = this.createList();\n        } else if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {\n            this.skipSC();\n            children = this.pseudo[nameLowerCase].call(this);\n            this.skipSC();\n        } else {\n            children = this.createList();\n            children.push(\n                this.Raw(null, false)\n            );\n        }\n\n        this.eat(RightParenthesis);\n    } else {\n        name = this.consume(Ident);\n    }\n\n    return {\n        type: 'PseudoClassSelector',\n        loc: this.getLocation(start, this.tokenStart),\n        name,\n        children\n    };\n}\n\nexport function generate(node) {\n    this.token(Colon, ':');\n\n    if (node.children === null) {\n        this.token(Ident, node.name);\n    } else {\n        this.token(FunctionToken, node.name + '(');\n        this.children(node);\n        this.token(RightParenthesis, ')');\n    }\n}\n", "import {\n    Ident,\n    Function as FunctionToken,\n    Colon,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'PseudoElementSelector';\nexport const walkContext = 'function';\nexport const structure = {\n    name: String,\n    children: [['Raw'], null]\n};\n\n// :: [ <ident> | <function-token> <any-value>? ) ]\nexport function parse() {\n    const start = this.tokenStart;\n    let children = null;\n    let name;\n    let nameLowerCase;\n\n    this.eat(Colon);\n    this.eat(Colon);\n\n    if (this.tokenType === FunctionToken) {\n        name = this.consumeFunctionName();\n        nameLowerCase = name.toLowerCase();\n\n        if (this.lookupNonWSType(0) == RightParenthesis) {\n            children = this.createList();\n        } else if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {\n            this.skipSC();\n            children = this.pseudo[nameLowerCase].call(this);\n            this.skipSC();\n        } else {\n            children = this.createList();\n            children.push(\n                this.Raw(null, false)\n            );\n        }\n\n        this.eat(RightParenthesis);\n    } else {\n        name = this.consume(Ident);\n    }\n\n    return {\n        type: 'PseudoElementSelector',\n        loc: this.getLocation(start, this.tokenStart),\n        name,\n        children\n    };\n}\n\nexport function generate(node) {\n    this.token(Colon, ':');\n    this.token(Colon, ':');\n\n    if (node.children === null) {\n        this.token(Ident, node.name);\n    } else {\n        this.token(FunctionToken, node.name + '(');\n        this.children(node);\n        this.token(RightParenthesis, ')');\n    }\n}\n", "import {\n    Delim,\n    Number as NumberToken,\n    Function as FunctionToken\n} from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F;  // U+002F SOLIDUS (/)\n\n// Media Queries Level 3 defines terms of <ratio> as a positive (not zero or negative)\n// integers (see https://drafts.csswg.org/mediaqueries-3/#values)\n// However, Media Queries Level 4 removes any definition of values\n// (see https://drafts.csswg.org/mediaqueries-4/#values) and refers to\n// CSS Values and Units for detail. In CSS Values and Units Level 4 a <ratio>\n// definition was added (see https://drafts.csswg.org/css-values-4/#ratios) which\n// defines ratio as \"<number [0,\u221E]> [ / <number [0,\u221E]> ]?\" and based on it\n// any constrains on terms were removed. Parser also doesn't test numbers\n// in any way to make possible for linting and fixing them by the tools using CSSTree.\n// An additional syntax examination may be applied by a lexer.\nfunction consumeTerm() {\n    this.skipSC();\n\n    switch (this.tokenType) {\n        case NumberToken:\n            return this.Number();\n\n        case FunctionToken:\n            return this.Function(this.readSequence, this.scope.Value);\n\n        default:\n            this.error('Number of function is expected');\n    }\n}\n\nexport const name = 'Ratio';\nexport const structure = {\n    left: ['Number', 'Function'],\n    right: ['Number', 'Function', null]\n};\n\n// <number [0,\u221E]> [ / <number [0,\u221E]> ]?\nexport function parse() {\n    const start = this.tokenStart;\n    const left = consumeTerm.call(this);\n    let right = null;\n\n    this.skipSC();\n    if (this.isDelim(SOLIDUS)) {\n        this.eatDelim(SOLIDUS);\n        right = consumeTerm.call(this);\n    }\n\n    return {\n        type: 'Ratio',\n        loc: this.getLocation(start, this.tokenStart),\n        left,\n        right\n    };\n}\n\nexport function generate(node) {\n    this.node(node.left);\n    this.token(Delim, '/');\n    if (node.right) {\n        this.node(node.right);\n    } else {\n        this.node(NumberToken, 1);\n    }\n}\n", "import { WhiteSpace } from '../../tokenizer/index.js';\n\nfunction getOffsetExcludeWS() {\n    if (this.tokenIndex > 0) {\n        if (this.lookupType(-1) === WhiteSpace) {\n            return this.tokenIndex > 1\n                ? this.getTokenStart(this.tokenIndex - 1)\n                : this.firstCharOffset;\n        }\n    }\n\n    return this.tokenStart;\n}\n\nexport const name = 'Raw';\nexport const structure = {\n    value: String\n};\n\nexport function parse(consumeUntil, excludeWhiteSpace) {\n    const startOffset = this.getTokenStart(this.tokenIndex);\n    let endOffset;\n\n    this.skipUntilBalanced(this.tokenIndex, consumeUntil || this.consumeUntilBalanceEnd);\n\n    if (excludeWhiteSpace && this.tokenStart > startOffset) {\n        endOffset = getOffsetExcludeWS.call(this);\n    } else {\n        endOffset = this.tokenStart;\n    }\n\n    return {\n        type: 'Raw',\n        loc: this.getLocation(startOffset, endOffset),\n        value: this.substring(startOffset, endOffset)\n    };\n}\n\nexport function generate(node) {\n    this.tokenize(node.value);\n}\n", "import { LeftCurlyBracket } from '../../tokenizer/index.js';\n\nfunction consumeRaw() {\n    return this.Raw(this.consumeUntilLeftCurlyBracket, true);\n}\n\nfunction consumePrelude() {\n    const prelude = this.SelectorList();\n\n    if (prelude.type !== 'Raw' &&\n        this.eof === false &&\n        this.tokenType !== LeftCurlyBracket) {\n        this.error();\n    }\n\n    return prelude;\n}\n\nexport const name = 'Rule';\nexport const walkContext = 'rule';\nexport const structure = {\n    prelude: ['SelectorList', 'Raw'],\n    block: ['Block']\n};\n\nexport function parse() {\n    const startToken = this.tokenIndex;\n    const startOffset = this.tokenStart;\n    let prelude;\n    let block;\n\n    if (this.parseRulePrelude) {\n        prelude = this.parseWithFallback(consumePrelude, consumeRaw);\n    } else {\n        prelude = consumeRaw.call(this, startToken);\n    }\n\n    block = this.Block(true);\n\n    return {\n        type: 'Rule',\n        loc: this.getLocation(startOffset, this.tokenStart),\n        prelude,\n        block\n    };\n}\nexport function generate(node) {\n    this.node(node.prelude);\n    this.node(node.block);\n}\n\n", "import {\n    Ident,\n    LeftParenthesis,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'Scope';\nexport const structure = {\n    root: ['SelectorList', 'Raw', null],\n    limit: ['SelectorList', 'Raw', null]\n};\n\nexport function parse() {\n    let root = null;\n    let limit = null;\n\n    this.skipSC();\n\n    const startOffset = this.tokenStart;\n    if (this.tokenType === LeftParenthesis) {\n        this.next();\n        this.skipSC();\n        root = this.parseWithFallback(\n            this.SelectorList,\n            () => this.Raw(false, true)\n        );\n        this.skipSC();\n        this.eat(RightParenthesis);\n    }\n\n    if (this.lookupNonWSType(0) === Ident) {\n        this.skipSC();\n        this.eatIdent('to');\n        this.skipSC();\n        this.eat(LeftParenthesis);\n        this.skipSC();\n        limit = this.parseWithFallback(\n            this.SelectorList,\n            () => this.Raw(false, true)\n        );\n        this.skipSC();\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'Scope',\n        loc: this.getLocation(startOffset, this.tokenStart),\n        root,\n        limit\n    };\n}\n\nexport function generate(node) {\n    if (node.root) {\n        this.token(LeftParenthesis, '(');\n        this.node(node.root);\n        this.token(RightParenthesis, ')');\n    }\n\n    if (node.limit) {\n        this.token(Ident, 'to');\n        this.token(LeftParenthesis, '(');\n        this.node(node.limit);\n        this.token(RightParenthesis, ')');\n    }\n}\n", "export const name = 'Selector';\nexport const structure = {\n    children: [[\n        'TypeSelector',\n        'IdSelector',\n        'ClassSelector',\n        'AttributeSelector',\n        'PseudoClassSelector',\n        'PseudoElementSelector',\n        'Combinator'\n    ]]\n};\n\nexport function parse() {\n    const children = this.readSequence(this.scope.Selector);\n\n    // nothing were consumed\n    if (this.getFirstListNode(children) === null) {\n        this.error('Selector is expected');\n    }\n\n    return {\n        type: 'Selector',\n        loc: this.getLocationFromList(children),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node);\n}\n", "import { Comma } from '../../tokenizer/index.js';\n\nexport const name = 'SelectorList';\nexport const walkContext = 'selector';\nexport const structure = {\n    children: [[\n        'Selector',\n        'Raw'\n    ]]\n};\n\nexport function parse() {\n    const children = this.createList();\n\n    while (!this.eof) {\n        children.push(this.Selector());\n\n        if (this.tokenType === Comma) {\n            this.next();\n            continue;\n        }\n\n        break;\n    }\n\n    return {\n        type: 'SelectorList',\n        loc: this.getLocationFromList(children),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node, () => this.token(Comma, ','));\n}\n", "import {\n    isHexDigit,\n    isWhiteSpace,\n    isValidEscape,\n    consumeEscaped,\n    decodeEscaped\n} from '../tokenizer/index.js';\n\nconst REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\\)\nconst QUOTATION_MARK = 0x0022;  // \"\nconst APOSTROPHE = 0x0027;      // '\n\nexport function decode(str) {\n    const len = str.length;\n    const firstChar = str.charCodeAt(0);\n    const start = firstChar === QUOTATION_MARK || firstChar === APOSTROPHE ? 1 : 0;\n    const end = start === 1 && len > 1 && str.charCodeAt(len - 1) === firstChar ? len - 2 : len - 1;\n    let decoded = '';\n\n    for (let i = start; i <= end; i++) {\n        let code = str.charCodeAt(i);\n\n        if (code === REVERSE_SOLIDUS) {\n            // special case at the ending\n            if (i === end) {\n                // if the next input code point is EOF, do nothing\n                // otherwise include last quote as escaped\n                if (i !== len - 1) {\n                    decoded = str.substr(i + 1);\n                }\n                break;\n            }\n\n            code = str.charCodeAt(++i);\n\n            // consume escaped\n            if (isValidEscape(REVERSE_SOLIDUS, code)) {\n                const escapeStart = i - 1;\n                const escapeEnd = consumeEscaped(str, escapeStart);\n\n                i = escapeEnd - 1;\n                decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));\n            } else {\n                // \\r\\n\n                if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {\n                    i++;\n                }\n            }\n        } else {\n            decoded += str[i];\n        }\n    }\n\n    return decoded;\n}\n\n// https://drafts.csswg.org/cssom/#serialize-a-string\n// \u00A7 2.1. Common Serializing Idioms\nexport function encode(str, apostrophe) {\n    const quote = apostrophe ? '\\'' : '\"';\n    const quoteCode = apostrophe ? APOSTROPHE : QUOTATION_MARK;\n    let encoded = '';\n    let wsBeforeHexIsNeeded = false;\n\n    for (let i = 0; i < str.length; i++) {\n        const code = str.charCodeAt(i);\n\n        // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).\n        if (code === 0x0000) {\n            encoded += '\\uFFFD';\n            continue;\n        }\n\n        // If the character is in the range [\\1-\\1f] (U+0001 to U+001F) or is U+007F,\n        // the character escaped as code point.\n        // Note: Do not compare with 0x0001 since 0x0000 is precessed before\n        if (code <= 0x001f || code === 0x007F) {\n            encoded += '\\\\' + code.toString(16);\n            wsBeforeHexIsNeeded = true;\n            continue;\n        }\n\n        // If the character is '\"' (U+0022) or \"\\\" (U+005C), the escaped character.\n        if (code === quoteCode || code === REVERSE_SOLIDUS) {\n            encoded += '\\\\' + str.charAt(i);\n            wsBeforeHexIsNeeded = false;\n        } else {\n            if (wsBeforeHexIsNeeded && (isHexDigit(code) || isWhiteSpace(code))) {\n                encoded += ' ';\n            }\n\n            // Otherwise, the character itself.\n            encoded += str.charAt(i);\n            wsBeforeHexIsNeeded = false;\n        }\n    }\n\n    return quote + encoded + quote;\n}\n", "import { String as StringToken } from '../../tokenizer/index.js';\nimport { decode, encode } from '../../utils/string.js';\n\nexport const name = 'String';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    return {\n        type: 'String',\n        loc: this.getLocation(this.tokenStart, this.tokenEnd),\n        value: decode(this.consume(StringToken))\n    };\n}\n\nexport function generate(node) {\n    this.token(StringToken, encode(node.value));\n}\n", "import {\n    WhiteSpace,\n    Comment,\n    AtKeyword,\n    CDO,\n    CDC\n} from '../../tokenizer/index.js';\n\nconst EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)\n\nfunction consumeRaw() {\n    return this.Raw(null, false);\n}\n\nexport const name = 'StyleSheet';\nexport const walkContext = 'stylesheet';\nexport const structure = {\n    children: [[\n        'Comment',\n        'CDO',\n        'CDC',\n        'Atrule',\n        'Rule',\n        'Raw'\n    ]]\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    const children = this.createList();\n    let child;\n\n    scan:\n    while (!this.eof) {\n        switch (this.tokenType) {\n            case WhiteSpace:\n                this.next();\n                continue;\n\n            case Comment:\n                // ignore comments except exclamation comments (i.e. /*! .. */) on top level\n                if (this.charCodeAt(this.tokenStart + 2) !== EXCLAMATIONMARK) {\n                    this.next();\n                    continue;\n                }\n\n                child = this.Comment();\n                break;\n\n            case CDO: // <!--\n                child = this.CDO();\n                break;\n\n            case CDC: // -->\n                child = this.CDC();\n                break;\n\n            // CSS Syntax Module Level 3\n            // \u00A72.2 Error handling\n            // At the \"top level\" of a stylesheet, an <at-keyword-token> starts an at-rule.\n            case AtKeyword:\n                child = this.parseWithFallback(this.Atrule, consumeRaw);\n                break;\n\n            // Anything else starts a qualified rule ...\n            default:\n                child = this.parseWithFallback(this.Rule, consumeRaw);\n        }\n\n        children.push(child);\n    }\n\n    return {\n        type: 'StyleSheet',\n        loc: this.getLocation(start, this.tokenStart),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node);\n}\n", "import {\n    LeftParenthesis,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'SupportsDeclaration';\nexport const structure = {\n    declaration: 'Declaration'\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    this.eat(LeftParenthesis);\n    this.skipSC();\n\n    const declaration = this.Declaration();\n\n    if (!this.eof) {\n        this.eat(RightParenthesis);\n    }\n\n    return {\n        type: 'SupportsDeclaration',\n        loc: this.getLocation(start, this.tokenStart),\n        declaration\n    };\n}\n\nexport function generate(node) {\n    this.token(LeftParenthesis, '(');\n    this.node(node.declaration);\n    this.token(RightParenthesis, ')');\n}\n", "import { Ident } from '../../tokenizer/index.js';\n\nconst ASTERISK = 0x002A;     // U+002A ASTERISK (*)\nconst VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)\n\nfunction eatIdentifierOrAsterisk() {\n    if (this.tokenType !== Ident &&\n        this.isDelim(ASTERISK) === false) {\n        this.error('Identifier or asterisk is expected');\n    }\n\n    this.next();\n}\n\nexport const name = 'TypeSelector';\nexport const structure = {\n    name: String\n};\n\n// ident\n// ident|ident\n// ident|*\n// *\n// *|ident\n// *|*\n// |ident\n// |*\nexport function parse() {\n    const start = this.tokenStart;\n\n    if (this.isDelim(VERTICALLINE)) {\n        this.next();\n        eatIdentifierOrAsterisk.call(this);\n    } else {\n        eatIdentifierOrAsterisk.call(this);\n\n        if (this.isDelim(VERTICALLINE)) {\n            this.next();\n            eatIdentifierOrAsterisk.call(this);\n        }\n    }\n\n    return {\n        type: 'TypeSelector',\n        loc: this.getLocation(start, this.tokenStart),\n        name: this.substrToCursor(start)\n    };\n}\n\nexport function generate(node) {\n    this.tokenize(node.name);\n}\n", "import {\n    isHexDigit,\n    Ident,\n    Number,\n    Dimension\n} from '../../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B;     // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D;  // U+002D HYPHEN-MINUS (-)\nconst QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)\n\nfunction eatHexSequence(offset, allowDash) {\n    let len = 0;\n\n    for (let pos = this.tokenStart + offset; pos < this.tokenEnd; pos++) {\n        const code = this.charCodeAt(pos);\n\n        if (code === HYPHENMINUS && allowDash && len !== 0) {\n            eatHexSequence.call(this, offset + len + 1, false);\n            return -1;\n        }\n\n        if (!isHexDigit(code)) {\n            this.error(\n                allowDash && len !== 0\n                    ? 'Hyphen minus' + (len < 6 ? ' or hex digit' : '') + ' is expected'\n                    : (len < 6 ? 'Hex digit is expected' : 'Unexpected input'),\n                pos\n            );\n        }\n\n        if (++len > 6) {\n            this.error('Too many hex digits', pos);\n        };\n    }\n\n    this.next();\n    return len;\n}\n\nfunction eatQuestionMarkSequence(max) {\n    let count = 0;\n\n    while (this.isDelim(QUESTIONMARK)) {\n        if (++count > max) {\n            this.error('Too many question marks');\n        }\n\n        this.next();\n    }\n}\n\nfunction startsWith(code) {\n    if (this.charCodeAt(this.tokenStart) !== code) {\n        this.error((code === PLUSSIGN ? 'Plus sign' : 'Hyphen minus') + ' is expected');\n    }\n}\n\n// https://drafts.csswg.org/css-syntax/#urange\n// Informally, the <urange> production has three forms:\n// U+0001\n//      Defines a range consisting of a single code point, in this case the code point \"1\".\n// U+0001-00ff\n//      Defines a range of codepoints between the first and the second value, in this case\n//      the range between \"1\" and \"ff\" (255 in decimal) inclusive.\n// U+00??\n//      Defines a range of codepoints where the \"?\" characters range over all hex digits,\n//      in this case defining the same as the value U+0000-00ff.\n// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat \"?\" as a hexadecimal digit).\n//\n// <urange> =\n//   u '+' <ident-token> '?'* |\n//   u <dimension-token> '?'* |\n//   u <number-token> '?'* |\n//   u <number-token> <dimension-token> |\n//   u <number-token> <number-token> |\n//   u '+' '?'+\nfunction scanUnicodeRange() {\n    let hexLength = 0;\n\n    switch (this.tokenType) {\n        case Number:\n            // u <number-token> '?'*\n            // u <number-token> <dimension-token>\n            // u <number-token> <number-token>\n            hexLength = eatHexSequence.call(this, 1, true);\n\n            if (this.isDelim(QUESTIONMARK)) {\n                eatQuestionMarkSequence.call(this, 6 - hexLength);\n                break;\n            }\n\n            if (this.tokenType === Dimension ||\n                this.tokenType === Number) {\n                startsWith.call(this, HYPHENMINUS);\n                eatHexSequence.call(this, 1, false);\n                break;\n            }\n\n            break;\n\n        case Dimension:\n            // u <dimension-token> '?'*\n            hexLength = eatHexSequence.call(this, 1, true);\n\n            if (hexLength > 0) {\n                eatQuestionMarkSequence.call(this, 6 - hexLength);\n            }\n\n            break;\n\n        default:\n            // u '+' <ident-token> '?'*\n            // u '+' '?'+\n            this.eatDelim(PLUSSIGN);\n\n            if (this.tokenType === Ident) {\n                hexLength = eatHexSequence.call(this, 0, true);\n                if (hexLength > 0) {\n                    eatQuestionMarkSequence.call(this, 6 - hexLength);\n                }\n                break;\n            }\n\n            if (this.isDelim(QUESTIONMARK)) {\n                this.next();\n                eatQuestionMarkSequence.call(this, 5);\n                break;\n            }\n\n            this.error('Hex digit or question mark is expected');\n    }\n}\n\nexport const name = 'UnicodeRange';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n\n    // U or u\n    this.eatIdent('u');\n    scanUnicodeRange.call(this);\n\n    return {\n        type: 'UnicodeRange',\n        loc: this.getLocation(start, this.tokenStart),\n        value: this.substrToCursor(start)\n    };\n}\n\nexport function generate(node) {\n    this.tokenize(node.value);\n}\n", "import {\n    isHexDigit,\n    isWhiteSpace,\n    isValidEscape,\n    consumeEscaped,\n    decodeEscaped\n} from '../tokenizer/index.js';\n\nconst SPACE = 0x0020;            // U+0020 SPACE\nconst REVERSE_SOLIDUS = 0x005c;  // U+005C REVERSE SOLIDUS (\\)\nconst QUOTATION_MARK = 0x0022;   // \"\nconst APOSTROPHE = 0x0027;       // '\nconst LEFTPARENTHESIS = 0x0028;  // U+0028 LEFT PARENTHESIS (()\nconst RIGHTPARENTHESIS = 0x0029; // U+0029 RIGHT PARENTHESIS ())\n\nexport function decode(str) {\n    const len = str.length;\n    let start = 4; // length of \"url(\"\n    let end = str.charCodeAt(len - 1) === RIGHTPARENTHESIS ? len - 2 : len - 1;\n    let decoded = '';\n\n    while (start < end && isWhiteSpace(str.charCodeAt(start))) {\n        start++;\n    }\n\n    while (start < end && isWhiteSpace(str.charCodeAt(end))) {\n        end--;\n    }\n\n    for (let i = start; i <= end; i++) {\n        let code = str.charCodeAt(i);\n\n        if (code === REVERSE_SOLIDUS) {\n            // special case at the ending\n            if (i === end) {\n                // if the next input code point is EOF, do nothing\n                // otherwise include last left parenthesis as escaped\n                if (i !== len - 1) {\n                    decoded = str.substr(i + 1);\n                }\n                break;\n            }\n\n            code = str.charCodeAt(++i);\n\n            // consume escaped\n            if (isValidEscape(REVERSE_SOLIDUS, code)) {\n                const escapeStart = i - 1;\n                const escapeEnd = consumeEscaped(str, escapeStart);\n\n                i = escapeEnd - 1;\n                decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));\n            } else {\n                // \\r\\n\n                if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {\n                    i++;\n                }\n            }\n        } else {\n            decoded += str[i];\n        }\n    }\n\n    return decoded;\n}\n\nexport function encode(str) {\n    let encoded = '';\n    let wsBeforeHexIsNeeded = false;\n\n    for (let i = 0; i < str.length; i++) {\n        const code = str.charCodeAt(i);\n\n        // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).\n        if (code === 0x0000) {\n            encoded += '\\uFFFD';\n            continue;\n        }\n\n        // If the character is in the range [\\1-\\1f] (U+0001 to U+001F) or is U+007F,\n        // the character escaped as code point.\n        // Note: Do not compare with 0x0001 since 0x0000 is precessed before\n        if (code <= 0x001f || code === 0x007F) {\n            encoded += '\\\\' + code.toString(16);\n            wsBeforeHexIsNeeded = true;\n            continue;\n        }\n\n        if (code === SPACE ||\n            code === REVERSE_SOLIDUS ||\n            code === QUOTATION_MARK ||\n            code === APOSTROPHE ||\n            code === LEFTPARENTHESIS ||\n            code === RIGHTPARENTHESIS) {\n            encoded += '\\\\' + str.charAt(i);\n            wsBeforeHexIsNeeded = false;\n        } else {\n            if (wsBeforeHexIsNeeded && isHexDigit(code)) {\n                encoded += ' ';\n            }\n\n            encoded += str.charAt(i);\n            wsBeforeHexIsNeeded = false;\n        }\n    }\n\n    return 'url(' + encoded + ')';\n}\n", "import * as url from '../../utils/url.js';\nimport * as string from '../../utils/string.js';\nimport {\n    Function as FunctionToken,\n    String as StringToken,\n    Url,\n    RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'Url';\nexport const structure = {\n    value: String\n};\n\n// <url-token> | <function-token> <string> )\nexport function parse() {\n    const start = this.tokenStart;\n    let value;\n\n    switch (this.tokenType) {\n        case Url:\n            value = url.decode(this.consume(Url));\n            break;\n\n        case FunctionToken:\n            if (!this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')) {\n                this.error('Function name must be `url`');\n            }\n\n            this.eat(FunctionToken);\n            this.skipSC();\n            value = string.decode(this.consume(StringToken));\n            this.skipSC();\n            if (!this.eof) {\n                this.eat(RightParenthesis);\n            }\n            break;\n\n        default:\n            this.error('Url or Function is expected');\n    }\n\n    return {\n        type: 'Url',\n        loc: this.getLocation(start, this.tokenStart),\n        value\n    };\n}\n\nexport function generate(node) {\n    this.token(Url, url.encode(node.value));\n}\n", "export const name = 'Value';\nexport const structure = {\n    children: [[]]\n};\n\nexport function parse() {\n    const start = this.tokenStart;\n    const children = this.readSequence(this.scope.Value);\n\n    return {\n        type: 'Value',\n        loc: this.getLocation(start, this.tokenStart),\n        children\n    };\n}\n\nexport function generate(node) {\n    this.children(node);\n}\n", "import { WhiteSpace } from '../../tokenizer/index.js';\n\nconst SPACE = Object.freeze({\n    type: 'WhiteSpace',\n    loc: null,\n    value: ' '\n});\n\nexport const name = 'WhiteSpace';\nexport const structure = {\n    value: String\n};\n\nexport function parse() {\n    this.eat(WhiteSpace);\n    return SPACE;\n\n    // return {\n    //     type: 'WhiteSpace',\n    //     loc: this.getLocation(this.tokenStart, this.tokenEnd),\n    //     value: this.consume(WHITESPACE)\n    // };\n}\n\nexport function generate(node) {\n    this.token(WhiteSpace, node.value);\n}\n", "import * as node from '../node/index-generate.js';\n\nexport default {\n    node\n};\n", "import { createGenerator } from './create.js';\nimport config from '../syntax/config/generator.js';\n\nexport default createGenerator(config);\n", "//\n//                              list\n//                            \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n//             \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500head \u2502\n//             \u2502              \u2502 tail\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n//             \u2502              \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518              \u2502\n//             \u25BC                                    \u25BC\n//            item        item        item        item\n//          \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n//  null \u25C0\u2500\u2500\u253C\u2500prev \u2502\u25C0\u2500\u2500\u2500\u253C\u2500prev \u2502\u25C0\u2500\u2500\u2500\u253C\u2500prev \u2502\u25C0\u2500\u2500\u2500\u253C\u2500prev \u2502\n//          \u2502 next\u2500\u253C\u2500\u2500\u2500\u25B6\u2502 next\u2500\u253C\u2500\u2500\u2500\u25B6\u2502 next\u2500\u253C\u2500\u2500\u2500\u25B6\u2502 next\u2500\u253C\u2500\u2500\u25B6 null\n//          \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n//          \u2502 data \u2502    \u2502 data \u2502    \u2502 data \u2502    \u2502 data \u2502\n//          \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n//\n\nlet releasedCursors = null;\n\nexport class List {\n    static createItem(data) {\n        return {\n            prev: null,\n            next: null,\n            data\n        };\n    }\n\n    constructor() {\n        this.head = null;\n        this.tail = null;\n        this.cursor = null;\n    }\n    createItem(data) {\n        return List.createItem(data);\n    }\n\n    // cursor helpers\n    allocateCursor(prev, next) {\n        let cursor;\n\n        if (releasedCursors !== null) {\n            cursor = releasedCursors;\n            releasedCursors = releasedCursors.cursor;\n            cursor.prev = prev;\n            cursor.next = next;\n            cursor.cursor = this.cursor;\n        } else {\n            cursor = {\n                prev,\n                next,\n                cursor: this.cursor\n            };\n        }\n\n        this.cursor = cursor;\n\n        return cursor;\n    }\n    releaseCursor() {\n        const { cursor } = this;\n\n        this.cursor = cursor.cursor;\n        cursor.prev = null;\n        cursor.next = null;\n        cursor.cursor = releasedCursors;\n        releasedCursors = cursor;\n    }\n    updateCursors(prevOld, prevNew, nextOld, nextNew) {\n        let { cursor } = this;\n\n        while (cursor !== null) {\n            if (cursor.prev === prevOld) {\n                cursor.prev = prevNew;\n            }\n\n            if (cursor.next === nextOld) {\n                cursor.next = nextNew;\n            }\n\n            cursor = cursor.cursor;\n        }\n    }\n    *[Symbol.iterator]() {\n        for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n            yield cursor.data;\n        }\n    }\n\n    // getters\n    get size() {\n        let size = 0;\n\n        for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n            size++;\n        }\n\n        return size;\n    }\n    get isEmpty() {\n        return this.head === null;\n    }\n    get first() {\n        return this.head && this.head.data;\n    }\n    get last() {\n        return this.tail && this.tail.data;\n    }\n\n    // convertors\n    fromArray(array) {\n        let cursor = null;\n        this.head = null;\n\n        for (let data of array) {\n            const item = List.createItem(data);\n\n            if (cursor !== null) {\n                cursor.next = item;\n            } else {\n                this.head = item;\n            }\n\n            item.prev = cursor;\n            cursor = item;\n        }\n\n        this.tail = cursor;\n        return this;\n    }\n    toArray() {\n        return [...this];\n    }\n    toJSON() {\n        return [...this];\n    }\n\n    // array-like methods\n    forEach(fn, thisArg = this) {\n        // push cursor\n        const cursor = this.allocateCursor(null, this.head);\n\n        while (cursor.next !== null) {\n            const item = cursor.next;\n            cursor.next = item.next;\n            fn.call(thisArg, item.data, item, this);\n        }\n\n        // pop cursor\n        this.releaseCursor();\n    }\n    forEachRight(fn, thisArg = this) {\n        // push cursor\n        const cursor = this.allocateCursor(this.tail, null);\n\n        while (cursor.prev !== null) {\n            const item = cursor.prev;\n            cursor.prev = item.prev;\n            fn.call(thisArg, item.data, item, this);\n        }\n\n        // pop cursor\n        this.releaseCursor();\n    }\n    reduce(fn, initialValue, thisArg = this) {\n        // push cursor\n        let cursor = this.allocateCursor(null, this.head);\n        let acc = initialValue;\n        let item;\n\n        while (cursor.next !== null) {\n            item = cursor.next;\n            cursor.next = item.next;\n\n            acc = fn.call(thisArg, acc, item.data, item, this);\n        }\n\n        // pop cursor\n        this.releaseCursor();\n\n        return acc;\n    }\n    reduceRight(fn, initialValue, thisArg = this) {\n        // push cursor\n        let cursor = this.allocateCursor(this.tail, null);\n        let acc = initialValue;\n        let item;\n\n        while (cursor.prev !== null) {\n            item = cursor.prev;\n            cursor.prev = item.prev;\n\n            acc = fn.call(thisArg, acc, item.data, item, this);\n        }\n\n        // pop cursor\n        this.releaseCursor();\n\n        return acc;\n    }\n    some(fn, thisArg = this) {\n        for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n            if (fn.call(thisArg, cursor.data, cursor, this)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n    map(fn, thisArg = this) {\n        const result = new List();\n\n        for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n            result.appendData(fn.call(thisArg, cursor.data, cursor, this));\n        }\n\n        return result;\n    }\n    filter(fn, thisArg = this) {\n        const result = new List();\n\n        for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n            if (fn.call(thisArg, cursor.data, cursor, this)) {\n                result.appendData(cursor.data);\n            }\n        }\n\n        return result;\n    }\n\n    nextUntil(start, fn, thisArg = this) {\n        if (start === null) {\n            return;\n        }\n\n        // push cursor\n        const cursor = this.allocateCursor(null, start);\n\n        while (cursor.next !== null) {\n            const item = cursor.next;\n            cursor.next = item.next;\n            if (fn.call(thisArg, item.data, item, this)) {\n                break;\n            }\n        }\n\n        // pop cursor\n        this.releaseCursor();\n    }\n    prevUntil(start, fn, thisArg = this) {\n        if (start === null) {\n            return;\n        }\n\n        // push cursor\n        const cursor = this.allocateCursor(start, null);\n\n        while (cursor.prev !== null) {\n            const item = cursor.prev;\n            cursor.prev = item.prev;\n            if (fn.call(thisArg, item.data, item, this)) {\n                break;\n            }\n        }\n\n        // pop cursor\n        this.releaseCursor();\n    }\n\n    // mutation\n    clear() {\n        this.head = null;\n        this.tail = null;\n    }\n    copy() {\n        const result = new List();\n\n        for (let data of this) {\n            result.appendData(data);\n        }\n\n        return result;\n    }\n    prepend(item) {\n        //      head\n        //    ^\n        // item\n        this.updateCursors(null, item, this.head, item);\n\n        // insert to the beginning of the list\n        if (this.head !== null) {\n            // new item <- first item\n            this.head.prev = item;\n            // new item -> first item\n            item.next = this.head;\n        } else {\n            // if list has no head, then it also has no tail\n            // in this case tail points to the new item\n            this.tail = item;\n        }\n\n        // head always points to new item\n        this.head = item;\n        return this;\n    }\n    prependData(data) {\n        return this.prepend(List.createItem(data));\n    }\n    append(item) {\n        return this.insert(item);\n    }\n    appendData(data) {\n        return this.insert(List.createItem(data));\n    }\n    insert(item, before = null) {\n        if (before !== null) {\n            // prev   before\n            //      ^\n            //     item\n            this.updateCursors(before.prev, item, before, item);\n\n            if (before.prev === null) {\n                // insert to the beginning of list\n                if (this.head !== before) {\n                    throw new Error('before doesn\\'t belong to list');\n                }\n                // since head points to before therefore list doesn't empty\n                // no need to check tail\n                this.head = item;\n                before.prev = item;\n                item.next = before;\n                this.updateCursors(null, item);\n            } else {\n                // insert between two items\n                before.prev.next = item;\n                item.prev = before.prev;\n                before.prev = item;\n                item.next = before;\n            }\n        } else {\n            // tail\n            //      ^\n            //      item\n            this.updateCursors(this.tail, item, null, item);\n\n            // insert to the ending of the list\n            if (this.tail !== null) {\n                // last item -> new item\n                this.tail.next = item;\n                // last item <- new item\n                item.prev = this.tail;\n            } else {\n                // if list has no tail, then it also has no head\n                // in this case head points to new item\n                this.head = item;\n            }\n\n            // tail always points to new item\n            this.tail = item;\n        }\n\n        return this;\n    }\n    insertData(data, before) {\n        return this.insert(List.createItem(data), before);\n    }\n    remove(item) {\n        //      item\n        //       ^\n        // prev     next\n        this.updateCursors(item, item.prev, item, item.next);\n\n        if (item.prev !== null) {\n            item.prev.next = item.next;\n        } else {\n            if (this.head !== item) {\n                throw new Error('item doesn\\'t belong to list');\n            }\n\n            this.head = item.next;\n        }\n\n        if (item.next !== null) {\n            item.next.prev = item.prev;\n        } else {\n            if (this.tail !== item) {\n                throw new Error('item doesn\\'t belong to list');\n            }\n\n            this.tail = item.prev;\n        }\n\n        item.prev = null;\n        item.next = null;\n\n        return item;\n    }\n    push(data) {\n        this.insert(List.createItem(data));\n    }\n    pop() {\n        return this.tail !== null ? this.remove(this.tail) : null;\n    }\n    unshift(data) {\n        this.prepend(List.createItem(data));\n    }\n    shift() {\n        return this.head !== null ? this.remove(this.head) : null;\n    }\n    prependList(list) {\n        return this.insertList(list, this.head);\n    }\n    appendList(list) {\n        return this.insertList(list);\n    }\n    insertList(list, before) {\n        // ignore empty lists\n        if (list.head === null) {\n            return this;\n        }\n\n        if (before !== undefined && before !== null) {\n            this.updateCursors(before.prev, list.tail, before, list.head);\n\n            // insert in the middle of dist list\n            if (before.prev !== null) {\n                // before.prev <-> list.head\n                before.prev.next = list.head;\n                list.head.prev = before.prev;\n            } else {\n                this.head = list.head;\n            }\n\n            before.prev = list.tail;\n            list.tail.next = before;\n        } else {\n            this.updateCursors(this.tail, list.tail, null, list.head);\n\n            // insert to end of the list\n            if (this.tail !== null) {\n                // if destination list has a tail, then it also has a head,\n                // but head doesn't change\n                // dest tail -> source head\n                this.tail.next = list.head;\n                // dest tail <- source head\n                list.head.prev = this.tail;\n            } else {\n                // if list has no a tail, then it also has no a head\n                // in this case points head to new item\n                this.head = list.head;\n            }\n\n            // tail always start point to new item\n            this.tail = list.tail;\n        }\n\n        list.head = null;\n        list.tail = null;\n        return this;\n    }\n    replace(oldItem, newItemOrList) {\n        if ('head' in newItemOrList) {\n            this.insertList(newItemOrList, oldItem);\n        } else {\n            this.insert(newItemOrList, oldItem);\n        }\n\n        this.remove(oldItem);\n    }\n}\n", "export function createCustomError(name, message) {\n    // use Object.create(), because some VMs prevent setting line/column otherwise\n    // (iOS Safari 10 even throws an exception)\n    const error = Object.create(SyntaxError.prototype);\n    const errorStack = new Error();\n\n    return Object.assign(error, {\n        name,\n        message,\n        get stack() {\n            return (errorStack.stack || '').replace(/^(.+\\n){1,3}/, `${name}: ${message}\\n`);\n        }\n    });\n};\n", "import { createCustomError } from '../utils/create-custom-error.js';\n\nconst MAX_LINE_LENGTH = 100;\nconst OFFSET_CORRECTION = 60;\nconst TAB_REPLACEMENT = '    ';\n\nfunction sourceFragment({ source, line, column, baseLine, baseColumn }, extraLines) {\n    function processLines(start, end) {\n        return lines\n            .slice(start, end)\n            .map((line, idx) =>\n                String(start + idx + 1).padStart(maxNumLength) + ' |' + line\n            ).join('\\n');\n    }\n\n    const prelines = '\\n'.repeat(Math.max(baseLine - 1, 0));\n    const precolumns = ' '.repeat(Math.max(baseColumn - 1, 0));\n    const lines = (prelines + precolumns + source).split(/\\r\\n?|\\n|\\f/);\n    const startLine = Math.max(1, line - extraLines) - 1;\n    const endLine = Math.min(line + extraLines, lines.length + 1);\n    const maxNumLength = Math.max(4, String(endLine).length) + 1;\n    let cutLeft = 0;\n\n    // column correction according to replaced tab before column\n    column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\\t/g) || []).length;\n\n    if (column > MAX_LINE_LENGTH) {\n        cutLeft = column - OFFSET_CORRECTION + 3;\n        column = OFFSET_CORRECTION - 2;\n    }\n\n    for (let i = startLine; i <= endLine; i++) {\n        if (i >= 0 && i < lines.length) {\n            lines[i] = lines[i].replace(/\\t/g, TAB_REPLACEMENT);\n            lines[i] =\n                (cutLeft > 0 && lines[i].length > cutLeft ? '\\u2026' : '') +\n                lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +\n                (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\\u2026' : '');\n        }\n    }\n\n    return [\n        processLines(startLine, line),\n        new Array(column + maxNumLength + 2).join('-') + '^',\n        processLines(line, endLine)\n    ].filter(Boolean)\n        .join('\\n')\n        .replace(/^(\\s+\\d+\\s+\\|\\n)+/, '')\n        .replace(/\\n(\\s+\\d+\\s+\\|)+$/, '');\n}\n\nexport function SyntaxError(message, source, offset, line, column, baseLine = 1, baseColumn = 1) {\n    const error = Object.assign(createCustomError('SyntaxError', message), {\n        source,\n        offset,\n        line,\n        column,\n        sourceFragment(extraLines) {\n            return sourceFragment({ source, line, column, baseLine, baseColumn }, isNaN(extraLines) ? 0 : extraLines);\n        },\n        get formattedMessage() {\n            return (\n                `Parse error: ${message}\\n` +\n                sourceFragment({ source, line, column, baseLine, baseColumn }, 2)\n            );\n        }\n    });\n\n    return error;\n}\n", "import { WhiteSpace, Comment } from '../tokenizer/index.js';\n\nexport function readSequence(recognizer) {\n    const children = this.createList();\n    let space = false;\n    const context = {\n        recognizer\n    };\n\n    while (!this.eof) {\n        switch (this.tokenType) {\n            case Comment:\n                this.next();\n                continue;\n\n            case WhiteSpace:\n                space = true;\n                this.next();\n                continue;\n        }\n\n        let child = recognizer.getNode.call(this, context);\n\n        if (child === undefined) {\n            break;\n        }\n\n        if (space) {\n            if (recognizer.onWhiteSpace) {\n                recognizer.onWhiteSpace.call(this, child, children, context);\n            }\n            space = false;\n        }\n\n        children.push(child);\n    }\n\n    if (space && recognizer.onWhiteSpace) {\n        recognizer.onWhiteSpace.call(this, null, children, context);\n    }\n\n    return children;\n};\n", "import { List } from '../utils/List.js';\nimport { SyntaxError } from './SyntaxError.js';\nimport {\n    tokenize,\n    OffsetToLocation,\n    TokenStream,\n    tokenNames,\n\n    consumeNumber,\n    findWhiteSpaceStart,\n    cmpChar,\n    cmpStr,\n\n    WhiteSpace,\n    Comment,\n    Ident,\n    Function as FunctionToken,\n    Url,\n    Hash,\n    Percentage,\n    Number as NumberToken\n} from '../tokenizer/index.js';\nimport { readSequence } from './sequence.js';\n\nconst NOOP = () => {};\nconst EXCLAMATIONMARK = 0x0021;  // U+0021 EXCLAMATION MARK (!)\nconst NUMBERSIGN = 0x0023;       // U+0023 NUMBER SIGN (#)\nconst SEMICOLON = 0x003B;        // U+003B SEMICOLON (;)\nconst LEFTCURLYBRACKET = 0x007B; // U+007B LEFT CURLY BRACKET ({)\nconst NULL = 0;\n\nconst arrayMethods = {\n    createList() {\n        return [];\n    },\n    createSingleNodeList(node) {\n        return [node];\n    },\n    getFirstListNode(list) {\n        return list && list[0] || null;\n    },\n    getLastListNode(list) {\n        return list && list.length > 0 ? list[list.length - 1] : null;\n    }\n};\n\nconst listMethods = {\n    createList() {\n        return new List();\n    },\n    createSingleNodeList(node) {\n        return new List().appendData(node);\n    },\n    getFirstListNode(list) {\n        return list && list.first;\n    },\n    getLastListNode(list) {\n        return list && list.last;\n    }\n};\n\nfunction createParseContext(name) {\n    return function() {\n        return this[name]();\n    };\n}\n\nfunction fetchParseValues(dict) {\n    const result = Object.create(null);\n\n    for (const name of Object.keys(dict)) {\n        const item = dict[name];\n        const fn = item.parse || item;\n\n        if (fn) {\n            result[name] = fn;\n        }\n    }\n\n    return result;\n}\n\nfunction processConfig(config) {\n    const parseConfig = {\n        context: Object.create(null),\n        features: Object.assign(Object.create(null), config.features),\n        scope: Object.assign(Object.create(null), config.scope),\n        atrule: fetchParseValues(config.atrule),\n        pseudo: fetchParseValues(config.pseudo),\n        node: fetchParseValues(config.node)\n    };\n\n    for (const [name, context] of Object.entries(config.parseContext)) {\n        switch (typeof context) {\n            case 'function':\n                parseConfig.context[name] = context;\n                break;\n\n            case 'string':\n                parseConfig.context[name] = createParseContext(context);\n                break;\n        }\n    }\n\n    return {\n        config: parseConfig,\n        ...parseConfig,\n        ...parseConfig.node\n    };\n}\n\nexport function createParser(config) {\n    let source = '';\n    let filename = '<unknown>';\n    let needPositions = false;\n    let onParseError = NOOP;\n    let onParseErrorThrow = false;\n\n    const locationMap = new OffsetToLocation();\n    const parser = Object.assign(new TokenStream(), processConfig(config || {}), {\n        parseAtrulePrelude: true,\n        parseRulePrelude: true,\n        parseValue: true,\n        parseCustomProperty: false,\n\n        readSequence,\n\n        consumeUntilBalanceEnd: () => 0,\n        consumeUntilLeftCurlyBracket(code) {\n            return code === LEFTCURLYBRACKET ? 1 : 0;\n        },\n        consumeUntilLeftCurlyBracketOrSemicolon(code) {\n            return code === LEFTCURLYBRACKET || code === SEMICOLON ? 1 : 0;\n        },\n        consumeUntilExclamationMarkOrSemicolon(code) {\n            return code === EXCLAMATIONMARK || code === SEMICOLON ? 1 : 0;\n        },\n        consumeUntilSemicolonIncluded(code) {\n            return code === SEMICOLON ? 2 : 0;\n        },\n\n        createList: NOOP,\n        createSingleNodeList: NOOP,\n        getFirstListNode: NOOP,\n        getLastListNode: NOOP,\n\n        parseWithFallback(consumer, fallback) {\n            const startIndex = this.tokenIndex;\n\n            try {\n                return consumer.call(this);\n            } catch (e) {\n                if (onParseErrorThrow) {\n                    throw e;\n                }\n\n                this.skip(startIndex - this.tokenIndex);\n                const fallbackNode = fallback.call(this);\n\n                onParseErrorThrow = true;\n                onParseError(e, fallbackNode);\n                onParseErrorThrow = false;\n\n                return fallbackNode;\n            }\n        },\n\n        lookupNonWSType(offset) {\n            let type;\n\n            do {\n                type = this.lookupType(offset++);\n                if (type !== WhiteSpace && type !== Comment) {\n                    return type;\n                }\n            } while (type !== NULL);\n\n            return NULL;\n        },\n\n        charCodeAt(offset) {\n            return offset >= 0 && offset < source.length ? source.charCodeAt(offset) : 0;\n        },\n        substring(offsetStart, offsetEnd) {\n            return source.substring(offsetStart, offsetEnd);\n        },\n        substrToCursor(start) {\n            return this.source.substring(start, this.tokenStart);\n        },\n\n        cmpChar(offset, charCode) {\n            return cmpChar(source, offset, charCode);\n        },\n        cmpStr(offsetStart, offsetEnd, str) {\n            return cmpStr(source, offsetStart, offsetEnd, str);\n        },\n\n        consume(tokenType) {\n            const start = this.tokenStart;\n\n            this.eat(tokenType);\n\n            return this.substrToCursor(start);\n        },\n        consumeFunctionName() {\n            const name = source.substring(this.tokenStart, this.tokenEnd - 1);\n\n            this.eat(FunctionToken);\n\n            return name;\n        },\n        consumeNumber(type) {\n            const number = source.substring(this.tokenStart, consumeNumber(source, this.tokenStart));\n\n            this.eat(type);\n\n            return number;\n        },\n\n        eat(tokenType) {\n            if (this.tokenType !== tokenType) {\n                const tokenName = tokenNames[tokenType].slice(0, -6).replace(/-/g, ' ').replace(/^./, m => m.toUpperCase());\n                let message = `${/[[\\](){}]/.test(tokenName) ? `\"${tokenName}\"` : tokenName} is expected`;\n                let offset = this.tokenStart;\n\n                // tweak message and offset\n                switch (tokenType) {\n                    case Ident:\n                        // when identifier is expected but there is a function or url\n                        if (this.tokenType === FunctionToken || this.tokenType === Url) {\n                            offset = this.tokenEnd - 1;\n                            message = 'Identifier is expected but function found';\n                        } else {\n                            message = 'Identifier is expected';\n                        }\n                        break;\n\n                    case Hash:\n                        if (this.isDelim(NUMBERSIGN)) {\n                            this.next();\n                            offset++;\n                            message = 'Name is expected';\n                        }\n                        break;\n\n                    case Percentage:\n                        if (this.tokenType === NumberToken) {\n                            offset = this.tokenEnd;\n                            message = 'Percent sign is expected';\n                        }\n                        break;\n                }\n\n                this.error(message, offset);\n            }\n\n            this.next();\n        },\n        eatIdent(name) {\n            if (this.tokenType !== Ident || this.lookupValue(0, name) === false) {\n                this.error(`Identifier \"${name}\" is expected`);\n            }\n\n            this.next();\n        },\n        eatDelim(code) {\n            if (!this.isDelim(code)) {\n                this.error(`Delim \"${String.fromCharCode(code)}\" is expected`);\n            }\n\n            this.next();\n        },\n\n        getLocation(start, end) {\n            if (needPositions) {\n                return locationMap.getLocationRange(\n                    start,\n                    end,\n                    filename\n                );\n            }\n\n            return null;\n        },\n        getLocationFromList(list) {\n            if (needPositions) {\n                const head = this.getFirstListNode(list);\n                const tail = this.getLastListNode(list);\n                return locationMap.getLocationRange(\n                    head !== null ? head.loc.start.offset - locationMap.startOffset : this.tokenStart,\n                    tail !== null ? tail.loc.end.offset - locationMap.startOffset : this.tokenStart,\n                    filename\n                );\n            }\n\n            return null;\n        },\n\n        error(message, offset) {\n            const location = typeof offset !== 'undefined' && offset < source.length\n                ? locationMap.getLocation(offset)\n                : this.eof\n                    ? locationMap.getLocation(findWhiteSpaceStart(source, source.length - 1))\n                    : locationMap.getLocation(this.tokenStart);\n\n            throw new SyntaxError(\n                message || 'Unexpected input',\n                source,\n                location.offset,\n                location.line,\n                location.column,\n                locationMap.startLine,\n                locationMap.startColumn\n            );\n        }\n    });\n    const createTokenIterateAPI = () => ({\n        filename,\n        source,\n        tokenCount: parser.tokenCount,\n\n        getTokenType: (index) =>\n            parser.getTokenType(index),\n        getTokenTypeName: (index) =>\n            tokenNames[parser.getTokenType(index)],\n        getTokenStart: (index) =>\n            parser.getTokenStart(index),\n        getTokenEnd: (index) =>\n            parser.getTokenEnd(index),\n        getTokenValue: (index) =>\n            parser.source.substring(parser.getTokenStart(index), parser.getTokenEnd(index)),\n\n        substring: (start, end) =>\n            parser.source.substring(start, end),\n\n        balance: parser.balance.subarray(0, parser.tokenCount + 1),\n        isBlockOpenerTokenType: parser.isBlockOpenerTokenType,\n        isBlockCloserTokenType: parser.isBlockCloserTokenType,\n        getBlockTokenPairIndex: (index) =>\n            parser.getBlockTokenPairIndex(index),\n\n        getLocation: (offset) =>\n            locationMap.getLocation(offset, filename),\n        getRangeLocation: (start, end) =>\n            locationMap.getLocationRange(start, end, filename)\n    });\n\n    const parse = function(source_, options) {\n        source = source_;\n        options = options || {};\n\n        parser.setSource(source, tokenize);\n        locationMap.setSource(\n            source,\n            options.offset,\n            options.line,\n            options.column\n        );\n\n        filename = options.filename || '<unknown>';\n        needPositions = Boolean(options.positions);\n        onParseError = typeof options.onParseError === 'function' ? options.onParseError : NOOP;\n        onParseErrorThrow = false;\n\n        parser.parseAtrulePrelude = 'parseAtrulePrelude' in options ? Boolean(options.parseAtrulePrelude) : true;\n        parser.parseRulePrelude = 'parseRulePrelude' in options ? Boolean(options.parseRulePrelude) : true;\n        parser.parseValue = 'parseValue' in options ? Boolean(options.parseValue) : true;\n        parser.parseCustomProperty = 'parseCustomProperty' in options ? Boolean(options.parseCustomProperty) : false;\n\n        const { context = 'default', list = true, onComment, onToken } = options;\n\n        if (context in parser.context === false) {\n            throw new Error('Unknown context `' + context + '`');\n        }\n\n        Object.assign(parser, list ? listMethods : arrayMethods);\n\n        if (Array.isArray(onToken)) {\n            parser.forEachToken((type, start, end) => {\n                onToken.push({ type, start, end });\n            });\n        } else if (typeof onToken === 'function') {\n            parser.forEachToken(onToken.bind(createTokenIterateAPI()));\n        }\n\n        if (typeof onComment === 'function') {\n            parser.forEachToken((type, start, end) => {\n                if (type === Comment) {\n                    const loc = parser.getLocation(start, end);\n                    const value = cmpStr(source, end - 2, end, '*/')\n                        ? source.slice(start + 2, end - 2)\n                        : source.slice(start + 2, end);\n\n                    onComment(value, loc);\n                }\n            });\n        }\n\n        const ast = parser.context[context].call(parser, options);\n\n        if (!parser.eof) {\n            parser.error();\n        }\n\n        return ast;\n    };\n\n    return Object.assign(parse, {\n        SyntaxError,\n        config: parser.config\n    });\n};\n", "import {\n    Delim,\n    Ident,\n    Dimension,\n    Percentage,\n    Number as NumberToken,\n    Hash,\n    Colon,\n    LeftSquareBracket\n} from '../../tokenizer/index.js';\n\nconst NUMBERSIGN = 0x0023;      // U+0023 NUMBER SIGN (#)\nconst AMPERSAND = 0x0026;       // U+0026 AMPERSAND (&)\nconst ASTERISK = 0x002A;        // U+002A ASTERISK (*)\nconst PLUSSIGN = 0x002B;        // U+002B PLUS SIGN (+)\nconst SOLIDUS = 0x002F;         // U+002F SOLIDUS (/)\nconst FULLSTOP = 0x002E;        // U+002E FULL STOP (.)\nconst GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)\nconst VERTICALLINE = 0x007C;    // U+007C VERTICAL LINE (|)\nconst TILDE = 0x007E;           // U+007E TILDE (~)\n\nfunction onWhiteSpace(next, children) {\n    if (children.last !== null && children.last.type !== 'Combinator' &&\n        next !== null && next.type !== 'Combinator') {\n        children.push({  // FIXME: this.Combinator() should be used instead\n            type: 'Combinator',\n            loc: null,\n            name: ' '\n        });\n    }\n}\n\nfunction getNode() {\n    switch (this.tokenType) {\n        case LeftSquareBracket:\n            return this.AttributeSelector();\n\n        case Hash:\n            return this.IdSelector();\n\n        case Colon:\n            if (this.lookupType(1) === Colon) {\n                return this.PseudoElementSelector();\n            } else {\n                return this.PseudoClassSelector();\n            }\n\n        case Ident:\n            return this.TypeSelector();\n\n        case NumberToken:\n        case Percentage:\n            return this.Percentage();\n\n        case Dimension:\n            // throws when .123ident\n            if (this.charCodeAt(this.tokenStart) === FULLSTOP) {\n                this.error('Identifier is expected', this.tokenStart + 1);\n            }\n            break;\n\n        case Delim: {\n            const code = this.charCodeAt(this.tokenStart);\n\n            switch (code) {\n                case PLUSSIGN:\n                case GREATERTHANSIGN:\n                case TILDE:\n                case SOLIDUS:  // /deep/\n                    return this.Combinator();\n\n                case FULLSTOP:\n                    return this.ClassSelector();\n\n                case ASTERISK:\n                case VERTICALLINE:\n                    return this.TypeSelector();\n\n                case NUMBERSIGN:\n                    return this.IdSelector();\n\n                case AMPERSAND:\n                    return this.NestingSelector();\n            }\n\n            break;\n        }\n    }\n};\n\nexport default {\n    onWhiteSpace,\n    getNode\n};\n", "import { Comma, String as StringToken, Ident, RightParenthesis } from '../../tokenizer/index.js';\n\nexport function parseLanguageRangeList() {\n    const children = this.createList();\n\n    this.skipSC();\n\n    loop: while (!this.eof) {\n        switch (this.tokenType) {\n            case Ident:\n                children.push(this.Identifier());\n                break;\n\n            case StringToken:\n                children.push(this.String());\n                break;\n\n            case Comma:\n                children.push(this.Operator());\n                break;\n\n            case RightParenthesis:\n                break loop;\n\n            default:\n                this.error('Identifier, string or comma is expected');\n        }\n\n        this.skipSC();\n    }\n\n    return children;\n}\n", "import { parseLanguageRangeList } from './lang.js';\n\nconst selectorList = {\n    parse() {\n        return this.createSingleNodeList(\n            this.SelectorList()\n        );\n    }\n};\n\nconst selector = {\n    parse() {\n        return this.createSingleNodeList(\n            this.Selector()\n        );\n    }\n};\n\nconst identList = {\n    parse() {\n        return this.createSingleNodeList(\n            this.Identifier()\n        );\n    }\n};\n\nconst langList = {\n    parse: parseLanguageRangeList\n};\n\nconst nth = {\n    parse() {\n        return this.createSingleNodeList(\n            this.Nth()\n        );\n    }\n};\n\nexport default {\n    'dir': identList,\n    'has': selectorList,\n    'lang': langList,\n    'matches': selectorList,\n    'is': selectorList,\n    '-moz-any': selectorList,\n    '-webkit-any': selectorList,\n    'where': selectorList,\n    'not': selectorList,\n    'nth-child': nth,\n    'nth-last-child': nth,\n    'nth-last-of-type': nth,\n    'nth-of-type': nth,\n    'slotted': selector,\n    'host': selector,\n    'host-context': selector\n};\n", "export { parse as AnPlusB } from './AnPlusB.js';\nexport { parse as AttributeSelector } from './AttributeSelector.js';\nexport { parse as ClassSelector } from './ClassSelector.js';\nexport { parse as Combinator } from './Combinator.js';\nexport { parse as Identifier } from './Identifier.js';\nexport { parse as IdSelector } from './IdSelector.js';\nexport { parse as NestingSelector } from './NestingSelector.js';\nexport { parse as Nth } from './Nth.js';\nexport { parse as Operator } from './Operator.js';\nexport { parse as Percentage } from './Percentage.js';\nexport { parse as PseudoClassSelector } from './PseudoClassSelector.js';\nexport { parse as PseudoElementSelector } from './PseudoElementSelector.js';\nexport { parse as Raw } from './Raw.js';\nexport { parse as Selector } from './Selector.js';\nexport { parse as SelectorList } from './SelectorList.js';\nexport { parse as String } from './String.js';\nexport { parse as TypeSelector } from './TypeSelector.js';\n", "import { Selector } from '../scope/index.js';\nimport pseudo from '../pseudo/index.js';\nimport * as node from '../node/index-parse-selector.js';\n\nexport default {\n    parseContext: {\n        default: 'SelectorList',\n        selectorList: 'SelectorList',\n        selector: 'Selector'\n    },\n    scope: { Selector },\n    atrule: {},\n    pseudo,\n    node\n};\n", "import { createParser } from './create.js';\nimport config from '../syntax/config/parser-selector.js';\n\nexport default createParser(config);\n", "const compare = (s1, s2) => {\n    if (s1.a === s2.a) {\n        if (s1.b === s2.b) {\n            return s1.c - s2.c;\n        }\n        return s1.b - s2.b;\n    }\n    return s1.a - s2.a;\n};\n\nconst equals = (s1, s2) => {\n    return compare(s1, s2) === 0;\n};\n\nconst greaterThan = (s1, s2) => {\n    return compare(s1, s2) > 0;\n};\n\nconst lessThan = (s1, s2) => {\n    return compare(s1, s2) < 0;\n};\n\nexport { compare, equals, greaterThan, lessThan };\n", "import { compare } from './compare.js';\n\nconst sort = (specificities, order = 'ASC') => {\n    const sorted = specificities.sort(compare);\n\n    if (order === 'DESC') {\n        return sorted.reverse();\n    }\n\n    return sorted;\n};\n\nconst sortAsc = (...specificities) => {\n    return sort(specificities, 'ASC');\n};\n\nconst sortDesc = (...specificities) => {\n    return sort(specificities, 'DESC');\n};\n\nexport { sortAsc, sortDesc };\n", "import { sortAsc, sortDesc } from './sort.js';\n\nconst max = (...specificities) => {\n    const sorted = sortDesc(...specificities);\n    return sorted[0];\n};\n\nconst min = (...specificities) => {\n    const sorted = sortAsc(...specificities);\n    return sorted[0];\n};\n\nexport { max, min };\n", "import parse from 'css-tree/selector-parser';\nimport Specificity from '../index.js';\nimport { max } from './../util/index.js';\n\n/** @param {import('css-tree').Selector} selectorAST */\nconst calculateForAST = (selectorAST) => {\n    // Quit while you're ahead\n    if (!selectorAST || selectorAST.type !== 'Selector') {\n        throw new TypeError(`Passed in source is not a Selector AST`);\n    }\n\n    // https://www.w3.org/TR/selectors-4/#specificity-rules\n    let a = 0; /* ID Selectors */\n    let b = 0; /* Class selectors, Attributes selectors, and Pseudo-classes */\n    let c = 0; /* Type selectors and Pseudo-elements */\n\n    selectorAST.children.forEach((child) => {\n        switch (child.type) {\n            case 'IdSelector':\n                a += 1;\n                break;\n\n            case 'AttributeSelector':\n            case 'ClassSelector':\n                b += 1;\n                break;\n\n            case 'PseudoClassSelector':\n                switch (child.name.toLowerCase()) {\n                    // \u201CThe specificity of a :where() pseudo-class is replaced by zero.\u201D\n                    case 'where':\n                        // Noop :)\n                        break;\n\n                    case '-webkit-any':\n                    case 'any':\n                        if (child.children?.first) {\n                            b += 1;\n                        }\n                        break;\n\n                    // \u201CThe specificity of an :is(), :not(), or :has() pseudo-class is replaced by the specificity of the most specific complex selector in its selector list argument.\u201C\n                    case '-moz-any':\n                    case 'is':\n                    case 'matches':\n                    case 'not':\n                    case 'has':\n                        if (child.children?.first) {\n                            // Calculate Specificity from nested SelectorList\n                            const max1 = max(...calculate(child.children.first));\n\n                            // Adjust orig specificity\n                            a += max1.a;\n                            b += max1.b;\n                            c += max1.c;\n                        }\n\n                        break;\n\n                    // \u201CThe specificity of an :nth-child() or :nth-last-child() selector is the specificity of the pseudo class itself (counting as one pseudo-class selector) plus the specificity of the most specific complex selector in its selector list argument\u201D\n                    case 'nth-child':\n                    case 'nth-last-child':\n                        b += 1;\n\n                        if (child.children?.first?.selector) {\n                            // Calculate Specificity from SelectorList\n                            const max2 = max(...calculate(child.children.first.selector));\n\n                            // Adjust orig specificity\n                            a += max2.a;\n                            b += max2.b;\n                            c += max2.c;\n                        }\n                        break;\n\n                    // \u201CThe specificity of :host is that of a pseudo-class. The specificity of :host() is that of a pseudo-class, plus the specificity of its argument.\u201D\n                    // \u201CThe specificity of :host-context() is that of a pseudo-class, plus the specificity of its argument.\u201D\n                    case 'host-context':\n                    case 'host':\n                        b += 1;\n\n                        if (child.children?.first?.children) {\n                            // Workaround to a css-tree bug in which it allows complex selectors instead of only compound selectors\n                            // We work around it by filtering out any Combinator and successive Selectors\n                            const childAST = { type: 'Selector', children: [] };\n                            let foundCombinator = false;\n                            child.children.first.children.forEach((entry) => {\n                                if (foundCombinator) return false;\n                                if (entry.type === 'Combinator') {\n                                    foundCombinator = true;\n                                    return false;\n                                }\n                                childAST.children.push(entry);\n                            });\n\n                            // Calculate Specificity from Selector\n                            const childSpecificity = calculate(childAST)[0];\n\n                            // Adjust orig specificity\n                            a += childSpecificity.a;\n                            b += childSpecificity.b;\n                            c += childSpecificity.c;\n                        }\n                        break;\n\n                    // Improper use of Pseudo-Class Selectors instead of a Pseudo-Element\n                    // @ref https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements#index\n                    case 'after':\n                    case 'before':\n                    case 'first-letter':\n                    case 'first-line':\n                        c += 1;\n                        break;\n\n                    default:\n                        b += 1;\n                        break;\n                }\n                break;\n\n            case 'PseudoElementSelector':\n                switch (child.name) {\n                    // \u201CThe specificity of ::slotted() is that of a pseudo-element, plus the specificity of its argument.\u201D\n                    case 'slotted':\n                        c += 1;\n\n                        if (child.children?.first?.children) {\n                            // Workaround to a css-tree bug in which it allows complex selectors instead of only compound selectors\n                            // We work around it by filtering out any Combinator and successive Selectors\n                            const childAST = { type: 'Selector', children: [] };\n                            let foundCombinator = false;\n                            child.children.first.children.forEach((entry) => {\n                                if (foundCombinator) return false;\n                                if (entry.type === 'Combinator') {\n                                    foundCombinator = true;\n                                    return false;\n                                }\n                                childAST.children.push(entry);\n                            });\n\n                            // Calculate Specificity from Selector\n                            const childSpecificity = calculate(childAST)[0];\n\n                            // Adjust orig specificity\n                            a += childSpecificity.a;\n                            b += childSpecificity.b;\n                            c += childSpecificity.c;\n                        }\n                        break;\n\n                    case 'view-transition-group':\n                    case 'view-transition-image-pair':\n                    case 'view-transition-old':\n                    case 'view-transition-new':\n                        // The specificity of a view-transition selector with a * argument is zero.\n                        if (child.children?.first?.value === '*') {\n                            break;\n                        }\n                        // The specificity of a view-transition selector with an argument is the same\n                        // as for other pseudo - elements, and is equivalent to a type selector.\n                        c += 1;\n                        break;\n\n                    case 'highlight':\n                        if (child.children?.size > 0) {\n                            // The specificity of a ::highlight() selector with a * argument is zero.\n                            if (child.children.first?.value === '*') {\n                                break;\n                            }\n                            // The specificity of a ::highlight() selector with a <custom-ident> argument\n                            // is equivalent to a type selector.\n                            c += 1;\n                        }\n                        break;\n\n                    default:\n                        c += 1;\n                        break;\n                }\n                break;\n\n            case 'TypeSelector':\n                // Omit namespace\n                let typeSelector = child.name;\n                if (typeSelector.includes('|')) {\n                    typeSelector = typeSelector.split('|')[1];\n                }\n\n                // \u201CIgnore the universal selector\u201D\n                if (typeSelector !== '*') {\n                    c += 1;\n                }\n                break;\n\n            default:\n                // NOOP\n                break;\n        }\n    });\n\n    return new Specificity({ a, b, c }, selectorAST);\n};\n\nconst convertToAST = (source) => {\n    // The passed in argument was a String.\n    // ~> Let's try and parse to an AST\n    if (typeof source === 'string' || source instanceof String) {\n        try {\n            return parse(source, {\n                context: 'selectorList',\n            });\n        } catch (e) {\n            throw new TypeError(`Could not convert passed in source '${source}' to SelectorList: ${e.message}`);\n        }\n    }\n\n    // The passed in argument was an Object.\n    // ~> Let's verify if it's a AST of the type Selector or SelectorList\n    if (source instanceof Object) {\n        if (source.type && ['Selector', 'SelectorList'].includes(source.type)) {\n            return source;\n        }\n\n        // Manually parsing subtree when the child is of the type Raw, most likely due to https://github.com/csstree/csstree/issues/151\n        if (source.type && source.type === 'Raw') {\n            try {\n                return parse(source.value, {\n                    context: 'selectorList',\n                });\n            } catch (e) {\n                throw new TypeError(`Could not convert passed in source to SelectorList: ${e.message}`);\n            }\n        }\n\n        throw new TypeError(`Passed in source is an Object but no AST / AST of the type Selector or SelectorList`);\n    }\n\n    throw new TypeError(`Passed in source is not a String nor an Object. I don't know what to do with it.`);\n};\n\n/**\n * @param {string} selector\n * @returns {Specificity[]}\n */\nconst calculate = (selector) => {\n    // Quit while you're ahead\n    if (!selector) {\n        return [];\n    }\n\n    // Make sure we have a SelectorList AST\n    // If not, an exception will be thrown\n    const ast = convertToAST(selector);\n\n    // Selector?\n    if (ast.type === 'Selector') {\n        return [calculateForAST(selector)];\n    }\n\n    // SelectorList?\n    // ~> Calculate Specificity for each contained Selector\n    if (ast.type === 'SelectorList') {\n        const specificities = [];\n        ast.children.forEach((childAST) => {\n            const specificity = calculateForAST(childAST);\n            specificities.push(specificity);\n        });\n        return specificities;\n    }\n};\n\nexport { calculate, calculateForAST };\n"],
  "mappings": "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",
  "names": ["require_base64", "__commonJSMin", "exports", "intToCharMap", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require_base64_vlq", "__commonJSMin", "exports", "base64", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "result", "shift", "continuation", "require_util", "__commonJSMin", "exports", "getArg", "aArgs", "aName", "aDefaultValue", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "match", "urlGenerate", "aParsedUrl", "url", "MAX_CACHED_INPUTS", "lruMemoize", "f", "cache", "input", "i", "temp", "result", "normalize", "aPath", "path", "isAbsolute", "parts", "start", "part", "up", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByOriginalPositionsNoSource", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "compareByGeneratedPositionsDeflatedNoLine", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "str", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "require_array_set", "__commonJSMin", "exports", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "aStr", "sStr", "isDuplicate", "idx", "aIdx", "require_mapping_list", "__commonJSMin", "exports", "util", "generatedPositionAfter", "mappingA", "mappingB", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "require_source_map_generator", "__commonJSMin", "exports", "base64VLQ", "util", "ArraySet", "MappingList", "SourceMapGenerator", "aArgs", "aSourceMapConsumer", "generatorOps", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "message", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "result", "next", "nameIdx", "sourceIdx", "mappings", "i", "len", "lineDelta", "aSources", "aSourceRoot", "key", "map", "index_exports", "__export", "index_default", "__toCommonJS", "isDigit", "code", "isHexDigit", "isUppercaseLetter", "isLowercaseLetter", "isLetter", "isNonAscii", "isNameStart", "isName", "isNonPrintable", "isNewline", "isWhiteSpace", "isValidEscape", "first", "second", "isIdentifierStart", "third", "isNumberStart", "isBOM", "CATEGORY", "EofCategory", "WhiteSpaceCategory", "DigitCategory", "NameStartCategory", "NonPrintableCategory", "i", "charCodeCategory", "getCharCode", "source", "offset", "getNewlineLength", "code", "cmpChar", "testStr", "referenceCode", "isUppercaseLetter", "cmpStr", "start", "end", "referenceStr", "testCode", "findWhiteSpaceStart", "isWhiteSpace", "findWhiteSpaceEnd", "findDecimalNumberEnd", "isDigit", "consumeEscaped", "isHexDigit", "maxOffset", "consumeName", "isName", "isValidEscape", "consumeNumber", "sign", "consumeBadUrlRemnants", "decodeEscaped", "escaped", "names_default", "adoptBuffer", "buffer", "size", "N", "F", "R", "computeLinesAndColumns", "host", "source", "sourceLength", "startOffset", "isBOM", "lines", "adoptBuffer", "columns", "line", "column", "i", "code", "OffsetToLocation", "startLine", "startColumn", "offset", "filename", "start", "end", "OFFSET_MASK", "TYPE_SHIFT", "BLOCK_OPEN_TOKEN", "BLOCK_CLOSE_TOKEN", "balancePair", "blockTokens", "boundIndex", "index", "min", "max", "TokenStream", "source", "tokenize", "sourceLength", "offsetAndType", "adoptBuffer", "balance", "tokenCount", "firstCharOffset", "balanceCloseType", "balanceStart", "type", "start", "end", "prevBalanceStart", "i", "balanceEnd", "offset", "idx", "tokenType", "referenceStr", "cmpStr", "tokenIndex", "pairIndex", "closeType", "openType", "code", "next", "startToken", "stopConsume", "cursor", "loop", "fn", "item", "tokens", "names_default", "tokenize", "source", "onToken", "getCharCode", "offset", "sourceLength", "consumeNumericToken", "consumeNumber", "isIdentifierStart", "type", "consumeName", "consumeIdentLikeToken", "nameStartOffset", "cmpStr", "findWhiteSpaceEnd", "consumeUrlToken", "consumeStringToken", "endingCodePoint", "code", "charCodeCategory", "WhiteSpaceCategory", "isNewline", "getNewlineLength", "nextCode", "isValidEscape", "consumeEscaped", "consumeBadUrlRemnants", "NonPrintableCategory", "start", "isBOM", "isName", "isNumberStart", "DigitCategory", "NameStartCategory", "import_source_map_generator", "trackNodes", "generateSourceMap", "handlers", "map", "generated", "original", "activatedGenerated", "activatedMapping", "line", "column", "sourceMappingActive", "origHandlersNode", "node", "nodeLine", "nodeColumn", "origHandlersEmit", "value", "type", "auto", "i", "origHandlersResult", "token_before_exports", "__export", "safe", "spec", "PLUSSIGN", "HYPHENMINUS", "code", "type", "value", "specPairs", "safePairs", "createMap", "pairs", "isWhiteSpaceRequired", "prev", "next", "prevCode", "nextCode", "nextCharCode", "emitWs", "spec", "safe", "REVERSESOLIDUS", "processChildren", "node", "delimeter", "prev", "createGenerator", "config", "types", "name", "item", "options", "buffer", "prevCode", "handlers", "publicApi", "safe", "type", "value", "suppressAutoWhiteSpace", "generateSourceMap", "token_before_exports", "raw", "tokenize", "start", "end", "index_generate_exports", "__export", "generate", "PLUSSIGN", "HYPHENMINUS", "N", "DISALLOW_SIGN", "ALLOW_SIGN", "checkInteger", "offset", "disallowSign", "pos", "code", "isDigit", "checkTokenIsInteger", "expectCharCode", "msg", "consumeB", "sign", "type", "parse", "start", "a", "b", "checkTokenIsInteger", "ALLOW_SIGN", "HYPHENMINUS", "expectCharCode", "N", "consumeB", "DISALLOW_SIGN", "checkInteger", "PLUSSIGN", "sign", "code", "i", "isDigit", "generate", "node", "generate", "node", "generate", "node", "DOLLARSIGN", "ASTERISK", "EQUALSSIGN", "CIRCUMFLEXACCENT", "VERTICALLINE", "TILDE", "getAttributeName", "start", "expectIdent", "getOperator", "code", "parse", "start", "name", "matcher", "value", "flags", "getAttributeName", "getOperator", "generate", "node", "generate", "node", "prev", "generate", "node", "generate", "generate", "FULLSTOP", "parse", "FULLSTOP", "generate", "node", "PLUSSIGN", "SOLIDUS", "GREATERTHANSIGN", "TILDE", "parse", "start", "name", "GREATERTHANSIGN", "PLUSSIGN", "TILDE", "SOLIDUS", "generate", "node", "generate", "node", "generate", "node", "child", "generate", "node", "generate", "node", "prev", "generate", "node", "generate", "node", "generate", "node", "generate", "node", "generate", "node", "generate", "node", "generate", "node", "parse", "generate", "node", "parse", "start", "generate", "node", "generate", "node", "generate", "node", "generate", "node", "generate", "node", "AMPERSAND", "parse", "start", "AMPERSAND", "generate", "parse", "start", "end", "selector", "nth", "generate", "node", "generate", "node", "parse", "start", "generate", "node", "generate", "node", "parse", "generate", "node", "parse", "start", "children", "name", "nameLowerCase", "generate", "node", "parse", "start", "children", "name", "nameLowerCase", "generate", "node", "generate", "node", "getOffsetExcludeWS", "parse", "consumeUntil", "excludeWhiteSpace", "startOffset", "endOffset", "getOffsetExcludeWS", "generate", "node", "generate", "node", "generate", "node", "parse", "children", "generate", "node", "parse", "children", "generate", "node", "REVERSE_SOLIDUS", "QUOTATION_MARK", "APOSTROPHE", "decode", "str", "len", "firstChar", "start", "end", "decoded", "i", "code", "isValidEscape", "escapeStart", "escapeEnd", "consumeEscaped", "decodeEscaped", "encode", "apostrophe", "quote", "quoteCode", "encoded", "wsBeforeHexIsNeeded", "isHexDigit", "isWhiteSpace", "parse", "decode", "generate", "node", "encode", "generate", "node", "generate", "node", "ASTERISK", "VERTICALLINE", "eatIdentifierOrAsterisk", "parse", "start", "VERTICALLINE", "eatIdentifierOrAsterisk", "generate", "node", "generate", "node", "SPACE", "REVERSE_SOLIDUS", "QUOTATION_MARK", "APOSTROPHE", "LEFTPARENTHESIS", "RIGHTPARENTHESIS", "encode", "str", "encoded", "wsBeforeHexIsNeeded", "i", "code", "SPACE", "REVERSE_SOLIDUS", "QUOTATION_MARK", "APOSTROPHE", "LEFTPARENTHESIS", "RIGHTPARENTHESIS", "isHexDigit", "generate", "node", "encode", "generate", "node", "SPACE", "generate", "node", "generator_default", "index_generate_exports", "generator_default", "createGenerator", "releasedCursors", "List", "_List", "data", "prev", "next", "cursor", "prevOld", "prevNew", "nextOld", "nextNew", "size", "array", "item", "fn", "thisArg", "initialValue", "acc", "result", "start", "before", "list", "oldItem", "newItemOrList", "createCustomError", "name", "message", "error", "errorStack", "MAX_LINE_LENGTH", "OFFSET_CORRECTION", "TAB_REPLACEMENT", "sourceFragment", "source", "line", "column", "baseLine", "baseColumn", "extraLines", "processLines", "start", "end", "lines", "idx", "maxNumLength", "prelines", "precolumns", "startLine", "endLine", "cutLeft", "i", "SyntaxError", "message", "offset", "createCustomError", "readSequence", "recognizer", "children", "space", "context", "child", "NOOP", "EXCLAMATIONMARK", "NUMBERSIGN", "SEMICOLON", "LEFTCURLYBRACKET", "NULL", "arrayMethods", "node", "list", "listMethods", "List", "createParseContext", "name", "fetchParseValues", "dict", "result", "item", "fn", "processConfig", "config", "parseConfig", "context", "createParser", "source", "filename", "needPositions", "onParseError", "onParseErrorThrow", "locationMap", "OffsetToLocation", "parser", "TokenStream", "readSequence", "code", "consumer", "fallback", "startIndex", "e", "fallbackNode", "offset", "type", "offsetStart", "offsetEnd", "start", "charCode", "cmpChar", "str", "cmpStr", "tokenType", "number", "consumeNumber", "tokenName", "names_default", "m", "message", "end", "head", "tail", "location", "findWhiteSpaceStart", "SyntaxError", "createTokenIterateAPI", "index", "source_", "options", "tokenize", "onComment", "onToken", "loc", "value", "ast", "NUMBERSIGN", "AMPERSAND", "ASTERISK", "PLUSSIGN", "SOLIDUS", "FULLSTOP", "GREATERTHANSIGN", "VERTICALLINE", "TILDE", "onWhiteSpace", "next", "children", "getNode", "selector_default", "parseLanguageRangeList", "children", "loop", "selectorList", "selector", "identList", "langList", "parseLanguageRangeList", "nth", "pseudo_default", "index_parse_selector_exports", "__export", "parse", "parser_selector_default", "selector_default", "pseudo_default", "index_parse_selector_exports", "parse_selector_default", "createParser", "parser_selector_default", "compare", "s1", "s2", "equals", "greaterThan", "lessThan", "sort", "specificities", "order", "sorted", "compare", "sortAsc", "sortDesc", "max", "specificities", "sortDesc", "min", "sortAsc", "calculateForAST", "selectorAST", "a", "b", "c", "child", "max1", "max", "calculate", "max2", "childAST", "foundCombinator", "entry", "childSpecificity", "typeSelector", "index_default", "convertToAST", "source", "parse_selector_default", "e", "selector", "ast", "specificities", "specificity", "NotAllowedError", "Specificity", "value", "selector", "val", "generator_default", "otherSpecificity", "equals", "greaterThan", "lessThan", "calculate", "calculateForAST", "s1", "s2", "compare", "specificities", "min", "max", "sortAsc", "sortDesc", "index_default"]
}
